[sword-cvs] icu-sword/source/layout .cvsignore,1.3,1.4 AlternateSubstSubtables.cpp,1.2,1.3 AlternateSubstSubtables.h,1.2,1.3 AnchorTables.cpp,1.2,1.3 AnchorTables.h,1.2,1.3 ArabicLayoutEngine.cpp,1.2,1.3 ArabicLayoutEngine.h,1.2,1.3 ArabicLigatureData.cpp,1.2,1.3 ArabicShaping.cpp,1.2,1.3 ArabicShaping.h,1.2,1.3 AttachmentPosnSubtables.h,1.2,1.3 ClassDefinitionTables.cpp,1.2,1.3 ClassDefinitionTables.h,1.2,1.3 ContextualGlyphInsertion.h,1.2,1.3 ContextualGlyphSubstProc.cpp,1.2,1.3 ContextualGlyphSubstProc.h,1.2,1.3 ContextualGlyphSubstitution.h,1.2,1.3 ContextualSubstSubtables.cpp,1.2,1.3 ContextualSubstSubtables.h,1.2,1.3 CoverageTables.cpp,1.2,1.3 CoverageTables.h,1.2,1.3 CursiveAttachmentSubtables.cpp,NONE,1.1 CursiveAttachmentSubtables.h,NONE,1.1 DefaultCharMapper.h,1.2,1.3 DeviceTables.cpp,1.2,1.3 DeviceTables.h,1.2,1.3 ExtensionSubtables.cpp,NONE,1.1 ExtensionSubtables.h,NONE,1.1 Features.cpp,1.2,1.3 Features.h,1.2,1.3 GDEFMarkFilter.cpp,1.2,1.3 GDEFMarkFilter.h,1.2,1.3 GXLayoutEngine.cpp,1.2,1.3 GXLayoutEngine.h,1.2,1.3 GlyphDefinitionTables.cpp,1.2,1.3 GlyphDefinitionTables.h,1.2,1.3 GlyphIterator.cpp,1.2,1.3 GlyphIterator.h,1.2,1.3 GlyphPositionAdjustments.h,1.2,1.3 GlyphPositioningTables.cpp,1.2,1.3 GlyphPositioningTables.h,1.3,1.4 GlyphPosnLookupProc.cpp,1.2,1.3 GlyphPosnLookupProc.h,1.2,1.3 GlyphSubstLookupProc.cpp,1.2,1.3 GlyphSubstLookupProc.h,1.2,1.3 GlyphSubstitutionTables.cpp,1.2,1.3 GlyphSubstitutionTables.h,1.2,1.3 HanLayoutEngine.cpp,NONE,1.1 HanLayoutEngine.h,NONE,1.1 HebrewLigatureData.cpp,1.2,1.3 HebrewShaping.cpp,1.2,1.3 HebrewShaping.h,1.2,1.3 HindiFeatureTags.h,1.2,1.3 IndicClassTables.cpp,1.3,1.4 IndicLayoutEngine.cpp,1.2,1.3 IndicLayoutEngine.h,1.2,1.3 IndicRearrangement.h,1.2,1.3 IndicRearrangementProcessor.cpp,1.2,1.3 IndicRearrangementProcessor.h,1.2,1.3 IndicReordering.cpp,1.2,1.3 IndicReordering.h,1.2,1.3 LEFontInstance.cpp,NONE,1.1 LEFontInstance.h,1.2,1.3 LEGlyphFilter.h,1.2,1.3 LELanguages.h,NONE,1.1 LEScripts.h,1.2,1.3 LESwaps.h,1.2,1.3 LETypes.h,1.2,1.3 LayoutEngine.cpp,1.2,1.3

sword@www.crosswire.org sword@www.crosswire.org
Tue, 9 Sep 2003 19:43:45 -0700


Update of /usr/local/cvsroot/icu-sword/source/layout
In directory www:/tmp/cvs-serv19862/source/layout

Added Files:
	.cvsignore AlternateSubstSubtables.cpp 
	AlternateSubstSubtables.h AnchorTables.cpp AnchorTables.h 
	ArabicLayoutEngine.cpp ArabicLayoutEngine.h 
	ArabicLigatureData.cpp ArabicShaping.cpp ArabicShaping.h 
	AttachmentPosnSubtables.h ClassDefinitionTables.cpp 
	ClassDefinitionTables.h ContextualGlyphInsertion.h 
	ContextualGlyphSubstProc.cpp ContextualGlyphSubstProc.h 
	ContextualGlyphSubstitution.h ContextualSubstSubtables.cpp 
	ContextualSubstSubtables.h CoverageTables.cpp CoverageTables.h 
	CursiveAttachmentSubtables.cpp CursiveAttachmentSubtables.h 
	DefaultCharMapper.h DeviceTables.cpp DeviceTables.h 
	ExtensionSubtables.cpp ExtensionSubtables.h Features.cpp 
	Features.h GDEFMarkFilter.cpp GDEFMarkFilter.h 
	GXLayoutEngine.cpp GXLayoutEngine.h GlyphDefinitionTables.cpp 
	GlyphDefinitionTables.h GlyphIterator.cpp GlyphIterator.h 
	GlyphPositionAdjustments.h GlyphPositioningTables.cpp 
	GlyphPositioningTables.h GlyphPosnLookupProc.cpp 
	GlyphPosnLookupProc.h GlyphSubstLookupProc.cpp 
	GlyphSubstLookupProc.h GlyphSubstitutionTables.cpp 
	GlyphSubstitutionTables.h HanLayoutEngine.cpp 
	HanLayoutEngine.h HebrewLigatureData.cpp HebrewShaping.cpp 
	HebrewShaping.h HindiFeatureTags.h IndicClassTables.cpp 
	IndicLayoutEngine.cpp IndicLayoutEngine.h IndicRearrangement.h 
	IndicRearrangementProcessor.cpp IndicRearrangementProcessor.h 
	IndicReordering.cpp IndicReordering.h LEFontInstance.cpp 
	LEFontInstance.h LEGlyphFilter.h LELanguages.h LEScripts.h 
	LESwaps.h LETypes.h LayoutEngine.cpp LayoutEngine.h 
	LayoutTables.h LigatureSubstProc.cpp LigatureSubstProc.h 
	LigatureSubstSubtables.cpp LigatureSubstSubtables.h 
	LigatureSubstitution.h LookupProcessor.cpp LookupProcessor.h 
	LookupTables.cpp LookupTables.h Lookups.cpp Lookups.h 
	MPreFixups.cpp MPreFixups.h Makefile.in MarkArrays.cpp 
	MarkArrays.h MarkToBasePosnSubtables.cpp 
	MarkToBasePosnSubtables.h MarkToLigaturePosnSubtables.cpp 
	MarkToLigaturePosnSubtables.h MarkToMarkPosnSubtables.cpp 
	MarkToMarkPosnSubtables.h MorphStateTables.h MorphTables.cpp 
	MorphTables.h MultipleSubstSubtables.cpp 
	MultipleSubstSubtables.h NonContextualGlyphSubst.h 
	NonContextualGlyphSubstProc.cpp NonContextualGlyphSubstProc.h 
	OpenTypeLayoutEngine.cpp OpenTypeLayoutEngine.h 
	OpenTypeTables.h OpenTypeUtilities.cpp OpenTypeUtilities.h 
	PairPositioningSubtables.cpp PairPositioningSubtables.h 
	ScriptAndLanguage.cpp ScriptAndLanguage.h 
	ScriptAndLanguageTags.cpp ScriptAndLanguageTags.h 
	SegmentArrayProcessor.cpp SegmentArrayProcessor.h 
	SegmentSingleProcessor.cpp SegmentSingleProcessor.h 
	SimpleArrayProcessor.cpp SimpleArrayProcessor.h 
	SinglePositioningSubtables.cpp SinglePositioningSubtables.h 
	SingleSubstitutionSubtables.cpp SingleSubstitutionSubtables.h 
	SingleTableProcessor.cpp SingleTableProcessor.h 
	StateTableProcessor.cpp StateTableProcessor.h StateTables.h 
	SubstitutionLookups.cpp SubstitutionLookups.h 
	SubtableProcessor.cpp SubtableProcessor.h ThaiLayoutEngine.cpp 
	ThaiLayoutEngine.h ThaiShaping.cpp ThaiShaping.h 
	ThaiStateTables.cpp TrimmedArrayProcessor.cpp 
	TrimmedArrayProcessor.h ValueRecords.cpp ValueRecords.h 
	layout.dsp layout.dsw layout.rc layout.vcproj layoutobj.inc 
	loengine.cpp 
Log Message:
ICU 2.6 commit






















--- NEW FILE: CursiveAttachmentSubtables.cpp ---
/*
 * %W% %E%
 *
 * (C) Copyright IBM Corp. 1998, 1999, 2000, 2001, 2002 - All Rights Reserved
 *
 */

#include "LETypes.h"
#include "LEFontInstance.h"
#include "OpenTypeTables.h"
#include "GlyphPositioningTables.h"
#include "CursiveAttachmentSubtables.h"
#include "AnchorTables.h"
#include "GlyphIterator.h"
#include "GlyphPositionAdjustments.h"
#include "OpenTypeUtilities.h"
#include "LESwaps.h"

U_NAMESPACE_BEGIN

le_uint32 CursiveAttachmentSubtable::process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
{
    LEGlyphID glyphID       = glyphIterator->getCurrGlyphID();
    le_int32  coverageIndex = getGlyphCoverage(glyphID);
    le_uint16 eeCount       = SWAPW(entryExitCount);

    if (coverageIndex < 0 || coverageIndex >= eeCount) {
        glyphIterator->resetCursiveLastExitPoint();
        return 0;
    }

    LEPoint entryAnchor, exitAnchor, pixels;

    if (glyphIterator->hasCursiveLastExitPoint() && entryExitRecords[coverageIndex].entryAnchor != 0) {
        Offset entryOffset = SWAPW(entryExitRecords[coverageIndex].entryAnchor);

        const AnchorTable *entryAnchorTable = (const AnchorTable *) ((char *) this + entryOffset);

        entryAnchorTable->getAnchor(glyphID, fontInstance, entryAnchor);
        glyphIterator->getCursiveLastExitPoint(exitAnchor);

        float anchorDiffX        = exitAnchor.fX - entryAnchor.fX;
        float anchorDiffY        = exitAnchor.fY - entryAnchor.fY;
        float baselineAdjustment = glyphIterator->getCursiveBaselineAdjustment();

        if (glyphIterator->isRightToLeft()) {
            LEPoint secondAdvance;

            fontInstance->getGlyphAdvance(glyphID, pixels);
            fontInstance->pixelsToUnits(pixels, secondAdvance);

            glyphIterator->adjustCurrGlyphPositionAdjustment(0, anchorDiffY + baselineAdjustment, -(anchorDiffX + secondAdvance.fX), 0);
        } else {
            LEPoint firstAdvance;

            fontInstance->getGlyphAdvance(glyphIterator->getCursiveLastGlyphID(), pixels);
            fontInstance->pixelsToUnits(pixels, firstAdvance);

            glyphIterator->adjustCursiveLastGlyphPositionAdjustment(0, 0, anchorDiffX - firstAdvance.fX, 0);
            glyphIterator->adjustCurrGlyphPositionAdjustment(0, anchorDiffY + baselineAdjustment, 0, 0);
        }

        glyphIterator->setCursiveBaselineAdjustment(anchorDiffY + baselineAdjustment);
    }

    Offset exitOffset = SWAPW(entryExitRecords[coverageIndex].exitAnchor);

    if (exitOffset != 0) {
        const AnchorTable *exitAnchorTable = (const AnchorTable *) ((char *) this + exitOffset);

        exitAnchorTable->getAnchor(glyphID, fontInstance, exitAnchor);

        if (!glyphIterator->hasCursiveFirstExitPoint()) {
            glyphIterator->setCursiveFirstExitPoint();
        }

        glyphIterator->setCursiveLastExitPoint(exitAnchor);
    } else {
        /*
         * We've got a glyph which is covered but doesn't have an
         * exit point. We call setCursiveLastExitPoint just to set
         * the position of this glyph, then resetCursiveLastExitPoint
         * to do any baseline adjustments that are required for the
         * sequence of attached glyphs.
         *
         * NOTE: we don't really care about the value of
         * extiAnchor, because after we reset the last exit
         * point, it won't be used. This is a bit of a hack.
         * There should probably be a setCursiveLastExitPoint
         * call that doesn't take an anchor...
         */
        glyphIterator->setCursiveLastExitPoint(exitAnchor);
        glyphIterator->resetCursiveLastExitPoint();
    }

    return 1;
}

U_NAMESPACE_END

--- NEW FILE: CursiveAttachmentSubtables.h ---
/*
 * %W% %E%
 *
 * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
 *
 */

#ifndef __CURSIVEATTACHMENTSUBTABLES_H
#define __CURSIVEATTACHMENTSUBTABLES_H

/**
 * \file
 * \internal
 */

#include "LETypes.h"
#include "LEFontInstance.h"
#include "OpenTypeTables.h"
#include "GlyphPositioningTables.h"
#include "GlyphIterator.h"

U_NAMESPACE_BEGIN

struct EntryExitRecord
{
    Offset entryAnchor;
    Offset exitAnchor;
};

struct CursiveAttachmentSubtable : GlyphPositioningSubtable
{
    le_uint16 entryExitCount;
    EntryExitRecord entryExitRecords[ANY_NUMBER];

    le_uint32  process(GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
};

U_NAMESPACE_END
#endif






--- NEW FILE: ExtensionSubtables.cpp ---
/*
 * %W% %E%
 *
 * (C) Copyright IBM Corp. 2002 - All Rights Reserved
 *
 */

#include "LETypes.h"
#include "OpenTypeTables.h"
#include "GlyphSubstitutionTables.h"
#include "LookupProcessor.h"
#include "ExtensionSubtables.h"
#include "GlyphIterator.h"
#include "LESwaps.h"

U_NAMESPACE_BEGIN


// FIXME: should look at the format too... maybe have a sub-class for it?
le_uint32 ExtensionSubtable::process(const LookupProcessor *lookupProcessor, le_uint16 lookupType,
                                      GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const
{
    le_uint16 elt = SWAPW(extensionLookupType);

    if (elt != lookupType) {
        le_uint32 extOffset = SWAPL(extensionOffset);
        LookupSubtable *subtable = (LookupSubtable *) ((char *) this + extOffset);

        return lookupProcessor->applySubtable(subtable, elt, glyphIterator, fontInstance);
    }

    return 0;
}

U_NAMESPACE_END

--- NEW FILE: ExtensionSubtables.h ---
/*
 * %W% %E%
 *
 * (C) Copyright IBM Corp. 2002-2003 - All Rights Reserved
 *
 */

#ifndef __EXTENSIONSUBTABLES_H
#define __EXTENSIONSUBTABLES_H

/**
 * \file
 * \internal
 */

#include "LETypes.h"
#include "OpenTypeTables.h"
#include "GlyphSubstitutionTables.h"
#include "LookupProcessor.h"
#include "GlyphIterator.h"

U_NAMESPACE_BEGIN

struct ExtensionSubtable //: GlyphSubstitutionSubtable
{
    le_uint16 substFormat;
    le_uint16 extensionLookupType;
    le_uint32 extensionOffset;

    le_uint32 process(const LookupProcessor *lookupProcessor, le_uint16 lookupType,
                      GlyphIterator *glyphIterator, const LEFontInstance *fontInstance) const;
};

U_NAMESPACE_END
#endif




















--- NEW FILE: HanLayoutEngine.cpp ---
/*
 * HanLayoutEngine.cpp: OpenType processing for Han fonts.
 *
 * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved.
 *
 * $Source: /usr/local/cvsroot/icu-sword/source/layout/HanLayoutEngine.cpp,v $ $Date: 2003/09/10 02:42:25 $ $Revision: 1.1 $
 */

#include "LETypes.h"
#include "LEScripts.h"
#include "LELanguages.h"

#include "LayoutEngine.h"
#include "OpenTypeLayoutEngine.h"
#include "HanLayoutEngine.h"
#include "ScriptAndLanguageTags.h"

const char HanOpenTypeLayoutEngine::fgClassID=0;

HanOpenTypeLayoutEngine::HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
                        const GlyphSubstitutionTableHeader *gsubTable)
    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable)
{
    // nothing else to do...
}

HanOpenTypeLayoutEngine::~HanOpenTypeLayoutEngine()
{
    // nothing to do
}

const LETag emptyTag = 0x00000000;

const LETag loclFeatureTag = LE_LOCL_FEATURE_TAG;
const LETag smplFeatureTag = LE_SMPL_FEATURE_TAG;
const LETag tradFeatureTag = LE_TRAD_FEATURE_TAG;

const LETag features[] = {loclFeatureTag, emptyTag};

le_int32 HanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
        LEUnicode *&/*outChars*/, le_int32 *&/*charIndices*/, const LETag **&featureTags, LEErrorCode &success)
{
    if (LE_FAILURE(success)) {
        return 0;
    }

    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
        success = LE_ILLEGAL_ARGUMENT_ERROR;
        return 0;
    }

    featureTags = LE_NEW_ARRAY(const LETag *, count);

    if (featureTags == NULL) {
        success = LE_MEMORY_ALLOCATION_ERROR;
        return 0;
    }

    // FIXME: do we want to add the 'trad' feature for 'ZHT' and the
    // 'smpl' feature for 'ZHS'? If we do this, we can remove the exact
    // flag from the language tag lookups, so we can use these features
    // with the default LangSys...
    for (le_int32 i = 0; i < count; i += 1) {
        featureTags[i] = features;
    }

    return count;
}

--- NEW FILE: HanLayoutEngine.h ---

/*
 * HanLayoutEngine.h: OpenType processing for Han fonts.
 *
 * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved.
 *
 * $Source: /usr/local/cvsroot/icu-sword/source/layout/HanLayoutEngine.h,v $ $Date: 2003/09/10 02:42:25 $ $Revision: 1.1 $
 */

#ifndef __HANLAYOUTENGINE_H
#define __HANLAYOUTENGINE_H

#include "LETypes.h"
#include "LEFontInstance.h"
#include "LayoutEngine.h"
#include "OpenTypeLayoutEngine.h"

#include "GlyphSubstitutionTables.h"

U_NAMESPACE_BEGIN

/**
 * This class implements OpenType layout for Han fonts. It overrides
 * the characerProcessing method to assign the correct OpenType feature
 * tags for the CJK language-specific forms.
 *
 * @internal
 */
class HanOpenTypeLayoutEngine : public OpenTypeLayoutEngine
{
public:
    /**
     * This is the main constructor. It constructs an instance of HanOpenTypeLayoutEngine for
     * a particular font, script and language. It takes the GSUB table as a parameter since
     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has a
     * Han OpenType font.
     *
     * @param fontInstance - the font
     * @param scriptCode - the script
     * @param langaugeCode - the language
     * @param gsubTable - the GSUB table
     *
     * @see LayoutEngine::layoutEngineFactory
     * @see OpenTypeLayoutEngine
     * @see ScriptAndLangaugeTags.h for script and language codes
     *
     * @internal
     */
    HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
                            const GlyphSubstitutionTableHeader *gsubTable);


    /**
     * The destructor, virtual for correct polymorphic invocation.
     *
     * @internal
     */
    virtual ~HanOpenTypeLayoutEngine();

    /**
     * ICU "poor man's RTTI", returns a UClassID for the actual class.
     *
     * @draft ICU 2.2
     */
    virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }

    /**
     * ICU "poor man's RTTI", returns a UClassID for this class.
     *
     * @draft ICU 2.2
     */
    static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }

protected:

    /**
     * This method does Han OpenType character processing. It assigns the OpenType feature
     * tags to the characters to generate the correct language-specific variants.
     *
     * Input parameters:
     * @param chars - the input character context
     * @param offset - the index of the first character to process
     * @param count - the number of characters to process
     * @param max - the number of characters in the input context
     * @param rightToLeft - true if the characters are in a right to left directional run
     *
     * Output parameters:
     * @param outChars - the output character arrayt
     * @param charIndices - the output character index array
     * @param featureTags - the output feature tag array
     * @param success - set to an error code if the operation fails
     *
     * @return the output character count
     *
     * @internal
     */
    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
            LEUnicode *&outChars, le_int32 *&charIndices, const LETag **&featureTags, LEErrorCode &success);


private:

    /**
     * The address of this static class variable serves as this class's ID
     * for ICU "poor man's RTTI".
     */
    static const char fgClassID;
};

U_NAMESPACE_END
#endif













--- NEW FILE: LEFontInstance.cpp ---
/*
 *******************************************************************************
 *
 *   Copyright (C) 1999-2003, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 *******************************************************************************
 *   file name:  LEFontInstance.cpp
 *
 *   created on: 02/06/2003
 *   created by: Eric R. Mader
 */

#include "LETypes.h"
#include "LEScripts.h"
#include "LEFontInstance.h"

U_NAMESPACE_BEGIN

const char LEFontInstance::fgClassID=0;

const LEFontInstance *LEFontInstance::getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit,
                                                       le_int32 script, LEErrorCode &success) const
{
    if (LE_FAILURE(success)) {
        return NULL;
    }

    if (chars == NULL || *offset < 0 || limit < 0 || *offset >= limit || script < 0 || script >= scriptCodeCount) {
        success = LE_ILLEGAL_ARGUMENT_ERROR;
        return NULL;
    }

    *offset = limit;
    return this;
}

void LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count,
                                      le_bool reverse, const LECharMapper *mapper, LEGlyphID glyphs[]) const
{
    le_int32 i, out = 0, dir = 1;

    if (reverse) {
        out = count - 1;
        dir = -1;
    }

    for (i = offset; i < offset + count; i += 1, out += dir) {
        LEUnicode16 high = chars[i];
        LEUnicode32 code = high;

        if (i < offset + count - 1 && high >= 0xD800 && high <= 0xDBFF) {
            LEUnicode16 low = chars[i + 1];

            if (low >= 0xDC00 && low <= 0xDFFF) {
                code = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
            }
        }

        glyphs[out] = mapCharToGlyph(code, mapper);

        if (code >= 0x10000) {
            i += 1;
            glyphs[out += dir] = 0xFFFF;
        }
    }
}

LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const
{
    LEUnicode32 mappedChar = mapper->mapChar(ch);

    if (mappedChar == 0xFFFE || mappedChar == 0xFFFF) {
        return 0xFFFF;
    }

    if (mappedChar == 0x200C || mappedChar == 0x200D) {
        return 1;
    }

    return mapCharToGlyph(mappedChar);
}
U_NAMESPACE_END




--- NEW FILE: LELanguages.h ---
/*
 *
 * (C) Copyright IBM Corp. 1998-2003. All Rights Reserved.
 *
 * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
 * YOU REALLY KNOW WHAT YOU'RE DOING.
 *
 * $Source: /usr/local/cvsroot/icu-sword/source/layout/LELanguages.h,v $
 * $Date: 2003/09/10 02:42:25 $
 * $Revision: 1.1 $
 */

#ifndef __LELANGUAGES_H
#define __LELANGUAGES_H

U_NAMESPACE_BEGIN

/**
 * A provisional list of language codes. For now,
 * this is just a list of languages which the LayoutEngine
 * supports.
 *
 * @draft ICU 2.6
 */

enum LanguageCodes {
    nullLanguageCode =  0,
    araLanguageCode =  1,
    asmLanguageCode =  2,
    benLanguageCode =  3,
    farLanguageCode =  4,
    gujLanguageCode =  5,
    hinLanguageCode =  6,
    iwrLanguageCode =  7,
    jiiLanguageCode =  8,
    janLanguageCode =  9,
    kanLanguageCode = 10,
    kokLanguageCode = 11,
    korLanguageCode = 12,
    kshLanguageCode = 13,
    malLanguageCode = 14,
    marLanguageCode = 15,
    mlrLanguageCode = 16,
    mniLanguageCode = 17,
    oriLanguageCode = 18,
    sanLanguageCode = 19,
    sndLanguageCode = 20,
    snhLanguageCode = 21,
    syrLanguageCode = 22,
    tamLanguageCode = 23,
    telLanguageCode = 24,
    thaLanguageCode = 25,
    urdLanguageCode = 26,
    zhpLanguageCode = 27,
    zhsLanguageCode = 28,
    zhtLanguageCode = 29,

    languageCodeCount = 30
};

U_NAMESPACE_END
#endif


















--- NEW FILE: MPreFixups.cpp ---
/*
 * (C) Copyright IBM Corp. 2002-2003 - All Rights Reserved
 *
 * $Source: /usr/local/cvsroot/icu-sword/source/layout/MPreFixups.cpp,v $
 * $Date: 2003/09/10 02:42:26 $
 * $Revision: 1.1 $
 *
 */

#include "LETypes.h"
#include "MPreFixups.h"

U_NAMESPACE_BEGIN

struct FixupData
{
    le_int32 fBaseIndex;
    le_int32 fMPreIndex;
};

MPreFixups::MPreFixups(le_int32 charCount)
    : fFixupData(NULL), fFixupCount(0)
{
    fFixupData = LE_NEW_ARRAY(FixupData, charCount);
}

MPreFixups::~MPreFixups()
{
    LE_DELETE_ARRAY(fFixupData);
    fFixupData = NULL;
}

void MPreFixups::add(le_int32 baseIndex, le_int32 mpreIndex)
{
    // NOTE: don't add the fixup data if the mpre is right
    // before the base consonant glyph.
    if (baseIndex - mpreIndex > 1) {
        fFixupData[fFixupCount].fBaseIndex = baseIndex;
        fFixupData[fFixupCount].fMPreIndex = mpreIndex;

        fFixupCount += 1;
    }
}

void MPreFixups::apply(LEGlyphID *glyphs, le_int32 *charIndices)
{
    for (le_int32 fixup = 0; fixup < fFixupCount; fixup += 1) {
        le_int32 baseIndex = fFixupData[fixup].fBaseIndex;
        le_int32 mpreIndex = fFixupData[fixup].fMPreIndex;
        le_int32 mpreLimit = mpreIndex + 1;

        while (glyphs[baseIndex] == 0xFFFF || glyphs[baseIndex] == 0xFFFE) {
            baseIndex -= 1;
        }

        while (glyphs[mpreLimit] == 0xFFFF || glyphs[mpreLimit] == 0xFFFE) {
            mpreLimit += 1;
        }

        if (mpreLimit == baseIndex) {
            continue;
        }

        le_int32   mpreCount = mpreLimit - mpreIndex;
        le_int32   moveCount = baseIndex - mpreLimit;
        le_int32   mpreDest  = baseIndex - mpreCount;
        LEGlyphID *mpreSave  = LE_NEW_ARRAY(LEGlyphID, mpreCount);
        le_int32  *indexSave = LE_NEW_ARRAY(le_int32, mpreCount);
        le_int32   i;

        for (i = 0; i < mpreCount; i += 1) {
            mpreSave[i]  = glyphs[mpreIndex + i];
            indexSave[i] = charIndices[mpreIndex + i];
        }

        for (i = 0; i < moveCount; i += 1) {
            glyphs[mpreIndex + i] = glyphs[mpreLimit + i];
            charIndices[mpreIndex + i] = charIndices[mpreLimit + i];
        }

        for (i = 0; i < mpreCount; i += 1) {
            glyphs[mpreDest + i] = mpreSave[i];
            charIndices[mpreDest + i] = indexSave[i];
        }
        
        LE_DELETE_ARRAY(indexSave);
        LE_DELETE_ARRAY(mpreSave);
    }
}

U_NAMESPACE_END

--- NEW FILE: MPreFixups.h ---
/*
 * (C) Copyright IBM Corp. 2002-2003 - All Rights Reserved
 *
 * $Source: /usr/local/cvsroot/icu-sword/source/layout/MPreFixups.h,v $
 * $Date: 2003/09/10 02:42:26 $
 * $Revision: 1.1 $
 *
 */

#ifndef __MPREFIXUPS_H
#define __MPREFIXUPS_H

/**
 * \file
 * \internal
 */

#include "LETypes.h"

U_NAMESPACE_BEGIN

// Might want to make this a private member...
struct FixupData;

class MPreFixups : public UMemory
{
public:
    MPreFixups(le_int32 charCount);
   ~MPreFixups();

    void add(le_int32 baseIndex, le_int32 mpreIndex);
    
    void apply(LEGlyphID *glyphs, le_int32 *charIndicies);

private:
    FixupData *fFixupData;
    le_int32   fFixupCount;
};

U_NAMESPACE_END
#endif






























































--- NEW FILE: layout.vcproj ---
<?xml version="1.0" encoding = "Windows-1252"?>
<VisualStudioProject
	ProjectType="Visual C++"
	Version="7.00"
	Name="layout"
	SccProjectName=""
	SccLocalPath="">
	<Platforms>
		<Platform
			Name="Win32"/>
	</Platforms>
	<Configurations>
		<Configuration
			Name="Debug|Win32"
			OutputDirectory=".\..\..\lib"
			IntermediateDirectory=".\Debug"
			ConfigurationType="2"
			UseOfMFC="0"
			ATLMinimizesCRunTimeLibraryUsage="FALSE"
			CharacterSet="2">
			<Tool
				Name="VCCLCompilerTool"
				Optimization="0"
				ImproveFloatingPointConsistency="TRUE"
				OptimizeForProcessor="2"
				AdditionalIncludeDirectories="..\..\include,..\common"
				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LAYOUT_EXPORTS;U_LAYOUT_IMPLEMENTATION"
				BasicRuntimeChecks="3"
				RuntimeLibrary="3"
				DisableLanguageExtensions="TRUE"
				PrecompiledHeaderFile=".\Debug/layout.pch"
				AssemblerListingLocation=".\Debug/"
				ObjectFile=".\Debug/"
				ProgramDataBaseFileName=".\Debug/"
				BrowseInformation="1"
				WarningLevel="3"
				SuppressStartupBanner="TRUE"
				DebugInformationFormat="4"
				CompileAs="0"/>
			<Tool
				Name="VCCustomBuildTool"/>
			<Tool
				Name="VCLinkerTool"
				AdditionalOptions="/MACHINE:I386"
				AdditionalDependencies="..\..\lib\icuucd.lib"
				OutputFile="..\..\bin\icule26d.dll"
				LinkIncremental="2"
				SuppressStartupBanner="TRUE"
				GenerateDebugInformation="TRUE"
				ProgramDatabaseFile=".\..\..\lib/icule26d.pdb"
				ImportLibrary="..\..\lib\iculed.lib"/>
			<Tool
				Name="VCMIDLTool"
				PreprocessorDefinitions="_DEBUG"
				MkTypLibCompatible="TRUE"
				SuppressStartupBanner="TRUE"
				TargetEnvironment="1"
				TypeLibraryName=".\..\..\lib/layout.tlb"/>
			<Tool
				Name="VCPostBuildEventTool"/>
			<Tool
				Name="VCPreBuildEventTool"/>
			<Tool
				Name="VCPreLinkEventTool"/>
			<Tool
				Name="VCResourceCompilerTool"
				PreprocessorDefinitions="_DEBUG"
				Culture="1033"
				AdditionalIncludeDirectories="..\common"/>
			<Tool
				Name="VCWebServiceProxyGeneratorTool"/>
			<Tool
				Name="VCWebDeploymentTool"/>
		</Configuration>
		<Configuration
			Name="Release|Win32"
			OutputDirectory=".\..\..\lib"
			IntermediateDirectory=".\Release"
			ConfigurationType="2"
			UseOfMFC="0"
			ATLMinimizesCRunTimeLibraryUsage="FALSE"
			CharacterSet="2">
			<Tool
				Name="VCCLCompilerTool"
				InlineFunctionExpansion="2"
				ImproveFloatingPointConsistency="TRUE"
				AdditionalIncludeDirectories="..\..\include,..\common"
				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LAYOUT_EXPORTS;U_LAYOUT_IMPLEMENTATION"
				StringPooling="TRUE"
				RuntimeLibrary="2"
				EnableFunctionLevelLinking="TRUE"
				DisableLanguageExtensions="TRUE"
				PrecompiledHeaderFile=".\Release/layout.pch"
				AssemblerListingLocation=".\Release/"
				ObjectFile=".\Release/"
				ProgramDataBaseFileName=".\Release/"
				WarningLevel="3"
				SuppressStartupBanner="TRUE"
				CompileAs="0"/>
			<Tool
				Name="VCCustomBuildTool"/>
			<Tool
				Name="VCLinkerTool"
				AdditionalOptions="/MACHINE:I386"
				AdditionalDependencies="..\..\lib\icuuc.lib"
				OutputFile="..\..\bin\icule26.dll"
				LinkIncremental="1"
				SuppressStartupBanner="TRUE"
				ProgramDatabaseFile=".\..\..\lib/icule26.pdb"
				ImportLibrary="..\..\lib\icule.lib"/>
			<Tool
				Name="VCMIDLTool"
				PreprocessorDefinitions="NDEBUG"
				MkTypLibCompatible="TRUE"
				SuppressStartupBanner="TRUE"
				TargetEnvironment="1"
				TypeLibraryName=".\..\..\lib/layout.tlb"/>
			<Tool
				Name="VCPostBuildEventTool"/>
			<Tool
				Name="VCPreBuildEventTool"/>
			<Tool
				Name="VCPreLinkEventTool"/>
			<Tool
				Name="VCResourceCompilerTool"
				PreprocessorDefinitions="NDEBUG"
				Culture="1033"
				AdditionalIncludeDirectories="..\common"/>
			<Tool
				Name="VCWebServiceProxyGeneratorTool"/>
			<Tool
				Name="VCWebDeploymentTool"/>
		</Configuration>
	</Configurations>
	<Files>
		<Filter
			Name="Source Files"
			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
			<File
				RelativePath=".\AlternateSubstSubtables.cpp">
			</File>
			<File
				RelativePath=".\AnchorTables.cpp">
			</File>
			<File
				RelativePath=".\ArabicLayoutEngine.cpp">
			</File>
			<File
				RelativePath=".\ArabicLigatureData.cpp">
			</File>
			<File
				RelativePath=".\ArabicShaping.cpp">
			</File>
			<File
				RelativePath=".\ClassDefinitionTables.cpp">
			</File>
			<File
				RelativePath=".\ContextualGlyphSubstProc.cpp">
			</File>
			<File
				RelativePath=".\ContextualSubstSubtables.cpp">
			</File>
			<File
				RelativePath=".\CoverageTables.cpp">
			</File>
			<File
				RelativePath=".\CursiveAttachmentSubtables.cpp">
			</File>
			<File
				RelativePath=".\DeviceTables.cpp">
			</File>
			<File
				RelativePath=".\ExtensionSubtables.cpp">
			</File>
			<File
				RelativePath=".\Features.cpp">
			</File>
			<File
				RelativePath=".\GDEFMarkFilter.cpp">
			</File>
			<File
				RelativePath=".\GXLayoutEngine.cpp">
			</File>
			<File
				RelativePath=".\GlyphDefinitionTables.cpp">
			</File>
			<File
				RelativePath=".\GlyphIterator.cpp">
			</File>
			<File
				RelativePath=".\GlyphPositioningTables.cpp">
			</File>
			<File
				RelativePath=".\GlyphPosnLookupProc.cpp">
			</File>
			<File
				RelativePath=".\GlyphSubstLookupProc.cpp">
			</File>
			<File
				RelativePath=".\GlyphSubstitutionTables.cpp">
			</File>
			<File
				RelativePath=".\HanLayoutEngine.cpp">
			</File>
			<File
				RelativePath=".\HebrewLigatureData.cpp">
			</File>
			<File
				RelativePath=".\HebrewShaping.cpp">
			</File>
			<File
				RelativePath=".\IndicClassTables.cpp">
			</File>
			<File
				RelativePath=".\IndicLayoutEngine.cpp">
			</File>
			<File
				RelativePath=".\IndicRearrangementProcessor.cpp">
			</File>
			<File
				RelativePath=".\IndicReordering.cpp">
			</File>
			<File
				RelativePath=".\LEFontInstance.cpp">
			</File>
			<File
				RelativePath=".\LayoutEngine.cpp">
			</File>
			<File
				RelativePath=".\LigatureSubstProc.cpp">
			</File>
			<File
				RelativePath=".\LigatureSubstSubtables.cpp">
			</File>
			<File
				RelativePath=".\LookupProcessor.cpp">
			</File>
			<File
				RelativePath=".\LookupTables.cpp">
			</File>
			<File
				RelativePath=".\Lookups.cpp">
			</File>
			<File
				RelativePath=".\MPreFixups.cpp">
			</File>
			<File
				RelativePath=".\MarkArrays.cpp">
			</File>
			<File
				RelativePath=".\MarkToBasePosnSubtables.cpp">
			</File>
			<File
				RelativePath=".\MarkToLigaturePosnSubtables.cpp">
			</File>
			<File
				RelativePath=".\MarkToMarkPosnSubtables.cpp">
			</File>
			<File
				RelativePath=".\MorphTables.cpp">
			</File>
			<File
				RelativePath=".\MultipleSubstSubtables.cpp">
			</File>
			<File
				RelativePath=".\NonContextualGlyphSubstProc.cpp">
			</File>
			<File
				RelativePath=".\OpenTypeLayoutEngine.cpp">
			</File>
			<File
				RelativePath=".\OpenTypeUtilities.cpp">
			</File>
			<File
				RelativePath=".\PairPositioningSubtables.cpp">
			</File>
			<File
				RelativePath=".\ScriptAndLanguage.cpp">
			</File>
			<File
				RelativePath=".\ScriptAndLanguageTags.cpp">
			</File>
			<File
				RelativePath=".\SegmentArrayProcessor.cpp">
			</File>
			<File
				RelativePath=".\SegmentSingleProcessor.cpp">
			</File>
			<File
				RelativePath=".\SimpleArrayProcessor.cpp">
			</File>
			<File
				RelativePath=".\SinglePositioningSubtables.cpp">
			</File>
			<File
				RelativePath=".\SingleSubstitutionSubtables.cpp">
			</File>
			<File
				RelativePath=".\SingleTableProcessor.cpp">
			</File>
			<File
				RelativePath=".\StateTableProcessor.cpp">
			</File>
			<File
				RelativePath=".\SubstitutionLookups.cpp">
			</File>
			<File
				RelativePath=".\SubtableProcessor.cpp">
			</File>
			<File
				RelativePath=".\ThaiLayoutEngine.cpp">
			</File>
			<File
				RelativePath=".\ThaiShaping.cpp">
			</File>
			<File
				RelativePath=".\ThaiStateTables.cpp">
			</File>
			<File
				RelativePath=".\TrimmedArrayProcessor.cpp">
			</File>
			<File
				RelativePath=".\ValueRecords.cpp">
			</File>
			<File
				RelativePath=".\loengine.cpp">
			</File>
		</Filter>
		<Filter
			Name="Header Files"
			Filter="h;hpp;hxx;hm;inl">
			<File
				RelativePath=".\AlternateSubstSubtables.h">
			</File>
			<File
				RelativePath=".\AnchorTables.h">
			</File>
			<File
				RelativePath=".\ArabicLayoutEngine.h">
			</File>
			<File
				RelativePath=".\ArabicShaping.h">
			</File>
			<File
				RelativePath=".\AttachmentPosnSubtables.h">
			</File>
			<File
				RelativePath=".\ClassDefinitionTables.h">
			</File>
			<File
				RelativePath=".\ContextualGlyphInsertion.h">
			</File>
			<File
				RelativePath=".\ContextualGlyphSubstProc.h">
			</File>
			<File
				RelativePath=".\ContextualGlyphSubstitution.h">
			</File>
			<File
				RelativePath=".\ContextualSubstSubtables.h">
			</File>
			<File
				RelativePath=".\CoverageTables.h">
			</File>
			<File
				RelativePath=".\CursiveAttachmentSubtables.h">
			</File>
			<File
				RelativePath=".\DefaultCharMapper.h">
			</File>
			<File
				RelativePath=".\DeviceTables.h">
			</File>
			<File
				RelativePath=".\ExtensionSubtables.h">
			</File>
			<File
				RelativePath=".\Features.h">
			</File>
			<File
				RelativePath=".\GDEFMarkFilter.h">
			</File>
			<File
				RelativePath=".\GXLayoutEngine.h">
			</File>
			<File
				RelativePath=".\GlyphDefinitionTables.h">
			</File>
			<File
				RelativePath=".\GlyphIterator.h">
			</File>
			<File
				RelativePath=".\GlyphPositionAdjustments.h">
			</File>
			<File
				RelativePath=".\GlyphPositioningTables.h">
			</File>
			<File
				RelativePath=".\GlyphPosnLookupProc.h">
			</File>
			<File
				RelativePath=".\GlyphSubstLookupProc.h">
			</File>
			<File
				RelativePath=".\GlyphSubstitutionTables.h">
			</File>
			<File
				RelativePath=".\HanLayoutEngine.h">
			</File>
			<File
				RelativePath=".\HebrewShaping.h">
			</File>
			<File
				RelativePath=".\HindiFeatureTags.h">
			</File>
			<File
				RelativePath=".\IndicLayoutEngine.h">
			</File>
			<File
				RelativePath=".\IndicRearrangement.h">
			</File>
			<File
				RelativePath=".\IndicRearrangementProcessor.h">
			</File>
			<File
				RelativePath=".\IndicReordering.h">
			</File>
			<File
				RelativePath=".\LEFontInstance.h">
				<FileConfiguration
					Name="Debug|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LEFontInstance.h"/>
				</FileConfiguration>
				<FileConfiguration
					Name="Release|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LEFontInstance.h"/>
				</FileConfiguration>
			</File>
			<File
				RelativePath=".\LEGlyphFilter.h">
				<FileConfiguration
					Name="Debug|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LEGlyphFilter.h"/>
				</FileConfiguration>
				<FileConfiguration
					Name="Release|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LEGlyphFilter.h"/>
				</FileConfiguration>
			</File>
			<File
				RelativePath=".\LELanguages.h">
				<FileConfiguration
					Name="Debug|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LELanguages.h"/>
				</FileConfiguration>
				<FileConfiguration
					Name="Release|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LELanguages.h"/>
				</FileConfiguration>
			</File>
			<File
				RelativePath=".\LEScripts.h">
				<FileConfiguration
					Name="Debug|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LEScripts.h"/>
				</FileConfiguration>
				<FileConfiguration
					Name="Release|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LEScripts.h"/>
				</FileConfiguration>
			</File>
			<File
				RelativePath=".\LESwaps.h">
				<FileConfiguration
					Name="Debug|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LESwaps.h"/>
				</FileConfiguration>
				<FileConfiguration
					Name="Release|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LESwaps.h"/>
				</FileConfiguration>
			</File>
			<File
				RelativePath=".\LETypes.h">
				<FileConfiguration
					Name="Debug|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LETypes.h"/>
				</FileConfiguration>
				<FileConfiguration
					Name="Release|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LETypes.h"/>
				</FileConfiguration>
			</File>
			<File
				RelativePath=".\LayoutEngine.h">
				<FileConfiguration
					Name="Debug|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LayoutEngine.h"/>
				</FileConfiguration>
				<FileConfiguration
					Name="Release|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\layout
"
						Outputs="..\..\include\layout\LayoutEngine.h"/>
				</FileConfiguration>
			</File>
			<File
				RelativePath=".\LayoutTables.h">
			</File>
			<File
				RelativePath=".\LigatureSubstProc.h">
			</File>
			<File
				RelativePath=".\LigatureSubstSubtables.h">
			</File>
			<File
				RelativePath=".\LigatureSubstitution.h">
			</File>
			<File
				RelativePath=".\LookupProcessor.h">
			</File>
			<File
				RelativePath=".\LookupTables.h">
			</File>
			<File
				RelativePath=".\Lookups.h">
			</File>
			<File
				RelativePath=".\MPreFixups.h">
			</File>
			<File
				RelativePath=".\MarkArrays.h">
			</File>
			<File
				RelativePath=".\MarkToBasePosnSubtables.h">
			</File>
			<File
				RelativePath=".\MarkToLigaturePosnSubtables.h">
			</File>
			<File
				RelativePath=".\MarkToMarkPosnSubtables.h">
			</File>
			<File
				RelativePath=".\MorphStateTables.h">
			</File>
			<File
				RelativePath=".\MorphTables.h">
			</File>
			<File
				RelativePath=".\MultipleSubstSubtables.h">
			</File>
			<File
				RelativePath=".\NonContextualGlyphSubst.h">
			</File>
			<File
				RelativePath=".\NonContextualGlyphSubstProc.h">
			</File>
			<File
				RelativePath=".\OpenTypeLayoutEngine.h">
			</File>
			<File
				RelativePath=".\OpenTypeTables.h">
			</File>
			<File
				RelativePath=".\OpenTypeUtilities.h">
			</File>
			<File
				RelativePath=".\PairPositioningSubtables.h">
			</File>
			<File
				RelativePath=".\ScriptAndLanguage.h">
			</File>
			<File
				RelativePath=".\ScriptAndLanguageTags.h">
			</File>
			<File
				RelativePath=".\SegmentArrayProcessor.h">
			</File>
			<File
				RelativePath=".\SegmentSingleProcessor.h">
			</File>
			<File
				RelativePath=".\SimpleArrayProcessor.h">
			</File>
			<File
				RelativePath=".\SinglePositioningSubtables.h">
			</File>
			<File
				RelativePath=".\SingleSubstitutionSubtables.h">
			</File>
			<File
				RelativePath=".\SingleTableProcessor.h">
			</File>
			<File
				RelativePath=".\StateTableProcessor.h">
			</File>
			<File
				RelativePath=".\StateTables.h">
			</File>
			<File
				RelativePath=".\SubstitutionLookups.h">
			</File>
			<File
				RelativePath=".\SubtableProcessor.h">
			</File>
			<File
				RelativePath=".\ThaiLayoutEngine.h">
			</File>
			<File
				RelativePath=".\ThaiShaping.h">
			</File>
			<File
				RelativePath=".\TrimmedArrayProcessor.h">
			</File>
			<File
				RelativePath=".\ValueRecords.h">
			</File>
			<File
				RelativePath=".\unicode\loengine.h">
				<FileConfiguration
					Name="Debug|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\unicode
"
						Outputs="..\..\include\unicode\loengine.h"/>
				</FileConfiguration>
				<FileConfiguration
					Name="Release|Win32">
					<Tool
						Name="VCCustomBuildTool"
						CommandLine="copy  $(InputPath)  ..\..\include\unicode
"
						Outputs="..\..\include\unicode\loengine.h"/>
				</FileConfiguration>
			</File>
		</Filter>
		<Filter
			Name="Resource Files"
			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
			<File
				RelativePath=".\layout.rc">
			</File>
		</Filter>
	</Files>
	<Globals>
	</Globals>
</VisualStudioProject>