sl@0: /* sl@0: * %W% %E% sl@0: * sl@0: * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved sl@0: * sl@0: */ sl@0: sl@0: #include "LETypes.h" sl@0: #include "OpenTypeTables.h" sl@0: #include "OpenTypeUtilities.h" sl@0: #include "ScriptAndLanguage.h" sl@0: #include "LESwaps.h" sl@0: sl@0: U_NAMESPACE_BEGIN sl@0: sl@0: const LangSysTable *ScriptTable::findLanguage(LETag languageTag, le_bool exactMatch) const sl@0: { sl@0: le_uint16 count = SWAPW(langSysCount); sl@0: Offset langSysTableOffset = exactMatch? 0 : SWAPW(defaultLangSysTableOffset); sl@0: sl@0: if (count > 0) { sl@0: Offset foundOffset = sl@0: OpenTypeUtilities::getTagOffset(languageTag, langSysRecordArray, count); sl@0: sl@0: if (foundOffset != 0) { sl@0: langSysTableOffset = foundOffset; sl@0: } sl@0: } sl@0: sl@0: if (langSysTableOffset != 0) { sl@0: return (const LangSysTable *) ((char *)this + langSysTableOffset); sl@0: } sl@0: sl@0: return 0; sl@0: } sl@0: sl@0: const ScriptTable *ScriptListTable::findScript(LETag scriptTag) const sl@0: { sl@0: le_uint16 count = SWAPW(scriptCount); sl@0: Offset scriptTableOffset = sl@0: OpenTypeUtilities::getTagOffset(scriptTag, scriptRecordArray, count); sl@0: sl@0: if (scriptTableOffset != 0) { sl@0: return (const ScriptTable *) ((char *)this + scriptTableOffset); sl@0: } sl@0: sl@0: return 0; sl@0: } sl@0: sl@0: const LangSysTable *ScriptListTable::findLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch) const sl@0: { sl@0: const ScriptTable *scriptTable = findScript(scriptTag); sl@0: sl@0: if (scriptTable == 0) { sl@0: return 0; sl@0: } sl@0: sl@0: return scriptTable->findLanguage(languageTag, exactMatch); sl@0: } sl@0: sl@0: U_NAMESPACE_END