os/textandloc/fontservices/textshaperplugin/IcuSource/layout/Features.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 /*
     2  * @(#)Features.cpp 1.4 00/03/15
     3  *
     4  * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
     5  *
     6  */
     7 
     8 #include "LETypes.h"
     9 #include "OpenTypeUtilities.h"
    10 #include "OpenTypeTables.h"
    11 #include "Features.h"
    12 #include "LESwaps.h"
    13 
    14 U_NAMESPACE_BEGIN
    15 
    16 const FeatureTable *FeatureListTable::getFeatureTable(le_uint16 featureIndex, LETag *featureTag) const
    17 {
    18     if (featureIndex >= SWAPW(featureCount)) {
    19         return 0;
    20     }
    21 
    22     Offset featureTableOffset = featureRecordArray[featureIndex].featureTableOffset;
    23 
    24     *featureTag = SWAPT(featureRecordArray[featureIndex].featureTag);
    25 
    26     return (const FeatureTable *) ((char *) this + SWAPW(featureTableOffset));
    27 }
    28 
    29 /*
    30  * Note: according to the OpenType Spec. v 1.4, the entries in the Feature
    31  * List Table are sorted alphabetically by feature tag; however, there seem
    32  * to be some fonts which have an unsorted list; that's why the binary search
    33  * is #if 0'd out and replaced by a linear search.
    34  *
    35  * Also note: as of ICU 2.6, this method isn't called anyhow...
    36  */
    37 const FeatureTable *FeatureListTable::getFeatureTable(LETag featureTag) const
    38 {
    39 #if 0
    40     Offset featureTableOffset =
    41         OpenTypeUtilities::getTagOffset(featureTag, (TagAndOffsetRecord *) featureRecordArray, SWAPW(featureCount));
    42 
    43     if (featureTableOffset == 0) {
    44         return 0;
    45     }
    46 
    47     return (const FeatureTable *) ((char *) this + SWAPW(featureTableOffset));
    48 #else
    49     int count = SWAPW(featureCount);
    50     
    51     for (int i = 0; i < count; i += 1) {
    52         if (SWAPT(featureRecordArray[i].featureTag) == featureTag) {
    53             return (const FeatureTable *) ((char *) this + SWAPW(featureRecordArray[i].featureTableOffset));
    54         }
    55     }
    56 
    57     return 0;
    58 #endif
    59 }
    60 
    61 U_NAMESPACE_END