From a8d9f471ea1bc589755ebf0be181dadab167b3f9 Mon Sep 17 00:00:00 2001 From: Fredrik Roubert Date: Fri, 20 Dec 2024 15:09:37 +0900 Subject: [PATCH] ICU-22713 Delete layout/DataDrivenTest. --- icu4c/source/test/letest/FontTableCache.cpp | 99 - icu4c/source/test/letest/FontTableCache.h | 43 - icu4c/source/test/letest/Makefile.in | 15 +- .../test/letest/PortableFontInstance.cpp | 476 ---- .../source/test/letest/PortableFontInstance.h | 122 - icu4c/source/test/letest/cmaps.cpp | 252 --- icu4c/source/test/letest/cmaps.h | 87 - icu4c/source/test/letest/gendata.cpp | 383 ---- icu4c/source/test/letest/gendata.sln | 25 - icu4c/source/test/letest/gendata.vcxproj | 240 -- .../test/letest/gendata.vcxproj.filters | 60 - icu4c/source/test/letest/gendata.xml | 218 -- icu4c/source/test/letest/letest.cpp | 417 ---- icu4c/source/test/letest/letest.h | 26 - icu4c/source/test/letest/letest.vcxproj | 9 - .../source/test/letest/letest.vcxproj.filters | 27 - icu4c/source/test/letest/letsutil.cpp | 101 - icu4c/source/test/letest/letsutil.h | 36 - icu4c/source/test/letest/readme.html | 116 - icu4c/source/test/letest/sfnt.h | 451 ---- icu4c/source/test/testdata/letest.xml | 1956 ----------------- 21 files changed, 3 insertions(+), 5156 deletions(-) delete mode 100644 icu4c/source/test/letest/FontTableCache.cpp delete mode 100644 icu4c/source/test/letest/FontTableCache.h delete mode 100644 icu4c/source/test/letest/PortableFontInstance.cpp delete mode 100644 icu4c/source/test/letest/PortableFontInstance.h delete mode 100644 icu4c/source/test/letest/cmaps.cpp delete mode 100644 icu4c/source/test/letest/cmaps.h delete mode 100644 icu4c/source/test/letest/gendata.cpp delete mode 100644 icu4c/source/test/letest/gendata.sln delete mode 100644 icu4c/source/test/letest/gendata.vcxproj delete mode 100644 icu4c/source/test/letest/gendata.vcxproj.filters delete mode 100644 icu4c/source/test/letest/gendata.xml delete mode 100644 icu4c/source/test/letest/letsutil.cpp delete mode 100644 icu4c/source/test/letest/letsutil.h delete mode 100644 icu4c/source/test/letest/readme.html delete mode 100644 icu4c/source/test/letest/sfnt.h delete mode 100644 icu4c/source/test/testdata/letest.xml diff --git a/icu4c/source/test/letest/FontTableCache.cpp b/icu4c/source/test/letest/FontTableCache.cpp deleted file mode 100644 index dfc424fc5942..000000000000 --- a/icu4c/source/test/letest/FontTableCache.cpp +++ /dev/null @@ -1,99 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ********************************************************************** - * Copyright (C) 2003-2013, International Business Machines - * Corporation and others. All Rights Reserved. - ********************************************************************** - */ - -#include "layout/LETypes.h" - -//#include "letest.h" -#include "FontTableCache.h" - -#define TABLE_CACHE_INIT 5 -#define TABLE_CACHE_GROW 5 - -struct FontTableCacheEntry -{ - LETag tag; - const void *table; - size_t length; -}; - -FontTableCache::FontTableCache() - : fTableCacheCurr(0), fTableCacheSize(TABLE_CACHE_INIT) -{ - fTableCache = LE_NEW_ARRAY(FontTableCacheEntry, fTableCacheSize); - - if (fTableCache == nullptr) { - fTableCacheSize = 0; - return; - } - - for (int i = 0; i < fTableCacheSize; i += 1) { - fTableCache[i].tag = 0; - fTableCache[i].table = nullptr; - fTableCache[i].length = 0; - } -} - -FontTableCache::~FontTableCache() -{ - for (int i = fTableCacheCurr - 1; i >= 0; i -= 1) { - LE_DELETE_ARRAY(fTableCache[i].table); - - fTableCache[i].tag = 0; - fTableCache[i].table = nullptr; - fTableCache[i].length = 0; - } - - fTableCacheCurr = 0; - - LE_DELETE_ARRAY(fTableCache); -} - -void FontTableCache::freeFontTable(const void *table) const -{ - LE_DELETE_ARRAY(table); -} - -const void *FontTableCache::find(LETag tableTag, size_t &length) const -{ - for (int i = 0; i < fTableCacheCurr; i += 1) { - if (fTableCache[i].tag == tableTag) { - length = fTableCache[i].length; - return fTableCache[i].table; - } - } - - const void *table = readFontTable(tableTag, length); - - const_cast(this)->add(tableTag, table, length); - - return table; -} - -void FontTableCache::add(LETag tableTag, const void *table, size_t length) -{ - if (fTableCacheCurr >= fTableCacheSize) { - le_int32 newSize = fTableCacheSize + TABLE_CACHE_GROW; - - fTableCache = static_cast(LE_GROW_ARRAY(fTableCache, newSize)); - - for (le_int32 i = fTableCacheSize; i < newSize; i += 1) { - fTableCache[i].tag = 0; - fTableCache[i].table = nullptr; - fTableCache[i].length = 0; - } - - fTableCacheSize = newSize; - } - - fTableCache[fTableCacheCurr].tag = tableTag; - fTableCache[fTableCacheCurr].table = table; - fTableCache[fTableCacheCurr].length = length; - - fTableCacheCurr += 1; -} diff --git a/icu4c/source/test/letest/FontTableCache.h b/icu4c/source/test/letest/FontTableCache.h deleted file mode 100644 index b91a75da213b..000000000000 --- a/icu4c/source/test/letest/FontTableCache.h +++ /dev/null @@ -1,43 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ********************************************************************** - * Copyright (C) 2003-2013, International Business Machines - * Corporation and others. All Rights Reserved. - ********************************************************************** - */ - -#ifndef __FONTTABLECACHE_H - -#define __FONTTABLECACHE_H - -#include "layout/LETypes.h" - -U_NAMESPACE_USE - -struct FontTableCacheEntry; - -class FontTableCache -{ -public: - FontTableCache(); - - virtual ~FontTableCache(); - - const void *find(LETag tableTag, size_t &length) const; - -protected: - virtual const void *readFontTable(LETag tableTag, size_t &length) const = 0; - virtual void freeFontTable(const void *table) const; - -private: - - void add(LETag tableTag, const void *table, size_t length); - - FontTableCacheEntry *fTableCache; - le_int32 fTableCacheCurr; - le_int32 fTableCacheSize; -}; - -#endif - diff --git a/icu4c/source/test/letest/Makefile.in b/icu4c/source/test/letest/Makefile.in index 11ea1fd3165f..156c86fc83a8 100644 --- a/icu4c/source/test/letest/Makefile.in +++ b/icu4c/source/test/letest/Makefile.in @@ -20,7 +20,6 @@ CLEANFILES = *~ $(DEPS) ## Target information TESTTARGET = letest -GENTARGET = gendata BUILDDIR := $(CURR_SRCCODE_FULL_DIR)/../../ # Simplify the path for Unix @@ -34,11 +33,10 @@ CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/ct DEFS += -D'U_TOPSRCDIR="$(top_srcdir)/"' -D'U_TOPBUILDDIR="$(BUILDDIR)"' LIBS = $(LIBICULX) $(LIBICUUC) $(LIBICUI18N) $(LIBCTESTFW) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) $(ICULEHB_LIBS) -COMMONOBJECTS = letsutil.o cmaps.o FontTableCache.o SimpleFontInstance.o PortableFontInstance.o +COMMONOBJECTS = SimpleFontInstance.o TESTOBJECTS = letest.o -GENOBJECTS = gendata.o -OBJECTS = $(COMMONOBJECTS) $(TESTOBJECTS) $(GENOBJECTS) +OBJECTS = $(COMMONOBJECTS) $(TESTOBJECTS) DEPS = $(OBJECTS:.o=.d) @@ -66,7 +64,7 @@ dist-local: clean-local: test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) - $(RMV) $(COMMONOBJECTS) $(TESTOBJECTS) $(GENOBJECTS) $(TARGET) + $(RMV) $(COMMONOBJECTS) $(TESTOBJECTS) $(TARGET) distclean-local: clean-local $(RMV) Makefile @@ -86,16 +84,9 @@ $(TESTTARGET) : $(COMMONOBJECTS) $(TESTOBJECTS) $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) $(POST_BUILD_STEP) -$(GENTARGET) : $(COMMONOBJECTS) $(GENOBJECTS) - $(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) - $(POST_BUILD_STEP) - invoke: ICU_DATA=$${ICU_DATA:-$(top_builddir)/data/} TZ=PST8PDT $(INVOKE) $(INVOCATION) -gen-data: $(GENTARGET) - ICU_DATA=$${ICU_DATA:-$(top_builddir)/data/} TZ=PST8PDT $(INVOKE) ./$(GENTARGET) $(top_srcdir)/test/testdata/letest.xml $(srcdir)/gendata.xml - ifeq (,$(MAKECMDGOALS)) -include $(DEPS) else diff --git a/icu4c/source/test/letest/PortableFontInstance.cpp b/icu4c/source/test/letest/PortableFontInstance.cpp deleted file mode 100644 index 630a16d1e032..000000000000 --- a/icu4c/source/test/letest/PortableFontInstance.cpp +++ /dev/null @@ -1,476 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * - * Copyright (C) 1999-2015, International Business Machines - * Corporation and others. All Rights Reserved. - * - ******************************************************************************* - * file name: PortableFontInstance.cpp - * - * created on: 11/22/1999 - * created by: Eric R. Mader - */ - -#include - -#include "layout/LETypes.h" -#include "layout/LEFontInstance.h" -#include "layout/LESwaps.h" - -#include "PortableFontInstance.h" - -//#include "letest.h" -#include "sfnt.h" - -#include -#include - -#if 0 -static const char *letagToStr(LETag tag, char *str) { - str[0]= 0xFF & (tag>>24); - str[1]= 0xFF & (tag>>16); - str[2]= 0xFF & (tag>>8); - str[3]= 0xFF & (tag>>0); - str[4]= 0; - return str; -} -#endif - -// -// Finds the high bit by binary searching -// through the bits in n. -// -le_int8 PortableFontInstance::highBit(le_int32 value) -{ - if (value <= 0) { - return -32; - } - - le_uint8 bit = 0; - - if (value >= 1 << 16) { - value >>= 16; - bit += 16; - } - - if (value >= 1 << 8) { - value >>= 8; - bit += 8; - } - - if (value >= 1 << 4) { - value >>= 4; - bit += 4; - } - - if (value >= 1 << 2) { - value >>= 2; - bit += 2; - } - - if (value >= 1 << 1) { - value >>= 1; - bit += 1; - } - - return bit; -} - -PortableFontInstance::PortableFontInstance(const char *fileName, float pointSize, LEErrorCode &status) - : fFile(nullptr), fPointSize(pointSize), fUnitsPerEM(0), fFontChecksum(0), fAscent(0), fDescent(0), fLeading(0), - fDirectory(nullptr), fNAMETable(nullptr), fNameCount(0), fNameStringOffset(0), fCMAPMapper(nullptr), fHMTXTable(nullptr), fNumGlyphs(0), fNumLongHorMetrics(0) -{ - if (LE_FAILURE(status)) { - return; - } - - // open the font file - fFile = fopen(fileName, "rb"); - //printf("Open Font: %s\n", fileName); - - if (fFile == nullptr) { - printf("%s:%d: %s: FNF\n", __FILE__, __LINE__, fileName); - status = LE_FONT_FILE_NOT_FOUND_ERROR; - return; - } - - // read in the directory - SFNTDirectory tempDir; - - size_t numRead = fread(&tempDir, sizeof tempDir, 1, fFile); - (void)numRead; - - le_int32 dirSize = sizeof tempDir + ((SWAPW(tempDir.numTables) - ANY_NUMBER) * sizeof(DirectoryEntry)); - const LETag headTag = LE_HEAD_TABLE_TAG; - const LETag hheaTag = LE_HHEA_TABLE_TAG; - const HEADTable *headTable = nullptr; - const HHEATable *hheaTable = nullptr; -// const NAMETable *nameTable = nullptr; - le_uint16 numTables = 0; - - fDirectory = reinterpret_cast(LE_NEW_ARRAY(char, dirSize)); - - if (fDirectory == nullptr) { - printf("%s:%d: %s: malloc err\n", __FILE__, __LINE__, fileName); - status = LE_MEMORY_ALLOCATION_ERROR; - goto error_exit; - } - - fseek(fFile, 0L, SEEK_SET); - numRead = fread((void *) fDirectory, sizeof(char), dirSize, fFile); - - // - // We calculate these numbers 'cause some fonts - // have bogus values for them in the directory header. - // - numTables = SWAPW(fDirectory->numTables); - fDirPower = 1 << highBit(numTables); - fDirExtra = numTables - fDirPower; - - // read unitsPerEm from 'head' table - headTable = static_cast(readFontTable(headTag)); - - if (headTable == nullptr) { - status = LE_MISSING_FONT_TABLE_ERROR; - printf("%s:%d: %s: missing head table\n", __FILE__, __LINE__, fileName); - goto error_exit; - } - - fUnitsPerEM = SWAPW(headTable->unitsPerEm); - fFontChecksum = SWAPL(headTable->checksumAdjustment); - freeFontTable(headTable); - - //nameTable = (NAMETable *) readFontTable(nameTag); - - //if (nameTable == nullptr) { - // status = LE_MISSING_FONT_TABLE_ERROR; - // goto error_exit; - //} - - //fFontVersionString = findName(nameTable, NAME_VERSION_STRING, PLATFORM_MACINTOSH, MACINTOSH_ROMAN, MACINTOSH_ENGLISH); - - //if (fFontVersionString == nullptr) { - // status = LE_MISSING_FONT_TABLE_ERROR; - // goto error_exit; - //} - - //freeFontTable(nameTable); - - hheaTable = (HHEATable *) readFontTable(hheaTag); - - if (hheaTable == nullptr) { - printf("%s:%d: %s: missing hhea table\n", __FILE__, __LINE__, fileName); - status = LE_MISSING_FONT_TABLE_ERROR; - goto error_exit; - } - - fAscent = static_cast(yUnitsToPoints(static_cast(SWAPW(hheaTable->ascent)))); - fDescent = static_cast(yUnitsToPoints(static_cast(SWAPW(hheaTable->descent)))); - fLeading = static_cast(yUnitsToPoints(static_cast(SWAPW(hheaTable->lineGap)))); - - fNumLongHorMetrics = SWAPW(hheaTable->numOfLongHorMetrics); - - freeFontTable((void *) hheaTable); - - fCMAPMapper = findUnicodeMapper(); - - if (fCMAPMapper == nullptr) { - printf("%s:%d: %s: can't load cmap\n", __FILE__, __LINE__, fileName); - status = LE_MISSING_FONT_TABLE_ERROR; - goto error_exit; - } - - return; - -error_exit: - fclose(fFile); - fFile = nullptr; -} - -PortableFontInstance::~PortableFontInstance() -{ - if (fFile != nullptr) { - fclose(fFile); - - freeFontTable(fHMTXTable); - freeFontTable(fNAMETable); - - delete fCMAPMapper; - - LE_DELETE_ARRAY(fDirectory); - } -} - -const DirectoryEntry *PortableFontInstance::findTable(LETag tag) const -{ - if (fDirectory != nullptr) { - le_uint16 table = 0; - le_uint16 probe = fDirPower; - - if (SWAPL(fDirectory->tableDirectory[fDirExtra].tag) <= tag) { - table = fDirExtra; - } - - while (probe > (1 << 0)) { - probe >>= 1; - - if (SWAPL(fDirectory->tableDirectory[table + probe].tag) <= tag) { - table += probe; - } - } - - if (SWAPL(fDirectory->tableDirectory[table].tag) == tag) { - return &fDirectory->tableDirectory[table]; - } - } - - return nullptr; -} - -const void *PortableFontInstance::readTable(LETag tag, le_uint32 *length) const -{ - const DirectoryEntry *entry = findTable(tag); - - if (entry == nullptr) { - *length = 0; - return nullptr; - } - - *length = SWAPL(entry->length); - - void *table = LE_NEW_ARRAY(char, *length); - - if (table != nullptr) { - fseek(fFile, SWAPL(entry->offset), SEEK_SET); - size_t numRead = fread(table, sizeof(char), *length, fFile); - (void)numRead; - } - - return table; -} - -const void *PortableFontInstance::getFontTable(LETag tableTag, size_t &length) const -{ - return FontTableCache::find(tableTag, length); -} - -const void *PortableFontInstance::readFontTable(LETag tableTag, size_t &length) const -{ - le_uint32 len; - - const void *data= readTable(tableTag, &len); - length = len; - //char tag5[5]; - //printf("Read %s, result %p #%d\n", letagToStr(tableTag,tag5), data,len); - return data; -} - -CMAPMapper *PortableFontInstance::findUnicodeMapper() -{ - LETag cmapTag = LE_CMAP_TABLE_TAG; - const CMAPTable *cmap = (CMAPTable *) readFontTable(cmapTag); - - if (cmap == nullptr) { - return nullptr; - } - - return CMAPMapper::createUnicodeMapper(cmap); -} - -const char *PortableFontInstance::getNameString(le_uint16 nameID, le_uint16 platformID, le_uint16 encodingID, le_uint16 languageID) const -{ - if (fNAMETable == nullptr) { - LETag nameTag = LE_NAME_TABLE_TAG; - PortableFontInstance* realThis = const_cast(this); - - realThis->fNAMETable = static_cast(readFontTable(nameTag)); - - if (realThis->fNAMETable != nullptr) { - realThis->fNameCount = SWAPW(realThis->fNAMETable->count); - realThis->fNameStringOffset = SWAPW(realThis->fNAMETable->stringOffset); - } - } - - for(le_int32 i = 0; i < fNameCount; i += 1) { - const NameRecord *nameRecord = &fNAMETable->nameRecords[i]; - - if (SWAPW(nameRecord->platformID) == platformID && SWAPW(nameRecord->encodingID) == encodingID && - SWAPW(nameRecord->languageID) == languageID && SWAPW(nameRecord->nameID) == nameID) { - char *name = ((char *) fNAMETable) + fNameStringOffset + SWAPW(nameRecord->offset); - le_uint16 length = SWAPW(nameRecord->length); - char *result = LE_NEW_ARRAY(char, length + 2); - - LE_ARRAY_COPY(result, name, length); - result[length] = result[length + 1] = 0; - - return result; - } - } - - return nullptr; -} - -const LEUnicode16 *PortableFontInstance::getUnicodeNameString(le_uint16 nameID, le_uint16 platformID, le_uint16 encodingID, le_uint16 languageID) const -{ - if (fNAMETable == nullptr) { - LETag nameTag = LE_NAME_TABLE_TAG; - PortableFontInstance* realThis = const_cast(this); - - realThis->fNAMETable = static_cast(readFontTable(nameTag)); - - if (realThis->fNAMETable != nullptr) { - realThis->fNameCount = SWAPW(realThis->fNAMETable->count); - realThis->fNameStringOffset = SWAPW(realThis->fNAMETable->stringOffset); - } - } - - for(le_int32 i = 0; i < fNameCount; i += 1) { - const NameRecord *nameRecord = &fNAMETable->nameRecords[i]; - - if (SWAPW(nameRecord->platformID) == platformID && SWAPW(nameRecord->encodingID) == encodingID && - SWAPW(nameRecord->languageID) == languageID && SWAPW(nameRecord->nameID) == nameID) { - const LEUnicode16* name = reinterpret_cast(reinterpret_cast(fNAMETable) + fNameStringOffset + SWAPW(nameRecord->offset)); - le_uint16 length = SWAPW(nameRecord->length) / 2; - LEUnicode16 *result = LE_NEW_ARRAY(LEUnicode16, length + 2); - - for (le_int32 c = 0; c < length; c += 1) { - result[c] = SWAPW(name[c]); - } - - result[length] = 0; - - return result; - } - } - - return nullptr; -} - -void PortableFontInstance::deleteNameString(const char *name) const -{ - LE_DELETE_ARRAY(name); -} - -void PortableFontInstance::deleteNameString(const LEUnicode16 *name) const -{ - LE_DELETE_ARRAY(name); -} - -void PortableFontInstance::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const -{ - TTGlyphID ttGlyph = static_cast(LE_GET_GLYPH(glyph)); - - if (fHMTXTable == nullptr) { - LETag maxpTag = LE_MAXP_TABLE_TAG; - LETag hmtxTag = LE_HMTX_TABLE_TAG; - const MAXPTable *maxpTable = (MAXPTable *) readFontTable(maxpTag); - PortableFontInstance* realThis = const_cast(this); - - if (maxpTable != nullptr) { - realThis->fNumGlyphs = SWAPW(maxpTable->numGlyphs); - freeFontTable(maxpTable); - } - - realThis->fHMTXTable = static_cast(readFontTable(hmtxTag)); - } - - le_uint16 index = ttGlyph; - - if (ttGlyph >= fNumGlyphs || fHMTXTable == nullptr) { - advance.fX = advance.fY = 0; - return; - } - - if (ttGlyph >= fNumLongHorMetrics) { - index = fNumLongHorMetrics - 1; - } - - advance.fX = xUnitsToPoints(SWAPW(fHMTXTable->hMetrics[index].advanceWidth)); - advance.fY = 0; -} - -le_bool PortableFontInstance::getGlyphPoint(LEGlyphID /*glyph*/, le_int32 /*pointNumber*/, LEPoint &/*point*/) const -{ - return false; -} - -le_int32 PortableFontInstance::getUnitsPerEM() const -{ - return fUnitsPerEM; -} - -le_uint32 PortableFontInstance::getFontChecksum() const -{ - return fFontChecksum; -} - -le_uint32 PortableFontInstance::getRawChecksum() const -{ - // how big is it? - // fseek(fFile, 0L, SEEK_END); - // long size = ftell(fFile); - le_int32 chksum = 0; - // now, calculate - fseek(fFile, 0L, SEEK_SET); - int r; - while((r = fgetc(fFile)) != EOF) { - chksum += r; - } - return static_cast(chksum); // cast to signed -} - -le_int32 PortableFontInstance::getAscent() const -{ - return fAscent; -} - -le_int32 PortableFontInstance::getDescent() const -{ - return fDescent; -} - -le_int32 PortableFontInstance::getLeading() const -{ - return fLeading; -} - -// We really want to inherit this method from the superclass, but some compilers -// issue a warning if we don't implement it... -LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const -{ - return LEFontInstance::mapCharToGlyph(ch, mapper, filterZeroWidth); -} - -// We really want to inherit this method from the superclass, but some compilers -// issue a warning if we don't implement it... -LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const -{ - return LEFontInstance::mapCharToGlyph(ch, mapper); -} - -LEGlyphID PortableFontInstance::mapCharToGlyph(LEUnicode32 ch) const -{ - return fCMAPMapper->unicodeToGlyph(ch); -} - -float PortableFontInstance::getXPixelsPerEm() const -{ - return fPointSize; -} - -float PortableFontInstance::getYPixelsPerEm() const -{ - return fPointSize; -} - -float PortableFontInstance::getScaleFactorX() const -{ - return 1.0; -} - -float PortableFontInstance::getScaleFactorY() const -{ - return 1.0; -} diff --git a/icu4c/source/test/letest/PortableFontInstance.h b/icu4c/source/test/letest/PortableFontInstance.h deleted file mode 100644 index 9405674ed18a..000000000000 --- a/icu4c/source/test/letest/PortableFontInstance.h +++ /dev/null @@ -1,122 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html - -/* - ******************************************************************************* - * - * Copyright (C) 1999-2015, International Business Machines - * Corporation and others. All Rights Reserved. - * - ******************************************************************************* - * file name: PortableFontInstance.h - * - * created on: 11/12/1999 - * created by: Eric R. Mader - */ - -#ifndef __PORTABLEFONTINSTANCE_H -#define __PORTABLEFONTINSTANCE_H - -#include - -#include "layout/LETypes.h" -#include "layout/LEFontInstance.h" - -#include "FontTableCache.h" - -#include "sfnt.h" -#include "cmaps.h" - -class PortableFontInstance : public LEFontInstance, protected FontTableCache -{ -private: - FILE *fFile; - - float fPointSize; - le_int32 fUnitsPerEM; - le_uint32 fFontChecksum; - le_int32 fAscent; - le_int32 fDescent; - le_int32 fLeading; - - const SFNTDirectory *fDirectory; - le_uint16 fDirPower; - le_uint16 fDirExtra; - - float fDeviceScaleX; - float fDeviceScaleY; - - const NAMETable *fNAMETable; - le_uint16 fNameCount; - le_uint16 fNameStringOffset; - - CMAPMapper *fCMAPMapper; - - const HMTXTable *fHMTXTable; - le_uint16 fNumGlyphs; - le_uint16 fNumLongHorMetrics; - - static le_int8 highBit(le_int32 value); - - const DirectoryEntry *findTable(LETag tag) const; - const void *readTable(LETag tag, le_uint32 *length) const; - void getMetrics(); - - CMAPMapper *findUnicodeMapper(); - -protected: - const void *readFontTable(LETag tableTag) const { size_t ignored; return readFontTable(tableTag, ignored); } - const void *readFontTable(LETag tableTag, size_t &length) const override; - -public: - PortableFontInstance(const char *fileName, float pointSize, LEErrorCode &status); - - virtual ~PortableFontInstance(); - - const void *getFontTable(LETag tableTag, size_t &length) const override; - - virtual const char *getNameString(le_uint16 nameID, le_uint16 platform, le_uint16 encoding, le_uint16 language) const; - - virtual const LEUnicode16 *getUnicodeNameString(le_uint16 nameID, le_uint16 platform, le_uint16 encoding, le_uint16 language) const; - - virtual void deleteNameString(const char *name) const; - - virtual void deleteNameString(const LEUnicode16 *name) const; - - le_int32 getUnitsPerEM() const override; - - virtual le_uint32 getFontChecksum() const; - - virtual le_uint32 getRawChecksum() const; - - le_int32 getAscent() const override; - - le_int32 getDescent() const override; - - le_int32 getLeading() const override; - - // We really want to inherit this method from the superclass, but some compilers - // issue a warning if we don't implement it... - LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const override; - - // We really want to inherit this method from the superclass, but some compilers - // issue a warning if we don't implement it... - LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const override; - - LEGlyphID mapCharToGlyph(LEUnicode32 ch) const override; - - void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const override; - - le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const override; - - float getXPixelsPerEm() const override; - - float getYPixelsPerEm() const override; - - float getScaleFactorX() const override; - - float getScaleFactorY() const override; - -}; - -#endif diff --git a/icu4c/source/test/letest/cmaps.cpp b/icu4c/source/test/letest/cmaps.cpp deleted file mode 100644 index 69c08038fec0..000000000000 --- a/icu4c/source/test/letest/cmaps.cpp +++ /dev/null @@ -1,252 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/*************************************************************************** -* -* Copyright (C) 1998-2014, International Business Machines -* Corporation and others. All Rights Reserved. -* -************************************************************************/ - -#include "layout/LETypes.h" -#include "layout/LESwaps.h" - -#include "sfnt.h" -#include "cmaps.h" -#include - -#define SWAPU16(code) ((LEUnicode16) SWAPW(code)) -#define SWAPU32(code) ((LEUnicode32) SWAPL(code)) - -// -// Finds the high bit by binary searching -// through the bits in value. -// -le_int8 highBit(le_uint32 value) -{ - le_uint8 bit = 0; - - if (value >= 1 << 16) { - value >>= 16; - bit += 16; - } - - if (value >= 1 << 8) { - value >>= 8; - bit += 8; - } - - if (value >= 1 << 4) { - value >>= 4; - bit += 4; - } - - if (value >= 1 << 2) { - value >>= 2; - bit += 2; - } - - if (value >= 1 << 1) { - value >>= 1; - bit += 1; - } - - return bit; -} - -CMAPMapper *CMAPMapper::createUnicodeMapper(const CMAPTable *cmap) -{ - le_uint16 i; - le_uint16 nSubtables = SWAPW(cmap->numberSubtables); - const CMAPEncodingSubtable *subtable = nullptr; - le_bool found = false; - le_uint16 foundPlatformID = 0xFFFF; - le_uint16 foundPlatformSpecificID = 0xFFFF; - le_uint32 foundOffset = 0; - le_uint16 foundTable = 0xFFFF; - // first pass, look for MS table. (preferred?) - for (i = 0; i < nSubtables && !found; i += 1) { - const CMAPEncodingSubtableHeader *esh = &cmap->encodingSubtableHeaders[i]; - - le_uint16 platformID = SWAPW(esh->platformID); - le_uint16 platformSpecificID = SWAPW(esh->platformSpecificID); - if (platformID == 3) { // microsoft - switch (platformSpecificID) { - case 1: // Unicode BMP (UCS-2) - case 10: // Unicode UCS-4 - foundOffset = SWAPL(esh->encodingOffset); - foundPlatformID = platformID; - foundPlatformSpecificID = platformSpecificID; - found = true; - foundTable = i; - break; - - //default: - // printf("%s:%d: microsoft (3) platform specific ID %d (wanted 1 or 10) for subtable %d/%d\n", __FILE__, __LINE__, (SWAPW(esh->platformSpecificID)), i, nSubtables); - } - } else { - //printf("%s:%d: platform ID %d (wanted 3, microsoft) for subtable %d/%d\n", __FILE__, __LINE__, (SWAPW(esh->platformID)), i, nSubtables); - } - } - - // second pass, allow non MS table - // first pass, look for MS table. (preferred?) - for (i = 0; i < nSubtables && !found; i += 1) { - const CMAPEncodingSubtableHeader *esh = &cmap->encodingSubtableHeaders[i]; - le_uint16 platformID = SWAPW(esh->platformID); - le_uint16 platformSpecificID = SWAPW(esh->platformSpecificID); - //printf("%s:%d: table %d/%d has platform:specific %d:%d\n", __FILE__, __LINE__, i, nSubtables, platformID, platformSpecificID); - switch(platformID) { - case 0: // Unicode platform - switch(platformSpecificID) { - case 0: - case 1: - case 2: - case 3: - foundOffset = SWAPL(esh->encodingOffset); - foundPlatformID = platformID; - foundPlatformSpecificID = platformSpecificID; - foundTable = i; - found = true; - break; - - default: printf("Error: table %d (psid %d) is unknown. Skipping.\n", i, platformSpecificID); break; - } - break; - - //default: - //printf("Skipping platform id %d\n", platformID); - } - } - - - if (found) - { - subtable = reinterpret_cast(reinterpret_cast(cmap) + foundOffset); - //printf("%s:%d: using subtable #%d/%d type %d:%d\n", __FILE__, __LINE__, foundTable, nSubtables, foundPlatformID, foundPlatformSpecificID); - (void)foundPlatformID; // Suppress unused variable compiler warnings. - (void)foundTable; - (void)foundPlatformSpecificID; - } else { - printf("%s:%d: could not find subtable.\n", __FILE__, __LINE__); - return nullptr; - } - - le_uint16 tableFormat = SWAPW(subtable->format); - //printf("%s:%d: table format %d\n", __FILE__, __LINE__, tableFormat); - - switch (tableFormat) { - case 4: - return new CMAPFormat4Mapper(cmap, (const CMAPFormat4Encoding *) subtable); - - case 12: - { - const CMAPFormat12Encoding* encoding = reinterpret_cast(subtable); - - return new CMAPGroupMapper(cmap, encoding->groups, SWAPL(encoding->nGroups)); - } - - default: - break; - } - - printf("%s:%d: Unknown format %x.\n", __FILE__, __LINE__, (SWAPW(subtable->format))); - return nullptr; -} - -CMAPFormat4Mapper::CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header) - : CMAPMapper(cmap) -{ - le_uint16 segCount = SWAPW(header->segCountX2) / 2; - - fEntrySelector = SWAPW(header->entrySelector); - fRangeShift = SWAPW(header->rangeShift) / 2; - fEndCodes = &header->endCodes[0]; - fStartCodes = &header->endCodes[segCount + 1]; // + 1 for reservedPad... - fIdDelta = &fStartCodes[segCount]; - fIdRangeOffset = &fIdDelta[segCount]; -} - -LEGlyphID CMAPFormat4Mapper::unicodeToGlyph(LEUnicode32 unicode32) const -{ - if (unicode32 >= 0x10000) { - return 0; - } - - LEUnicode16 unicode = static_cast(unicode32); - le_uint16 index = 0; - le_uint16 probe = 1 << fEntrySelector; - TTGlyphID result = 0; - - if (SWAPU16(fStartCodes[fRangeShift]) <= unicode) { - index = fRangeShift; - } - - while (probe > (1 << 0)) { - probe >>= 1; - - if (SWAPU16(fStartCodes[index + probe]) <= unicode) { - index += probe; - } - } - - if (unicode >= SWAPU16(fStartCodes[index]) && unicode <= SWAPU16(fEndCodes[index])) { - if (fIdRangeOffset[index] == 0) { - result = static_cast(unicode); - } else { - le_uint16 offset = unicode - SWAPU16(fStartCodes[index]); - le_uint16 rangeOffset = SWAPW(fIdRangeOffset[index]); - const le_uint16* glyphIndexTable = reinterpret_cast(reinterpret_cast(&fIdRangeOffset[index]) + rangeOffset); - - result = SWAPW(glyphIndexTable[offset]); - } - - result += SWAPW(fIdDelta[index]); - } else { - result = 0; - } - - return LE_SET_GLYPH(0, result); -} - -CMAPFormat4Mapper::~CMAPFormat4Mapper() -{ - // parent destructor does it all -} - -CMAPGroupMapper::CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups) - : CMAPMapper(cmap), fGroups(groups) -{ - le_uint8 bit = highBit(nGroups); - fPower = 1 << bit; - fRangeOffset = nGroups - fPower; -} - -LEGlyphID CMAPGroupMapper::unicodeToGlyph(LEUnicode32 unicode32) const -{ - le_int32 probe = fPower; - le_int32 range = 0; - - if (SWAPU32(fGroups[fRangeOffset].startCharCode) <= unicode32) { - range = fRangeOffset; - } - - while (probe > (1 << 0)) { - probe >>= 1; - - if (SWAPU32(fGroups[range + probe].startCharCode) <= unicode32) { - range += probe; - } - } - - if (SWAPU32(fGroups[range].startCharCode) <= unicode32 && SWAPU32(fGroups[range].endCharCode) >= unicode32) { - return static_cast(SWAPU32(fGroups[range].startGlyphCode) + unicode32 - SWAPU32(fGroups[range].startCharCode)); - } - - return 0; -} - -CMAPGroupMapper::~CMAPGroupMapper() -{ - // parent destructor does it all -} - diff --git a/icu4c/source/test/letest/cmaps.h b/icu4c/source/test/letest/cmaps.h deleted file mode 100644 index 59653049569d..000000000000 --- a/icu4c/source/test/letest/cmaps.h +++ /dev/null @@ -1,87 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/*************************************************************************** -* -* Copyright (C) 1998-2013, International Business Machines -* Corporation and others. All Rights Reserved. -* -************************************************************************/ - - -#ifndef __CMAPS_H -#define __CMAPS_H - -#include "layout/LETypes.h" -//#include "letest.h" -#include "sfnt.h" - -class CMAPMapper -{ -public: - virtual LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const = 0; - - virtual ~CMAPMapper(); - - static CMAPMapper *createUnicodeMapper(const CMAPTable *cmap); - -protected: - CMAPMapper(const CMAPTable *cmap); - - CMAPMapper() {} - -private: - const CMAPTable *fcmap; -}; - -class CMAPFormat4Mapper : public CMAPMapper -{ -public: - CMAPFormat4Mapper(const CMAPTable *cmap, const CMAPFormat4Encoding *header); - - virtual ~CMAPFormat4Mapper(); - - LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const override; - -protected: - CMAPFormat4Mapper() {} - -private: - le_uint16 fEntrySelector; - le_uint16 fRangeShift; - const le_uint16 *fEndCodes; - const le_uint16 *fStartCodes; - const le_uint16 *fIdDelta; - const le_uint16 *fIdRangeOffset; -}; - -class CMAPGroupMapper : public CMAPMapper -{ -public: - CMAPGroupMapper(const CMAPTable *cmap, const CMAPGroup *groups, le_uint32 nGroups); - - virtual ~CMAPGroupMapper(); - - LEGlyphID unicodeToGlyph(LEUnicode32 unicode32) const override; - -protected: - CMAPGroupMapper() {} - -private: - le_int32 fPower; - le_int32 fRangeOffset; - const CMAPGroup *fGroups; -}; - -inline CMAPMapper::CMAPMapper(const CMAPTable *cmap) - : fcmap(cmap) -{ - // nothing else to do -} - -inline CMAPMapper::~CMAPMapper() -{ - LE_DELETE_ARRAY(fcmap); -} - -#endif - diff --git a/icu4c/source/test/letest/gendata.cpp b/icu4c/source/test/letest/gendata.cpp deleted file mode 100644 index d1cae234c7af..000000000000 --- a/icu4c/source/test/letest/gendata.cpp +++ /dev/null @@ -1,383 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * - * Copyright (C) 1999-2013, International Business Machines - * Corporation and others. All Rights Reserved. - * - ******************************************************************************* - * file name: gendata.cpp - * - * created on: 11/03/2000 - * created by: Eric R. Mader - */ - -#include -#include -#include - -#include "unicode/utypes.h" -#include "unicode/unistr.h" -#include "unicode/uscript.h" -#include "unicode/ubidi.h" -#include "unicode/ustring.h" - -#include "layout/LETypes.h" -#include "layout/LEScripts.h" -#include "layout/LayoutEngine.h" - -#include "PortableFontInstance.h" -#include "SimpleFontInstance.h" - -#include "xmlparser.h" - -#include "letsutil.h" -#include "letest.h" - -U_NAMESPACE_USE - -static LEErrorCode overallStatus = LE_NO_ERROR; -struct TestInput -{ - const char *fontName; - LEUnicode *text; - le_int32 textLength; - le_int32 scriptCode; - le_bool rightToLeft; -}; - -/* Returns the path to icu/source/test/testdata/ */ -const char *getSourceTestData() { - const char *srcDataDir = nullptr; -#ifdef U_TOPSRCDIR - srcDataDir = U_TOPSRCDIR U_FILE_SEP_STRING "test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING; -#else - srcDataDir = ".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING; - FILE *f = fopen(".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING"rbbitst.txt", "r"); - - if (f != nullptr) { - /* We're in icu/source/test/letest/ */ - fclose(f); - } else { - /* We're in icu/source/test/letest/(Debug|Release) */ - srcDataDir = ".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING".."U_FILE_SEP_STRING"test"U_FILE_SEP_STRING"testdata"U_FILE_SEP_STRING; - } -#endif - - return srcDataDir; -} - -const char *getPath(char buffer[2048], const char *filename) { - const char *testDataDirectory = getSourceTestData(); - - strcpy(buffer, testDataDirectory); - strcat(buffer, filename); - - return buffer; -} - -/* - * FIXME: should use the output file name and the current date. - */ -const char *header = - "\n" - "\n" - "\n" - "\n" - "\n"; - -void dumpLongs(FILE *file, const char *tag, le_int32 *longs, le_int32 count) { - char lineBuffer[8 * 12 + 2]; - le_int32 bufp = 0; - - fprintf(file, " <%s>\n", tag); - - for (int i = 0; i < count; i += 1) { - if (i % 8 == 0 && bufp != 0) { - fprintf(file, " %s\n", lineBuffer); - bufp = 0; - } - - bufp += snprintf(&lineBuffer[bufp], sizeof(lineBuffer) - bufp, "0x%8.8X, ", longs[i]); - } - - if (bufp != 0) { - lineBuffer[bufp - 2] = '\0'; - fprintf(file, " %s\n", lineBuffer); - } - - fprintf(file, " \n\n", tag); -} - -void dumpFloats(FILE *file, const char *tag, float *floats, le_int32 count) { - char lineBuffer[8 * 16 + 2]; - le_int32 bufp = 0; - - fprintf(file, " <%s>\n", tag); - - for (int i = 0; i < count; i += 1) { - if (i % 8 == 0 && bufp != 0) { - fprintf(file, " %s\n", lineBuffer); - bufp = 0; - } - - bufp += snprintf(&lineBuffer[bufp], sizeof(lineBuffer) - bufp, "%f, ", floats[i]); - } - - if (bufp != 0) { - lineBuffer[bufp - 2] = '\0'; - fprintf(file, " %s\n", lineBuffer); - } - - fprintf(file, " \n", tag); -} - -int main(int argc, char *argv[]) -{ - UErrorCode status = U_ZERO_ERROR; - const char *gendataFile = "gendata.xml"; - FILE *outputFile = fopen(argv[1], "w"); - if(argc>2) { - gendataFile = argv[2]; - } - time_t now = time(nullptr); - struct tm *local = localtime(&now); - const char *tmFormat = "%m/%d/%Y %I:%M:%S %p %Z"; - char tmString[64]; - le_uint32 count = 0; - strftime(tmString, 64, tmFormat, local); - fprintf(outputFile, header, local->tm_year + 1900, tmString); - - UXMLParser *parser = UXMLParser::createParser(status); - UXMLElement *root = parser->parseFile(gendataFile, status); - - if (root == nullptr) { - printf("Error: Could not open %s\n", gendataFile); - delete parser; - return -1; - } else if(U_FAILURE(status)) { - printf("Error reading %s: %s\n", gendataFile, u_errorName(status)); - return -2; - } else { - printf("Reading %s\n", gendataFile); - } - - UnicodeString test_case = UNICODE_STRING_SIMPLE("test-case"); - UnicodeString test_text = UNICODE_STRING_SIMPLE("test-text"); - UnicodeString test_font = UNICODE_STRING_SIMPLE("test-font"); - - // test-case attributes - UnicodeString id_attr = UNICODE_STRING_SIMPLE("id"); - UnicodeString script_attr = UNICODE_STRING_SIMPLE("script"); - UnicodeString lang_attr = UNICODE_STRING_SIMPLE("lang"); - - // test-font attributes - UnicodeString name_attr = UNICODE_STRING_SIMPLE("name"); - - const UXMLElement *testCase; - int32_t tc = 0; - - while((testCase = root->nextChildElement(tc)) != nullptr) { - if (testCase->getTagName().compare(test_case) == 0) { - char *id = getCString(testCase->getAttribute(id_attr)); - char *script = getCString(testCase->getAttribute(script_attr)); - char *lang = getCString(testCase->getAttribute(lang_attr)); - ++count; - printf("\n ID %s\n", id); - LEFontInstance *font = nullptr; - const UXMLElement *element; - int32_t ec = 0; - int32_t charCount = 0; - int32_t typoFlags = LayoutEngine::kTypoFlagKern | LayoutEngine::kTypoFlagLiga; // kerning + ligatures... - UScriptCode scriptCode; - le_int32 languageCode = -1; - UnicodeString text; - int32_t glyphCount = 0; - LEErrorCode leStatus = LE_NO_ERROR; - LayoutEngine *engine = nullptr; - LEGlyphID *glyphs = nullptr; - le_int32 *indices = nullptr; - float *positions = nullptr; - - uscript_getCode(script, &scriptCode, 1, &status); - if (LE_FAILURE(status)) { - printf("Error: invalid script name: %s.\n", script); - goto free_c_strings; - } - - if (lang != nullptr) { - languageCode = getLanguageCode(lang); - - if (languageCode < 0) { - printf("Error: invalid language name: %s.\n", lang); - goto free_c_strings; - } - - fprintf(outputFile, " \n", id, script, lang); - } else { - fprintf(outputFile, " \n", id, script); - } - - while((element = testCase->nextChildElement(ec)) != nullptr) { - UnicodeString tag = element->getTagName(); - - // TODO: make sure that each element is only used once. - if (tag.compare(test_font) == 0) { - char *fontName = getCString(element->getAttribute(name_attr)); - const char *version = nullptr; - char buf[2048]; - PortableFontInstance *pfi = new PortableFontInstance(getPath(buf,fontName), 12, leStatus); - - if (LE_FAILURE(leStatus)) { - printf("Error: could not open font: %s (path: %s)\n", fontName, buf); - freeCString(fontName); - goto free_c_strings; - } - - printf(" Generating: %s, %s, %s, %s\n", id, script, lang, fontName); - - version = pfi->getNameString(NAME_VERSION_STRING, PLATFORM_MACINTOSH, MACINTOSH_ROMAN, MACINTOSH_ENGLISH); - - // The standard recommends that the Macintosh Roman/English name string be present, but - // if it's not, try the Microsoft Unicode/English string. - if (version == nullptr) { - const LEUnicode16 *uversion = pfi->getUnicodeNameString(NAME_VERSION_STRING, PLATFORM_MICROSOFT, MICROSOFT_UNICODE_BMP, MICROSOFT_ENGLISH); - - if (uversion != nullptr) { - char uversion_utf8[300]; - UErrorCode status2 = U_ZERO_ERROR; - u_strToUTF8(uversion_utf8, 300, nullptr, uversion, -1, &status2); - if(U_FAILURE(status2)) { - uversion_utf8[0]=0; - } - fprintf(outputFile, " \n\n", - fontName, uversion_utf8, pfi->getFontChecksum(), pfi->getRawChecksum()); - - pfi->deleteNameString(uversion); - } else { - fprintf(outputFile, " \n\n", - fontName, pfi->getFontChecksum(), pfi->getFontChecksum(), pfi->getRawChecksum()); - } - } else { - fprintf(outputFile, " \n\n", - fontName, version, pfi->getFontChecksum(), pfi->getRawChecksum()); - - pfi->deleteNameString(version); - } - fflush(outputFile); - - freeCString(fontName); - - font = pfi; - } else if (tag.compare(test_text) == 0) { - char *utf8 = nullptr; - - text = element->getText(true); - charCount = text.length(); - - utf8 = getUTF8String(&text); - fprintf(outputFile, " %s\n\n", utf8); - fflush(outputFile); - freeCString(utf8); - } else { - // an unknown tag... - char *cTag = getCString(&tag); - - printf("Test %s: unknown element with tag \"%s\"\n", id, cTag); - freeCString(cTag); - } - } - - if (font == nullptr) { - LEErrorCode fontStatus = LE_NO_ERROR; - - font = new SimpleFontInstance(12, fontStatus); - typoFlags |= 0x80000000L; // use CharSubstitutionFilter... - } - - engine = LayoutEngine::layoutEngineFactory(font, scriptCode, languageCode, typoFlags, leStatus); - - if (LE_FAILURE(leStatus)) { - printf("Error for test %s: could not create a LayoutEngine.\n", id); - goto delete_font; - } - - glyphCount = engine->layoutChars(text.getBuffer(), 0, charCount, charCount, getRTL(text), 0, 0, leStatus); - - glyphs = NEW_ARRAY(LEGlyphID, glyphCount); - indices = NEW_ARRAY(le_int32, glyphCount); - positions = NEW_ARRAY(float, glyphCount * 2 + 2); - - engine->getGlyphs(glyphs, leStatus); - engine->getCharIndices(indices, leStatus); - engine->getGlyphPositions(positions, leStatus); - - if(LE_FAILURE(leStatus)) { - fprintf(stderr, "ERROR: LO returned error: %s\n", u_errorName(static_cast(leStatus))); - overallStatus = leStatus; - fprintf(outputFile, "\n", leStatus); - fflush(outputFile); - leStatus = LE_NO_ERROR; - } else { - dumpLongs(outputFile, "result-glyphs", reinterpret_cast(glyphs), glyphCount); - - dumpLongs(outputFile, "result-indices", indices, glyphCount); - - dumpFloats(outputFile, "result-positions", positions, glyphCount * 2 + 2); - fflush(outputFile); - - } - - DELETE_ARRAY(positions); - DELETE_ARRAY(indices); - DELETE_ARRAY(glyphs); - - delete engine; - -delete_font: - fprintf(outputFile, " \n\n"); - fflush(outputFile); - - delete font; - -free_c_strings: - freeCString(lang); - freeCString(script); - freeCString(id); - } - } - - delete root; - delete parser; - - fprintf(outputFile, "\n"); - - if(count==0) { - fprintf(stderr, "No cases processed!\n"); - return 1; - } - - - if(LE_FAILURE(overallStatus)) { - fprintf(outputFile, "\n", overallStatus); - fprintf(stderr, "!!! FAILED. %d\n", overallStatus); - fclose(outputFile); - return 0; - // return 1; - } else { - printf("Generated.\n"); - fclose(outputFile); - return 0; - } -} diff --git a/icu4c/source/test/letest/gendata.sln b/icu4c/source/test/letest/gendata.sln deleted file mode 100644 index 23bf47eb22aa..000000000000 --- a/icu4c/source/test/letest/gendata.sln +++ /dev/null @@ -1,25 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gendata", "gendata.vcxproj", "{DA322426-C37C-4909-A99D-16B05E7FA498}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {DA322426-C37C-4909-A99D-16B05E7FA498}.Debug|Win32.ActiveCfg = Debug|Win32 - {DA322426-C37C-4909-A99D-16B05E7FA498}.Debug|Win32.Build.0 = Debug|Win32 - {DA322426-C37C-4909-A99D-16B05E7FA498}.Debug|x64.ActiveCfg = Debug|x64 - {DA322426-C37C-4909-A99D-16B05E7FA498}.Debug|x64.Build.0 = Debug|x64 - {DA322426-C37C-4909-A99D-16B05E7FA498}.Release|Win32.ActiveCfg = Release|Win32 - {DA322426-C37C-4909-A99D-16B05E7FA498}.Release|Win32.Build.0 = Release|Win32 - {DA322426-C37C-4909-A99D-16B05E7FA498}.Release|x64.ActiveCfg = Release|x64 - {DA322426-C37C-4909-A99D-16B05E7FA498}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = false - EndGlobalSection -EndGlobal diff --git a/icu4c/source/test/letest/gendata.vcxproj b/icu4c/source/test/letest/gendata.vcxproj deleted file mode 100644 index fcef1792dc81..000000000000 --- a/icu4c/source/test/letest/gendata.vcxproj +++ /dev/null @@ -1,240 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {DA322426-C37C-4909-A99D-16B05E7FA498} - - - - Application - false - MultiByte - v140 - - - Application - false - MultiByte - v140 - - - Application - false - MultiByte - v140 - - - Application - false - MultiByte - v140 - - - - - - - <_ProjectFileVersion>10.0.30319.1 - .\x86\Debug\ - .\x86\Debug\ - true - .\x64\Debug\ - .\x64\Debug\ - true - .\x86\Release\ - .\x86\Release\ - false - .\x64\Release\ - .\x64\Release\ - false - - - - .\x86\Debug/gendata.tlb - - - Disabled - ..\..\..\include\layout;..\..\..\include;..\..\common;..\..\layout;..\..\tools\ctestfw;..\..\tools\toolutil;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;LE_USE_CMEMORY;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - true - - - .\x86\Debug/gendata.pch - .\x86\Debug/ - .\x86\Debug/ - .\x86\Debug/ - Level3 - true - EditAndContinue - Default - stdcpp17 - stdc11 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ..\..\..\lib\iculed.lib;..\..\..\lib\icuucd.lib;..\..\..\lib\icutud.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - .\x86\Debug/gendata.exe - true - true - .\x86\Debug/gendata.pdb - Console - - - - - - - X64 - .\x64\Debug/gendata.tlb - - - Disabled - ..\..\..\include\layout;..\..\..\include;..\..\common;..\..\layout;..\..\tools\ctestfw;..\..\tools\toolutil;%(AdditionalIncludeDirectories) - WIN64;WIN32;_DEBUG;_CONSOLE;LE_USE_CMEMORY;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - true - - - .\x64\Debug/gendata.pch - .\x64\Debug/ - .\x64\Debug/ - .\x64\Debug/ - Level3 - true - ProgramDatabase - Default - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ..\..\..\lib64\iculed.lib;..\..\..\lib64\icuucd.lib;..\..\..\lib64\icutud.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - .\x64\Debug/gendata.exe - true - true - .\x64\Debug/gendata.pdb - Console - - - MachineX64 - - - - - .\x86\Release/gendata.tlb - - - OnlyExplicitInline - ..\..\..\include\layout;..\..\..\include;..\..\common;..\..\layout;..\..\tools\ctestfw;..\..\tools\toolutil;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;LE_USE_CMEMORY;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) - true - MultiThreaded - true - true - - - .\x86\Release/gendata.pch - .\x86\Release/ - .\x86\Release/ - .\x86\Release/ - Level3 - true - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ..\..\..\lib\icule.lib;..\..\..\lib\icuuc.lib;..\..\..\lib\icutu.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - .\x86\Release/gendata.exe - true - .\x86\Release/gendata.pdb - Console - - - - - - - X64 - .\x64\Release/gendata.tlb - - - OnlyExplicitInline - ..\..\..\include\layout;..\..\..\include;..\..\common;..\..\layout;..\..\tools\ctestfw;..\..\tools\toolutil;%(AdditionalIncludeDirectories) - WIN64;WIN32;NDEBUG;_CONSOLE;LE_USE_CMEMORY;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) - true - MultiThreaded - true - true - - - .\x64\Release/gendata.pch - .\x64\Release/ - .\x64\Release/ - .\x64\Release/ - Level3 - true - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ..\..\..\lib64\icule.lib;..\..\..\lib64\icuuc.lib;..\..\..\lib64\icutu.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - .\x64\Release/gendata.exe - true - .\x64\Release/gendata.pdb - Console - - - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - diff --git a/icu4c/source/test/letest/gendata.vcxproj.filters b/icu4c/source/test/letest/gendata.vcxproj.filters deleted file mode 100644 index 1113fe6a9ee9..000000000000 --- a/icu4c/source/test/letest/gendata.vcxproj.filters +++ /dev/null @@ -1,60 +0,0 @@ - - - - - {8a1204a1-4a7b-4382-a68f-92343fbfe65c} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {b3d65edb-0bf9-44db-a4b9-68db05f8431c} - h;hpp;hxx;hm;inl - - - {b4329bb6-c1a3-4c0c-9c09-317bcc35981a} - ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - \ No newline at end of file diff --git a/icu4c/source/test/letest/gendata.xml b/icu4c/source/test/letest/gendata.xml deleted file mode 100644 index a44c15ec8df9..000000000000 --- a/icu4c/source/test/letest/gendata.xml +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - - श्रीमद् भगवद्गीता अध्याय अर्जुन विषाद योग धृतराष्ट्र उवाचृ धर्मक्षेत्रे कुरुक्षेत्रे समवेता युयुत्सवः मामकाः पाण्डवाश्चैव किमकुर्वत संजव - - - - - أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية - - - - - أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية - - - - - บทที่๑พายุไซโคลนโดโรธีอาศัยอยู่ท่ามกลางทุ่งใหญ่ในแคนซัสกับลุงเฮนรีชาวไร่และป้าเอ็มภรรยาชาวไร่บ้านของพวกเขาหลังเล็กเพราะไม้สร้างบ้านต้องขนมาด้วยเกวียนเป็นระยะทางหลายไมล์ - - - - - أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية - - - - - ुं ं॑ - - - - - कँ कं कः क॑ क॒ कँ॑ कं॒ कँंः क॒॑ - - - - - रू क़् क्ष क्कि क्रि ट्रि हिन्दी र्क्रिं क्षत्रज्ञत्रक्ष श्र थ्र श्र कके र्कें केूकूेकेृ र्कू क़ क क् क्ष क्ष् क्ष्क ज़ ज ज् ज्ञ ज्ञ् ज्ञ्क र्क र्क्क ड्र क्क क़्क क़्क क़् क्ष्क क्ष् त्र्क द्द कि हि रू रु र्के र्कं क् कु के द्द्द क़्ष क्ष र्क्षे द्दत्र्क ज्ञ क्त्व ज्ञ्क र्कँ र्किँ र्केँ र्क्रिँ हिंदी ह्मिह्यिखि ङ्क ङ्म ङ्क्त ङ्ख ङ्ग ङ्घ ङ्क्ष ङ्क्ष्व ङ्क्ष्य र्क्त्वि र्र्र्र कै के कु कू कृ कॅ कॆ हु हू हॆ है हे - - - - - 中华人民共和国 台湾 中華人民共和國 臺灣 - - - - - 中华人民共和国 台湾 中華人民共和國 臺灣 - - - - - 中华人民共和国 台湾 中華人民共和國 臺灣 - - - - - 中华人民共和国 台湾 中華人民共和國 臺灣 - - - - - शङ़ु - - - - - शङ़ु - - - - - क्ष र्क क्‍ष र्‍क - - - - - 마만만 - - - - - מָשְׁכֵנִיאַחֲרֶיךָנָּרוּצָההֱבִיאַנִיהַמֶּלֶךְחֲדָרָיונָגִילָהוְנִשְׂמְחָהבָּךְנַזְכִּירָהדֹדֶיךָמִיַּיִןמֵישָׁרִיםאֲהֵבוּךָ - - - - - Ţhiş iş a ţeşţ. - - - - - Ţhiş iş a ţeşţ. - - - - - فتح بینچ خلیج شیخ پہنچ - - - - - ഹോം - - - - - റ്1്',s - - - - - ണു് - - - - - 中華人民共和國 臺灣 - - - - - ప్రకాష్ - - - - - บทที่๑พายุไซโคลนโดโรธีอาศัยอยู่ท่ามกลางทุ่งใหญ่ในแคนซัสกับลุงเฮนรีชาวไร่และป้าเอ็มภรรยาชาวไร่บ้านของพวกเขาหลังเล็กเพราะไม้สร้างบ้านต้องขนมาด้วยเกวียนเป็นระยะทางหลายไมล์ - - - - - ක්‍රෙ ක්‍යෙ ක්‍ෂෙ ක්‍ෂ්‍යෙ ක්ෂෙ කර්‍මෙ ස්ට්‍රේ ස‍්සෙ ස්ස - - - - - ‭ﻲﺑﺮﻌﻟﺎﺑ - - - - - ﻲﺑﺮﻌﻟﺎﺑ - - - - - ḤḤ - - - - - र्य र्‌य - - - - - The quick brown fox jumps over the lazy dog. • Jackdaws love my big sphinx of quartz - - - - - Pack my bags with six dozen liquor jugs - - - - - Li kien kien, li kieku kieku. - - - - Il-Mistoqsija oħt l-għerf. - - - - - ༄༅།། ཏིན་ཏིན་གྱི་དཔའ་རྩལ - - - - - ᄊᆞᆷ ᄒᆞᆫ글 ᄀᆞᇹ ᄫᆞᆼ - - - - - के े - - - - - अँग्रेज़ी - - - - - To WAVA is easy, it’s the 1,452 other glyphs in the office I’m worried about! - - - - To WAVA is easy, it’s the 1,452 other glyphs in the office I’m worried about! - - - - Orient Bug - - - diff --git a/icu4c/source/test/letest/letest.cpp b/icu4c/source/test/letest/letest.cpp index 67d02a5cd96c..287862a64e5e 100644 --- a/icu4c/source/test/letest/letest.cpp +++ b/icu4c/source/test/letest/letest.cpp @@ -16,7 +16,6 @@ #include "unicode/utypes.h" #include "unicode/uclean.h" #include "unicode/uchar.h" -#include "unicode/unistr.h" #include "unicode/uscript.h" #include "unicode/putil.h" #include "unicode/ctest.h" @@ -28,13 +27,10 @@ #include "layout/ParagraphLayout.h" #include "layout/RunArrays.h" -#include "PortableFontInstance.h" #include "SimpleFontInstance.h" -#include "letsutil.h" #include "letest.h" -#include "xmlparser.h" #include "putilimp.h" // for uprv_getUTCtime() #include @@ -42,8 +38,6 @@ U_NAMESPACE_USE -#define CH_COMMA 0x002C - U_CDECL_BEGIN static void U_CALLCONV ParamTest() @@ -320,416 +314,6 @@ static void U_CALLCONV AccessTest() } U_CDECL_END -le_bool compareResults(const char *testID, TestResult *expected, TestResult *actual) -{ - /* NOTE: we'll stop on the first failure 'cause once there's one error, it may cascade... */ - if (actual->glyphCount != expected->glyphCount) { - log_knownIssue("ICU-22628", - "Test %s: incorrect glyph count: expected %d, got %d\n", - testID, expected->glyphCount, actual->glyphCount); - return false; - } - - le_int32 i; - - for (i = 0; i < actual->glyphCount; i += 1) { - if (actual->glyphs[i] != expected->glyphs[i]) { - log_err("Test %s: incorrect id for glyph %d: expected %4X, got %4X\n", - testID, i, expected->glyphs[i], actual->glyphs[i]); - return false; - } - } - - for (i = 0; i < actual->glyphCount; i += 1) { - if (actual->indices[i] != expected->indices[i]) { - log_err("Test %s: incorrect index for glyph %d: expected %8X, got %8X\n", - testID, i, expected->indices[i], actual->indices[i]); - return false; - } - } - - for (i = 0; i <= actual->glyphCount; i += 1) { - double xError = uprv_fabs(actual->positions[i * 2] - expected->positions[i * 2]); - - if (xError > 0.0001) { - log_err("Test %s: incorrect x position for glyph %d: expected %f, got %f\n", - testID, i, expected->positions[i * 2], actual->positions[i * 2]); - return false; - } - - double yError = uprv_fabs(actual->positions[i * 2 + 1] - expected->positions[i * 2 + 1]); - - if (yError < 0) { - yError = -yError; - } - - if (yError > 0.0001) { - log_err("Test %s: incorrect y position for glyph %d: expected %f, got %f\n", - testID, i, expected->positions[i * 2 + 1], actual->positions[i * 2 + 1]); - return false; - } - } - - return true; -} - -static void checkFontVersion(PortableFontInstance *fontInstance, const char *testVersionString, - le_uint32 testChecksum, const char *testID) -{ - le_uint32 fontChecksum = fontInstance->getFontChecksum(); - - if (fontChecksum != testChecksum) { - const char *fontVersionString = fontInstance->getNameString(NAME_VERSION_STRING, - PLATFORM_MACINTOSH, MACINTOSH_ROMAN, MACINTOSH_ENGLISH); - const LEUnicode *uFontVersionString = nullptr; - - // The standard recommends that the Macintosh Roman/English name string be present, but - // if it's not, try the Microsoft Unicode/English string. - if (fontVersionString == nullptr) { - uFontVersionString = fontInstance->getUnicodeNameString(NAME_VERSION_STRING, - PLATFORM_MICROSOFT, MICROSOFT_UNICODE_BMP, MICROSOFT_ENGLISH); - } - - log_info("Test %s: this may not be the same font used to generate the test data.\n", testID); - - if (uFontVersionString != nullptr) { - log_info("Your font's version string is \"%S\"\n", uFontVersionString); - fontInstance->deleteNameString(uFontVersionString); - } else { - log_info("Your font's version string is \"%s\"\n", fontVersionString); - fontInstance->deleteNameString(fontVersionString); - } - - log_info("The expected version string is \"%s\"\n", testVersionString); - log_info("If you see errors, they may be due to the version of the font you're using.\n"); - } -} - -/* Returns the path to icu/source/test/testdata/ */ -const char *getSourceTestData() { - const char *srcDataDir = nullptr; -#ifdef U_TOPSRCDIR - srcDataDir = U_TOPSRCDIR U_FILE_SEP_STRING "test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING; -#else - srcDataDir = ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING "test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING; - FILE *f = fopen(".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING "test" U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING "rbbitst.txt", "r"); - - if (f != nullptr) { - /* We're in icu/source/test/letest/ */ - fclose(f); - } else { - /* We're in icu/source/test/letest/(Debug|Release) */ - srcDataDir = ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING ".." U_FILE_SEP_STRING "test" - U_FILE_SEP_STRING "testdata" U_FILE_SEP_STRING; - } -#endif - - return srcDataDir; -} - -const char *getPath(char buffer[2048], const char *filename) { - const char *testDataDirectory = getSourceTestData(); - - strcpy(buffer, testDataDirectory); - strcat(buffer, filename); - - return buffer; -} - -le_uint32 *getHexArray(const UnicodeString &numbers, int32_t &arraySize) -{ - int32_t offset = -1; - - arraySize = 1; - while((offset = numbers.indexOf(CH_COMMA, offset + 1)) >= 0) { - arraySize += 1; - } - - le_uint32 *array = NEW_ARRAY(le_uint32, arraySize); - char number[16]; - le_int32 count = 0; - le_int32 start = 0, end = 0; - le_int32 len = 0; - - // trim leading whitespace - while(u_isUWhiteSpace(numbers[start])) { - start += 1; - } - - while((end = numbers.indexOf(CH_COMMA, start)) >= 0) { - len = numbers.extract(start, end - start, number, ARRAY_SIZE(number), US_INV); - number[len] = '\0'; - start = end + 1; - - sscanf(number, "%x", &array[count++]); - - // trim whitespace following the comma - while(u_isUWhiteSpace(numbers[start])) { - start += 1; - } - } - - // trim trailing whitespace - end = numbers.length(); - while(u_isUWhiteSpace(numbers[end - 1])) { - end -= 1; - } - - len = numbers.extract(start, end - start, number, ARRAY_SIZE(number), US_INV); - number[len] = '\0'; - sscanf(number, "%x", &array[count]); - - return array; -} - -float *getFloatArray(const UnicodeString &numbers, int32_t &arraySize) -{ - int32_t offset = -1; - - arraySize = 1; - while((offset = numbers.indexOf(CH_COMMA, offset + 1)) >= 0) { - arraySize += 1; - } - - float *array = NEW_ARRAY(float, arraySize); - char number[32]; - le_int32 count = 0; - le_int32 start = 0, end = 0; - le_int32 len = 0; - - // trim leading whitespace - while(u_isUWhiteSpace(numbers[start])) { - start += 1; - } - - while((end = numbers.indexOf(CH_COMMA, start)) >= 0) { - len = numbers.extract(start, end - start, number, ARRAY_SIZE(number), US_INV); - number[len] = '\0'; - start = end + 1; - - sscanf(number, "%f", &array[count++]); - - // trim whiteapce following the comma - while(u_isUWhiteSpace(numbers[start])) { - start += 1; - } - } - - while(u_isUWhiteSpace(numbers[start])) { - start += 1; - } - - // trim trailing whitespace - end = numbers.length(); - while(u_isUWhiteSpace(numbers[end - 1])) { - end -= 1; - } - - len = numbers.extract(start, end - start, number, ARRAY_SIZE(number), US_INV); - number[len] = '\0'; - sscanf(number, "%f", &array[count]); - - return array; -} - -LEFontInstance *openFont(const char *fontName, const char *checksum, const char *version, const char *testID) -{ - char path[2048]; - PortableFontInstance *font; - LEErrorCode fontStatus = LE_NO_ERROR; - - - font = new PortableFontInstance(getPath(path, fontName), 12, fontStatus); - - if (LE_FAILURE(fontStatus)) { - log_info("Test %s: can't open font %s - test skipped.\n", testID, fontName); - delete font; - return nullptr; - } else { - le_uint32 cksum = 0; - - sscanf(checksum, "%x", &cksum); - - checkFontVersion(font, version, cksum, testID); - } - - return font; -} - -U_CDECL_BEGIN -static void U_CALLCONV DataDrivenTest() -{ -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - UErrorCode status = U_ZERO_ERROR; - char path[2048]; - const char *testFilePath = getPath(path, "letest.xml"); - - UXMLParser *parser = UXMLParser::createParser(status); - UXMLElement *root = parser->parseFile(testFilePath, status); - - if (root == nullptr) { - log_err("Could not open the test data file: %s\n", testFilePath); - delete parser; - return; - } - - UnicodeString test_case = UNICODE_STRING_SIMPLE("test-case"); - UnicodeString test_text = UNICODE_STRING_SIMPLE("test-text"); - UnicodeString test_font = UNICODE_STRING_SIMPLE("test-font"); - UnicodeString result_glyphs = UNICODE_STRING_SIMPLE("result-glyphs"); - UnicodeString result_indices = UNICODE_STRING_SIMPLE("result-indices"); - UnicodeString result_positions = UNICODE_STRING_SIMPLE("result-positions"); - - // test-case attributes - UnicodeString id_attr = UNICODE_STRING_SIMPLE("id"); - UnicodeString script_attr = UNICODE_STRING_SIMPLE("script"); - UnicodeString lang_attr = UNICODE_STRING_SIMPLE("lang"); - - // test-font attributes - UnicodeString name_attr = UNICODE_STRING_SIMPLE("name"); - UnicodeString ver_attr = UNICODE_STRING_SIMPLE("version"); - UnicodeString cksum_attr = UNICODE_STRING_SIMPLE("checksum"); - - const UXMLElement *testCase; - int32_t tc = 0; - - while((testCase = root->nextChildElement(tc)) != nullptr) { - if (testCase->getTagName().compare(test_case) == 0) { - char *id = getCString(testCase->getAttribute(id_attr)); - char *script = getCString(testCase->getAttribute(script_attr)); - char *lang = getCString(testCase->getAttribute(lang_attr)); - LEFontInstance *font = nullptr; - const UXMLElement *element; - int32_t ec = 0; - int32_t charCount = 0; - int32_t typoFlags = 3; // kerning + ligatures... - UScriptCode scriptCode; - le_int32 languageCode = -1; - UnicodeString text, glyphs, indices, positions; - int32_t glyphCount = 0, indexCount = 0, positionCount = 0; - TestResult expected = {0, nullptr, nullptr, nullptr}; - TestResult actual = {0, nullptr, nullptr, nullptr}; - LEErrorCode success = LE_NO_ERROR; - LayoutEngine *engine = nullptr; - - uscript_getCode(script, &scriptCode, 1, &status); - if (LE_FAILURE(status)) { - log_err("invalid script name: %s.\n", script); - goto free_c_strings; - } - - if (lang != nullptr) { - languageCode = getLanguageCode(lang); - - if (languageCode < 0) { - log_err("invalid language name: %s.\n", lang); - goto free_c_strings; - } - } - - while((element = testCase->nextChildElement(ec)) != nullptr) { - UnicodeString tag = element->getTagName(); - - // TODO: make sure that each element is only used once. - if (tag.compare(test_font) == 0) { - char *fontName = getCString(element->getAttribute(name_attr)); - char *fontVer = getCString(element->getAttribute(ver_attr)); - char *fontCksum = getCString(element->getAttribute(cksum_attr)); - - font = openFont(fontName, fontCksum, fontVer, id); - freeCString(fontCksum); - freeCString(fontVer); - freeCString(fontName); - - if (font == nullptr) { - // warning message already displayed... - goto free_c_strings; - } - } else if (tag.compare(test_text) == 0) { - text = element->getText(true); - charCount = text.length(); - } else if (tag.compare(result_glyphs) == 0) { - glyphs = element->getText(true); - } else if (tag.compare(result_indices) == 0) { - indices = element->getText(true); - } else if (tag.compare(result_positions) == 0) { - positions = element->getText(true); - } else { - // an unknown tag... - char *cTag = getCString(&tag); - - log_info("Test %s: unknown element with tag \"%s\"\n", id, cTag); - freeCString(cTag); - } - } - - // TODO: make sure that the font, test-text, result-glyphs, result-indices and result-positions - // have all been provided - if (font == nullptr) { - LEErrorCode fontStatus = LE_NO_ERROR; - - font = new SimpleFontInstance(12, fontStatus); - typoFlags |= 0x80000000L; // use CharSubstitutionFilter... - } - - expected.glyphs = (LEGlyphID *) getHexArray(glyphs, glyphCount); - expected.indices = (le_int32 *) getHexArray(indices, indexCount); - expected.positions = getFloatArray(positions, positionCount); - - expected.glyphCount = glyphCount; - - if (glyphCount < charCount || indexCount != glyphCount || positionCount < glyphCount * 2 + 2) { - log_err("Test %s: inconsistent input data: charCount = %d, glyphCount = %d, indexCount = %d, positionCount = %d\n", - id, charCount, glyphCount, indexCount, positionCount); - goto free_expected; - }; - - engine = LayoutEngine::layoutEngineFactory(font, scriptCode, languageCode, typoFlags, success); - - if (LE_FAILURE(success)) { - log_err("Test %s: could not create a LayoutEngine.\n", id); - goto free_expected; - } - - actual.glyphCount = engine->layoutChars(text.getBuffer(), 0, charCount, charCount, getRTL(text), 0, 0, success); - - actual.glyphs = NEW_ARRAY(LEGlyphID, actual.glyphCount); - actual.indices = NEW_ARRAY(le_int32, actual.glyphCount); - actual.positions = NEW_ARRAY(float, actual.glyphCount * 2 + 2); - - engine->getGlyphs(actual.glyphs, success); - engine->getCharIndices(actual.indices, success); - engine->getGlyphPositions(actual.positions, success); - - compareResults(id, &expected, &actual); - - DELETE_ARRAY(actual.positions); - DELETE_ARRAY(actual.indices); - DELETE_ARRAY(actual.glyphs); - - delete engine; - - log_verbose("OK - %4d glyphs: %s\n", actual.glyphCount, id); -free_expected: - DELETE_ARRAY(expected.positions); - DELETE_ARRAY(expected.indices); - DELETE_ARRAY(expected.glyphs); - - delete font; - -free_c_strings: - freeCString(lang); - freeCString(script); - freeCString(id); - } - } - - delete root; - delete parser; -#endif -} -U_CDECL_END - U_CDECL_BEGIN /* * From ticket:5923: @@ -965,7 +549,6 @@ static void addAllTests(TestNode **root) addTest(root, &ParamTest, "api/ParameterTest"); addTest(root, &FactoryTest, "api/FactoryTest"); addTest(root, &AccessTest, "layout/AccessTest"); - addTest(root, &DataDrivenTest, "layout/DataDrivenTest"); addTest(root, &GlyphToCharTest, "paragraph/GlyphToCharTest"); } diff --git a/icu4c/source/test/letest/letest.h b/icu4c/source/test/letest/letest.h index 18e1fb1e2672..c3a42b81e125 100644 --- a/icu4c/source/test/letest/letest.h +++ b/icu4c/source/test/letest/letest.h @@ -16,35 +16,9 @@ #ifndef __LETEST_H #define __LETEST_H - -#include "layout/LETypes.h" -#include "unicode/ctest.h" - #include -#include - -U_NAMESPACE_USE - -#define ARRAY_SIZE(array) (sizeof array / sizeof array[0]) - -#define ARRAY_COPY(dst, src, count) memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0]) #define NEW_ARRAY(type,count) (type *) malloc((count) * sizeof(type)) - #define DELETE_ARRAY(array) free((void *) (array)) -#define GROW_ARRAY(array,newSize) realloc((void *) (array), (newSize) * sizeof (array)[0]) - -struct TestResult -{ - le_int32 glyphCount; - LEGlyphID *glyphs; - le_int32 *indices; - float *positions; -}; - -#ifndef __cplusplus -typedef struct TestResult TestResult; -#endif - #endif diff --git a/icu4c/source/test/letest/letest.vcxproj b/icu4c/source/test/letest/letest.vcxproj index de5af377ff68..dd788dec5756 100644 --- a/icu4c/source/test/letest/letest.vcxproj +++ b/icu4c/source/test/letest/letest.vcxproj @@ -220,20 +220,11 @@ - - - - - - - - - diff --git a/icu4c/source/test/letest/letest.vcxproj.filters b/icu4c/source/test/letest/letest.vcxproj.filters index 0674192a055c..5ab6ea8903c0 100644 --- a/icu4c/source/test/letest/letest.vcxproj.filters +++ b/icu4c/source/test/letest/letest.vcxproj.filters @@ -15,44 +15,17 @@ - - Source Files - - - Source Files - Source Files - - Source Files - - - Source Files - Source Files - - Header Files - - - Header Files - Header Files - - Header Files - - - Header Files - - - Header Files - Header Files diff --git a/icu4c/source/test/letest/letsutil.cpp b/icu4c/source/test/letest/letsutil.cpp deleted file mode 100644 index b61df3ec2f57..000000000000 --- a/icu4c/source/test/letest/letsutil.cpp +++ /dev/null @@ -1,101 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * - * Copyright (C) 1999-2014, International Business Machines - * Corporation and others. All Rights Reserved. - * - ******************************************************************************* - * file name: letsutil.cpp - * - * created on: 04/25/2006 - * created by: Eric R. Mader - */ - -#include "unicode/utypes.h" -#include "unicode/unistr.h" -#include "unicode/ubidi.h" - -#include "layout/LETypes.h" -#include "layout/LEScripts.h" -#include "layout/LayoutEngine.h" -#include "layout/LELanguages.h" - -#include "letest.h" -#include "letsutil.h" - -U_NAMESPACE_USE - -char *getCString(const UnicodeString *uString) -{ - if (uString == nullptr) { - return nullptr; - } - - le_int32 uLength = uString->length(); - le_int32 cLength = uString->extract(0, uLength, nullptr, 0, US_INV); - char *cString = NEW_ARRAY(char, cLength + 1); - - uString->extract(0, uLength, cString, cLength, US_INV); - cString[cLength] = '\0'; - - return cString; -} - -char *getUTF8String(const UnicodeString *uString) -{ - if (uString == nullptr) { - return nullptr; - } - - le_int32 uLength = uString->length(); - le_int32 cLength = uString->extract(0, uLength, nullptr, 0, "UTF-8"); - char *cString = NEW_ARRAY(char, cLength + 1); - - uString->extract(0, uLength, cString, cLength, "UTF-8"); - - cString[cLength] = '\0'; - - return cString; -} - -void freeCString(char *cString) -{ - DELETE_ARRAY(cString); -} - -le_bool getRTL(const UnicodeString &text) -{ - UBiDiLevel level = 0; - UErrorCode status = U_ZERO_ERROR; - le_int32 charCount = text.length(); - le_int32 limit = -1; - UBiDi *ubidi = ubidi_openSized(charCount, 0, &status); - - ubidi_setPara(ubidi, text.getBuffer(), charCount, UBIDI_DEFAULT_LTR, nullptr, &status); - - // TODO: Should check that there's only a single logical run... - ubidi_getLogicalRun(ubidi, 0, &limit, &level); - - ubidi_close(ubidi); - - return level & 1; -} - -le_int32 getLanguageCode(const char *lang) -{ - if (strlen(lang) != 3) { - return -1; - } - - if (!strcmp(lang, "JAN")) return janLanguageCode; - if (!strcmp(lang, "KOR")) return korLanguageCode; - if (!strcmp(lang, "ZHT")) return zhtLanguageCode; - if (!strcmp(lang, "ZHS")) return zhsLanguageCode; - if (!strcmp(lang, "HIN")) return hinLanguageCode; - if (!strcmp(lang, "MAR")) return marLanguageCode; - if (!strcmp(lang, "ROM")) return romLanguageCode; - - return -1; -} diff --git a/icu4c/source/test/letest/letsutil.h b/icu4c/source/test/letest/letsutil.h deleted file mode 100644 index 73722cc94ee0..000000000000 --- a/icu4c/source/test/letest/letsutil.h +++ /dev/null @@ -1,36 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/* - ******************************************************************************* - * - * Copyright (C) 1999-2014, International Business Machines - * Corporation and others. All Rights Reserved. - * - ******************************************************************************* - * file name: letsutil.h - * - * created on: 04/25/2006 - * created by: Eric R. Mader - */ - -#ifndef __LETSUTIL_H -#define __LETSUTIL_H - -#include "unicode/utypes.h" -#include "unicode/unistr.h" -#include "unicode/ubidi.h" - -#include "layout/LETypes.h" -#include "layout/LEScripts.h" -#include "layout/LayoutEngine.h" -#include "layout/LELanguages.h" - -#include "letest.h" - -char *getCString(const UnicodeString *uString); -char *getUTF8String(const UnicodeString *uString); -void freeCString(char *cString); -le_bool getRTL(const UnicodeString &text); -le_int32 getLanguageCode(const char *lang); - -#endif diff --git a/icu4c/source/test/letest/readme.html b/icu4c/source/test/letest/readme.html deleted file mode 100644 index 73d9d7731df6..000000000000 --- a/icu4c/source/test/letest/readme.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - -Readme file for letest and gendata - - -

What are letest and gendata?

-letest is a test program that you can use to verify the basic -functionality of the ICU LayoutEngine. It tests the LayoutEngine's -API and reads an XML file that contains test cases to test some of -the features of the LayoutEngine. These test cases are not -comprehensive, but they do test the most important features of - the LayoutEngine. When you have successfully run letest, you -can use the ICU LayoutEngine in you application knowing that the -basic functionality is working correctly.
-

gendata is a program that is used by the ICU team to build the -file letest.xml which contains the test cases. Unless you have -changed your copy of the LayoutEngine and want to validate the -changes on other platforms, there's no reason for you to run this -program.

-

(The ICU team first runs a Windows application which uses the -ICU LayoutEngine to display the text that letest uses. Once it has -been verified that the text is displayed correctly, gendata is run -to produce letest.xml, and then letest is run on Windows to verify -that letest still works with the new data.)

-

How do I build letest?

-First, you need to build ICU, including the LayoutEngine.  -

On Windows, letest is part of the allinone project, so a normal -build of ICU will also build letest. On UNIX systems, connect to -<top-build-dir>/test/letest and do "make all" .

-

How do I run letest?

-Before you can run letest, you'll need to get the fonts it uses. -For legal reasons, we can't include most of them with ICU, but you -can download them from the web. To do this, you'll need access to a -computer running Windows. All of the fonts should be stored in -<icu>/source/test/testdata. Here's how to get the fonts: -

Download a recent version of the Java 2 Platform, Standard -Edition (J2SE) from java.sun.com. -Click on the "Download" button for the version of Java that you -want to download. The page offers both JDKs and JREs. (The JRE is -sufficient for letest.) The download page will have a link to the -license agreement. Be sure to read and understand the license -agreement, and then click on the Accept button. Download the -package and install it. You'll need one font. On Windows, it will -be in, for example, "C:\Program Files\Java\jdk1.6.0\jre\lib\fonts". -The file you want is "LucidaSansRegular.ttf". Copy this file into -the directory from which you'll run letest.

-

Next is the Hindi font. Go to the NCST site and download -raghu.ttf. -When you hit the DOWNLOAD button on the page, it will open another -window which contains a disclaimer and a license agreement. Be sure -that you understand and agree to all of this before you download -the font. You can download raghu.ttf into the directory from which -you'll run letest.

-

Then download the Thai font. Go to into-asia.com -and click on the link for the Angsana font. This will download a -.ZIP file. Extract the font file, angsd___.ttf, into the directory -from which you will run letest.

-

There's still one more font to get, the Code2000 Unicode font. -Go to James Kass' Unicode -Support In Your Browser page and click on the link that says -"Click Here to download Code2000 shareware demo Unicode font." This -will download a .ZIP file which contains CODE2000.TTF and -CODE2000.HTM. Expand this .ZIP file and put the CODE2000.TTF file -in the directory from which you'll run letest.

-

Note: The Code2000 font -is shareware. If you want to use it for longer than a trial period, -you should send a shareware fee to James. Directions for how to do -this are in CODE2000.HTM.

-

letest.xml references three other fonts:

-
    -
  • ARIALUNI.TTF is Microsoft's Arial Unicode MS font, which is -distributed with Microsoft Office and is licensed only for use on -the Windows operating system.
  • -
  • Devamt.ttf is a proprietary font which cannot be freely -downloaded.
  • -
  • TestFont1.otf is included with ICU.
  • -
-To run letest type CTRL+F5 in Visual Studio, or "make check" in -UNIX.  If everything's OK you should see something like this: -
 /
- /api/
-   ---[OK]  ---/api/ParameterTest
-   ---[OK]  ---/api/FactoryTest
- /layout/
-   ---[OK]  ---/layout/AccessTest
-   ---[OK]  ---/layout/DataDrivenTest
- /c_api/
-   ---[OK]  ---/c_api/ParameterTest
-   ---[OK]  ---/c_api/FactoryTest
- /c_layout/
-   ---[OK]  ---/c_layout/AccessTest
-   ---[OK]  ---/c_layout/DataDrivenTest
-
-[All tests passed successfully...]
-Elapsed Time: 00:00:00.351
-If letest cannot open a font, it will print a warning message and -skip the test. letest will also check the version of the font you -have to make sure it's the same one that was used to generate the -test case. If the version doesn't match, letest will print a -warning message and proceed with the test.
- - diff --git a/icu4c/source/test/letest/sfnt.h b/icu4c/source/test/letest/sfnt.h deleted file mode 100644 index 140e09484051..000000000000 --- a/icu4c/source/test/letest/sfnt.h +++ /dev/null @@ -1,451 +0,0 @@ -// © 2016 and later: Unicode, Inc. and others. -// License & terms of use: http://www.unicode.org/copyright.html -/*************************************************************************** -* -* Copyright (C) 1998-2013, International Business Machines -* Corporation and others. All Rights Reserved. -* -************************************************************************/ - -#ifndef __SFNT_H -#define __SFNT_H - -#include "layout/LETypes.h" - -U_NAMESPACE_USE - -#ifndef ANY_NUMBER -#define ANY_NUMBER 1 -#endif - -struct DirectoryEntry -{ - le_uint32 tag; - le_uint32 checksum; - le_uint32 offset; - le_uint32 length; -}; - -#ifndef __cplusplus -typedef struct DirectoryEntry DirectoryEntry; -#endif - -struct SFNTDirectory -{ - le_uint32 scalerType; - le_uint16 numTables; - le_uint16 searchRange; - le_uint16 entrySelector; - le_uint16 rangeShift; - DirectoryEntry tableDirectory[ANY_NUMBER]; -}; - -#ifndef __cplusplus -typedef struct SFNTDirectory SFNTDirectory; -#endif - - -struct CMAPEncodingSubtableHeader -{ - le_uint16 platformID; - le_uint16 platformSpecificID; - le_uint32 encodingOffset; -}; - -#ifndef __cplusplus -typedef struct CMAPEncodingSubtableHeader CMAPEncodingSubtableHeader; -#endif - -struct CMAPTable -{ - le_uint16 version; - le_uint16 numberSubtables; - CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER]; -}; - -#ifndef __cplusplus -typedef struct CMAPTable CMAPTable; -#endif - -struct CMAPEncodingSubtable -{ - le_uint16 format; - le_uint16 length; - le_uint16 language; -}; - -#ifndef __cplusplus -typedef struct CMAPEncodingSubtable CMAPEncodingSubtable; -#endif - -#ifdef __cplusplus -struct CMAPFormat0Encoding : CMAPEncodingSubtable -{ - le_uint8 glyphIndexArray[256]; -}; -#else -struct CMAPFormat0Encoding -{ - CMAPEncodingSubtable base; - - le_uint8 glyphIndexArray[256]; -}; - -typedef struct CMAPFormat0Encoding CMAPFormat0Encoding; -#endif - -struct CMAPFormat2Subheader -{ - le_uint16 firstCode; - le_uint16 entryCount; - le_int16 idDelta; - le_uint16 idRangeOffset; -}; - -#ifndef __cplusplus -typedef struct CMAPFormat2Subheader CMAPFormat2Subheader; -#endif - -#ifdef __cplusplus -struct CMAPFormat2Encoding : CMAPEncodingSubtable -{ - le_uint16 subHeadKeys[256]; - CMAPFormat2Subheader subheaders[ANY_NUMBER]; -}; -#else -struct CMAPFormat2Encoding -{ - CMAPEncodingSubtable base; - - le_uint16 subHeadKeys[256]; - CMAPFormat2Subheader subheaders[ANY_NUMBER]; -}; - -typedef struct CMAPFormat2Encoding CMAPFormat2Encoding; -#endif - -#ifdef __cplusplus -struct CMAPFormat4Encoding : CMAPEncodingSubtable -{ - le_uint16 segCountX2; - le_uint16 searchRange; - le_uint16 entrySelector; - le_uint16 rangeShift; - le_uint16 endCodes[ANY_NUMBER]; -/* - le_uint16 reservedPad; - le_uint16 startCodes[ANY_NUMBER]; - le_uint16 idDelta[ANY_NUMBER]; - le_uint16 idRangeOffset[ANY_NUMBER]; - le_uint16 glyphIndexArray[ANY_NUMBER]; -*/ -}; -#else -struct CMAPFormat4Encoding -{ - CMAPEncodingSubtable base; - - le_uint16 segCountX2; - le_uint16 searchRange; - le_uint16 entrySelector; - le_uint16 rangeShift; - le_uint16 endCodes[ANY_NUMBER]; -/* -// le_uint16 reservedPad; -// le_uint16 startCodes[ANY_NUMBER]; -// le_uint16 idDelta[ANY_NUMBER]; -// le_uint16 idRangeOffset[ANY_NUMBER]; -// le_uint16 glyphIndexArray[ANY_NUMBER]; -*/ -}; - -typedef struct CMAPFormat4Encoding CMAPFormat4Encoding; -#endif - -#ifdef __cplusplus -struct CMAPFormat6Encoding : CMAPEncodingSubtable -{ - le_uint16 firstCode; - le_uint16 entryCount; - le_uint16 glyphIndexArray[ANY_NUMBER]; -}; -#else -struct CMAPFormat6Encoding -{ - CMAPEncodingSubtable base; - - le_uint16 firstCode; - le_uint16 entryCount; - le_uint16 glyphIndexArray[ANY_NUMBER]; -}; - -typedef struct CMAPFormat6Encoding CMAPFormat6Encoding; -#endif - -struct CMAPEncodingSubtable32 -{ - le_uint32 format; - le_uint32 length; - le_uint32 language; -}; - -#ifndef __cplusplus -typedef struct CMAPEncodingSubtable32 CMAPEncodingSubtable32; -#endif - -struct CMAPGroup -{ - le_uint32 startCharCode; - le_uint32 endCharCode; - le_uint32 startGlyphCode; -}; - -#ifndef __cplusplus -typedef struct CMAPGroup CMAPGroup; -#endif - -#ifdef __cplusplus -struct CMAPFormat8Encoding : CMAPEncodingSubtable32 -{ - le_uint32 is32[65536/32]; - le_uint32 nGroups; - CMAPGroup groups[ANY_NUMBER]; -}; -#else -struct CMAPFormat8Encoding -{ - CMAPEncodingSubtable32 base; - - le_uint32 is32[65536/32]; - le_uint32 nGroups; - CMAPGroup groups[ANY_NUMBER]; -}; - -typedef struct CMAPFormat8Encoding CMAPFormat8Encoding; -#endif - -#ifdef __cplusplus -struct CMAPFormat10Encoding : CMAPEncodingSubtable32 -{ - le_uint32 startCharCode; - le_uint32 numCharCodes; - le_uint16 glyphs[ANY_NUMBER]; -}; -#else -struct CMAPFormat10Encoding -{ - CMAPEncodingSubtable32 base; - - le_uint32 startCharCode; - le_uint32 numCharCodes; - le_uint16 glyphs[ANY_NUMBER]; -}; - -typedef struct CMAPFormat10Encoding CMAPFormat10Encoding; -#endif - -#ifdef __cplusplus -struct CMAPFormat12Encoding : CMAPEncodingSubtable32 -{ - le_uint32 nGroups; - CMAPGroup groups[ANY_NUMBER]; -}; -#else -struct CMAPFormat12Encoding -{ - CMAPEncodingSubtable32 base; - - le_uint32 nGroups; - CMAPGroup groups[ANY_NUMBER]; -}; - -typedef struct CMAPFormat12Encoding CMAPFormat12Encoding; -#endif - -typedef le_int32 fixed; - -struct BigDate -{ - le_uint32 bc; - le_uint32 ad; -}; - -#ifndef __cplusplus -typedef struct BigDate BigDate; -#endif - -struct HEADTable -{ - fixed version; - fixed fontRevision; - le_uint32 checksumAdjustment; - le_uint32 magicNumber; - le_uint16 flags; - le_uint16 unitsPerEm; - BigDate created; - BigDate modified; - le_int16 xMin; - le_int16 yMin; - le_int16 xMax; - le_int16 yMax; - le_int16 lowestRecPPEM; - le_int16 fontDirectionHint; - le_int16 indexToLocFormat; - le_int16 glyphDataFormat; -}; - -#ifndef __cplusplus -typedef struct HEADTable HEADTable; -#endif - -struct MAXPTable -{ - fixed version; - le_uint16 numGlyphs; - le_uint16 maxPoints; - le_uint16 maxContours; - le_uint16 maxComponentPoints; - le_uint16 maxComponentContours; - le_uint16 maxZones; - le_uint16 maxTwilightPoints; - le_uint16 maxStorage; - le_uint16 maxFunctionDefs; - le_uint16 maxInstructionDefs; - le_uint16 maxStackElements; - le_uint16 maxSizeOfInstructions; - le_uint16 maxComponentElements; - le_uint16 maxComponentDepth; -}; - -#ifndef __cplusplus -typedef struct MAXPTable MAXPTable; -#endif - -struct HHEATable -{ - fixed version; - le_int16 ascent; - le_int16 descent; - le_int16 lineGap; - le_uint16 advanceWidthMax; - le_int16 minLeftSideBearing; - le_int16 minRightSideBearing; - le_int16 xMaxExtent; - le_int16 caretSlopeRise; - le_int16 caretSlopeRun; - le_int16 caretOffset; - le_int16 reserved1; - le_int16 reserved2; - le_int16 reserved3; - le_int16 reserved4; - le_int16 metricDataFormat; - le_uint16 numOfLongHorMetrics; -}; - -#ifndef __cplusplus -typedef struct HHEATable HHEATable; -#endif - -struct LongHorMetric -{ - le_uint16 advanceWidth; - le_int16 leftSideBearing; -}; - -#ifndef __cplusplus -typedef struct LongHorMetric LongHorMetric; -#endif - -struct HMTXTable -{ - LongHorMetric hMetrics[ANY_NUMBER]; /* ANY_NUMBER = numOfLongHorMetrics from hhea table */ -/* le_int16 leftSideBearing[ANY_NUMBER]; ANY_NUMBER = numGlyphs - numOfLongHorMetrics */ -}; - -#ifndef __cplusplus -typedef struct HMTXTable HMTXTable; -#endif - -enum PlatformID -{ - PLATFORM_UNICODE = 0, - PLATFORM_MACINTOSH = 1, - PLATFORM_ISO = 2, - PLATFORM_MICROSOFT = 3, - PLATFORM_CUSTOM = 4 -}; - -enum MacintoshEncodingID -{ - MACINTOSH_ROMAN = 0 -}; - -enum MacintoshLanguageID -{ - MACINTOSH_ENGLISH = 0 -}; - -enum MicrosoftEncodingID -{ - MICROSOFT_UNICODE_BMP = 1, - MICROSOFT_UNICODE_FULL = 10 -}; - -enum MicrosoftLanguageID -{ - MICROSOFT_ENGLISH = 0x409 -}; - -enum NameID -{ - NAME_COPYRIGHT_NOTICE = 0, - NAME_FONT_FAMILY = 1, - NAME_FONT_SUB_FAMILY = 2, - NAME_UNIQUE_FONT_ID = 3, - NAME_FULL_FONT_NAME = 4, - NAME_VERSION_STRING = 5, - NAME_POSTSCRIPT_NAME = 6, - NAME_TRADEMARK = 7, - NAME_MANUFACTURER = 8, - NAME_DESIGNER = 9, - NAME_DESCRIPTION = 10, - NAME_VENDOR_URL = 11, - NAME_DESIGNER_URL = 12, - NAME_LICENSE_DESCRIPTION = 13, - NAME_LICENSE_URL = 14, - NAME_RESERVED = 15, - NAME_PREFERRED_FAMILY = 16, - NAME_PREFERRED_SUB_FAMILY = 17, - NAME_COMPATIBLE_FULL = 18, - NAME_SAMPLE_TEXT = 19, - NAME_POSTSCRIPT_CID = 20 -}; - -struct NameRecord -{ - le_uint16 platformID; - le_uint16 encodingID; - le_uint16 languageID; - le_uint16 nameID; - le_uint16 length; - le_uint16 offset; -}; - -#ifndef __cplusplus -typedef struct NameRecord NameRecord; -#endif - -struct NAMETable -{ - le_uint16 version; - le_uint16 count; - le_uint16 stringOffset; - NameRecord nameRecords[ANY_NUMBER]; -}; - -#ifndef __cplusplus -typedef struct NAMETable NAMETable; -#endif - -#endif - diff --git a/icu4c/source/test/testdata/letest.xml b/icu4c/source/test/testdata/letest.xml deleted file mode 100644 index c77eec0e50b3..000000000000 --- a/icu4c/source/test/testdata/letest.xml +++ /dev/null @@ -1,1956 +0,0 @@ - - - - - - - - - - श्रीमद् भगवद्गीता अध्याय अर्जुन विषाद योग धृतराष्ट्र उवाचृ धर्मक्षेत्रे कुरुक्षेत्रे समवेता युयुत्सवः मामकाः पाण्डवाश्चैव किमकुर्वत संजव - - - 0x0000009E, 0x0000009A, 0x00000051, 0x00000222, 0x00000098, 0x00000091, 0x00000051, 0x00000003, - 0x00000097, 0x00000082, 0x0000009D, 0x000001A5, 0x0000FFFF, 0x0000FFFF, 0x00000222, 0x0000008F, - 0x00000221, 0x00000003, 0x0000005C, 0x000000DA, 0x0000FFFF, 0x00000099, 0x00000221, 0x00000099, - 0x00000003, 0x0000005C, 0x00000087, 0x000001D5, 0x0000005B, 0x0000FFFF, 0x00000093, 0x00000003, - 0x000001D2, 0x0000009D, 0x0000009F, 0x00000221, 0x00000091, 0x00000003, 0x00000099, 0x0000022A, - 0x00000082, 0x00000003, 0x00000092, 0x000001D9, 0x0000008F, 0x0000009A, 0x00000221, 0x000001B4, - 0x0000FFFF, 0x0000FFFF, 0x0000009A, 0x00000051, 0x00000003, 0x00000060, 0x0000009D, 0x00000221, - 0x00000085, 0x000001D9, 0x00000003, 0x00000092, 0x00000098, 0x0000005B, 0x0000FFFF, 0x000000A2, - 0x0000FFFF, 0x0000FFFF, 0x0000022F, 0x0000008F, 0x0000009A, 0x00000051, 0x0000022F, 0x00000003, - 0x00000080, 0x000001D5, 0x0000009A, 0x000001FD, 0x000000A2, 0x0000FFFF, 0x0000FFFF, 0x0000022F, - 0x0000008F, 0x0000009A, 0x00000051, 0x0000022F, 0x00000003, 0x000000A0, 0x00000098, 0x0000009D, - 0x0000022F, 0x0000008F, 0x00000221, 0x00000003, 0x00000099, 0x000001D5, 0x00000099, 0x000001D5, - 0x000000D7, 0x0000FFFF, 0x000000A0, 0x0000009D, 0x0000022C, 0x00000003, 0x00000098, 0x00000221, - 0x00000098, 0x00000080, 0x00000221, 0x0000022C, 0x00000003, 0x00000094, 0x00000221, 0x000000D6, - 0x0000FFFF, 0x0000008C, 0x0000009D, 0x00000221, 0x000001B1, 0x0000FFFF, 0x0000FFFF, 0x00000230, - 0x0000009D, 0x00000003, 0x000001D1, 0x00000080, 0x00000098, 0x00000080, 0x000001D5, 0x0000009D, - 0x0000005B, 0x0000FFFF, 0x0000008F, 0x00000003, 0x000000A0, 0x00000232, 0x00000087, 0x0000009D - - - - 0x00000000, 0x00000002, 0x00000001, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, - 0x00000018, 0x00000019, 0x0000001C, 0x0000001D, 0x0000001A, 0x0000001B, 0x0000001E, 0x0000001F, - 0x00000021, 0x00000020, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, - 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D, 0x0000002E, 0x0000002F, - 0x00000030, 0x00000031, 0x00000033, 0x00000032, 0x00000034, 0x00000035, 0x00000036, 0x00000037, - 0x00000038, 0x00000039, 0x0000003A, 0x0000003B, 0x0000003E, 0x0000003C, 0x0000003D, 0x0000003F, - 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x00000045, 0x00000044, 0x00000046, 0x00000047, - 0x00000048, 0x00000049, 0x0000004A, 0x0000004B, 0x0000004C, 0x0000004D, 0x0000004E, 0x0000004F, - 0x00000050, 0x00000052, 0x00000051, 0x00000053, 0x00000054, 0x00000055, 0x00000056, 0x00000057, - 0x00000058, 0x00000059, 0x0000005A, 0x0000005B, 0x0000005C, 0x0000005D, 0x0000005E, 0x0000005F, - 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, 0x00000065, 0x00000066, 0x00000067, - 0x00000068, 0x00000069, 0x0000006A, 0x0000006B, 0x0000006C, 0x0000006D, 0x0000006E, 0x0000006F, - 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077, - 0x00000078, 0x00000079, 0x0000007B, 0x0000007A, 0x0000007C, 0x0000007D, 0x0000007E, 0x00000081, - 0x0000007F, 0x00000080, 0x00000082, 0x00000083, 0x00000084, 0x00000085, 0x00000086, 0x00000087 - - - - 0.000000, 0.000000, 9.468750, 0.000000, 19.130859, -0.451172, 15.984375, 0.000000, - 19.640625, 0.000000, 29.109375, 0.000000, 40.177734, -0.451172, 37.078125, 0.000000, - 43.078125, 0.000000, 52.546875, 0.000000, 62.015625, 0.000000, 69.984375, 0.000000, - 77.953125, 0.000000, 77.953125, 0.000000, 77.953125, 0.000000, 81.609375, 0.000000, - 89.578125, 0.000000, 93.234375, 0.000000, 99.234375, 0.000000, 109.171875, 0.000000, - 116.437500, 0.000000, 116.437500, 0.000000, 125.906250, 0.000000, 129.562500, 0.000000, - 139.031250, 0.000000, 145.031250, 0.000000, 154.968750, 0.000000, 164.718750, -0.011719, - 164.718750, 0.263672, 164.437500, 0.000000, 164.437500, 0.000000, 173.906250, 0.000000, - 179.906250, 0.000000, 184.265625, 0.000000, 192.234375, 0.000000, 200.203125, 0.000000, - 203.859375, 0.000000, 211.828125, 0.000000, 217.828125, 0.000000, 227.296875, 0.000000, - 231.375000, 0.000000, 240.843750, 0.000000, 246.843750, 0.000000, 256.740234, -0.011719, - 256.312500, 0.000000, 264.281250, 0.000000, 270.796875, 0.000000, 274.453125, 0.000000, - 282.796875, 0.000000, 282.796875, 0.000000, 282.796875, 0.000000, 292.458984, -0.451172, - 289.312500, 0.000000, 295.312500, 0.000000, 303.281250, 0.000000, 311.250000, 0.000000, - 314.906250, 0.000000, 324.890625, -0.011719, 324.375000, 0.000000, 330.375000, 0.000000, - 339.843750, 0.000000, 349.675781, 0.263672, 349.312500, 0.000000, 349.312500, 0.000000, - 360.187500, 0.000000, 360.187500, 0.000000, 359.384766, 0.275391, 360.187500, 0.000000, - 368.156250, 0.000000, 377.818359, -0.451172, 372.996094, 0.263672, 374.671875, 0.000000, - 380.671875, 0.000000, 388.371094, -0.011719, 391.546875, 0.000000, 398.062500, 0.000000, - 399.421875, 0.000000, 410.296875, 0.000000, 410.296875, 0.000000, 409.494141, 0.275391, - 410.296875, 0.000000, 418.265625, 0.000000, 427.927734, -0.451172, 423.105469, 0.263672, - 424.781250, 0.000000, 430.781250, 0.000000, 440.250000, 0.000000, 449.718750, 0.000000, - 456.832031, 0.263672, 457.687500, 0.000000, 465.656250, 0.000000, 469.312500, 0.000000, - 475.312500, 0.000000, 484.921875, -0.011719, 484.781250, 0.000000, 494.390625, -0.011719, - 494.250000, 0.000000, 500.179688, 0.000000, 500.179688, 0.000000, 509.648438, 0.000000, - 517.617188, 0.000000, 521.976562, 0.000000, 527.976562, 0.000000, 537.445312, 0.000000, - 541.101562, 0.000000, 550.570312, 0.000000, 561.445312, 0.000000, 565.101562, 0.000000, - 569.460938, 0.000000, 575.460938, 0.000000, 583.429688, 0.000000, 587.085938, 0.000000, - 594.351562, 0.000000, 594.351562, 0.000000, 602.320312, 0.000000, 610.289062, 0.000000, - 613.945312, 0.000000, 624.820312, 0.000000, 624.820312, 0.000000, 624.691406, 0.263672, - 624.820312, 0.000000, 632.789062, 0.000000, 638.789062, 0.000000, 643.148438, 0.000000, - 654.023438, 0.000000, 663.492188, 0.000000, 671.191406, -0.011719, 674.367188, 0.000000, - 682.628906, 0.263672, 682.335938, 0.000000, 682.335938, 0.000000, 690.304688, 0.000000, - 696.304688, 0.000000, 705.140625, 0.439453, 705.773438, 0.000000, 715.242188, 0.000000, - 723.210938, 0.000000 - - - - - - - أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية - - - 0x0000CE28, 0x0000CE87, 0x0000CE41, 0x0000CE81, 0x0000CE42, 0x0000CE54, 0x0000CE73, 0x0000CE21, - 0x00000003, 0x0000CE65, 0x0000CE41, 0x0000CE22, 0x0000CE38, 0x0000CE78, 0x0000CE73, 0x0000CE21, - 0x00000003, 0x0000CE5E, 0x0000CE88, 0x0000CE78, 0x0000CE33, 0x00000003, 0x0000CE84, 0x0000CE74, - 0x0000CE5F, 0x00000003, 0x0000CE85, 0x0000CE82, 0x0000CE2C, 0x0000CE38, 0x0000CE87, 0x00000003, - 0x0000CE3E, 0x0000CE37, 0x0000CE21, 0x0000CE81, 0x00000003, 0x0000CE42, 0x0000CE88, 0x0000CE68, - 0x0000CE4C, 0x0000CE2B, 0x00000003, 0x0000CE75, 0x0000CE22, 0x0000CE5C, 0x0000CE7B, 0x00000003, - 0x0000CE3E, 0x0000CE33, 0x0000CE82, 0x0000CE87, 0x00000003, 0x0000CE76, 0x0000CE73, 0x0000CE81, - 0x00000003, 0x00000588, 0x0000CE65, 0x0000CE41, 0x0000CE22, 0x0000CE38, 0x0000CE78, 0x0000CE74, - 0x0000CE73, 0x00000003, 0x0000CE75, 0x0000CE22, 0x0000CE6B, 0x0000CE41, 0x0000FFFE, 0x0000CE8B, - 0x0000CE21, 0x00000003, 0x0000CE7D, 0x0000CE40, 0x0000CE7F, 0x00000003, 0x0000CE4E, 0x0000CE88, - 0x0000CE50, 0x0000CE3C, 0x0000CE2B, 0x0000CE81, 0x00000003, 0x0000CE42, 0x0000CE88, 0x0000CE68, - 0x0000CE4C, 0x0000CE2C, 0x0000CE74, 0x0000CE73, 0x00000003, 0x0000CE28, 0x0000CE78, 0x0000CE5C, - 0x0000CE7B, 0x0000FFFE, 0x0000CE8B, 0x0000CE21, 0x00000003, 0x0000CE29, 0x0000CE22, 0x0000CE20, - 0x0000CE77, 0x00000003, 0x0000CE6D, 0x0000CE22, 0x0000CE7C, 0x0000CE7F, 0x00000003, 0x0000CE79, - 0x0000CE22, 0x0000CE6F, 0x00000003, 0x00000588, 0x00000005, 0x0000CE3D, 0x0000CE82, 0x0000CE70, - 0x000005B5, 0x0000CE7B, 0x0000CE82, 0x0000CE87, 0x00000005, 0x00000003, 0x0000CE5D, 0x0000CE21, - 0x0000CE42, 0x0000CE2C, 0x0000CE3B, 0x0000CE21, 0x00000003, 0x0000CE72, 0x0000CE26, 0x0000CE6B, - 0x0000CE81, 0x00000003, 0x00000011, 0x0000CE22, 0x0000CE80, 0x0000CE7C, 0x0000CE77, 0x00000003, - 0x0000CE3E, 0x0000CE37, 0x0000CE21, 0x0000CE81, 0x00000003, 0x0000CE72, 0x0000CE70, 0x0000CE73, - 0x00000003, 0x0000CE22, 0x0000CE7C, 0x0000CE88, 0x0000CE60, 0x0000CE77, 0x00000003, 0x0000CE22, - 0x0000CE78, 0x0000CE6B, 0x0000CE41, 0x00000003, 0x0000CE86, 0x0000CE58, 0x0000CE60, 0x000005B4, - 0x0000CE2B, 0x00000003, 0x0000CE79, 0x0000CE17, 0x00000003, 0x0000CE3E, 0x0000CE60, 0x0000CE25, - 0x00000003, 0x0000CE83, 0x0000CE42, 0x0000CE3B, 0x0000FFFE, 0x0000CE8B, 0x0000CE21, 0x00000003, - 0x0000CE65, 0x0000CE41, 0x0000CE22, 0x0000CE38, 0x0000CE78, 0x0000CE73, 0x0000CE21, 0x0000CE81, - 0x00000003, 0x0000CE65, 0x0000CE42, 0x0000CE37, 0x0000FFFE, 0x0000CE8B, 0x0000CE21, 0x00000003, - 0x0000CE7A, 0x0000CE87, 0x0000CE44, 0x0000CE3C, 0x0000CE2C, 0x0000CE25, 0x00000003, 0x0000CE75, - 0x0000CE82, 0x0000CE6C, 0x0000CE2B, 0x0000CE81, 0x00000003, 0x00000588, 0x0000CE75, 0x0000CE22, - 0x0000CE6B, 0x0000CE41, 0x0000FFFE, 0x0000CE8B, 0x0000CE21, 0x00000003, 0x0000CE5E, 0x0000CE77, - 0x00000003, 0x0000CE56, 0x0000CE6C, 0x0000CE67, 0x00000003, 0x0000CE24, 0x0000CE88, 0x0000CE47, - 0x0000CE21, 0x0000CE82, 0x0000CE38, 0x0000CE73, 0x0000CE21, 0x00000003, 0x0000CE72, 0x0000CE77, - 0x0000CE22, 0x0000CE60, 0x0000CE2C, 0x0000CE2B, 0x00000003, 0x00000588, 0x0000CE22, 0x000005B0, - 0x0000CE47, 0x0000CE22, 0x0000CE47, 0x0000CE17 - - - - 0x000000FB, 0x000000FA, 0x000000F9, 0x000000F8, 0x000000F7, 0x000000F6, 0x000000F5, 0x000000F4, - 0x000000F3, 0x000000F2, 0x000000F1, 0x000000F0, 0x000000EF, 0x000000EE, 0x000000ED, 0x000000EC, - 0x000000EB, 0x000000EA, 0x000000E9, 0x000000E8, 0x000000E7, 0x000000E6, 0x000000E5, 0x000000E4, - 0x000000E3, 0x000000E2, 0x000000E1, 0x000000E0, 0x000000DF, 0x000000DE, 0x000000DD, 0x000000DC, - 0x000000DB, 0x000000DA, 0x000000D9, 0x000000D8, 0x000000D7, 0x000000D6, 0x000000D5, 0x000000D4, - 0x000000D3, 0x000000D2, 0x000000D1, 0x000000D0, 0x000000CF, 0x000000CE, 0x000000CD, 0x000000CC, - 0x000000CB, 0x000000CA, 0x000000C9, 0x000000C8, 0x000000C7, 0x000000C6, 0x000000C5, 0x000000C4, - 0x000000C3, 0x000000C2, 0x000000C1, 0x000000C0, 0x000000BF, 0x000000BE, 0x000000BD, 0x000000BC, - 0x000000BB, 0x000000BA, 0x000000B9, 0x000000B8, 0x000000B7, 0x000000B6, 0x000000B5, 0x000000B4, - 0x000000B3, 0x000000B2, 0x000000B1, 0x000000B0, 0x000000AF, 0x000000AE, 0x000000AD, 0x000000AC, - 0x000000AB, 0x000000AA, 0x000000A9, 0x000000A8, 0x000000A7, 0x000000A6, 0x000000A5, 0x000000A4, - 0x000000A3, 0x000000A2, 0x000000A1, 0x000000A0, 0x0000009F, 0x0000009E, 0x0000009D, 0x0000009C, - 0x0000009B, 0x0000009A, 0x00000099, 0x00000098, 0x00000097, 0x00000096, 0x00000095, 0x00000094, - 0x00000093, 0x00000092, 0x00000091, 0x00000090, 0x0000008F, 0x0000008E, 0x0000008D, 0x0000008C, - 0x0000008B, 0x0000008A, 0x00000089, 0x00000088, 0x00000087, 0x00000086, 0x00000085, 0x00000084, - 0x00000083, 0x00000082, 0x00000081, 0x00000080, 0x0000007F, 0x0000007E, 0x0000007D, 0x0000007C, - 0x0000007B, 0x0000007A, 0x00000079, 0x00000078, 0x00000077, 0x00000076, 0x00000075, 0x00000074, - 0x00000073, 0x00000072, 0x00000071, 0x00000070, 0x0000006F, 0x0000006E, 0x0000006D, 0x0000006C, - 0x0000006B, 0x0000006A, 0x00000069, 0x00000068, 0x00000067, 0x00000066, 0x00000065, 0x00000064, - 0x00000063, 0x00000062, 0x00000061, 0x00000060, 0x0000005F, 0x0000005E, 0x0000005D, 0x0000005C, - 0x0000005B, 0x0000005A, 0x00000059, 0x00000058, 0x00000057, 0x00000056, 0x00000055, 0x00000054, - 0x00000053, 0x00000052, 0x00000051, 0x00000050, 0x0000004F, 0x0000004E, 0x0000004D, 0x0000004C, - 0x0000004B, 0x0000004A, 0x00000049, 0x00000048, 0x00000047, 0x00000046, 0x00000045, 0x00000044, - 0x00000043, 0x00000042, 0x00000041, 0x00000040, 0x0000003F, 0x0000003E, 0x0000003D, 0x0000003C, - 0x0000003B, 0x0000003A, 0x00000039, 0x00000038, 0x00000037, 0x00000036, 0x00000035, 0x00000034, - 0x00000033, 0x00000032, 0x00000031, 0x00000030, 0x0000002F, 0x0000002E, 0x0000002D, 0x0000002C, - 0x0000002B, 0x0000002A, 0x00000029, 0x00000028, 0x00000027, 0x00000026, 0x00000025, 0x00000024, - 0x00000023, 0x00000022, 0x00000021, 0x00000020, 0x0000001F, 0x0000001E, 0x0000001D, 0x0000001C, - 0x0000001B, 0x0000001A, 0x00000019, 0x00000018, 0x00000017, 0x00000016, 0x00000015, 0x00000014, - 0x00000013, 0x00000012, 0x00000011, 0x00000010, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000C, - 0x0000000B, 0x0000000A, 0x00000009, 0x00000008, 0x00000007, 0x00000006, 0x00000005, 0x00000004, - 0x00000003, 0x00000002, 0x00000001, 0x00000000 - - - - 0.000000, 0.000000, 4.007812, 0.000000, 8.226562, 0.000000, 12.679688, 0.000000, - 18.679688, 0.000000, 23.132812, 0.000000, 31.289062, 0.000000, 34.312500, 0.000000, - 36.375000, 0.000000, 41.062500, 0.000000, 50.296875, 0.000000, 54.750000, 0.000000, - 56.859375, 0.000000, 62.367188, 0.000000, 66.632812, 0.000000, 69.656250, 0.000000, - 71.718750, 0.000000, 76.406250, 0.000000, 81.421875, 0.000000, 85.664062, 0.000000, - 89.929688, 0.000000, 95.742188, 0.000000, 100.429688, 0.000000, 108.796875, 0.000000, - 112.171875, 0.000000, 115.734375, 0.000000, 120.421875, 0.000000, 128.765625, 0.000000, - 134.765625, 0.000000, 139.007812, 0.000000, 144.515625, 0.000000, 148.734375, 0.000000, - 153.421875, 0.000000, 157.359375, 0.000000, 163.171875, 0.000000, 165.234375, 0.000000, - 171.234375, 0.000000, 175.921875, 0.000000, 180.375000, 0.000000, 184.617188, 0.000000, - 188.085938, 0.000000, 195.117188, 0.000000, 199.312500, 0.000000, 204.000000, 0.000000, - 208.007812, 0.000000, 210.117188, 0.000000, 217.054688, 0.000000, 220.429688, 0.000000, - 225.117188, 0.000000, 229.054688, 0.000000, 234.867188, 0.000000, 240.867188, 0.000000, - 245.085938, 0.000000, 249.773438, 0.000000, 253.781250, 0.000000, 256.804688, 0.000000, - 262.804688, 0.000000, 267.492188, 0.000000, 271.007812, 0.000000, 280.242188, 0.000000, - 284.695312, 0.000000, 286.804688, 0.000000, 292.312500, 0.000000, 296.578125, 0.000000, - 299.953125, 0.000000, 302.976562, 0.000000, 307.664062, 0.000000, 311.671875, 0.000000, - 313.781250, 0.000000, 317.882812, 0.000000, 322.335938, 0.000000, 322.335938, 0.000000, - 328.500000, 0.000000, 330.562500, 0.000000, 335.250000, 0.000000, 339.140625, 0.000000, - 343.078125, 0.000000, 348.984375, 0.000000, 353.671875, 0.000000, 366.445312, 0.000000, - 370.687500, 0.000000, 378.843750, 0.000000, 384.351562, 0.000000, 388.546875, 0.000000, - 394.546875, 0.000000, 399.234375, 0.000000, 403.687500, 0.000000, 407.929688, 0.000000, - 411.398438, 0.000000, 418.429688, 0.000000, 422.671875, 0.000000, 426.046875, 0.000000, - 429.070312, 0.000000, 433.757812, 0.000000, 437.765625, 0.000000, 442.031250, 0.000000, - 448.968750, 0.000000, 452.343750, 0.000000, 452.343750, 0.000000, 458.507812, 0.000000, - 460.570312, 0.000000, 465.257812, 0.000000, 474.492188, 0.000000, 476.601562, 0.000000, - 480.843750, 0.000000, 485.109375, 0.000000, 489.796875, 0.000000, 497.437500, 0.000000, - 499.546875, 0.000000, 503.765625, 0.000000, 509.671875, 0.000000, 514.359375, 0.000000, - 521.671875, 0.000000, 523.781250, 0.000000, 529.453125, 0.000000, 534.140625, 0.000000, - 537.656250, 0.000000, 543.046875, 0.000000, 546.585938, 0.000000, 552.585938, 0.000000, - 560.367188, 0.000000, 560.367188, 0.000000, 563.742188, 0.000000, 569.742188, 0.000000, - 573.960938, 0.000000, 579.351562, 0.000000, 584.039062, 0.000000, 589.851562, 0.000000, - 591.914062, 0.000000, 596.367188, 0.000000, 600.609375, 0.000000, 606.421875, 0.000000, - 608.484375, 0.000000, 613.171875, 0.000000, 619.570312, 0.000000, 623.812500, 0.000000, - 627.914062, 0.000000, 633.914062, 0.000000, 638.601562, 0.000000, 641.929688, 0.000000, - 644.039062, 0.000000, 647.789062, 0.000000, 652.007812, 0.000000, 656.273438, 0.000000, - 660.960938, 0.000000, 664.898438, 0.000000, 670.710938, 0.000000, 672.773438, 0.000000, - 678.773438, 0.000000, 683.460938, 0.000000, 689.859375, 0.000000, 697.640625, 0.000000, - 700.664062, 0.000000, 705.351562, 0.000000, 707.460938, 0.000000, 711.679688, 0.000000, - 715.921875, 0.000000, 719.390625, 0.000000, 723.656250, 0.000000, 728.343750, 0.000000, - 730.453125, 0.000000, 734.718750, 0.000000, 738.820312, 0.000000, 743.273438, 0.000000, - 747.960938, 0.000000, 756.328125, 0.000000, 763.265625, 0.000000, 766.734375, 0.000000, - 766.734375, 0.000000, 770.929688, 0.000000, 775.617188, 0.000000, 782.929688, 0.000000, - 785.273438, 0.000000, 789.960938, 0.000000, 793.898438, 0.000000, 797.367188, 0.000000, - 800.812500, 0.000000, 805.500000, 0.000000, 813.843750, 0.000000, 818.296875, 0.000000, - 824.109375, 0.000000, 824.109375, 0.000000, 830.273438, 0.000000, 832.335938, 0.000000, - 837.023438, 0.000000, 846.257812, 0.000000, 850.710938, 0.000000, 852.820312, 0.000000, - 858.328125, 0.000000, 862.593750, 0.000000, 865.617188, 0.000000, 867.679688, 0.000000, - 873.679688, 0.000000, 878.367188, 0.000000, 887.601562, 0.000000, 892.054688, 0.000000, - 897.867188, 0.000000, 897.867188, 0.000000, 904.031250, 0.000000, 906.093750, 0.000000, - 910.781250, 0.000000, 918.257812, 0.000000, 922.476562, 0.000000, 926.929688, 0.000000, - 932.437500, 0.000000, 936.679688, 0.000000, 940.125000, 0.000000, 944.812500, 0.000000, - 948.820312, 0.000000, 954.820312, 0.000000, 958.289062, 0.000000, 962.484375, 0.000000, - 968.484375, 0.000000, 973.171875, 0.000000, 976.687500, 0.000000, 980.695312, 0.000000, - 982.804688, 0.000000, 986.906250, 0.000000, 991.359375, 0.000000, 991.359375, 0.000000, - 997.523438, 0.000000, 999.585938, 0.000000, 1004.273438, 0.000000, 1009.289062, 0.000000, - 1013.554688, 0.000000, 1018.242188, 0.000000, 1026.187500, 0.000000, 1029.656250, 0.000000, - 1033.757812, 0.000000, 1038.445312, 0.000000, 1047.796875, 0.000000, 1052.039062, 0.000000, - 1058.859375, 0.000000, 1060.921875, 0.000000, 1066.921875, 0.000000, 1072.429688, 0.000000, - 1075.453125, 0.000000, 1077.515625, 0.000000, 1082.203125, 0.000000, 1088.601562, 0.000000, - 1092.867188, 0.000000, 1094.976562, 0.000000, 1098.445312, 0.000000, 1102.687500, 0.000000, - 1106.882812, 0.000000, 1111.570312, 0.000000, 1115.085938, 0.000000, 1117.195312, 0.000000, - 1117.195312, 0.000000, 1124.015625, 0.000000, 1126.125000, 0.000000, 1132.945312, 0.000000, - 1135.289062, 0.000000 - - - - - - - أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية - - - 0x00000872, 0x000008D1, 0x000003F9, 0x0000040B, 0x0000088C, 0x0000089E, 0x000008BD, 0x000003EF, - 0x00000003, 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BD, 0x000003EF, - 0x00000003, 0x000008A8, 0x000008D2, 0x000008C2, 0x0000087D, 0x00000003, 0x000008CE, 0x000008BE, - 0x000008A9, 0x00000003, 0x0000040D, 0x000008CC, 0x00000876, 0x00000882, 0x000008D1, 0x00000003, - 0x00000888, 0x00000881, 0x000003EF, 0x0000040B, 0x00000003, 0x0000088C, 0x000008D2, 0x000008B2, - 0x00000896, 0x00000875, 0x00000003, 0x00000408, 0x0000086C, 0x000008A6, 0x000008C5, 0x00000003, - 0x00000888, 0x0000087D, 0x000008CC, 0x000008D1, 0x00000003, 0x000008C0, 0x000008BD, 0x0000040B, - 0x00000003, 0x000003E6, 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BE, - 0x000008BD, 0x00000003, 0x00000408, 0x0000086C, 0x000008B5, 0x000003F9, 0x0000FFFF, 0x000008D5, - 0x000003EF, 0x00000003, 0x0000040A, 0x0000088A, 0x000008C9, 0x00000003, 0x00000898, 0x000008D2, - 0x0000089A, 0x00000886, 0x00000875, 0x0000040B, 0x00000003, 0x0000088C, 0x000008D2, 0x000008B2, - 0x00000896, 0x00000876, 0x000008BE, 0x000008BD, 0x00000003, 0x00000872, 0x000008C2, 0x000008A6, - 0x000008C5, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, 0x000003F2, 0x0000086C, 0x0000086A, - 0x000008C1, 0x00000003, 0x00000406, 0x0000086C, 0x000008C6, 0x000008C9, 0x00000003, 0x00000409, - 0x0000086C, 0x000008B9, 0x00000003, 0x000003E6, 0x00000005, 0x000003F7, 0x000008CC, 0x000008BA, - 0x00000413, 0x000008C5, 0x000008CC, 0x000008D1, 0x00000005, 0x00000003, 0x00000401, 0x000003EF, - 0x0000088C, 0x00000876, 0x00000885, 0x000003EF, 0x00000003, 0x000008BC, 0x00000870, 0x000008B5, - 0x0000040B, 0x00000003, 0x00000011, 0x0000086C, 0x000008CA, 0x000008C6, 0x000008C1, 0x00000003, - 0x00000888, 0x00000881, 0x000003EF, 0x0000040B, 0x00000003, 0x000008BC, 0x000008BA, 0x000008BD, - 0x00000003, 0x0000086C, 0x000008C6, 0x000008D2, 0x000008AA, 0x000008C1, 0x00000003, 0x0000086C, - 0x000008C2, 0x000008B5, 0x000003F9, 0x00000003, 0x000008D0, 0x000008A2, 0x000008AA, 0x00000412, - 0x00000875, 0x00000003, 0x00000409, 0x000003EB, 0x00000003, 0x00000888, 0x000008AA, 0x0000086F, - 0x00000003, 0x0000040C, 0x0000088C, 0x00000885, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, - 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BD, 0x000003EF, 0x0000040B, - 0x00000003, 0x00000404, 0x0000088C, 0x00000881, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, - 0x000008C4, 0x000008D1, 0x0000088E, 0x00000886, 0x00000876, 0x0000086F, 0x00000003, 0x00000408, - 0x000008CC, 0x000008B6, 0x00000875, 0x0000040B, 0x00000003, 0x000003E6, 0x00000408, 0x0000086C, - 0x000008B5, 0x000003F9, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, 0x000008A8, 0x000008C1, - 0x00000003, 0x000008A0, 0x000008B6, 0x000008B1, 0x00000003, 0x0000086E, 0x000008D2, 0x00000891, - 0x000003EF, 0x000008CC, 0x00000882, 0x000008BD, 0x000003EF, 0x00000003, 0x000008BC, 0x000008C1, - 0x0000086C, 0x000008AA, 0x00000876, 0x00000875, 0x00000003, 0x000003E6, 0x0000086C, 0x0000040E, - 0x00000891, 0x0000086C, 0x00000891, 0x000003EB - - - - 0x000000FB, 0x000000FA, 0x000000F9, 0x000000F8, 0x000000F7, 0x000000F6, 0x000000F5, 0x000000F4, - 0x000000F3, 0x000000F2, 0x000000F1, 0x000000F0, 0x000000EF, 0x000000EE, 0x000000ED, 0x000000EC, - 0x000000EB, 0x000000EA, 0x000000E9, 0x000000E8, 0x000000E7, 0x000000E6, 0x000000E5, 0x000000E4, - 0x000000E3, 0x000000E2, 0x000000E1, 0x000000E0, 0x000000DF, 0x000000DE, 0x000000DD, 0x000000DC, - 0x000000DB, 0x000000DA, 0x000000D9, 0x000000D8, 0x000000D7, 0x000000D6, 0x000000D5, 0x000000D4, - 0x000000D3, 0x000000D2, 0x000000D1, 0x000000D0, 0x000000CF, 0x000000CE, 0x000000CD, 0x000000CC, - 0x000000CB, 0x000000CA, 0x000000C9, 0x000000C8, 0x000000C7, 0x000000C6, 0x000000C5, 0x000000C4, - 0x000000C3, 0x000000C2, 0x000000C1, 0x000000C0, 0x000000BF, 0x000000BE, 0x000000BD, 0x000000BC, - 0x000000BB, 0x000000BA, 0x000000B9, 0x000000B8, 0x000000B7, 0x000000B6, 0x000000B5, 0x000000B4, - 0x000000B3, 0x000000B2, 0x000000B1, 0x000000B0, 0x000000AF, 0x000000AE, 0x000000AD, 0x000000AC, - 0x000000AB, 0x000000AA, 0x000000A9, 0x000000A8, 0x000000A7, 0x000000A6, 0x000000A5, 0x000000A4, - 0x000000A3, 0x000000A2, 0x000000A1, 0x000000A0, 0x0000009F, 0x0000009E, 0x0000009D, 0x0000009C, - 0x0000009B, 0x0000009A, 0x00000099, 0x00000098, 0x00000097, 0x00000096, 0x00000095, 0x00000094, - 0x00000093, 0x00000092, 0x00000091, 0x00000090, 0x0000008F, 0x0000008E, 0x0000008D, 0x0000008C, - 0x0000008B, 0x0000008A, 0x00000089, 0x00000088, 0x00000087, 0x00000086, 0x00000085, 0x00000084, - 0x00000083, 0x00000082, 0x00000081, 0x00000080, 0x0000007F, 0x0000007E, 0x0000007D, 0x0000007C, - 0x0000007B, 0x0000007A, 0x00000079, 0x00000078, 0x00000077, 0x00000076, 0x00000075, 0x00000074, - 0x00000073, 0x00000072, 0x00000071, 0x00000070, 0x0000006F, 0x0000006E, 0x0000006D, 0x0000006C, - 0x0000006B, 0x0000006A, 0x00000069, 0x00000068, 0x00000067, 0x00000066, 0x00000065, 0x00000064, - 0x00000063, 0x00000062, 0x00000061, 0x00000060, 0x0000005F, 0x0000005E, 0x0000005D, 0x0000005C, - 0x0000005B, 0x0000005A, 0x00000059, 0x00000058, 0x00000057, 0x00000056, 0x00000055, 0x00000054, - 0x00000053, 0x00000052, 0x00000051, 0x00000050, 0x0000004F, 0x0000004E, 0x0000004D, 0x0000004C, - 0x0000004B, 0x0000004A, 0x00000049, 0x00000048, 0x00000047, 0x00000046, 0x00000045, 0x00000044, - 0x00000043, 0x00000042, 0x00000041, 0x00000040, 0x0000003F, 0x0000003E, 0x0000003D, 0x0000003C, - 0x0000003B, 0x0000003A, 0x00000039, 0x00000038, 0x00000037, 0x00000036, 0x00000035, 0x00000034, - 0x00000033, 0x00000032, 0x00000031, 0x00000030, 0x0000002F, 0x0000002E, 0x0000002D, 0x0000002C, - 0x0000002B, 0x0000002A, 0x00000029, 0x00000028, 0x00000027, 0x00000026, 0x00000025, 0x00000024, - 0x00000023, 0x00000022, 0x00000021, 0x00000020, 0x0000001F, 0x0000001E, 0x0000001D, 0x0000001C, - 0x0000001B, 0x0000001A, 0x00000019, 0x00000018, 0x00000017, 0x00000016, 0x00000015, 0x00000014, - 0x00000013, 0x00000012, 0x00000011, 0x00000010, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000C, - 0x0000000B, 0x0000000A, 0x00000009, 0x00000008, 0x00000007, 0x00000006, 0x00000005, 0x00000004, - 0x00000003, 0x00000002, 0x00000001, 0x00000000 - - - - 0.000000, 0.000000, 6.316406, 0.000000, 10.382812, 0.000000, 15.492188, 0.000000, - 21.035156, 0.000000, 27.058594, 0.000000, 39.527344, 0.000000, 43.792969, 0.000000, - 47.408203, 0.000000, 51.205078, 0.000000, 66.216797, 0.000000, 71.326172, 0.000000, - 74.695312, 0.000000, 83.367188, 0.000000, 90.826172, 0.000000, 95.091797, 0.000000, - 98.707031, 0.000000, 102.503906, 0.000000, 109.962891, 0.000000, 114.949219, 0.000000, - 122.408203, 0.000000, 130.687500, 0.000000, 134.484375, 0.000000, 145.787109, 0.000000, - 150.773438, 0.000000, 156.884766, 0.000000, 160.681641, 0.000000, 172.277344, 0.000000, - 177.919922, 0.000000, 182.906250, 0.000000, 191.578125, 0.000000, 195.644531, 0.000000, - 199.441406, 0.000000, 206.507812, 0.000000, 214.787109, 0.000000, 218.402344, 0.000000, - 223.945312, 0.000000, 227.742188, 0.000000, 233.765625, 0.000000, 238.751953, 0.000000, - 245.185547, 0.000000, 257.982422, 0.000000, 262.048828, 0.000000, 265.845703, 0.000000, - 272.654297, 0.000000, 276.023438, 0.000000, 285.240234, 0.000000, 289.306641, 0.000000, - 293.103516, 0.000000, 300.169922, 0.000000, 308.449219, 0.000000, 314.091797, 0.000000, - 318.158203, 0.000000, 321.955078, 0.000000, 329.572266, 0.000000, 333.837891, 0.000000, - 339.380859, 0.000000, 343.177734, 0.000000, 346.974609, 0.000000, 361.986328, 0.000000, - 367.095703, 0.000000, 370.464844, 0.000000, 379.136719, 0.000000, 386.595703, 0.000000, - 391.582031, 0.000000, 395.847656, 0.000000, 399.644531, 0.000000, 406.453125, 0.000000, - 409.822266, 0.000000, 415.523438, 0.000000, 420.632812, 0.000000, 420.632812, 0.000000, - 427.441406, 0.000000, 431.056641, 0.000000, 434.853516, 0.000000, 441.357422, 0.000000, - 448.423828, 0.000000, 455.912109, 0.000000, 459.708984, 0.000000, 479.255859, 0.000000, - 484.242188, 0.000000, 496.710938, 0.000000, 505.382812, 0.000000, 509.449219, 0.000000, - 514.992188, 0.000000, 518.789062, 0.000000, 524.812500, 0.000000, 529.798828, 0.000000, - 536.232422, 0.000000, 549.029297, 0.000000, 554.015625, 0.000000, 559.001953, 0.000000, - 563.267578, 0.000000, 567.064453, 0.000000, 573.380859, 0.000000, 580.839844, 0.000000, - 590.056641, 0.000000, 594.123047, 0.000000, 594.123047, 0.000000, 600.931641, 0.000000, - 604.546875, 0.000000, 608.343750, 0.000000, 620.636719, 0.000000, 624.005859, 0.000000, - 628.992188, 0.000000, 635.830078, 0.000000, 639.626953, 0.000000, 653.361328, 0.000000, - 656.730469, 0.000000, 661.716797, 0.000000, 669.205078, 0.000000, 673.001953, 0.000000, - 683.777344, 0.000000, 687.146484, 0.000000, 692.660156, 0.000000, 696.457031, 0.000000, - 700.253906, 0.000000, 704.736328, 0.000000, 711.105469, 0.000000, 716.748047, 0.000000, - 722.994141, 0.000000, 722.994141, 0.000000, 727.060547, 0.000000, 732.703125, 0.000000, - 736.769531, 0.000000, 741.251953, 0.000000, 745.048828, 0.000000, 752.507812, 0.000000, - 756.123047, 0.000000, 762.146484, 0.000000, 767.132812, 0.000000, 775.412109, 0.000000, - 779.027344, 0.000000, 782.824219, 0.000000, 794.203125, 0.000000, 799.189453, 0.000000, - 804.890625, 0.000000, 810.433594, 0.000000, 814.230469, 0.000000, 818.027344, 0.000000, - 821.396484, 0.000000, 828.128906, 0.000000, 833.115234, 0.000000, 839.953125, 0.000000, - 843.750000, 0.000000, 850.816406, 0.000000, 859.095703, 0.000000, 862.710938, 0.000000, - 868.253906, 0.000000, 872.050781, 0.000000, 883.429688, 0.000000, 889.675781, 0.000000, - 893.941406, 0.000000, 897.738281, 0.000000, 901.107422, 0.000000, 906.093750, 0.000000, - 911.080078, 0.000000, 917.800781, 0.000000, 924.638672, 0.000000, 928.435547, 0.000000, - 931.804688, 0.000000, 939.263672, 0.000000, 944.964844, 0.000000, 950.074219, 0.000000, - 953.871094, 0.000000, 965.173828, 0.000000, 974.390625, 0.000000, 981.111328, 0.000000, - 981.111328, 0.000000, 985.177734, 0.000000, 988.974609, 0.000000, 999.750000, 0.000000, - 1003.365234, 0.000000, 1007.162109, 0.000000, 1014.228516, 0.000000, 1020.949219, 0.000000, - 1025.015625, 0.000000, 1028.812500, 0.000000, 1040.408203, 0.000000, 1046.431641, 0.000000, - 1054.710938, 0.000000, 1054.710938, 0.000000, 1061.519531, 0.000000, 1065.134766, 0.000000, - 1068.931641, 0.000000, 1083.943359, 0.000000, 1089.052734, 0.000000, 1092.421875, 0.000000, - 1101.093750, 0.000000, 1108.552734, 0.000000, 1112.818359, 0.000000, 1116.433594, 0.000000, - 1121.976562, 0.000000, 1125.773438, 0.000000, 1140.785156, 0.000000, 1146.808594, 0.000000, - 1155.087891, 0.000000, 1155.087891, 0.000000, 1161.896484, 0.000000, 1165.511719, 0.000000, - 1169.308594, 0.000000, 1180.541016, 0.000000, 1184.607422, 0.000000, 1190.630859, 0.000000, - 1199.302734, 0.000000, 1204.289062, 0.000000, 1208.355469, 0.000000, 1212.152344, 0.000000, - 1218.960938, 0.000000, 1224.603516, 0.000000, 1231.037109, 0.000000, 1235.103516, 0.000000, - 1240.646484, 0.000000, 1244.443359, 0.000000, 1248.240234, 0.000000, 1255.048828, 0.000000, - 1258.417969, 0.000000, 1264.119141, 0.000000, 1269.228516, 0.000000, 1269.228516, 0.000000, - 1276.037109, 0.000000, 1279.652344, 0.000000, 1283.449219, 0.000000, 1290.908203, 0.000000, - 1297.746094, 0.000000, 1301.542969, 0.000000, 1311.427734, 0.000000, 1317.861328, 0.000000, - 1323.562500, 0.000000, 1327.359375, 0.000000, 1341.492188, 0.000000, 1346.478516, 0.000000, - 1357.904297, 0.000000, 1361.519531, 0.000000, 1367.162109, 0.000000, 1375.833984, 0.000000, - 1380.099609, 0.000000, 1383.714844, 0.000000, 1387.511719, 0.000000, 1398.890625, 0.000000, - 1405.728516, 0.000000, 1409.097656, 0.000000, 1415.818359, 0.000000, 1420.804688, 0.000000, - 1424.871094, 0.000000, 1428.667969, 0.000000, 1432.464844, 0.000000, 1435.833984, 0.000000, - 1435.833984, 0.000000, 1447.259766, 0.000000, 1450.628906, 0.000000, 1462.054688, 0.000000, - 1465.669922, 0.000000 - - - - - - - บทที่๑พายุไซโคลนโดโรธีอาศัยอยู่ท่ามกลางทุ่งใหญ่ในแคนซัสกับลุงเฮนรีชาวไร่และป้าเอ็มภรรยาชาวไร่บ้านของพวกเขาหลังเล็กเพราะไม้สร้างบ้านต้องขนมาด้วยเกวียนเป็นระยะทางหลายไมล์ - - - 0x000000F3, 0x000000F0, 0x000000F0, 0x0000010E, 0x0000011D, 0x00000126, 0x000000F7, 0x0000010B, - 0x000000FB, 0x00000111, 0x00000119, 0x000000E4, 0x00000117, 0x000000DD, 0x000000FE, 0x000000F2, - 0x00000117, 0x000000ED, 0x00000117, 0x000000FC, 0x000000F1, 0x0000010E, 0x00000106, 0x0000010B, - 0x00000101, 0x0000010A, 0x000000FB, 0x00000106, 0x000000FB, 0x00000112, 0x0000013B, 0x000000F0, - 0x0000013B, 0x0000010B, 0x000000FA, 0x000000DA, 0x000000FE, 0x0000010B, 0x000000E0, 0x000000F0, - 0x00000111, 0x0000013B, 0x000000E0, 0x00000118, 0x00000104, 0x000000E6, 0x0000013B, 0x00000118, - 0x000000F2, 0x00000116, 0x000000DD, 0x000000F2, 0x000000E4, 0x0000010A, 0x00000103, 0x000000DA, - 0x0000010A, 0x000000F3, 0x000000FE, 0x00000111, 0x000000E0, 0x00000115, 0x00000107, 0x000000F2, - 0x000000FC, 0x0000010E, 0x000000E3, 0x0000010B, 0x00000100, 0x00000119, 0x000000FC, 0x0000013B, - 0x00000116, 0x000000FE, 0x00000109, 0x000000F4, 0x00000137, 0x0000010B, 0x00000115, 0x00000106, - 0x0000011C, 0x000000FA, 0x000000F9, 0x000000FC, 0x000000FC, 0x000000FB, 0x0000010B, 0x000000E3, - 0x0000010B, 0x00000100, 0x00000119, 0x000000FC, 0x0000013B, 0x000000F3, 0x0000013C, 0x0000010B, - 0x000000F2, 0x000000DB, 0x00000106, 0x000000E0, 0x000000F7, 0x00000100, 0x000000DA, 0x00000115, - 0x000000DB, 0x0000010B, 0x00000104, 0x000000FE, 0x0000010A, 0x000000E0, 0x00000115, 0x000000FE, - 0x0000011C, 0x000000DA, 0x00000115, 0x000000F7, 0x000000FC, 0x0000010B, 0x00000109, 0x00000119, - 0x000000FA, 0x0000013C, 0x00000103, 0x000000FC, 0x0000013C, 0x0000010B, 0x000000E0, 0x000000F3, - 0x0000013C, 0x0000010B, 0x000000F2, 0x000000EE, 0x0000013C, 0x00000106, 0x000000E0, 0x000000DB, - 0x000000F2, 0x000000FA, 0x0000010B, 0x000000ED, 0x0000013C, 0x00000100, 0x000000FB, 0x00000115, - 0x000000DA, 0x00000100, 0x0000010E, 0x000000FB, 0x000000F2, 0x00000115, 0x000000F4, 0x00000143, - 0x000000F2, 0x000000FC, 0x00000109, 0x000000FB, 0x00000109, 0x000000F0, 0x0000010B, 0x000000E0, - 0x00000104, 0x000000FE, 0x0000010B, 0x000000FB, 0x00000119, 0x000000FA, 0x000000FE, 0x0000013F - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, - 0x00000018, 0x00000019, 0x0000001A, 0x0000001B, 0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F, - 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, - 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D, 0x0000002E, 0x0000002F, - 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, - 0x00000038, 0x00000039, 0x0000003A, 0x0000003B, 0x0000003C, 0x0000003D, 0x0000003E, 0x0000003F, - 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000047, - 0x00000048, 0x00000049, 0x0000004A, 0x0000004B, 0x0000004C, 0x0000004D, 0x0000004E, 0x0000004F, - 0x00000050, 0x00000051, 0x00000052, 0x00000053, 0x00000054, 0x00000055, 0x00000056, 0x00000057, - 0x00000058, 0x00000059, 0x0000005A, 0x0000005B, 0x0000005C, 0x0000005D, 0x0000005E, 0x0000005F, - 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, 0x00000065, 0x00000066, 0x00000067, - 0x00000068, 0x00000069, 0x0000006A, 0x0000006B, 0x0000006C, 0x0000006D, 0x0000006E, 0x0000006F, - 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077, - 0x00000078, 0x00000079, 0x0000007A, 0x0000007B, 0x0000007C, 0x0000007D, 0x0000007E, 0x0000007F, - 0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, 0x00000086, 0x00000087, - 0x00000088, 0x00000089, 0x0000008A, 0x0000008B, 0x0000008C, 0x0000008D, 0x0000008E, 0x0000008F, - 0x00000090, 0x00000091, 0x00000092, 0x00000093, 0x00000094, 0x00000095, 0x00000096, 0x00000097, - 0x00000098, 0x00000099, 0x0000009A, 0x0000009B, 0x0000009C, 0x0000009D, 0x0000009E, 0x0000009F, - 0x000000A0, 0x000000A1, 0x000000A2, 0x000000A3, 0x000000A4, 0x000000A5, 0x000000A6, 0x000000A7 - - - - 0.000000, 0.000000, 5.399414, 0.000000, 10.798828, 0.000000, 16.198242, 0.000000, - 16.198242, 0.000000, 16.198242, 0.000000, 21.046875, 0.000000, 26.616211, 0.000000, - 30.035156, 0.000000, 34.151367, 0.000000, 34.151367, 0.000000, 38.279297, 0.000000, - 43.558594, 0.000000, 47.663086, 0.000000, 52.438477, 0.000000, 57.178711, 0.000000, - 62.698242, 0.000000, 66.802734, 0.000000, 71.601562, 0.000000, 75.706055, 0.000000, - 79.810547, 0.000000, 84.369141, 0.000000, 84.369141, 0.000000, 89.097656, 0.000000, - 92.516602, 0.000000, 97.195312, 0.000000, 97.195312, 0.000000, 101.311523, 0.000000, - 106.040039, 0.000000, 110.156250, 0.000000, 110.156250, 0.000000, 110.156250, 0.000000, - 115.555664, 0.000000, 115.555664, 0.000000, 118.974609, 0.000000, 124.013672, 0.000000, - 128.765625, 0.000000, 133.505859, 0.000000, 136.924805, 0.000000, 140.704102, 0.000000, - 146.103516, 0.000000, 146.103516, 0.000000, 146.103516, 0.000000, 149.882812, 0.000000, - 153.553711, 0.000000, 159.158203, 0.000000, 165.421875, 0.000000, 165.421875, 0.000000, - 169.092773, 0.000000, 174.612305, 0.000000, 179.135742, 0.000000, 183.911133, 0.000000, - 189.430664, 0.000000, 194.709961, 0.000000, 194.709961, 0.000000, 199.989258, 0.000000, - 204.741211, 0.000000, 204.741211, 0.000000, 210.140625, 0.000000, 214.880859, 0.000000, - 214.880859, 0.000000, 218.660156, 0.000000, 220.675781, 0.000000, 225.128906, 0.000000, - 230.648438, 0.000000, 234.752930, 0.000000, 234.752930, 0.000000, 239.613281, 0.000000, - 243.032227, 0.000000, 247.280273, 0.000000, 251.408203, 0.000000, 255.512695, 0.000000, - 255.512695, 0.000000, 260.036133, 0.000000, 264.776367, 0.000000, 269.071289, 0.000000, - 274.470703, 0.000000, 274.470703, 0.000000, 277.889648, 0.000000, 279.905273, 0.000000, - 284.633789, 0.000000, 284.633789, 0.000000, 289.672852, 0.000000, 294.641602, 0.000000, - 298.746094, 0.000000, 302.850586, 0.000000, 306.966797, 0.000000, 310.385742, 0.000000, - 315.246094, 0.000000, 318.665039, 0.000000, 322.913086, 0.000000, 327.041016, 0.000000, - 331.145508, 0.000000, 331.145508, 0.000000, 336.544922, 0.000000, 336.544922, 0.000000, - 339.963867, 0.000000, 345.483398, 0.000000, 350.258789, 0.000000, 354.987305, 0.000000, - 358.766602, 0.000000, 364.335938, 0.000000, 368.583984, 0.000000, 373.335938, 0.000000, - 375.351562, 0.000000, 380.126953, 0.000000, 383.545898, 0.000000, 389.150391, 0.000000, - 393.890625, 0.000000, 393.890625, 0.000000, 397.669922, 0.000000, 399.685547, 0.000000, - 404.425781, 0.000000, 404.425781, 0.000000, 409.177734, 0.000000, 411.193359, 0.000000, - 416.762695, 0.000000, 420.867188, 0.000000, 424.286133, 0.000000, 428.581055, 0.000000, - 432.708984, 0.000000, 437.748047, 0.000000, 437.748047, 0.000000, 443.027344, 0.000000, - 447.131836, 0.000000, 447.131836, 0.000000, 450.550781, 0.000000, 454.330078, 0.000000, - 459.729492, 0.000000, 459.729492, 0.000000, 463.148438, 0.000000, 468.667969, 0.000000, - 473.478516, 0.000000, 473.478516, 0.000000, 478.207031, 0.000000, 481.986328, 0.000000, - 486.761719, 0.000000, 492.281250, 0.000000, 497.320312, 0.000000, 500.739258, 0.000000, - 505.538086, 0.000000, 505.538086, 0.000000, 509.786133, 0.000000, 513.902344, 0.000000, - 515.917969, 0.000000, 520.669922, 0.000000, 524.917969, 0.000000, 524.917969, 0.000000, - 529.034180, 0.000000, 534.553711, 0.000000, 536.569336, 0.000000, 541.968750, 0.000000, - 541.968750, 0.000000, 547.488281, 0.000000, 551.592773, 0.000000, 555.887695, 0.000000, - 560.003906, 0.000000, 564.298828, 0.000000, 569.698242, 0.000000, 573.117188, 0.000000, - 576.896484, 0.000000, 582.500977, 0.000000, 587.241211, 0.000000, 590.660156, 0.000000, - 594.776367, 0.000000, 598.904297, 0.000000, 603.943359, 0.000000, 608.683594, 0.000000, - 608.683594, 0.000000 - - - - - - - أساسًا، تتعامل الحواسيب فقط مع الأرقام، وتقوم بتخزين الأحرف والمحارف الأخرى بعد أن تُعطي رقما معينا لكل واحد منها. وقبل اختراع "يونِكود"، كان هناك مئات الأنظمة للتشفير وتخصيص هذه الأرقام للمحارف، ولم يوجد نظام تشفير واحد يحتوي على جميع المحارف الضرورية - - - 0x00000872, 0x000008D1, 0x000003F9, 0x0000040B, 0x0000088C, 0x0000089E, 0x000008BD, 0x000003EF, - 0x00000003, 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BD, 0x000003EF, - 0x00000003, 0x000008A8, 0x000008D2, 0x000008C2, 0x0000087D, 0x00000003, 0x000008CE, 0x000008BE, - 0x000008A9, 0x00000003, 0x0000040D, 0x000008CC, 0x00000876, 0x00000882, 0x000008D1, 0x00000003, - 0x00000888, 0x00000881, 0x000003EF, 0x0000040B, 0x00000003, 0x0000088C, 0x000008D2, 0x000008B2, - 0x00000896, 0x00000875, 0x00000003, 0x00000408, 0x0000086C, 0x000008A6, 0x000008C5, 0x00000003, - 0x00000888, 0x0000087D, 0x000008CC, 0x000008D1, 0x00000003, 0x000008C0, 0x000008BD, 0x0000040B, - 0x00000003, 0x000003E6, 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BE, - 0x000008BD, 0x00000003, 0x00000408, 0x0000086C, 0x000008B5, 0x000003F9, 0x0000FFFF, 0x000008D5, - 0x000003EF, 0x00000003, 0x0000040A, 0x0000088A, 0x000008C9, 0x00000003, 0x00000898, 0x000008D2, - 0x0000089A, 0x00000886, 0x00000875, 0x0000040B, 0x00000003, 0x0000088C, 0x000008D2, 0x000008B2, - 0x00000896, 0x00000876, 0x000008BE, 0x000008BD, 0x00000003, 0x00000872, 0x000008C2, 0x000008A6, - 0x000008C5, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, 0x000003F2, 0x0000086C, 0x0000086A, - 0x000008C1, 0x00000003, 0x00000406, 0x0000086C, 0x000008C6, 0x000008C9, 0x00000003, 0x00000409, - 0x0000086C, 0x000008B9, 0x00000003, 0x000003E6, 0x00000005, 0x000003F7, 0x000008CC, 0x000008BA, - 0x00000413, 0x000008C5, 0x000008CC, 0x000008D1, 0x00000005, 0x00000003, 0x00000401, 0x000003EF, - 0x0000088C, 0x00000876, 0x00000885, 0x000003EF, 0x00000003, 0x000008BC, 0x00000870, 0x000008B5, - 0x0000040B, 0x00000003, 0x00000011, 0x0000086C, 0x000008CA, 0x000008C6, 0x000008C1, 0x00000003, - 0x00000888, 0x00000881, 0x000003EF, 0x0000040B, 0x00000003, 0x000008BC, 0x000008BA, 0x000008BD, - 0x00000003, 0x0000086C, 0x000008C6, 0x000008D2, 0x000008AA, 0x000008C1, 0x00000003, 0x0000086C, - 0x000008C2, 0x000008B5, 0x000003F9, 0x00000003, 0x000008D0, 0x000008A2, 0x000008AA, 0x00000412, - 0x00000875, 0x00000003, 0x00000409, 0x000003EB, 0x00000003, 0x00000888, 0x000008AA, 0x0000086F, - 0x00000003, 0x0000040C, 0x0000088C, 0x00000885, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, - 0x00000404, 0x000003F9, 0x0000086C, 0x00000882, 0x000008C2, 0x000008BD, 0x000003EF, 0x0000040B, - 0x00000003, 0x00000404, 0x0000088C, 0x00000881, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, - 0x000008C4, 0x000008D1, 0x0000088E, 0x00000886, 0x00000876, 0x0000086F, 0x00000003, 0x00000408, - 0x000008CC, 0x000008B6, 0x00000875, 0x0000040B, 0x00000003, 0x000003E6, 0x00000408, 0x0000086C, - 0x000008B5, 0x000003F9, 0x0000FFFF, 0x000008D5, 0x000003EF, 0x00000003, 0x000008A8, 0x000008C1, - 0x00000003, 0x000008A0, 0x000008B6, 0x000008B1, 0x00000003, 0x0000086E, 0x000008D2, 0x00000891, - 0x000003EF, 0x000008CC, 0x00000882, 0x000008BD, 0x000003EF, 0x00000003, 0x000008BC, 0x000008C1, - 0x0000086C, 0x000008AA, 0x00000876, 0x00000875, 0x00000003, 0x000003E6, 0x0000086C, 0x0000040E, - 0x00000891, 0x0000086C, 0x00000891, 0x000003EB - - - - 0x000000FB, 0x000000FA, 0x000000F9, 0x000000F8, 0x000000F7, 0x000000F6, 0x000000F5, 0x000000F4, - 0x000000F3, 0x000000F2, 0x000000F1, 0x000000F0, 0x000000EF, 0x000000EE, 0x000000ED, 0x000000EC, - 0x000000EB, 0x000000EA, 0x000000E9, 0x000000E8, 0x000000E7, 0x000000E6, 0x000000E5, 0x000000E4, - 0x000000E3, 0x000000E2, 0x000000E1, 0x000000E0, 0x000000DF, 0x000000DE, 0x000000DD, 0x000000DC, - 0x000000DB, 0x000000DA, 0x000000D9, 0x000000D8, 0x000000D7, 0x000000D6, 0x000000D5, 0x000000D4, - 0x000000D3, 0x000000D2, 0x000000D1, 0x000000D0, 0x000000CF, 0x000000CE, 0x000000CD, 0x000000CC, - 0x000000CB, 0x000000CA, 0x000000C9, 0x000000C8, 0x000000C7, 0x000000C6, 0x000000C5, 0x000000C4, - 0x000000C3, 0x000000C2, 0x000000C1, 0x000000C0, 0x000000BF, 0x000000BE, 0x000000BD, 0x000000BC, - 0x000000BB, 0x000000BA, 0x000000B9, 0x000000B8, 0x000000B7, 0x000000B6, 0x000000B5, 0x000000B4, - 0x000000B3, 0x000000B2, 0x000000B1, 0x000000B0, 0x000000AF, 0x000000AE, 0x000000AD, 0x000000AC, - 0x000000AB, 0x000000AA, 0x000000A9, 0x000000A8, 0x000000A7, 0x000000A6, 0x000000A5, 0x000000A4, - 0x000000A3, 0x000000A2, 0x000000A1, 0x000000A0, 0x0000009F, 0x0000009E, 0x0000009D, 0x0000009C, - 0x0000009B, 0x0000009A, 0x00000099, 0x00000098, 0x00000097, 0x00000096, 0x00000095, 0x00000094, - 0x00000093, 0x00000092, 0x00000091, 0x00000090, 0x0000008F, 0x0000008E, 0x0000008D, 0x0000008C, - 0x0000008B, 0x0000008A, 0x00000089, 0x00000088, 0x00000087, 0x00000086, 0x00000085, 0x00000084, - 0x00000083, 0x00000082, 0x00000081, 0x00000080, 0x0000007F, 0x0000007E, 0x0000007D, 0x0000007C, - 0x0000007B, 0x0000007A, 0x00000079, 0x00000078, 0x00000077, 0x00000076, 0x00000075, 0x00000074, - 0x00000073, 0x00000072, 0x00000071, 0x00000070, 0x0000006F, 0x0000006E, 0x0000006D, 0x0000006C, - 0x0000006B, 0x0000006A, 0x00000069, 0x00000068, 0x00000067, 0x00000066, 0x00000065, 0x00000064, - 0x00000063, 0x00000062, 0x00000061, 0x00000060, 0x0000005F, 0x0000005E, 0x0000005D, 0x0000005C, - 0x0000005B, 0x0000005A, 0x00000059, 0x00000058, 0x00000057, 0x00000056, 0x00000055, 0x00000054, - 0x00000053, 0x00000052, 0x00000051, 0x00000050, 0x0000004F, 0x0000004E, 0x0000004D, 0x0000004C, - 0x0000004B, 0x0000004A, 0x00000049, 0x00000048, 0x00000047, 0x00000046, 0x00000045, 0x00000044, - 0x00000043, 0x00000042, 0x00000041, 0x00000040, 0x0000003F, 0x0000003E, 0x0000003D, 0x0000003C, - 0x0000003B, 0x0000003A, 0x00000039, 0x00000038, 0x00000037, 0x00000036, 0x00000035, 0x00000034, - 0x00000033, 0x00000032, 0x00000031, 0x00000030, 0x0000002F, 0x0000002E, 0x0000002D, 0x0000002C, - 0x0000002B, 0x0000002A, 0x00000029, 0x00000028, 0x00000027, 0x00000026, 0x00000025, 0x00000024, - 0x00000023, 0x00000022, 0x00000021, 0x00000020, 0x0000001F, 0x0000001E, 0x0000001D, 0x0000001C, - 0x0000001B, 0x0000001A, 0x00000019, 0x00000018, 0x00000017, 0x00000016, 0x00000015, 0x00000014, - 0x00000013, 0x00000012, 0x00000011, 0x00000010, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000C, - 0x0000000B, 0x0000000A, 0x00000009, 0x00000008, 0x00000007, 0x00000006, 0x00000005, 0x00000004, - 0x00000003, 0x00000002, 0x00000001, 0x00000000 - - - - 0.000000, 0.000000, 6.316406, 0.000000, 10.382812, 0.000000, 15.492188, 0.000000, - 21.035156, 0.000000, 27.058594, 0.000000, 39.527344, 0.000000, 43.792969, 0.000000, - 47.408203, 0.000000, 51.205078, 0.000000, 66.216797, 0.000000, 71.326172, 0.000000, - 74.695312, 0.000000, 83.367188, 0.000000, 90.826172, 0.000000, 95.091797, 0.000000, - 98.707031, 0.000000, 102.503906, 0.000000, 109.962891, 0.000000, 114.949219, 0.000000, - 122.408203, 0.000000, 130.687500, 0.000000, 134.484375, 0.000000, 145.787109, 0.000000, - 150.773438, 0.000000, 156.884766, 0.000000, 160.681641, 0.000000, 172.277344, 0.000000, - 177.919922, 0.000000, 182.906250, 0.000000, 191.578125, 0.000000, 195.644531, 0.000000, - 199.441406, 0.000000, 206.507812, 0.000000, 214.787109, 0.000000, 218.402344, 0.000000, - 223.945312, 0.000000, 227.742188, 0.000000, 233.765625, 0.000000, 238.751953, 0.000000, - 245.185547, 0.000000, 257.982422, 0.000000, 262.048828, 0.000000, 265.845703, 0.000000, - 272.654297, 0.000000, 276.023438, 0.000000, 285.240234, 0.000000, 289.306641, 0.000000, - 293.103516, 0.000000, 300.169922, 0.000000, 308.449219, 0.000000, 314.091797, 0.000000, - 318.158203, 0.000000, 321.955078, 0.000000, 329.572266, 0.000000, 333.837891, 0.000000, - 339.380859, 0.000000, 343.177734, 0.000000, 346.974609, 0.000000, 361.986328, 0.000000, - 367.095703, 0.000000, 370.464844, 0.000000, 379.136719, 0.000000, 386.595703, 0.000000, - 391.582031, 0.000000, 395.847656, 0.000000, 399.644531, 0.000000, 406.453125, 0.000000, - 409.822266, 0.000000, 415.523438, 0.000000, 420.632812, 0.000000, 420.632812, 0.000000, - 427.441406, 0.000000, 431.056641, 0.000000, 434.853516, 0.000000, 441.357422, 0.000000, - 448.423828, 0.000000, 455.912109, 0.000000, 459.708984, 0.000000, 479.255859, 0.000000, - 484.242188, 0.000000, 496.710938, 0.000000, 505.382812, 0.000000, 509.449219, 0.000000, - 514.992188, 0.000000, 518.789062, 0.000000, 524.812500, 0.000000, 529.798828, 0.000000, - 536.232422, 0.000000, 549.029297, 0.000000, 554.015625, 0.000000, 559.001953, 0.000000, - 563.267578, 0.000000, 567.064453, 0.000000, 573.380859, 0.000000, 580.839844, 0.000000, - 590.056641, 0.000000, 594.123047, 0.000000, 594.123047, 0.000000, 600.931641, 0.000000, - 604.546875, 0.000000, 608.343750, 0.000000, 620.636719, 0.000000, 624.005859, 0.000000, - 628.992188, 0.000000, 635.830078, 0.000000, 639.626953, 0.000000, 653.361328, 0.000000, - 656.730469, 0.000000, 661.716797, 0.000000, 669.205078, 0.000000, 673.001953, 0.000000, - 683.777344, 0.000000, 687.146484, 0.000000, 692.660156, 0.000000, 696.457031, 0.000000, - 700.253906, 0.000000, 704.736328, 0.000000, 711.105469, 0.000000, 716.748047, 0.000000, - 722.994141, 0.000000, 722.994141, 0.000000, 727.060547, 0.000000, 732.703125, 0.000000, - 736.769531, 0.000000, 741.251953, 0.000000, 745.048828, 0.000000, 752.507812, 0.000000, - 756.123047, 0.000000, 762.146484, 0.000000, 767.132812, 0.000000, 775.412109, 0.000000, - 779.027344, 0.000000, 782.824219, 0.000000, 794.203125, 0.000000, 799.189453, 0.000000, - 804.890625, 0.000000, 810.433594, 0.000000, 814.230469, 0.000000, 818.027344, 0.000000, - 821.396484, 0.000000, 828.128906, 0.000000, 833.115234, 0.000000, 839.953125, 0.000000, - 843.750000, 0.000000, 850.816406, 0.000000, 859.095703, 0.000000, 862.710938, 0.000000, - 868.253906, 0.000000, 872.050781, 0.000000, 883.429688, 0.000000, 889.675781, 0.000000, - 893.941406, 0.000000, 897.738281, 0.000000, 901.107422, 0.000000, 906.093750, 0.000000, - 911.080078, 0.000000, 917.800781, 0.000000, 924.638672, 0.000000, 928.435547, 0.000000, - 931.804688, 0.000000, 939.263672, 0.000000, 944.964844, 0.000000, 950.074219, 0.000000, - 953.871094, 0.000000, 965.173828, 0.000000, 974.390625, 0.000000, 981.111328, 0.000000, - 981.111328, 0.000000, 985.177734, 0.000000, 988.974609, 0.000000, 999.750000, 0.000000, - 1003.365234, 0.000000, 1007.162109, 0.000000, 1014.228516, 0.000000, 1020.949219, 0.000000, - 1025.015625, 0.000000, 1028.812500, 0.000000, 1040.408203, 0.000000, 1046.431641, 0.000000, - 1054.710938, 0.000000, 1054.710938, 0.000000, 1061.519531, 0.000000, 1065.134766, 0.000000, - 1068.931641, 0.000000, 1083.943359, 0.000000, 1089.052734, 0.000000, 1092.421875, 0.000000, - 1101.093750, 0.000000, 1108.552734, 0.000000, 1112.818359, 0.000000, 1116.433594, 0.000000, - 1121.976562, 0.000000, 1125.773438, 0.000000, 1140.785156, 0.000000, 1146.808594, 0.000000, - 1155.087891, 0.000000, 1155.087891, 0.000000, 1161.896484, 0.000000, 1165.511719, 0.000000, - 1169.308594, 0.000000, 1180.541016, 0.000000, 1184.607422, 0.000000, 1190.630859, 0.000000, - 1199.302734, 0.000000, 1204.289062, 0.000000, 1208.355469, 0.000000, 1212.152344, 0.000000, - 1218.960938, 0.000000, 1224.603516, 0.000000, 1231.037109, 0.000000, 1235.103516, 0.000000, - 1240.646484, 0.000000, 1244.443359, 0.000000, 1248.240234, 0.000000, 1255.048828, 0.000000, - 1258.417969, 0.000000, 1264.119141, 0.000000, 1269.228516, 0.000000, 1269.228516, 0.000000, - 1276.037109, 0.000000, 1279.652344, 0.000000, 1283.449219, 0.000000, 1290.908203, 0.000000, - 1297.746094, 0.000000, 1301.542969, 0.000000, 1311.427734, 0.000000, 1317.861328, 0.000000, - 1323.562500, 0.000000, 1327.359375, 0.000000, 1341.492188, 0.000000, 1346.478516, 0.000000, - 1357.904297, 0.000000, 1361.519531, 0.000000, 1367.162109, 0.000000, 1375.833984, 0.000000, - 1380.099609, 0.000000, 1383.714844, 0.000000, 1387.511719, 0.000000, 1398.890625, 0.000000, - 1405.728516, 0.000000, 1409.097656, 0.000000, 1415.818359, 0.000000, 1420.804688, 0.000000, - 1424.871094, 0.000000, 1428.667969, 0.000000, 1432.464844, 0.000000, 1435.833984, 0.000000, - 1435.833984, 0.000000, 1447.259766, 0.000000, 1450.628906, 0.000000, 1462.054688, 0.000000, - 1465.669922, 0.000000 - - - - - - - ुं ं॑ - - - 0x0000029C, 0x000001D5, 0x00000232, 0x00000003, 0x0000029C, 0x00000232, 0x00000233 - - - - 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000003, 0x00000004 - - - - 0.000000, 0.000000, 7.541016, 0.000000, 7.541016, 0.000000, 7.541016, 0.000000, - 13.541016, 0.000000, 21.082031, 0.000000, 19.953125, -6.052734, 21.082031, 0.000000 - - - - - - - कँ कं कः क॑ क॒ कँ॑ कं॒ कँंः क॒॑ - - - 0x00000080, 0x00000231, 0x00000003, 0x00000080, 0x00000232, 0x00000003, 0x00000080, 0x0000022C, - 0x00000003, 0x00000080, 0x00000233, 0x00000003, 0x00000080, 0x000001DF, 0x00000003, 0x00000080, - 0x00000231, 0x00000233, 0x00000003, 0x00000080, 0x000001DF, 0x00000232, 0x00000003, 0x00000080, - 0x00000231, 0x0000029C, 0x00000232, 0x0000029C, 0x0000022C, 0x00000003, 0x00000080, 0x00000233, - 0x0000029C, 0x000001DF - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000015, 0x00000014, 0x00000016, 0x00000017, - 0x00000018, 0x00000019, 0x00000019, 0x0000001A, 0x0000001A, 0x0000001B, 0x0000001C, 0x0000001D, - 0x0000001E, 0x0000001E - - - - 0.000000, 0.000000, 10.001953, -0.087891, 10.875000, 0.000000, 16.875000, 0.000000, - 23.783203, 0.439453, 27.750000, 0.000000, 33.750000, 0.000000, 44.625000, 0.000000, - 48.984375, 0.000000, 54.984375, 0.000000, 63.546875, -1.669922, 65.859375, 0.000000, - 71.859375, 0.000000, 80.332031, 0.492188, 82.734375, 0.000000, 88.734375, 0.000000, - 98.736328, -0.087891, 97.431641, -6.228516, 99.609375, 0.000000, 105.609375, 0.000000, - 114.082031, 0.492188, 112.517578, 0.439453, 116.484375, 0.000000, 122.484375, 0.000000, - 132.486328, -0.087891, 133.359375, 0.000000, 140.900391, 0.000000, 140.900391, 0.000000, - 148.441406, 0.000000, 152.800781, 0.000000, 158.800781, 0.000000, 167.363281, -1.669922, - 169.675781, 0.000000, 177.216797, 0.000000, 177.216797, 0.000000 - - - - - - - रू क़् क्ष क्कि क्रि ट्रि हिन्दी र्क्रिं क्षत्रज्ञत्रक्ष श्र थ्र श्र कके र्कें केूकूेकेृ र्कू क़ क क् क्ष क्ष् क्ष्क ज़ ज ज् ज्ञ ज्ञ् ज्ञ्क र्क र्क्क ड्र क्क क़्क क़्क क़् क्ष्क क्ष् त्र्क द्द कि हि रू रु र्के र्कं क् कु के द्द्द क़्ष क्ष र्क्षे द्दत्र्क ज्ञ क्त्व ज्ञ्क र्कँ र्किँ र्केँ र्क्रिँ हिंदी ह्मिह्यिखि ङ्क ङ्म ङ्क्त ङ्ख ङ्ग ङ्घ ङ्क्ष ङ्क्ष्व ङ्क्ष्य र्क्त्वि र्र्र्र कै के कु कू कृ कॅ कॆ हु हू हॆ है हे - - - 0x0000009A, 0x000001FE, 0x00000003, 0x000000A4, 0x00000051, 0x00000003, 0x000000A2, 0x0000FFFF, - 0x0000FFFF, 0x00000003, 0x000001D4, 0x000000C8, 0x0000FFFF, 0x00000080, 0x00000003, 0x000001D1, - 0x00000080, 0x0000009A, 0x00000051, 0x00000003, 0x000001D1, 0x0000008A, 0x0000009A, 0x00000051, - 0x00000003, 0x000001D1, 0x000000A1, 0x000000DB, 0x0000FFFF, 0x00000091, 0x00000223, 0x00000003, - 0x000001D1, 0x00000080, 0x000000E2, 0x0000FFFF, 0x0000009A, 0x00000051, 0x00000232, 0x00000003, - 0x000000A2, 0x0000FFFF, 0x0000FFFF, 0x0000008F, 0x000000E2, 0x0000FFFF, 0x000000A3, 0x0000FFFF, - 0x0000FFFF, 0x0000008F, 0x000000E2, 0x0000FFFF, 0x000000A2, 0x0000FFFF, 0x0000FFFF, 0x00000003, - 0x0000009E, 0x0000009A, 0x00000051, 0x00000003, 0x00000090, 0x0000009A, 0x00000051, 0x00000003, - 0x0000009E, 0x0000009A, 0x00000051, 0x00000003, 0x00000080, 0x00000080, 0x0000022F, 0x00000003, - 0x00000080, 0x0000022F, 0x0000024D, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000080, 0x0000022F, - 0x0000029C, 0x000001D7, 0x00000080, 0x000001D7, 0x0000029C, 0x0000022F, 0x00000080, 0x0000022F, - 0x0000029C, 0x000001D9, 0x00000003, 0x00000080, 0x000001D7, 0x0000005B, 0x0000FFFF, 0x00000003, - 0x000000A4, 0x00000003, 0x00000080, 0x00000003, 0x00000080, 0x00000051, 0x00000003, 0x000000A2, - 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000A2, 0x0000FFFF, 0x0000FFFF, 0x00000051, 0x00000003, - 0x000000EA, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000080, 0x00000003, 0x00000003, 0x000000AB, - 0x0000FFFF, 0x00000003, 0x00000087, 0x00000003, 0x00000087, 0x00000051, 0x00000003, 0x000000A3, - 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000A3, 0x0000FFFF, 0x0000FFFF, 0x00000051, 0x00000003, - 0x000000EB, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000080, 0x00000003, 0x00000080, 0x0000005B, - 0x0000FFFF, 0x00000003, 0x000000C8, 0x0000FFFF, 0x00000080, 0x0000005B, 0x0000FFFF, 0x00000003, - 0x0000008C, 0x0000009A, 0x00000051, 0x00000003, 0x000000C8, 0x0000FFFF, 0x00000080, 0x00000003, - 0x000000EC, 0x0000FFFF, 0x00000080, 0x00000003, 0x000000EC, 0x0000FFFF, 0x00000080, 0x00000003, - 0x000000A4, 0x00000051, 0x00000003, 0x000000EA, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000080, - 0x00000003, 0x000000A2, 0x0000FFFF, 0x0000FFFF, 0x00000051, 0x00000003, 0x000000D7, 0x0000FFFF, - 0x000000E2, 0x0000FFFF, 0x00000080, 0x00000003, 0x000001A7, 0x0000FFFF, 0x0000FFFF, 0x00000003, - 0x000001D1, 0x00000080, 0x00000003, 0x000001D1, 0x000000A1, 0x00000003, 0x0000009A, 0x000001FE, - 0x00000003, 0x0000009A, 0x000001FD, 0x00000003, 0x00000080, 0x0000022F, 0x0000005A, 0x0000FFFF, - 0x00000003, 0x00000080, 0x0000024D, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000080, 0x00000051, - 0x00000003, 0x00000080, 0x000001D5, 0x00000003, 0x00000080, 0x0000022F, 0x00000003, 0x000000D9, - 0x0000FFFF, 0x000001A7, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000EC, 0x0000FFFF, 0x0000009F, - 0x00000003, 0x000000A2, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000A2, 0x0000FFFF, 0x0000FFFF, - 0x0000022F, 0x0000005A, 0x0000FFFF, 0x00000003, 0x000001A7, 0x0000FFFF, 0x0000FFFF, 0x000000D7, - 0x0000FFFF, 0x000000E2, 0x0000FFFF, 0x00000080, 0x00000003, 0x000000A3, 0x0000FFFF, 0x0000FFFF, - 0x00000003, 0x000000C8, 0x0000FFFF, 0x000000D7, 0x0000FFFF, 0x0000009D, 0x00000003, 0x000000EB, - 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000080, 0x00000003, 0x00000080, 0x0000024C, 0x0000FFFF, - 0x0000FFFF, 0x00000003, 0x000001D1, 0x00000080, 0x0000024C, 0x0000FFFF, 0x0000FFFF, 0x00000003, - 0x00000080, 0x0000022F, 0x0000024C, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000001D1, 0x00000080, - 0x000000E2, 0x0000FFFF, 0x0000009A, 0x00000051, 0x00000231, 0x00000003, 0x000001D1, 0x000000A1, - 0x00000232, 0x00000091, 0x00000223, 0x00000003, 0x000001D3, 0x000001BA, 0x0000FFFF, 0x0000FFFF, - 0x000001D3, 0x000001BB, 0x0000FFFF, 0x0000FFFF, 0x000001D4, 0x00000081, 0x00000003, 0x000000CC, - 0x0000FFFF, 0x00000080, 0x00000003, 0x000001A2, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000CC, - 0x0000FFFF, 0x000001A0, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000CC, 0x0000FFFF, 0x00000081, - 0x00000003, 0x000000CC, 0x0000FFFF, 0x00000082, 0x00000003, 0x000000CC, 0x0000FFFF, 0x00000083, - 0x00000003, 0x000000CC, 0x0000FFFF, 0x000000A2, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000CC, - 0x0000FFFF, 0x000000EA, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000009D, 0x00000003, 0x000000CC, - 0x0000FFFF, 0x000000EA, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000099, 0x00000003, 0x000001D4, - 0x000000C8, 0x0000FFFF, 0x000000D7, 0x0000FFFF, 0x0000009D, 0x0000005B, 0x0000FFFF, 0x00000003, - 0x0000009A, 0x00000051, 0x0000009A, 0x000000E2, 0x0000FFFF, 0x0000009A, 0x00000051, 0x00000003, - 0x00000080, 0x00000230, 0x00000003, 0x00000080, 0x0000022F, 0x00000003, 0x00000080, 0x000001D5, - 0x00000003, 0x00000080, 0x000001D7, 0x00000003, 0x00000080, 0x000001D9, 0x00000003, 0x00000080, - 0x0000022D, 0x00000003, 0x00000080, 0x0000022E, 0x00000003, 0x000000A1, 0x000001D5, 0x00000003, - 0x000000A1, 0x000001D7, 0x00000003, 0x000000A1, 0x0000022E, 0x00000003, 0x000000A1, 0x00000230, - 0x00000003, 0x000000A1, 0x0000022F - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000D, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000E, 0x00000012, - 0x0000000F, 0x00000011, 0x00000010, 0x00000013, 0x00000017, 0x00000014, 0x00000016, 0x00000015, - 0x00000018, 0x0000001A, 0x00000019, 0x0000001B, 0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F, - 0x00000025, 0x00000022, 0x00000024, 0x00000023, 0x00000020, 0x00000021, 0x00000026, 0x00000027, - 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002D, 0x0000002C, 0x0000002E, 0x0000002F, - 0x00000030, 0x00000031, 0x00000033, 0x00000032, 0x00000034, 0x00000035, 0x00000036, 0x00000037, - 0x00000038, 0x0000003A, 0x00000039, 0x0000003B, 0x0000003C, 0x0000003E, 0x0000003D, 0x0000003F, - 0x00000040, 0x00000042, 0x00000041, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000047, - 0x0000004A, 0x0000004B, 0x00000048, 0x00000049, 0x0000004C, 0x0000004D, 0x0000004E, 0x0000004F, - 0x00000050, 0x00000050, 0x00000051, 0x00000052, 0x00000053, 0x00000053, 0x00000054, 0x00000055, - 0x00000056, 0x00000056, 0x00000057, 0x0000005A, 0x0000005B, 0x00000058, 0x00000059, 0x0000005C, - 0x0000005D, 0x0000005E, 0x0000005F, 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, - 0x00000065, 0x00000066, 0x00000067, 0x00000068, 0x00000069, 0x0000006A, 0x0000006B, 0x0000006C, - 0x0000006D, 0x0000006E, 0x0000006F, 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, - 0x00000075, 0x00000076, 0x00000077, 0x00000078, 0x00000079, 0x0000007A, 0x0000007B, 0x0000007C, - 0x0000007D, 0x0000007E, 0x0000007F, 0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, - 0x00000085, 0x00000086, 0x00000087, 0x00000088, 0x00000089, 0x0000008A, 0x0000008D, 0x0000008B, - 0x0000008C, 0x0000008E, 0x00000091, 0x00000092, 0x00000093, 0x0000008F, 0x00000090, 0x00000094, - 0x00000095, 0x00000097, 0x00000096, 0x00000098, 0x00000099, 0x0000009A, 0x0000009B, 0x0000009C, - 0x0000009D, 0x0000009E, 0x0000009F, 0x000000A0, 0x000000A1, 0x000000A2, 0x000000A3, 0x000000A4, - 0x000000A5, 0x000000A6, 0x000000A7, 0x000000A8, 0x000000A9, 0x000000AA, 0x000000AB, 0x000000AC, - 0x000000AD, 0x000000AE, 0x000000AF, 0x000000B0, 0x000000B1, 0x000000B2, 0x000000B3, 0x000000B4, - 0x000000B5, 0x000000B6, 0x000000B7, 0x000000B8, 0x000000B9, 0x000000BA, 0x000000BB, 0x000000BC, - 0x000000BE, 0x000000BD, 0x000000BF, 0x000000C1, 0x000000C0, 0x000000C2, 0x000000C3, 0x000000C4, - 0x000000C5, 0x000000C6, 0x000000C7, 0x000000C8, 0x000000CB, 0x000000CC, 0x000000C9, 0x000000CA, - 0x000000CD, 0x000000D0, 0x000000CE, 0x000000CF, 0x000000D1, 0x000000D2, 0x000000D3, 0x000000D4, - 0x000000D5, 0x000000D6, 0x000000D7, 0x000000D8, 0x000000D9, 0x000000DA, 0x000000DB, 0x000000DC, - 0x000000DD, 0x000000DE, 0x000000DF, 0x000000E0, 0x000000E1, 0x000000E2, 0x000000E3, 0x000000E4, - 0x000000E5, 0x000000E6, 0x000000E7, 0x000000E8, 0x000000E9, 0x000000EC, 0x000000ED, 0x000000EE, - 0x000000EF, 0x000000EA, 0x000000EB, 0x000000F0, 0x000000F1, 0x000000F2, 0x000000F3, 0x000000F4, - 0x000000F5, 0x000000F6, 0x000000F7, 0x000000F8, 0x000000F9, 0x000000FA, 0x000000FB, 0x000000FC, - 0x000000FD, 0x000000FE, 0x000000FF, 0x00000100, 0x00000101, 0x00000102, 0x00000103, 0x00000104, - 0x00000105, 0x00000106, 0x00000107, 0x00000108, 0x00000109, 0x0000010C, 0x0000010A, 0x0000010B, - 0x0000010D, 0x0000010E, 0x00000112, 0x00000111, 0x0000010F, 0x00000110, 0x00000113, 0x00000114, - 0x00000117, 0x00000118, 0x00000115, 0x00000116, 0x00000119, 0x0000011A, 0x00000120, 0x0000011D, - 0x0000011F, 0x0000011E, 0x0000011B, 0x0000011C, 0x00000121, 0x00000122, 0x00000124, 0x00000123, - 0x00000125, 0x00000126, 0x00000127, 0x00000128, 0x0000012C, 0x00000129, 0x0000012A, 0x0000012B, - 0x00000130, 0x0000012D, 0x0000012E, 0x0000012F, 0x00000132, 0x00000131, 0x00000133, 0x00000134, - 0x00000135, 0x00000136, 0x00000137, 0x00000138, 0x00000139, 0x0000013A, 0x0000013B, 0x0000013C, - 0x0000013D, 0x0000013E, 0x0000013F, 0x00000140, 0x00000141, 0x00000142, 0x00000143, 0x00000144, - 0x00000145, 0x00000146, 0x00000147, 0x00000148, 0x00000149, 0x0000014A, 0x0000014B, 0x0000014C, - 0x0000014D, 0x0000014E, 0x0000014F, 0x00000150, 0x00000151, 0x00000152, 0x00000153, 0x00000154, - 0x00000155, 0x00000156, 0x00000157, 0x00000158, 0x00000159, 0x0000015A, 0x0000015B, 0x0000015C, - 0x0000015D, 0x0000015E, 0x0000015F, 0x00000160, 0x00000161, 0x00000162, 0x00000163, 0x0000016B, - 0x00000166, 0x00000167, 0x00000168, 0x00000169, 0x0000016A, 0x00000164, 0x00000165, 0x0000016C, - 0x0000016F, 0x00000170, 0x00000171, 0x00000173, 0x00000172, 0x0000016D, 0x0000016E, 0x00000174, - 0x00000175, 0x00000176, 0x00000177, 0x00000178, 0x00000179, 0x0000017A, 0x0000017B, 0x0000017C, - 0x0000017D, 0x0000017E, 0x0000017F, 0x00000180, 0x00000181, 0x00000182, 0x00000183, 0x00000184, - 0x00000185, 0x00000186, 0x00000187, 0x00000188, 0x00000189, 0x0000018A, 0x0000018B, 0x0000018C, - 0x0000018D, 0x0000018E, 0x0000018F, 0x00000190, 0x00000191, 0x00000192, 0x00000193, 0x00000194, - 0x00000195, 0x00000196, 0x00000197 - - - - 0.000000, 0.000000, 6.515625, 0.000000, 8.121094, 0.000000, 14.121094, 0.000000, - 24.861328, -0.451172, 24.996094, 0.000000, 30.996094, 0.000000, 41.871094, 0.000000, - 41.871094, 0.000000, 41.871094, 0.000000, 47.871094, 0.000000, 52.230469, 0.000000, - 60.949219, 0.000000, 60.949219, 0.000000, 71.824219, 0.000000, 77.824219, 0.000000, - 82.183594, 0.000000, 93.058594, 0.000000, 102.720703, -0.451172, 99.574219, 0.000000, - 105.574219, 0.000000, 109.933594, 0.000000, 117.902344, 0.000000, 127.564453, -0.451172, - 124.417969, 0.000000, 130.417969, 0.000000, 134.777344, 0.000000, 142.746094, 0.000000, - 150.011719, 0.000000, 150.011719, 0.000000, 157.980469, 0.000000, 161.636719, 0.000000, - 167.636719, 0.000000, 171.996094, 0.000000, 182.871094, 0.000000, 186.621094, 0.000000, - 186.621094, 0.000000, 196.283203, -0.451172, 191.613281, 0.439453, 193.136719, 0.000000, - 199.136719, 0.000000, 210.011719, 0.000000, 210.011719, 0.000000, 210.011719, 0.000000, - 217.980469, 0.000000, 221.730469, 0.000000, 221.730469, 0.000000, 232.605469, 0.000000, - 232.605469, 0.000000, 232.605469, 0.000000, 240.574219, 0.000000, 244.324219, 0.000000, - 244.324219, 0.000000, 255.199219, 0.000000, 255.199219, 0.000000, 255.199219, 0.000000, - 261.199219, 0.000000, 270.667969, 0.000000, 280.330078, -0.451172, 277.183594, 0.000000, - 283.183594, 0.000000, 292.652344, 0.000000, 302.314453, -0.451172, 299.167969, 0.000000, - 305.167969, 0.000000, 314.636719, 0.000000, 324.298828, -0.451172, 321.152344, 0.000000, - 327.152344, 0.000000, 338.027344, 0.000000, 344.783203, 0.263672, 348.902344, 0.000000, - 354.902344, 0.000000, 361.658203, 0.263672, 362.279297, 0.263672, 365.777344, 0.000000, - 365.777344, 0.000000, 365.777344, 0.000000, 371.777344, 0.000000, 378.533203, 0.263672, - 382.652344, 0.000000, 390.193359, 0.000000, 390.193359, 0.000000, 397.916016, -0.011719, - 401.068359, 0.000000, 408.609375, 0.000000, 408.609375, 0.000000, 415.365234, 0.263672, - 419.484375, 0.000000, 427.025391, 0.000000, 427.025391, 0.000000, 433.025391, 0.000000, - 440.748047, -0.011719, 440.929688, 0.263672, 443.900391, 0.000000, 443.900391, 0.000000, - 449.900391, 0.000000, 460.775391, 0.000000, 466.775391, 0.000000, 477.650391, 0.000000, - 483.650391, 0.000000, 494.390625, -0.451172, 494.525391, 0.000000, 500.525391, 0.000000, - 511.400391, 0.000000, 511.400391, 0.000000, 511.400391, 0.000000, 517.400391, 0.000000, - 528.275391, 0.000000, 528.275391, 0.000000, 531.457031, -0.451172, 528.275391, 0.000000, - 534.275391, 0.000000, 542.994141, 0.000000, 542.994141, 0.000000, 542.994141, 0.000000, - 542.994141, 0.000000, 553.869141, 0.000000, 559.869141, 0.000000, 565.869141, 0.000000, - 575.337891, 0.000000, 575.337891, 0.000000, 581.337891, 0.000000, 590.806641, 0.000000, - 596.806641, 0.000000, 609.597656, -0.451172, 606.275391, 0.000000, 612.275391, 0.000000, - 623.150391, 0.000000, 623.150391, 0.000000, 623.150391, 0.000000, 629.150391, 0.000000, - 640.025391, 0.000000, 640.025391, 0.000000, 643.207031, -0.451172, 640.025391, 0.000000, - 646.025391, 0.000000, 653.994141, 0.000000, 653.994141, 0.000000, 653.994141, 0.000000, - 653.994141, 0.000000, 664.869141, 0.000000, 670.869141, 0.000000, 678.773438, 0.263672, - 681.744141, 0.000000, 681.744141, 0.000000, 687.744141, 0.000000, 696.462891, 0.000000, - 696.462891, 0.000000, 704.367188, 0.263672, 707.337891, 0.000000, 707.337891, 0.000000, - 713.337891, 0.000000, 721.306641, 0.000000, 730.968750, -0.451172, 727.822266, 0.000000, - 733.822266, 0.000000, 742.541016, 0.000000, 742.541016, 0.000000, 753.416016, 0.000000, - 759.416016, 0.000000, 768.134766, 0.000000, 768.134766, 0.000000, 779.009766, 0.000000, - 785.009766, 0.000000, 793.728516, 0.000000, 793.728516, 0.000000, 804.603516, 0.000000, - 810.603516, 0.000000, 821.343750, -0.451172, 821.478516, 0.000000, 827.478516, 0.000000, - 836.197266, 0.000000, 836.197266, 0.000000, 836.197266, 0.000000, 836.197266, 0.000000, - 847.072266, 0.000000, 853.072266, 0.000000, 863.947266, 0.000000, 863.947266, 0.000000, - 867.128906, -0.451172, 863.947266, 0.000000, 869.947266, 0.000000, 875.876953, 0.000000, - 875.876953, 0.000000, 879.626953, 0.000000, 879.626953, 0.000000, 890.501953, 0.000000, - 896.501953, 0.000000, 903.064453, 0.000000, 903.064453, 0.000000, 903.064453, 0.000000, - 909.064453, 0.000000, 913.423828, 0.000000, 924.298828, 0.000000, 930.298828, 0.000000, - 934.658203, 0.000000, 942.626953, 0.000000, 948.626953, 0.000000, 955.142578, 0.000000, - 956.748047, 0.000000, 962.748047, 0.000000, 969.263672, 0.000000, 970.623047, 0.000000, - 976.623047, 0.000000, 983.378906, 0.263672, 983.853516, 0.164062, 987.498047, 0.000000, - 987.498047, 0.000000, 993.498047, 0.000000, 1000.875000, 0.263672, 1004.373047, 0.000000, - 1004.373047, 0.000000, 1004.373047, 0.000000, 1010.373047, 0.000000, 1021.113281, -0.451172, - 1021.248047, 0.000000, 1027.248047, 0.000000, 1034.947266, -0.011719, 1038.123047, 0.000000, - 1044.123047, 0.000000, 1050.878906, 0.263672, 1054.998047, 0.000000, 1060.998047, 0.000000, - 1068.966797, 0.000000, 1068.966797, 0.000000, 1075.529297, 0.000000, 1075.529297, 0.000000, - 1075.529297, 0.000000, 1081.529297, 0.000000, 1090.248047, 0.000000, 1090.248047, 0.000000, - 1098.216797, 0.000000, 1104.216797, 0.000000, 1115.091797, 0.000000, 1115.091797, 0.000000, - 1115.091797, 0.000000, 1121.091797, 0.000000, 1131.966797, 0.000000, 1131.966797, 0.000000, - 1131.164062, 0.275391, 1131.638672, 0.175781, 1131.966797, 0.000000, 1131.966797, 0.000000, - 1137.966797, 0.000000, 1144.529297, 0.000000, 1144.529297, 0.000000, 1144.529297, 0.000000, - 1150.458984, 0.000000, 1150.458984, 0.000000, 1154.208984, 0.000000, 1154.208984, 0.000000, - 1165.083984, 0.000000, 1171.083984, 0.000000, 1181.958984, 0.000000, 1181.958984, 0.000000, - 1181.958984, 0.000000, 1187.958984, 0.000000, 1196.677734, 0.000000, 1196.677734, 0.000000, - 1202.607422, 0.000000, 1202.607422, 0.000000, 1210.576172, 0.000000, 1216.576172, 0.000000, - 1224.544922, 0.000000, 1224.544922, 0.000000, 1224.544922, 0.000000, 1224.544922, 0.000000, - 1235.419922, 0.000000, 1241.419922, 0.000000, 1249.236328, 0.263672, 1252.294922, 0.000000, - 1252.294922, 0.000000, 1252.294922, 0.000000, 1258.294922, 0.000000, 1262.654297, 0.000000, - 1270.470703, 0.263672, 1273.529297, 0.000000, 1273.529297, 0.000000, 1273.529297, 0.000000, - 1279.529297, 0.000000, 1286.285156, 0.263672, 1287.345703, 0.263672, 1290.404297, 0.000000, - 1290.404297, 0.000000, 1290.404297, 0.000000, 1296.404297, 0.000000, 1300.763672, 0.000000, - 1311.638672, 0.000000, 1315.388672, 0.000000, 1315.388672, 0.000000, 1325.050781, -0.451172, - 1323.474609, -0.087891, 1321.904297, 0.000000, 1327.904297, 0.000000, 1332.263672, 0.000000, - 1338.767578, 0.439453, 1340.232422, 0.000000, 1348.201172, 0.000000, 1351.857422, 0.000000, - 1357.857422, 0.000000, 1362.216797, 0.000000, 1372.388672, 0.000000, 1372.388672, 0.000000, - 1372.388672, 0.000000, 1376.748047, 0.000000, 1386.919922, 0.000000, 1386.919922, 0.000000, - 1386.919922, 0.000000, 1391.279297, 0.000000, 1402.154297, 0.000000, 1408.154297, 0.000000, - 1416.123047, 0.000000, 1416.123047, 0.000000, 1426.998047, 0.000000, 1432.998047, 0.000000, - 1446.076172, 0.000000, 1446.076172, 0.000000, 1446.076172, 0.000000, 1452.076172, 0.000000, - 1460.044922, 0.000000, 1460.044922, 0.000000, 1471.294922, 0.000000, 1471.294922, 0.000000, - 1471.294922, 0.000000, 1477.294922, 0.000000, 1485.263672, 0.000000, 1485.263672, 0.000000, - 1496.138672, 0.000000, 1502.138672, 0.000000, 1510.107422, 0.000000, 1510.107422, 0.000000, - 1519.576172, 0.000000, 1525.576172, 0.000000, 1533.544922, 0.000000, 1533.544922, 0.000000, - 1543.013672, 0.000000, 1549.013672, 0.000000, 1556.982422, 0.000000, 1556.982422, 0.000000, - 1567.857422, 0.000000, 1567.857422, 0.000000, 1567.857422, 0.000000, 1573.857422, 0.000000, - 1581.826172, 0.000000, 1581.826172, 0.000000, 1590.544922, 0.000000, 1590.544922, 0.000000, - 1590.544922, 0.000000, 1590.544922, 0.000000, 1598.513672, 0.000000, 1604.513672, 0.000000, - 1612.482422, 0.000000, 1612.482422, 0.000000, 1621.201172, 0.000000, 1621.201172, 0.000000, - 1621.201172, 0.000000, 1621.201172, 0.000000, 1630.669922, 0.000000, 1636.669922, 0.000000, - 1641.029297, 0.000000, 1649.748047, 0.000000, 1649.748047, 0.000000, 1655.677734, 0.000000, - 1655.677734, 0.000000, 1663.939453, 0.263672, 1663.646484, 0.000000, 1663.646484, 0.000000, - 1669.646484, 0.000000, 1679.308594, -0.451172, 1676.162109, 0.000000, 1682.677734, 0.000000, - 1686.427734, 0.000000, 1686.427734, 0.000000, 1696.089844, -0.451172, 1692.943359, 0.000000, - 1698.943359, 0.000000, 1706.314453, 0.263672, 1709.818359, 0.000000, 1715.818359, 0.000000, - 1722.574219, 0.263672, 1726.693359, 0.000000, 1732.693359, 0.000000, 1740.392578, -0.011719, - 1743.568359, 0.000000, 1749.568359, 0.000000, 1757.291016, -0.011719, 1760.443359, 0.000000, - 1766.443359, 0.000000, 1774.376953, -0.011719, 1777.318359, 0.000000, 1783.318359, 0.000000, - 1791.738281, -0.439453, 1794.193359, 0.000000, 1800.193359, 0.000000, 1808.121094, 0.263672, - 1811.068359, 0.000000, 1817.068359, 0.000000, 1823.085938, -0.011719, 1825.037109, 0.000000, - 1831.037109, 0.000000, 1837.078125, -0.011719, 1839.005859, 0.000000, 1845.005859, 0.000000, - 1852.529297, 0.263672, 1852.974609, 0.000000, 1858.974609, 0.000000, 1865.941406, 0.263672, - 1866.943359, 0.000000, 1872.943359, 0.000000, 1879.294922, 0.263672, 1880.912109, 0.000000 - - - - - - - 中华人民共和国 台湾 中華人民共和國 臺灣 - - - 0x000020BC, 0x000025DD, 0x00002149, 0x00003EA0, 0x00002400, 0x0000271B, 0x0000298C, 0x00000003, - 0x0000267F, 0x0000410D, 0x00000003, 0x000020BC, 0x0000567E, 0x00002149, 0x00003EA0, 0x00002400, - 0x0000271B, 0x0000299A, 0x00000003, 0x00005489, 0x000042F2 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014 - - - - 0.000000, 0.000000, 12.000000, 0.000000, 24.000000, 0.000000, 36.000000, 0.000000, - 48.000000, 0.000000, 60.000000, 0.000000, 72.000000, 0.000000, 84.000000, 0.000000, - 87.333984, 0.000000, 99.333984, 0.000000, 111.333984, 0.000000, 114.667969, 0.000000, - 126.667969, 0.000000, 138.667969, 0.000000, 150.667969, 0.000000, 162.667969, 0.000000, - 174.667969, 0.000000, 186.667969, 0.000000, 198.667969, 0.000000, 202.001953, 0.000000, - 214.001953, 0.000000, 226.001953, 0.000000 - - - - - - - 中华人民共和国 台湾 中華人民共和國 臺灣 - - - 0x000020BC, 0x000025DD, 0x00002149, 0x00003EA0, 0x00002400, 0x0000271B, 0x0000298C, 0x00000003, - 0x0000267F, 0x0000410D, 0x00000003, 0x000020BC, 0x00007492, 0x00002149, 0x00003EA0, 0x00002400, - 0x0000271B, 0x0000299A, 0x00000003, 0x00005489, 0x000042F2 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014 - - - - 0.000000, 0.000000, 12.000000, 0.000000, 24.000000, 0.000000, 36.000000, 0.000000, - 48.000000, 0.000000, 60.000000, 0.000000, 72.000000, 0.000000, 84.000000, 0.000000, - 87.333984, 0.000000, 99.333984, 0.000000, 111.333984, 0.000000, 114.667969, 0.000000, - 126.667969, 0.000000, 138.667969, 0.000000, 150.667969, 0.000000, 162.667969, 0.000000, - 174.667969, 0.000000, 186.667969, 0.000000, 198.667969, 0.000000, 202.001953, 0.000000, - 214.001953, 0.000000, 226.001953, 0.000000 - - - - - - - 中华人民共和国 台湾 中華人民共和國 臺灣 - - - 0x000020BC, 0x000025DD, 0x00002149, 0x000079EB, 0x00002400, 0x0000271B, 0x0000298C, 0x00000003, - 0x00007677, 0x0000410D, 0x00000003, 0x000020BC, 0x00007E26, 0x00002149, 0x000079EB, 0x00002400, - 0x0000271B, 0x0000299A, 0x00000003, 0x00007D8F, 0x00007A97 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014 - - - - 0.000000, 0.000000, 12.000000, 0.000000, 24.000000, 0.000000, 36.000000, 0.000000, - 48.000000, 0.000000, 60.000000, 0.000000, 72.000000, 0.000000, 84.000000, 0.000000, - 87.333984, 0.000000, 99.333984, 0.000000, 111.333984, 0.000000, 114.667969, 0.000000, - 126.667969, 0.000000, 138.667969, 0.000000, 150.667969, 0.000000, 162.667969, 0.000000, - 174.667969, 0.000000, 186.667969, 0.000000, 198.667969, 0.000000, 202.001953, 0.000000, - 214.001953, 0.000000, 226.001953, 0.000000 - - - - - - - 中华人民共和国 台湾 中華人民共和國 臺灣 - - - 0x000020BC, 0x000025DD, 0x00002149, 0x000079EB, 0x00002400, 0x0000271B, 0x0000298C, 0x00000003, - 0x00007677, 0x00008886, 0x00000003, 0x000020BC, 0x0000567E, 0x00002149, 0x000079EB, 0x00002400, - 0x0000271B, 0x0000299A, 0x00000003, 0x00007D8F, 0x00007A97 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014 - - - - 0.000000, 0.000000, 12.000000, 0.000000, 24.000000, 0.000000, 36.000000, 0.000000, - 48.000000, 0.000000, 60.000000, 0.000000, 72.000000, 0.000000, 84.000000, 0.000000, - 87.333984, 0.000000, 99.333984, 0.000000, 111.333984, 0.000000, 114.667969, 0.000000, - 126.667969, 0.000000, 138.667969, 0.000000, 150.667969, 0.000000, 162.667969, 0.000000, - 174.667969, 0.000000, 186.667969, 0.000000, 198.667969, 0.000000, 202.001953, 0.000000, - 214.001953, 0.000000, 226.001953, 0.000000 - - - - - - - शङ़ु - - - 0x00000002, 0x00000001, 0x00000006, 0x0000FFFF - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003 - - - - 0.000000, 0.000000, 7.572000, 0.000000, 15.108000, 0.000000, 15.108000, 0.000000, - 15.108000, 0.000000 - - - - - - - शङ़ु - - - 0x00000005, 0x00000001, 0x00000006, 0x0000FFFF - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003 - - - - 0.000000, 0.000000, 7.392000, 0.000000, 14.927999, 0.000000, 14.927999, 0.000000, - 14.927999, 0.000000 - - - - - - - क्ष र्क क्‍ष र्‍क - - - 0x000000A2, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x00000080, 0x0000005B, 0x0000FFFF, 0x00000003, - 0x00000080, 0x00000051, 0x00000001, 0x0000009F, 0x00000003, 0x0000009A, 0x00000051, 0x00000001, - 0x00000080 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000006, 0x00000004, 0x00000005, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010 - - - - 0.000000, 0.000000, 10.875000, 0.000000, 10.875000, 0.000000, 10.875000, 0.000000, - 16.875000, 0.000000, 24.779297, 0.263672, 27.750000, 0.000000, 27.750000, 0.000000, - 33.750000, 0.000000, 44.490234, -0.451172, 44.625000, 0.000000, 44.625000, 0.000000, - 52.593750, 0.000000, 58.593750, 0.000000, 68.255859, -0.451172, 65.109375, 0.000000, - 65.109375, 0.000000, 75.984375, 0.000000 - - - - - - - 마만만 - - - 0x00000000, 0x0000FFFF, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x00000000, 0x0000FFFF - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006 - - - - 0.000000, 0.000000, 9.000000, 0.000000, 9.000000, 0.000000, 18.000000, 0.000000, - 18.000000, 0.000000, 18.000000, 0.000000, 27.000000, 0.000000, 27.000000, 0.000000 - - - - - - - מָשְׁכֵנִיאַחֲרֶיךָנָּרוּצָההֱבִיאַנִיהַמֶּלֶךְחֲדָרָיונָגִילָהוְנִשְׂמְחָהבָּךְנַזְכִּירָהדֹדֶיךָמִיַּיִןמֵישָׁרִיםאֲהֵבוּךָ - - - 0x0000FFFF, 0x00000055, 0x0000FFFF, 0x0000004B, 0x0000001D, 0x00000097, 0x00000021, 0x00000094, - 0x0000001B, 0x0000002D, 0x00000027, 0x00000096, 0x0000003A, 0x0000009A, 0x0000FFFF, 0x00000066, - 0x00000027, 0x00000097, 0x0000002F, 0x00000030, 0x00000096, 0x00000027, 0x00000099, 0x0000FFFF, - 0x00000051, 0x00000096, 0x0000002F, 0x0000FFFF, 0x00000055, 0x00000027, 0x00000098, 0x0000001F, - 0x0000009C, 0x0000001F, 0x00000021, 0x0000009A, 0x0000003A, 0x00000027, 0x00000096, 0x0000FFFF, - 0x00000056, 0x00000092, 0x00000024, 0x00000099, 0x00000031, 0x0000FFFF, 0x00000054, 0x0000009A, - 0x0000FFFF, 0x00000043, 0x00000021, 0x0000009A, 0x00000025, 0x00000092, 0x0000002F, 0x00000092, - 0x0000FFFF, 0x00000067, 0x00000096, 0x00000031, 0x00000092, 0x00000023, 0x00000021, 0x0000009A, - 0x0000002B, 0x00000027, 0x00000096, 0x0000001E, 0x0000009A, 0x00000031, 0x00000023, 0x00000027, - 0x0000009A, 0x0000003A, 0x0000009A, 0x0000001F, 0x00000094, 0x00000025, 0x0000FFFF, 0x00000054, - 0x00000098, 0x0000002B, 0x00000098, 0x0000FFFF, 0x0000005D, 0x00000099, 0x00000021, 0x00000027, - 0x00000096, 0x00000031, 0x00000099, 0x0000001B, 0x00000027, 0x00000096, 0x0000001D, 0x00000093, - 0x00000021, 0x00000021, 0x0000009A, 0x00000038, 0x0000FFFF, 0x0000004B, 0x0000003A, 0x0000009A, - 0x0000FFFF, 0x0000005E, 0x0000FFFF, 0x00000055, 0x00000027, 0x00000098, 0x0000003A, 0x00000094, - 0x00000025, 0x00000099, 0x0000001B, 0x00000027, 0x00000096, 0x00000031, 0x00000097, 0x00000029, - 0x00000092, 0x0000FFFF, 0x00000066, 0x0000009A, 0x0000002F - - - - 0x0000007C, 0x0000007B, 0x0000007A, 0x00000079, 0x00000078, 0x00000077, 0x00000076, 0x00000075, - 0x00000074, 0x00000073, 0x00000072, 0x00000071, 0x00000070, 0x0000006F, 0x0000006E, 0x0000006D, - 0x0000006C, 0x0000006B, 0x0000006A, 0x00000069, 0x00000068, 0x00000067, 0x00000066, 0x00000065, - 0x00000064, 0x00000063, 0x00000062, 0x00000061, 0x00000060, 0x0000005F, 0x0000005E, 0x0000005D, - 0x0000005C, 0x0000005B, 0x0000005A, 0x00000059, 0x00000058, 0x00000057, 0x00000056, 0x00000055, - 0x00000054, 0x00000053, 0x00000052, 0x00000051, 0x00000050, 0x0000004F, 0x0000004E, 0x0000004D, - 0x0000004C, 0x0000004B, 0x0000004A, 0x00000049, 0x00000048, 0x00000047, 0x00000046, 0x00000045, - 0x00000044, 0x00000043, 0x00000042, 0x00000041, 0x00000040, 0x0000003F, 0x0000003E, 0x0000003D, - 0x0000003C, 0x0000003B, 0x0000003A, 0x00000039, 0x00000038, 0x00000037, 0x00000036, 0x00000035, - 0x00000034, 0x00000033, 0x00000032, 0x00000031, 0x00000030, 0x0000002F, 0x0000002E, 0x0000002D, - 0x0000002C, 0x0000002B, 0x0000002A, 0x00000029, 0x00000028, 0x00000027, 0x00000026, 0x00000025, - 0x00000024, 0x00000023, 0x00000022, 0x00000021, 0x00000020, 0x0000001F, 0x0000001E, 0x0000001D, - 0x0000001C, 0x0000001B, 0x0000001A, 0x00000019, 0x00000018, 0x00000017, 0x00000016, 0x00000015, - 0x00000014, 0x00000013, 0x00000012, 0x00000011, 0x00000010, 0x0000000F, 0x0000000E, 0x0000000D, - 0x0000000C, 0x0000000B, 0x0000000A, 0x00000009, 0x00000008, 0x00000007, 0x00000006, 0x00000005, - 0x00000004, 0x00000003, 0x00000002, 0x00000001, 0x00000000 - - - - 0.000000, 0.000000, 0.000000, 0.000000, 5.806641, 0.000000, 5.806641, 0.000000, - 9.087891, 0.000000, 18.679688, 0.000000, 15.251953, 0.000000, 25.365234, 0.000000, - 21.878906, 0.000000, 28.787109, 0.000000, 35.191406, 0.000000, 42.966797, 0.000000, - 38.279297, 0.000000, 47.982422, 0.000000, 44.085938, 0.000000, 44.085938, 0.000000, - 52.347656, 0.000000, 58.453125, 0.000000, 55.113281, 0.000000, 62.021484, 0.000000, - 66.292969, 0.000000, 64.886719, 0.000000, 69.292969, 0.000000, 67.886719, 0.000000, - 67.886719, 0.000000, 74.050781, 0.000000, 70.710938, 0.000000, 77.619141, 0.000000, - 77.619141, 0.000000, 83.425781, 0.000000, 90.527344, 0.000000, 86.513672, 0.000000, - 91.804688, 0.000000, 92.390625, 0.000000, 98.267578, 0.000000, 109.347656, 0.000000, - 104.894531, 0.000000, 110.701172, 0.000000, 116.250000, 0.000000, 113.701172, 0.000000, - 113.554688, 0.000000, 121.242188, 0.000000, 119.484375, 0.000000, 124.552734, 0.000000, - 122.677734, 0.000000, 126.679688, 0.000000, 126.679688, 0.000000, 135.210938, 0.000000, - 132.486328, 0.000000, 132.251953, 0.000000, 138.416016, 0.000000, 148.734375, 0.000000, - 145.042969, 0.000000, 155.308594, 0.000000, 151.968750, 0.000000, 162.773438, 0.000000, - 158.876953, 0.000000, 158.876953, 0.000000, 168.398438, 0.000000, 166.523438, 0.000000, - 172.546875, 0.000000, 170.525391, 0.000000, 173.689453, 0.000000, 182.718750, 0.000000, - 180.199219, 0.000000, 185.583984, 0.000000, 190.107422, 0.000000, 187.998047, 0.000000, - 194.132812, 0.000000, 192.257812, 0.000000, 196.259766, 0.000000, 199.423828, 0.000000, - 206.964844, 0.000000, 202.511719, 0.000000, 212.332031, 0.000000, 208.318359, 0.000000, - 217.886719, 0.000000, 214.195312, 0.000000, 221.121094, 0.000000, 221.121094, 0.000000, - 229.447266, 0.000000, 226.927734, 0.000000, 235.652344, 0.000000, 232.312500, 0.000000, - 232.312500, 0.000000, 242.648438, 0.000000, 239.220703, 0.000000, 245.847656, 0.000000, - 250.195312, 0.000000, 248.320312, 0.000000, 255.808594, 0.000000, 252.322266, 0.000000, - 259.230469, 0.000000, 265.042969, 0.000000, 262.083984, 0.000000, 271.675781, 0.000000, - 268.248047, 0.000000, 274.875000, 0.000000, 284.197266, 0.000000, 281.501953, 0.000000, - 287.250000, 0.000000, 287.250000, 0.000000, 290.531250, 0.000000, 298.212891, 0.000000, - 296.337891, 0.000000, 296.337891, 0.000000, 300.339844, 0.000000, 300.339844, 0.000000, - 306.146484, 0.000000, 313.687500, 0.000000, 309.234375, 0.000000, 318.732422, 0.000000, - 315.041016, 0.000000, 325.453125, 0.000000, 321.966797, 0.000000, 328.875000, 0.000000, - 333.222656, 0.000000, 331.347656, 0.000000, 338.044922, 0.000000, 335.349609, 0.000000, - 345.175781, 0.000000, 341.279297, 0.000000, 341.279297, 0.000000, 352.558594, 0.000000, - 349.218750, 0.000000, 356.126953, 0.000000 - - - - - - - Ţhiş iş a ţeşţ. - - - 0x00000107, 0x00000049, 0x0000004A, 0x00000104, 0x00000001, 0x0000004A, 0x00000104, 0x00000001, - 0x00000042, 0x00000001, 0x00000108, 0x00000046, 0x00000104, 0x00000108, 0x0000000F - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E - - - - 0.000000, 0.000000, 7.356000, 0.000000, 14.340000, 0.000000, 17.832001, 0.000000, - 22.920000, 0.000000, 25.920000, 0.000000, 29.412001, 0.000000, 34.500000, 0.000000, - 37.500000, 0.000000, 43.500000, 0.000000, 46.500000, 0.000000, 50.411999, 0.000000, - 56.160000, 0.000000, 61.248001, 0.000000, 65.160004, 0.000000, 68.160004, 0.000000 - - - - - - - Ţhiş iş a ţeşţ. - - - 0x00000127, 0x00000049, 0x0000004A, 0x00000126, 0x00000001, 0x0000004A, 0x00000126, 0x00000001, - 0x00000042, 0x00000001, 0x00000128, 0x00000046, 0x00000126, 0x00000128, 0x0000000F - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E - - - - 0.000000, 0.000000, 7.356000, 0.000000, 14.340000, 0.000000, 17.832001, 0.000000, - 22.920000, 0.000000, 25.920000, 0.000000, 29.412001, 0.000000, 34.500000, 0.000000, - 37.500000, 0.000000, 43.500000, 0.000000, 46.500000, 0.000000, 50.411999, 0.000000, - 56.160000, 0.000000, 61.248001, 0.000000, 65.160004, 0.000000, 68.160004, 0.000000 - - - - - - - فتح بینچ خلیج شیخ پہنچ - - - 0x0000003B, 0x00000344, 0x000001D5, 0x00000318, 0x00000349, 0x0000007C, 0x00000003, 0x0000003D, - 0x00000348, 0x000001D5, 0x00000346, 0x000000B5, 0x00000003, 0x0000003A, 0x00000348, 0x000001D5, - 0x000002E3, 0x00000344, 0x00000087, 0x00000003, 0x0000003B, 0x00000344, 0x000001D5, 0x00000348, - 0x000001E5, 0x00000347, 0x0000006E, 0x00000003, 0x0000003C, 0x00000345, 0x000001D5, 0x00000344, - 0x0000011D - - - - 0x00000015, 0x00000014, 0x00000014, 0x00000013, 0x00000012, 0x00000012, 0x00000011, 0x00000010, - 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000C, 0x0000000B, 0x0000000B, - 0x0000000A, 0x00000009, 0x00000009, 0x00000008, 0x00000007, 0x00000006, 0x00000006, 0x00000005, - 0x00000005, 0x00000004, 0x00000004, 0x00000003, 0x00000002, 0x00000001, 0x00000001, 0x00000000, - 0x00000000 - - - - 0.000000, 0.000000, 3.205078, -11.097656, 1.406250, 0.000000, 4.558594, -1.376953, - 9.421875, -5.273438, 7.505859, -6.843750, 11.537109, 0.000000, 12.726562, 0.000000, - 20.455078, -4.798828, 15.357422, 0.000000, 19.289062, -13.072266, 18.509766, -1.376953, - 22.552734, 0.000000, 23.742188, 0.000000, 30.246094, -4.798828, 25.148438, 0.000000, - 28.300781, -1.376953, 32.917969, -13.792969, 30.158203, -7.792969, 35.208984, 0.000000, - 36.398438, 0.000000, 39.603516, -11.097656, 37.804688, 0.000000, 45.632812, 3.181641, - 40.957031, -1.376953, 44.853516, -6.046875, 42.457031, -5.572266, 46.066406, 0.000000, - 47.255859, 0.000000, 49.376953, -11.396484, 48.662109, 0.000000, 52.769531, -14.332031, - 51.814453, -1.376953, 56.789062, 0.000000 - - - - - - - ഹോം - - - 0x00000040, 0x00000038, 0x00000039, 0x00000005 - - - - 0x00000001, 0x00000000, 0x00000001, 0x00000002 - - - - 0.000000, 0.000000, 6.386719, 0.000000, 20.660156, 0.000000, 26.496094, 0.000000, - 32.742188, 0.000000 - - - - - - - റ്1്',s - - - 0x00000000, 0x00000000, 0x00000014, 0x00000956, 0x00000000, 0x0000000A, 0x0000000F, 0x00000056 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000003, 0x00000004, 0x00000005, 0x00000006 - - - - 0.000000, 0.000000, 9.000000, 0.000000, 9.000000, 0.000000, 16.587891, 0.000000, - 16.587891, 0.000000, 25.587891, 0.000000, 28.335938, 0.000000, 47.132812, 0.000000, - 38.250000, 0.000000 - - - - - - - ണു് - - - 0x00000023, 0x0000003C, 0x00000045 - - - - 0x00000000, 0x00000001, 0x00000002 - - - - 0.000000, 0.000000, 15.117188, 0.000000, 18.503906, 0.000000, 18.503906, 0.000000 - - - - - - - 中華人民共和國 臺灣 - - - 0x00000292, 0x000024E8, 0x000002D1, 0x00001582, 0x000004A1, 0x00000650, 0x000007E2, 0x00000021, - 0x00002395, 0x00001896 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009 - - - - 0.000000, 0.000000, 12.000000, 0.000000, 24.000000, 0.000000, 36.000000, 0.000000, - 48.000000, 0.000000, 60.000000, 0.000000, 72.000000, 0.000000, 84.000000, 0.000000, - 90.000000, 0.000000, 102.000000, 0.000000, 114.000000, 0.000000 - - - - - - - ప్రకాష్ - - - 0x00000057, 0x0000023B, 0x0000FFFF, 0x00000125, 0x00000066, 0x00000241, 0x0000FFFF - - - - 0x00000000, 0x00000002, 0x00000001, 0x00000003, 0x00000004, 0x00000005, 0x00000006 - - - - 0.000000, 0.000000, 8.285156, 0.000000, 14.894531, 0.000000, 14.894531, 0.000000, - 21.503906, 0.000000, 25.136719, 0.000000, 33.421875, 0.000000, 33.421875, 0.000000 - - - - - - - บทที่๑พายุไซโคลนโดโรธีอาศัยอยู่ท่ามกลางทุ่งใหญ่ในแคนซัสกับลุงเฮนรีชาวไร่และป้าเอ็มภรรยาชาวไร่บ้านของพวกเขาหลังเล็กเพราะไม้สร้างบ้านต้องขนมาด้วยเกวียนเป็นระยะทางหลายไมล์ - - - 0x0000009D, 0x0000009A, 0x0000009A, 0x000000B8, 0x000000C9, 0x000000D2, 0x000000A1, 0x000000B5, - 0x000000A5, 0x000000BB, 0x000000C5, 0x0000008E, 0x000000C3, 0x00000087, 0x000000A8, 0x0000009C, - 0x000000C3, 0x00000097, 0x000000C3, 0x000000A6, 0x0000009B, 0x000000B8, 0x000000B0, 0x000000B5, - 0x000000AB, 0x000000B4, 0x000000A5, 0x000000B0, 0x000000A5, 0x000000BC, 0x0000006E, 0x0000009A, - 0x0000006E, 0x000000B5, 0x000000A4, 0x00000084, 0x000000A8, 0x000000B5, 0x0000008A, 0x0000009A, - 0x000000BB, 0x0000006E, 0x0000008A, 0x000000C4, 0x000000AE, 0x00000090, 0x0000006E, 0x000000C4, - 0x0000009C, 0x000000C2, 0x00000087, 0x0000009C, 0x0000008E, 0x000000B4, 0x000000AD, 0x00000084, - 0x000000B4, 0x0000009D, 0x000000A8, 0x000000BB, 0x0000008A, 0x000000C1, 0x000000B1, 0x0000009C, - 0x000000A6, 0x000000B8, 0x0000008D, 0x000000B5, 0x000000AA, 0x000000C5, 0x000000A6, 0x0000006E, - 0x000000C2, 0x000000A8, 0x000000B3, 0x0000009E, 0x0000006F, 0x000000B5, 0x000000C1, 0x000000B0, - 0x000000C8, 0x000000A4, 0x000000A3, 0x000000A6, 0x000000A6, 0x000000A5, 0x000000B5, 0x0000008D, - 0x000000B5, 0x000000AA, 0x000000C5, 0x000000A6, 0x0000006E, 0x0000009D, 0x0000006F, 0x000000B5, - 0x0000009C, 0x00000085, 0x000000B0, 0x0000008A, 0x000000A1, 0x000000AA, 0x00000084, 0x000000C1, - 0x00000085, 0x000000B5, 0x000000AE, 0x000000A8, 0x000000B4, 0x0000008A, 0x000000C1, 0x000000A8, - 0x000000C8, 0x00000084, 0x000000C1, 0x000000A1, 0x000000A6, 0x000000B5, 0x000000B3, 0x000000C5, - 0x000000A4, 0x0000006F, 0x000000AD, 0x000000A6, 0x0000006F, 0x000000B5, 0x0000008A, 0x0000009D, - 0x0000006F, 0x000000B5, 0x0000009C, 0x00000098, 0x0000006F, 0x000000B0, 0x0000008A, 0x00000085, - 0x0000009C, 0x000000A4, 0x000000B5, 0x00000097, 0x0000006F, 0x000000AA, 0x000000A5, 0x000000C1, - 0x00000084, 0x000000AA, 0x000000B8, 0x000000A5, 0x0000009C, 0x000000C1, 0x0000009E, 0x000000C8, - 0x0000009C, 0x000000A6, 0x000000B3, 0x000000A5, 0x000000B3, 0x0000009A, 0x000000B5, 0x0000008A, - 0x000000AE, 0x000000A8, 0x000000B5, 0x000000A5, 0x000000C5, 0x000000A4, 0x000000A8, 0x00000072 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, - 0x00000018, 0x00000019, 0x0000001A, 0x0000001B, 0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F, - 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, - 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D, 0x0000002E, 0x0000002F, - 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, - 0x00000038, 0x00000039, 0x0000003A, 0x0000003B, 0x0000003C, 0x0000003D, 0x0000003E, 0x0000003F, - 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000047, - 0x00000048, 0x00000049, 0x0000004A, 0x0000004B, 0x0000004C, 0x0000004D, 0x0000004E, 0x0000004F, - 0x00000050, 0x00000051, 0x00000052, 0x00000053, 0x00000054, 0x00000055, 0x00000056, 0x00000057, - 0x00000058, 0x00000059, 0x0000005A, 0x0000005B, 0x0000005C, 0x0000005D, 0x0000005E, 0x0000005F, - 0x00000060, 0x00000061, 0x00000062, 0x00000063, 0x00000064, 0x00000065, 0x00000066, 0x00000067, - 0x00000068, 0x00000069, 0x0000006A, 0x0000006B, 0x0000006C, 0x0000006D, 0x0000006E, 0x0000006F, - 0x00000070, 0x00000071, 0x00000072, 0x00000073, 0x00000074, 0x00000075, 0x00000076, 0x00000077, - 0x00000078, 0x00000079, 0x0000007A, 0x0000007B, 0x0000007C, 0x0000007D, 0x0000007E, 0x0000007F, - 0x00000080, 0x00000081, 0x00000082, 0x00000083, 0x00000084, 0x00000085, 0x00000086, 0x00000087, - 0x00000088, 0x00000089, 0x0000008A, 0x0000008B, 0x0000008C, 0x0000008D, 0x0000008E, 0x0000008F, - 0x00000090, 0x00000091, 0x00000092, 0x00000093, 0x00000094, 0x00000095, 0x00000096, 0x00000097, - 0x00000098, 0x00000099, 0x0000009A, 0x0000009B, 0x0000009C, 0x0000009D, 0x0000009E, 0x0000009F, - 0x000000A0, 0x000000A1, 0x000000A2, 0x000000A3, 0x000000A4, 0x000000A5, 0x000000A6, 0x000000A7 - - - - 0.000000, 0.000000, 5.399414, 0.000000, 10.798828, 0.000000, 15.072266, 0.000000, - 15.072266, 0.000000, 16.198242, 0.000000, 21.046875, 0.000000, 26.616211, 0.000000, - 30.035156, 0.000000, 31.312500, 0.000000, 34.151367, 0.000000, 38.279297, 0.000000, - 43.558594, 0.000000, 47.663086, 0.000000, 52.438477, 0.000000, 57.178711, 0.000000, - 62.698242, 0.000000, 66.802734, 0.000000, 71.601562, 0.000000, 75.706055, 0.000000, - 79.810547, 0.000000, 84.029297, 0.000000, 84.369141, 0.000000, 89.097656, 0.000000, - 92.516602, 0.000000, 97.614258, 0.000000, 97.195312, 0.000000, 101.311523, 0.000000, - 106.040039, 0.000000, 107.375977, 0.000000, 108.326172, -0.084961, 110.156250, 0.000000, - 113.497070, -0.084961, 115.555664, 0.000000, 118.974609, 0.000000, 124.013672, 0.000000, - 128.765625, 0.000000, 133.505859, 0.000000, 136.924805, 0.000000, 140.704102, 0.000000, - 143.036133, 0.000000, 144.044922, -0.084961, 146.103516, 0.000000, 149.882812, 0.000000, - 153.553711, 0.000000, 159.158203, 0.000000, 163.377930, -0.084961, 165.421875, 0.000000, - 169.092773, 0.000000, 174.612305, 0.000000, 179.135742, 0.000000, 183.911133, 0.000000, - 189.430664, 0.000000, 194.879883, 0.000000, 194.709961, 0.000000, 199.989258, 0.000000, - 204.092773, -0.084961, 204.741211, 0.000000, 210.140625, 0.000000, 212.828125, 0.000000, - 214.880859, 0.000000, 218.660156, 0.000000, 220.675781, 0.000000, 225.128906, 0.000000, - 230.648438, 0.000000, 234.105469, 0.000000, 234.752930, 0.000000, 239.613281, 0.000000, - 243.032227, 0.000000, 247.280273, 0.000000, 251.408203, 0.000000, 253.932617, -0.084961, - 255.512695, 0.000000, 260.036133, 0.000000, 264.776367, 0.000000, 269.071289, 0.000000, - 272.704102, 0.000000, 274.470703, 0.000000, 277.889648, 0.000000, 279.905273, 0.000000, - 284.768555, 0.000000, 284.633789, 0.000000, 289.672852, 0.000000, 294.641602, 0.000000, - 298.746094, 0.000000, 302.850586, 0.000000, 306.966797, 0.000000, 310.385742, 0.000000, - 315.246094, 0.000000, 318.665039, 0.000000, 322.913086, 0.000000, 327.041016, 0.000000, - 329.565430, -0.084961, 331.145508, 0.000000, 335.911133, 0.000000, 336.544922, 0.000000, - 339.963867, 0.000000, 345.483398, 0.000000, 350.258789, 0.000000, 354.987305, 0.000000, - 358.766602, 0.000000, 364.335938, 0.000000, 368.583984, 0.000000, 373.335938, 0.000000, - 375.351562, 0.000000, 380.126953, 0.000000, 383.545898, 0.000000, 389.150391, 0.000000, - 394.306641, 0.000000, 393.890625, 0.000000, 397.669922, 0.000000, 399.685547, 0.000000, - 404.548828, 0.000000, 404.425781, 0.000000, 409.177734, 0.000000, 411.193359, 0.000000, - 416.762695, 0.000000, 420.867188, 0.000000, 424.286133, 0.000000, 428.581055, 0.000000, - 432.708984, 0.000000, 438.123047, 0.000000, 437.748047, 0.000000, 443.027344, 0.000000, - 446.976562, 0.000000, 447.131836, 0.000000, 450.550781, 0.000000, 454.330078, 0.000000, - 459.095703, 0.000000, 459.729492, 0.000000, 463.148438, 0.000000, 468.667969, 0.000000, - 473.847656, 0.000000, 473.478516, 0.000000, 478.207031, 0.000000, 481.986328, 0.000000, - 486.761719, 0.000000, 492.281250, 0.000000, 497.320312, 0.000000, 500.739258, 0.000000, - 505.860352, 0.000000, 505.538086, 0.000000, 509.786133, 0.000000, 513.902344, 0.000000, - 515.917969, 0.000000, 520.669922, 0.000000, 523.947266, 0.000000, 524.917969, 0.000000, - 529.034180, 0.000000, 534.553711, 0.000000, 536.569336, 0.000000, 540.846680, 0.000000, - 541.968750, 0.000000, 547.488281, 0.000000, 551.592773, 0.000000, 555.887695, 0.000000, - 560.003906, 0.000000, 564.298828, 0.000000, 569.698242, 0.000000, 573.117188, 0.000000, - 576.896484, 0.000000, 582.500977, 0.000000, 587.241211, 0.000000, 590.660156, 0.000000, - 594.776367, 0.000000, 598.904297, 0.000000, 603.943359, 0.000000, 608.894531, 0.000000, - 608.683594, 0.000000 - - - - - - - ක්‍රෙ ක්‍යෙ ක්‍ෂෙ ක්‍ෂ්‍යෙ ක්ෂෙ කර්‍මෙ ස්ට්‍රේ ස‍්සෙ ස්ස - - - 0x0000004A, 0x000001D5, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x0000004A, 0x00000018, - 0x0000008B, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x0000004A, 0x0000008A, 0x0000FFFF, 0x0000FFFF, - 0x0000FFFF, 0x00000003, 0x0000004A, 0x0000008A, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000008B, - 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000001D6, 0x0000FFFF, 0x0000004A, 0x0000003C, 0x00000003, - 0x00000018, 0x0000004A, 0x000001F8, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000A9, - 0x0000FFFF, 0x0000004A, 0x0000007A, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, - 0x0000004A, 0x00000203, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x00000003, 0x000000A9, 0x0000FFFF, - 0x0000003D - - - - 0x00000004, 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000005, 0x0000000A, 0x00000006, - 0x00000007, 0x00000008, 0x00000009, 0x0000000B, 0x00000010, 0x0000000C, 0x0000000D, 0x0000000E, - 0x0000000F, 0x00000011, 0x00000019, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, - 0x00000017, 0x00000018, 0x0000001A, 0x0000001B, 0x0000001C, 0x0000001E, 0x0000001D, 0x0000001F, - 0x00000020, 0x00000025, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000026, 0x00000027, - 0x00000028, 0x0000002D, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D, 0x0000002E, - 0x00000033, 0x0000002F, 0x00000030, 0x00000031, 0x00000032, 0x00000034, 0x00000035, 0x00000036, - 0x00000037 - - - - 0.000000, 0.000000, 8.520000, 0.000000, 19.224001, 0.000000, 19.224001, 0.000000, - 19.224001, 0.000000, 19.224001, 0.000000, 26.640001, 0.000000, 35.160004, 0.000000, - 45.864006, 0.000000, 51.936005, 0.000000, 51.936005, 0.000000, 51.936005, 0.000000, - 59.352005, 0.000000, 67.872009, 0.000000, 82.704010, 0.000000, 82.704010, 0.000000, - 82.704010, 0.000000, 82.704010, 0.000000, 90.120010, 0.000000, 98.640015, 0.000000, - 113.472015, 0.000000, 113.472015, 0.000000, 113.472015, 0.000000, 113.472015, 0.000000, - 119.544014, 0.000000, 119.544014, 0.000000, 119.544014, 0.000000, 126.960014, 0.000000, - 137.664017, 0.000000, 137.664017, 0.000000, 146.184021, 0.000000, 154.296021, 0.000000, - 161.712021, 0.000000, 172.416016, 0.000000, 180.936020, 0.000000, 189.552017, 0.000000, - 189.552017, 0.000000, 189.552017, 0.000000, 189.552017, 0.000000, 196.968018, 0.000000, - 205.584015, 0.000000, 205.584015, 0.000000, 214.104019, 0.000000, 222.720016, 0.000000, - 222.720016, 0.000000, 222.720016, 0.000000, 222.720016, 0.000000, 222.720016, 0.000000, - 230.136017, 0.000000, 238.656021, 0.000000, 254.784027, 0.000000, 254.784027, 0.000000, - 254.784027, 0.000000, 254.784027, 0.000000, 262.200012, 0.000000, 270.816010, 0.000000, - 270.816010, 0.000000, 279.432007, 0.000000 - - - - - - - ‭ﻲﺑﺮﻌﻟﺎﺑ - - - 0x0000FFFF, 0x00000206, 0x000001A5, 0x000001C2, 0x000001E0, 0x000001F3, 0x000001A2, 0x000001A5 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007 - - - - 0.000000, 0.000000, 0.000000, 0.000000, 5.759766, 0.000000, 7.980469, 0.000000, - 11.748047, 0.000000, 15.298828, 0.000000, 17.302734, 0.000000, 19.763672, 0.000000, - 21.984375, 0.000000 - - - - - - - ﻲﺑﺮﻌﻟﺎﺑ - - - 0x000001A5, 0x000001A2, 0x000001F3, 0x000001E0, 0x000001C2, 0x000001A5, 0x00000206 - - - - 0x00000006, 0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000001, 0x00000000 - - - - 0.000000, 0.000000, 2.220703, 0.000000, 4.681641, 0.000000, 6.685547, 0.000000, - 10.236328, 0.000000, 14.003906, 0.000000, 16.224609, 0.000000, 21.984375, 0.000000 - - - - - - - ḤḤ - - - 0x000009A3, 0x000009A3 - - - - 0x00000000, 0x00000001 - - - - 0.000000, 0.000000, 8.666016, 0.000000, 17.332031, 0.000000 - - - - - - - र्य र्‌य - - - 0x00000099, 0x0000005B, 0x0000FFFF, 0x00000003, 0x0000009A, 0x00000051, 0x00000001, 0x00000099 - - - - 0x00000002, 0x00000000, 0x00000001, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007 - - - - 0.000000, 0.000000, 9.726562, 0.263672, 9.468750, 0.000000, 9.468750, 0.000000, - 15.468750, 0.000000, 25.130859, -0.451172, 21.984375, 0.000000, 21.984375, 0.000000, - 31.453125, 0.000000 - - - - - - - The quick brown fox jumps over the lazy dog. • Jackdaws love my big sphinx of quartz - - - 0x00000157, 0x0000FFFF, 0x00000048, 0x00000003, 0x00000054, 0x00000058, 0x0000004C, 0x00000046, - 0x0000004E, 0x00000003, 0x00000045, 0x00000055, 0x00000052, 0x0000005A, 0x00000051, 0x00000003, - 0x00000049, 0x00000052, 0x0000005B, 0x00000003, 0x0000004D, 0x00000058, 0x00000050, 0x00000053, - 0x00000056, 0x00000003, 0x00000052, 0x00000059, 0x00000048, 0x00000055, 0x00000003, 0x00000152, - 0x0000FFFF, 0x00000048, 0x00000003, 0x0000004F, 0x00000044, 0x0000005D, 0x0000005C, 0x00000003, - 0x00000047, 0x00000052, 0x0000004A, 0x00000011, 0x00000003, 0x00000087, 0x00000003, 0x0000002D, - 0x00000044, 0x00000046, 0x0000004E, 0x00000047, 0x00000044, 0x0000005A, 0x00000056, 0x00000003, - 0x0000004F, 0x00000052, 0x00000059, 0x00000048, 0x00000003, 0x00000050, 0x0000005C, 0x00000003, - 0x00000045, 0x0000004C, 0x0000004A, 0x00000003, 0x00000056, 0x00000053, 0x0000004B, 0x0000004C, - 0x00000051, 0x0000005B, 0x00000003, 0x00000052, 0x00000049, 0x00000003, 0x00000054, 0x00000058, - 0x00000044, 0x00000055, 0x00000057, 0x0000005D - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, - 0x00000018, 0x00000019, 0x0000001A, 0x0000001B, 0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F, - 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, - 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D, 0x0000002E, 0x0000002F, - 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, - 0x00000038, 0x00000039, 0x0000003A, 0x0000003B, 0x0000003C, 0x0000003D, 0x0000003E, 0x0000003F, - 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000047, - 0x00000048, 0x00000049, 0x0000004A, 0x0000004B, 0x0000004C, 0x0000004D, 0x0000004E, 0x0000004F, - 0x00000050, 0x00000051, 0x00000052, 0x00000053 - - - - 0.000000, 0.000000, 13.523438, 0.000000, 13.523438, 0.000000, 17.982422, 0.000000, - 21.316406, 0.000000, 27.134766, 0.000000, 33.861328, 0.000000, 37.412109, 0.000000, - 42.005859, 0.000000, 47.554688, 0.000000, 50.888672, 0.000000, 56.707031, 0.000000, - 61.705078, 0.000000, 66.849609, 0.000000, 74.378906, 0.000000, 81.152344, 0.000000, - 84.486328, 0.000000, 88.230469, 0.000000, 93.375000, 0.000000, 99.386719, 0.000000, - 102.720703, 0.000000, 105.914062, 0.000000, 112.640625, 0.000000, 122.109375, 0.000000, - 128.080078, 0.000000, 132.345703, 0.000000, 135.679688, 0.000000, 140.824219, 0.000000, - 146.232422, 0.000000, 150.691406, 0.000000, 155.689453, 0.000000, 159.023438, 0.000000, - 168.908203, 0.000000, 168.908203, 0.000000, 173.367188, 0.000000, 176.701172, 0.000000, - 179.900391, 0.000000, 186.058594, 0.000000, 190.998047, 0.000000, 197.501953, 0.000000, - 200.835938, 0.000000, 206.994141, 0.000000, 212.138672, 0.000000, 217.734375, 0.000000, - 220.212891, 0.000000, 223.546875, 0.000000, 230.214844, 0.000000, 233.548828, 0.000000, - 239.003906, 0.000000, 245.162109, 0.000000, 249.755859, 0.000000, 255.304688, 0.000000, - 261.462891, 0.000000, 267.621094, 0.000000, 275.150391, 0.000000, 279.416016, 0.000000, - 282.750000, 0.000000, 285.949219, 0.000000, 291.093750, 0.000000, 296.501953, 0.000000, - 300.960938, 0.000000, 304.294922, 0.000000, 313.763672, 0.000000, 320.267578, 0.000000, - 323.601562, 0.000000, 329.419922, 0.000000, 332.970703, 0.000000, 338.566406, 0.000000, - 341.900391, 0.000000, 346.166016, 0.000000, 352.136719, 0.000000, 358.523438, 0.000000, - 362.074219, 0.000000, 368.847656, 0.000000, 374.859375, 0.000000, 378.193359, 0.000000, - 383.337891, 0.000000, 387.082031, 0.000000, 390.416016, 0.000000, 396.234375, 0.000000, - 402.960938, 0.000000, 409.119141, 0.000000, 414.117188, 0.000000, 418.365234, 0.000000, - 423.304688, 0.000000 - - - - - - - Pack my bags with six dozen liquor jugs - - - 0x00000040, 0x000001F8, 0x00000203, 0x00000230, 0x00000003, 0x00000239, 0x00000274, 0x00000003, - 0x000001FE, 0x000001F8, 0x0000021D, 0x00000255, 0x00000003, 0x0000026C, 0x00000228, 0x0000025C, - 0x00000223, 0x00000003, 0x00000255, 0x00000228, 0x00000270, 0x00000003, 0x00000207, 0x00000244, - 0x0000027A, 0x00000210, 0x0000023D, 0x00000003, 0x00000235, 0x00000228, 0x0000024D, 0x00000264, - 0x00000244, 0x00000251, 0x00000003, 0x0000022C, 0x00000264, 0x0000021D, 0x00000255 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, - 0x00000018, 0x00000019, 0x0000001A, 0x0000001B, 0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F, - 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026 - - - - 0.000000, 0.000000, 12.630000, 0.000000, 21.180000, 0.000000, 27.600000, 0.000000, - 36.599998, 0.000000, 42.599998, 0.000000, 53.160000, 0.000000, 59.970001, 0.000000, - 65.970001, 0.000000, 73.620003, 0.000000, 82.170006, 0.000000, 89.370003, 0.000000, - 94.740005, 0.000000, 100.740005, 0.000000, 112.050003, 0.000000, 117.480003, 0.000000, - 123.420006, 0.000000, 131.400009, 0.000000, 137.400009, 0.000000, 142.770004, 0.000000, - 148.199997, 0.000000, 155.699997, 0.000000, 161.699997, 0.000000, 169.830002, 0.000000, - 177.330002, 0.000000, 184.020004, 0.000000, 190.169998, 0.000000, 198.000000, 0.000000, - 204.000000, 0.000000, 210.089996, 0.000000, 215.519989, 0.000000, 223.229996, 0.000000, - 230.940002, 0.000000, 238.440002, 0.000000, 244.290009, 0.000000, 250.290009, 0.000000, - 256.140015, 0.000000, 263.850006, 0.000000, 271.050018, 0.000000, 276.420013, 0.000000 - - - - - - - Li kien kien, li kieku kieku. - - - 0x0000000D, 0x00000024, 0x00000001, 0x00000026, 0x00000024, 0x00000020, 0x00000029, 0x00000001, - 0x00000026, 0x00000024, 0x00000020, 0x00000029, 0x000001D0, 0x00000001, 0x00000027, 0x00000024, - 0x00000001, 0x00000026, 0x00000024, 0x00000020, 0x00000026, 0x00000030, 0x00000001, 0x00000026, - 0x00000024, 0x00000020, 0x00000026, 0x00000030, 0x000001CF - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, - 0x00000018, 0x00000019, 0x0000001A, 0x0000001B, 0x0000001C - - - - 0.000000, 0.000000, 7.200000, 0.000000, 14.400000, 0.000000, 21.599998, 0.000000, - 28.799999, 0.000000, 36.000000, 0.000000, 43.200001, 0.000000, 50.400002, 0.000000, - 57.600002, 0.000000, 64.800003, 0.000000, 72.000000, 0.000000, 79.199997, 0.000000, - 86.399994, 0.000000, 93.599991, 0.000000, 100.799988, 0.000000, 107.999985, 0.000000, - 115.199982, 0.000000, 122.399979, 0.000000, 129.599976, 0.000000, 136.799973, 0.000000, - 143.999969, 0.000000, 151.199966, 0.000000, 158.399963, 0.000000, 165.599960, 0.000000, - 172.799957, 0.000000, 179.999954, 0.000000, 187.199951, 0.000000, 194.399948, 0.000000, - 201.599945, 0.000000, 208.799942, 0.000000 - - - - - - - Il-Mistoqsija oħt l-għerf. - - - 0x0000000A, 0x00000027, 0x00000210, 0x0000000E, 0x00000024, 0x0000002E, 0x0000002F, 0x0000002A, - 0x0000002C, 0x0000002E, 0x00000024, 0x00000025, 0x0000001C, 0x00000001, 0x0000002A, 0x0000011F, - 0x0000002F, 0x00000001, 0x00000027, 0x00000210, 0x00000022, 0x0000011F, 0x00000020, 0x0000002D, - 0x00000021, 0x000001FB - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, - 0x00000018, 0x00000019 - - - - 0.000000, 0.000000, 3.096000, 0.000000, 6.156000, 0.000000, 9.888000, 0.000000, - 18.552000, 0.000000, 21.504000, 0.000000, 26.532000, 0.000000, 30.467999, 0.000000, - 36.972000, 0.000000, 43.571999, 0.000000, 48.599998, 0.000000, 51.551998, 0.000000, - 54.515999, 0.000000, 60.660000, 0.000000, 63.084000, 0.000000, 69.587997, 0.000000, - 76.115997, 0.000000, 80.171997, 0.000000, 82.596001, 0.000000, 85.655998, 0.000000, - 89.388000, 0.000000, 95.435997, 0.000000, 101.963997, 0.000000, 107.916000, 0.000000, - 112.080002, 0.000000, 114.984001, 0.000000, 117.972000, 0.000000 - - - - - - - ༄༅།། ཏིན་ཏིན་གྱི་དཔའ་རྩལ - - - 0x00000145, 0x0000FFFF, 0x00000151, 0x00000151, 0x00000003, 0x0000046C, 0x00000BFD, 0x0000059A, - 0x0000014E, 0x0000046C, 0x00000BFD, 0x0000059A, 0x0000014E, 0x000002CA, 0x0000FFFF, 0x00000BFD, - 0x0000014E, 0x0000050E, 0x00000611, 0x00000848, 0x0000014E, 0x0000093C, 0x0000FFFF, 0x0000098B - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017 - - - - 0.000000, 0.000000, 14.906250, 0.000000, 14.906250, 0.000000, 17.648438, 0.000000, - 20.390625, 0.000000, 23.906250, 0.000000, 29.109375, 0.000000, 29.109375, 0.000000, - 34.171875, 0.000000, 35.929688, 0.000000, 41.132812, 0.000000, 41.132812, 0.000000, - 46.195312, 0.000000, 47.953125, 0.000000, 54.773438, 0.000000, 54.773438, 0.000000, - 54.773438, 0.000000, 56.531250, 0.000000, 61.875000, 0.000000, 67.570312, 0.000000, - 73.195312, 0.000000, 74.953125, 0.000000, 80.437500, 0.000000, 80.437500, 0.000000, - 87.328125, 0.000000 - - - - - - - ᄊᆞᆷ ᄒᆞᆫ글 ᄀᆞᇹ ᄫᆞᆼ - - - 0x000044FF, 0x00004707, 0x00004859, 0x00000005, 0x0000462B, 0x00004707, 0x00004785, 0x000019B2, - 0x00000005, 0x00004361, 0x00004707, 0x0000498D, 0x00000005, 0x000044C3, 0x00004707, 0x00004911 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F - - - - 0.000000, 0.000000, 12.000000, 0.000000, 12.000000, 0.000000, 12.000000, 0.000000, - 14.700000, 0.000000, 26.700001, 0.000000, 26.700001, 0.000000, 26.700001, 0.000000, - 38.700001, 0.000000, 41.400002, 0.000000, 53.400002, 0.000000, 53.400002, 0.000000, - 53.400002, 0.000000, 56.100002, 0.000000, 68.100006, 0.000000, 68.100006, 0.000000, - 68.100006, 0.000000 - - - - - - - के े - - - 0x00000901, 0x00000931, 0x00000003, 0x00000956, 0x00000931 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000003 - - - - 0.000000, 0.000000, 5.935547, 0.000000, 8.548828, 0.000000, 12.345703, 0.000000, - 17.085938, 0.000000, 18.345703, 0.000000 - - - - - - - अँग्रेज़ी - - - 0x000008F1, 0x000008EE, 0x000009CB, 0x0000FFFF, 0x0000FFFF, 0x00000931, 0x00000940, 0x0000FFFF, - 0x0000092A - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000004, 0x00000003, 0x00000005, 0x00000006, 0x00000007, - 0x00000008 - - - - 0.000000, 0.000000, 9.076172, 0.000000, 9.076172, 0.000000, 16.025391, 0.000000, - 16.025391, 0.000000, 16.025391, 0.000000, 16.025391, 0.000000, 23.976562, 0.000000, - 23.976562, 0.000000, 27.304688, 0.000000 - - - - - - - To WAVA is easy, it’s the 1,452 other glyphs in the office I’m worried about! - - - 0x00000037, 0x00000052, 0x00000003, 0x0000003A, 0x00000024, 0x00000039, 0x00000024, 0x00000003, - 0x0000004C, 0x00000056, 0x00000003, 0x00000048, 0x00000044, 0x00000056, 0x0000005C, 0x0000000F, - 0x00000003, 0x0000004C, 0x00000057, 0x000000B6, 0x00000056, 0x00000003, 0x00000057, 0x0000004B, - 0x00000048, 0x00000003, 0x00000014, 0x0000000F, 0x00000017, 0x00000018, 0x00000015, 0x00000003, - 0x00000052, 0x00000057, 0x0000004B, 0x00000048, 0x00000055, 0x00000003, 0x0000004A, 0x0000004F, - 0x0000005C, 0x00000053, 0x0000004B, 0x00000056, 0x00000003, 0x0000004C, 0x00000051, 0x00000003, - 0x00000057, 0x0000004B, 0x00000048, 0x00000003, 0x00000052, 0x00000049, 0x00000049, 0x0000004C, - 0x00000046, 0x00000048, 0x00000003, 0x0000002C, 0x000000B6, 0x00000050, 0x00000003, 0x0000005A, - 0x00000052, 0x00000055, 0x00000055, 0x0000004C, 0x00000048, 0x00000047, 0x00000003, 0x00000044, - 0x00000045, 0x00000052, 0x00000058, 0x00000057, 0x00000004 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, - 0x00000018, 0x00000019, 0x0000001A, 0x0000001B, 0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F, - 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, - 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D, 0x0000002E, 0x0000002F, - 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, - 0x00000038, 0x00000039, 0x0000003A, 0x0000003B, 0x0000003C, 0x0000003D, 0x0000003E, 0x0000003F, - 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000047, - 0x00000048, 0x00000049, 0x0000004A, 0x0000004B, 0x0000004C - - - - 0.000000, 0.000000, 6.000000, 0.000000, 12.673828, 0.000000, 16.007812, 0.000000, - 26.888672, 0.000000, 34.001953, 0.000000, 41.115234, 0.000000, 48.457031, 0.000000, - 51.791016, 0.000000, 54.457031, 0.000000, 60.457031, 0.000000, 63.791016, 0.000000, - 70.464844, 0.000000, 77.138672, 0.000000, 83.138672, 0.000000, 88.248047, 0.000000, - 91.582031, 0.000000, 94.916016, 0.000000, 97.582031, 0.000000, 100.916016, 0.000000, - 103.365234, 0.000000, 109.365234, 0.000000, 112.699219, 0.000000, 116.033203, 0.000000, - 122.707031, 0.000000, 129.380859, 0.000000, 132.714844, 0.000000, 139.388672, 0.000000, - 142.722656, 0.000000, 149.396484, 0.000000, 156.070312, 0.000000, 162.744141, 0.000000, - 166.078125, 0.000000, 172.751953, 0.000000, 176.085938, 0.000000, 182.759766, 0.000000, - 189.433594, 0.000000, 193.429688, 0.000000, 196.763672, 0.000000, 203.437500, 0.000000, - 206.103516, 0.000000, 212.103516, 0.000000, 218.777344, 0.000000, 225.451172, 0.000000, - 231.451172, 0.000000, 234.785156, 0.000000, 237.451172, 0.000000, 244.125000, 0.000000, - 247.458984, 0.000000, 250.792969, 0.000000, 257.466797, 0.000000, 264.140625, 0.000000, - 267.474609, 0.000000, 274.148438, 0.000000, 277.265625, 0.000000, 280.599609, 0.000000, - 283.265625, 0.000000, 289.265625, 0.000000, 295.939453, 0.000000, 299.273438, 0.000000, - 302.607422, 0.000000, 305.273438, 0.000000, 315.269531, 0.000000, 318.603516, 0.000000, - 327.269531, 0.000000, 333.943359, 0.000000, 337.939453, 0.000000, 341.935547, 0.000000, - 344.601562, 0.000000, 351.275391, 0.000000, 357.949219, 0.000000, 361.283203, 0.000000, - 367.957031, 0.000000, 374.630859, 0.000000, 381.304688, 0.000000, 387.978516, 0.000000, - 391.312500, 0.000000, 394.646484, 0.000000 - - - - - - - To WAVA is easy, it’s the 1,452 other glyphs in the office I’m worried about! - - - 0x00000037, 0x00000052, 0x00000003, 0x0000003A, 0x00000024, 0x00000039, 0x00000024, 0x00000003, - 0x0000004C, 0x00000056, 0x00000003, 0x00000048, 0x00000044, 0x00000056, 0x0000005C, 0x0000000F, - 0x00000003, 0x0000004C, 0x00000057, 0x000000B6, 0x00000056, 0x00000003, 0x00000057, 0x0000004B, - 0x00000048, 0x00000003, 0x00000014, 0x0000000F, 0x00000017, 0x00000018, 0x00000015, 0x00000003, - 0x00000052, 0x00000057, 0x0000004B, 0x00000048, 0x00000055, 0x00000003, 0x0000004A, 0x0000004F, - 0x0000005C, 0x00000053, 0x0000004B, 0x00000056, 0x00000003, 0x0000004C, 0x00000051, 0x00000003, - 0x00000057, 0x0000004B, 0x00000048, 0x00000003, 0x00000052, 0x00000049, 0x00000049, 0x0000004C, - 0x00000046, 0x00000048, 0x00000003, 0x0000002C, 0x000000B6, 0x00000050, 0x00000003, 0x0000005A, - 0x00000052, 0x00000055, 0x00000055, 0x0000004C, 0x00000048, 0x00000047, 0x00000003, 0x00000044, - 0x00000045, 0x00000052, 0x00000058, 0x00000057, 0x00000004 - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x00000010, 0x00000011, 0x00000012, 0x00000013, 0x00000014, 0x00000015, 0x00000016, 0x00000017, - 0x00000018, 0x00000019, 0x0000001A, 0x0000001B, 0x0000001C, 0x0000001D, 0x0000001E, 0x0000001F, - 0x00000020, 0x00000021, 0x00000022, 0x00000023, 0x00000024, 0x00000025, 0x00000026, 0x00000027, - 0x00000028, 0x00000029, 0x0000002A, 0x0000002B, 0x0000002C, 0x0000002D, 0x0000002E, 0x0000002F, - 0x00000030, 0x00000031, 0x00000032, 0x00000033, 0x00000034, 0x00000035, 0x00000036, 0x00000037, - 0x00000038, 0x00000039, 0x0000003A, 0x0000003B, 0x0000003C, 0x0000003D, 0x0000003E, 0x0000003F, - 0x00000040, 0x00000041, 0x00000042, 0x00000043, 0x00000044, 0x00000045, 0x00000046, 0x00000047, - 0x00000048, 0x00000049, 0x0000004A, 0x0000004B, 0x0000004C - - - - 0.000000, 0.000000, 6.000000, 0.000000, 12.673828, 0.000000, 16.007812, 0.000000, - 26.888672, 0.000000, 34.001953, 0.000000, 41.115234, 0.000000, 48.457031, 0.000000, - 51.791016, 0.000000, 54.457031, 0.000000, 60.457031, 0.000000, 63.791016, 0.000000, - 70.464844, 0.000000, 77.138672, 0.000000, 83.138672, 0.000000, 88.248047, 0.000000, - 91.582031, 0.000000, 94.916016, 0.000000, 97.582031, 0.000000, 100.916016, 0.000000, - 103.365234, 0.000000, 109.365234, 0.000000, 112.699219, 0.000000, 116.033203, 0.000000, - 122.707031, 0.000000, 129.380859, 0.000000, 132.714844, 0.000000, 139.388672, 0.000000, - 142.722656, 0.000000, 149.396484, 0.000000, 156.070312, 0.000000, 162.744141, 0.000000, - 166.078125, 0.000000, 172.751953, 0.000000, 176.085938, 0.000000, 182.759766, 0.000000, - 189.433594, 0.000000, 193.429688, 0.000000, 196.763672, 0.000000, 203.437500, 0.000000, - 206.103516, 0.000000, 212.103516, 0.000000, 218.777344, 0.000000, 225.451172, 0.000000, - 231.451172, 0.000000, 234.785156, 0.000000, 237.451172, 0.000000, 244.125000, 0.000000, - 247.458984, 0.000000, 250.792969, 0.000000, 257.466797, 0.000000, 264.140625, 0.000000, - 267.474609, 0.000000, 274.148438, 0.000000, 277.265625, 0.000000, 280.599609, 0.000000, - 283.265625, 0.000000, 289.265625, 0.000000, 295.939453, 0.000000, 299.273438, 0.000000, - 302.607422, 0.000000, 305.273438, 0.000000, 315.269531, 0.000000, 318.603516, 0.000000, - 327.269531, 0.000000, 333.943359, 0.000000, 337.939453, 0.000000, 341.935547, 0.000000, - 344.601562, 0.000000, 351.275391, 0.000000, 357.949219, 0.000000, 361.283203, 0.000000, - 367.957031, 0.000000, 374.630859, 0.000000, 381.304688, 0.000000, 387.978516, 0.000000, - 391.312500, 0.000000, 394.646484, 0.000000 - - - - - - - Orient Bug - - - 0x00000032, 0x00000055, 0x0000004C, 0x00000048, 0x00000051, 0x00000057, 0x00000003, 0x00000025, - 0x00000058, 0x0000004A - - - - 0x00000000, 0x00000001, 0x00000002, 0x00000003, 0x00000004, 0x00000005, 0x00000006, 0x00000007, - 0x00000008, 0x00000009 - - - - 0.000000, 0.000000, 9.445312, 0.000000, 14.378906, 0.000000, 17.712891, 0.000000, - 25.095703, 0.000000, 32.701172, 0.000000, 37.406250, 0.000000, 41.220703, 0.000000, - 49.453125, 0.000000, 57.058594, 0.000000, 64.675781, 0.000000 - - - -