os/textandloc/fontservices/textshaperplugin/IcuSource/layout/ScriptAndLanguage.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
/*
sl@0
     2
 * %W% %E%
sl@0
     3
 *
sl@0
     4
 * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
sl@0
     5
 *
sl@0
     6
 */
sl@0
     7
sl@0
     8
#include "LETypes.h"
sl@0
     9
#include "OpenTypeTables.h"
sl@0
    10
#include "OpenTypeUtilities.h"
sl@0
    11
#include "ScriptAndLanguage.h"
sl@0
    12
#include "LESwaps.h"
sl@0
    13
sl@0
    14
U_NAMESPACE_BEGIN
sl@0
    15
sl@0
    16
const LangSysTable *ScriptTable::findLanguage(LETag languageTag, le_bool exactMatch) const
sl@0
    17
{
sl@0
    18
    le_uint16 count = SWAPW(langSysCount);
sl@0
    19
    Offset langSysTableOffset = exactMatch? 0 : SWAPW(defaultLangSysTableOffset);
sl@0
    20
sl@0
    21
    if (count > 0) {
sl@0
    22
        Offset foundOffset =
sl@0
    23
            OpenTypeUtilities::getTagOffset(languageTag, langSysRecordArray, count);
sl@0
    24
sl@0
    25
        if (foundOffset != 0) {
sl@0
    26
            langSysTableOffset = foundOffset;
sl@0
    27
        }
sl@0
    28
    }
sl@0
    29
sl@0
    30
    if (langSysTableOffset != 0) {
sl@0
    31
        return (const LangSysTable *) ((char *)this + langSysTableOffset);
sl@0
    32
    }
sl@0
    33
sl@0
    34
    return 0;
sl@0
    35
}
sl@0
    36
sl@0
    37
const ScriptTable *ScriptListTable::findScript(LETag scriptTag) const
sl@0
    38
{
sl@0
    39
    le_uint16 count = SWAPW(scriptCount);
sl@0
    40
    Offset scriptTableOffset =
sl@0
    41
        OpenTypeUtilities::getTagOffset(scriptTag, scriptRecordArray, count);
sl@0
    42
sl@0
    43
    if (scriptTableOffset != 0) {
sl@0
    44
        return (const ScriptTable *) ((char *)this + scriptTableOffset);
sl@0
    45
    }
sl@0
    46
sl@0
    47
    return 0;
sl@0
    48
}
sl@0
    49
sl@0
    50
const LangSysTable *ScriptListTable::findLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch) const
sl@0
    51
{
sl@0
    52
    const ScriptTable *scriptTable = findScript(scriptTag);
sl@0
    53
sl@0
    54
    if (scriptTable == 0) {
sl@0
    55
        return 0;
sl@0
    56
    }
sl@0
    57
sl@0
    58
    return scriptTable->findLanguage(languageTag, exactMatch);
sl@0
    59
}
sl@0
    60
sl@0
    61
U_NAMESPACE_END