[sword-cvs] icu-sword/source/samples/layout .cvsignore,1.2,1.3 FontMap.GDI,1.2,1.3 FontMap.Gnome,1.2,1.3 FontMap.cpp,1.2,1.3 FontMap.h,1.2,1.3 FontTableCache.cpp,NONE,1.1 FontTableCache.h,NONE,1.1 GDIFontInstance.cpp,1.2,1.3 GDIFontInstance.h,1.2,1.3 GDIFontMap.cpp,1.2,1.3 GDIFontMap.h,1.2,1.3 GDIGUISupport.cpp,1.2,1.3 GDIGUISupport.h,1.2,1.3 GUISupport.h,1.2,1.3 GnomeFontInstance.cpp,1.2,1.3 GnomeFontInstance.h,1.2,1.3 GnomeFontMap.cpp,1.2,1.3 GnomeFontMap.h,1.2,1.3 GnomeGUISupport.cpp,1.2,1.3 GnomeGUISupport.h,1.2,1.3 LayoutSample.rc,NONE,1.1 Makefile.in,1.2,1.3 RenderingSurface.h,NONE,1.1 Sample.txt,1.2,1.3 ScriptCompositeFontInstance.cpp,NONE,1.1 ScriptCompositeFontInstance.h,NONE,1.1 Surface.cpp,NONE,1.1 Surface.h,NONE,1.1 UnicodeReader.cpp,1.2,1.3 UnicodeReader.h,1.2,1.3 cmaps.cpp,1.2,1.3 cmaps.h,1.2,1.3 gnomelayout.cpp,1.2,1.3 layout.cpp,1.2,1.3 layout.dsp,1.2,1.3 layout.dsw,1.2,1.3 layout.sln,NONE,1.1 layout.vcproj,NONE,1.1 paragraph.cpp,1.2,1.3 paragraph.h,1.2,1.3 readme.html,1.2,1.3 resource.h,NONE,1.1 sfnt.h,1.2,1.3

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


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

Added Files:
	.cvsignore FontMap.GDI FontMap.Gnome FontMap.cpp FontMap.h 
	FontTableCache.cpp FontTableCache.h GDIFontInstance.cpp 
	GDIFontInstance.h GDIFontMap.cpp GDIFontMap.h 
	GDIGUISupport.cpp GDIGUISupport.h GUISupport.h 
	GnomeFontInstance.cpp GnomeFontInstance.h GnomeFontMap.cpp 
	GnomeFontMap.h GnomeGUISupport.cpp GnomeGUISupport.h 
	LayoutSample.rc Makefile.in RenderingSurface.h Sample.txt 
	ScriptCompositeFontInstance.cpp ScriptCompositeFontInstance.h 
	Surface.cpp Surface.h UnicodeReader.cpp UnicodeReader.h 
	cmaps.cpp cmaps.h gnomelayout.cpp layout.cpp layout.dsp 
	layout.dsw layout.sln layout.vcproj paragraph.cpp paragraph.h 
	readme.html resource.h sfnt.h 
Log Message:
ICU 2.6 commit






--- NEW FILE: FontTableCache.cpp ---
/*
 **********************************************************************
 *   Copyright (C) 2003, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 **********************************************************************
 */

#include "layout/LETypes.h"

#include "FontTableCache.h"

#define TABLE_CACHE_INIT 5
#define TABLE_CACHE_GROW 5

struct FontTableCacheEntry
{
    LETag tag;
    const void *table;
};

FontTableCache::FontTableCache()
    : fTableCacheCurr(0), fTableCacheSize(TABLE_CACHE_INIT)
{
    fTableCache = LE_NEW_ARRAY(FontTableCacheEntry, fTableCacheSize);

    if (fTableCache == NULL) {
        fTableCacheSize = 0;
        return;
    }

    for (int i = 0; i < fTableCacheSize; i += 1) {
        fTableCache[i].tag   = 0;
        fTableCache[i].table = NULL;
    }
}

FontTableCache::~FontTableCache()
{
    for (int i = fTableCacheCurr - 1; i >= 0; i -= 1) {
        LE_DELETE_ARRAY(fTableCache[i].table);

        fTableCache[i].tag   = 0;
        fTableCache[i].table = NULL;
    }

    fTableCacheCurr = 0;

    LE_DELETE_ARRAY(fTableCache);
    fTableCache = NULL;
}

const void *FontTableCache::find(LETag tableTag) const
{
    for (int i = 0; i < fTableCacheCurr; i += 1) {
        if (fTableCache[i].tag == tableTag) {
            return fTableCache[i].table;
        }
    }

    const void *table = readFontTable(tableTag);

    ((FontTableCache *) this)->add(tableTag, table);

    return table;
}

void FontTableCache::add(LETag tableTag, const void *table)
{
    if (fTableCacheCurr >= fTableCacheSize) {
        le_int32 newSize = fTableCacheSize + TABLE_CACHE_GROW;

        fTableCache = (FontTableCacheEntry *) LE_GROW_ARRAY(fTableCache, newSize);

        for (le_int32 i = fTableCacheSize; i < newSize; i += 1) {
            fTableCache[i].tag   = 0;
            fTableCache[i].table = NULL;
        }

        fTableCacheSize = newSize;
    }

    fTableCache[fTableCacheCurr].tag   = tableTag;
    fTableCache[fTableCacheCurr].table = table;

    fTableCacheCurr += 1;
}

--- NEW FILE: FontTableCache.h ---
/*
 **********************************************************************
 *   Copyright (C) 2003, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 **********************************************************************
 */

#ifndef __FONTTABLECACHE_H

#define __FONTTABLECACHE_H

#include "layout/LETypes.h"

struct FontTableCacheEntry;

class FontTableCache
{
public:
    FontTableCache();

    virtual ~FontTableCache();

    const void *find(LETag tableTag) const;

protected:
    virtual const void *readFontTable(LETag tableTag) const = 0;

private:

    void add(LETag tableTag, const void *table);

    FontTableCacheEntry *fTableCache;
    le_int32 fTableCacheCurr;
    le_int32 fTableCacheSize;
};

#endif















--- NEW FILE: LayoutSample.rc ---
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
/*
*******************************************************************************
*
*   Copyright (C) 2002-2003, International Business Machines
*   Corporation and others.  All Rights Reserved.
*
*******************************************************************************
*/
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

LAYOUTSAMPLE MENU DISCARDABLE 
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "&New Sample\tCtrl+N",         IDM_FILE_NEWSAMPLE
        MENUITEM "&Open...\tCtrl+O",            IDM_FILE_OPEN
        MENUITEM SEPARATOR
        MENUITEM "&Close\tCtrl+W",              IDM_FILE_CLOSE
        MENUITEM "E&xit\tCtrl+Q",               IDM_FILE_EXIT
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&About Layout Sample...",     IDM_HELP_ABOUTLAYOUTSAMPLE
    END
END


/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//

LAYOUTSAMPLE ACCELERATORS DISCARDABLE 
BEGIN
    "N",            IDM_FILE_NEWSAMPLE,     VIRTKEY, CONTROL, NOINVERT
    "O",            IDM_FILE_OPEN,          VIRTKEY, CONTROL, NOINVERT
    "Q",            IDM_FILE_EXIT,          VIRTKEY, CONTROL, NOINVERT
    "W",            IDM_FILE_CLOSE,         VIRTKEY, CONTROL, NOINVERT
END


#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE 
BEGIN
    "/*\r\n"
    "*******************************************************************************\r\n"
    "*\r\n"
    "*   Copyright (C) 2002-2003, International Business Machines\r\n"
    "*   Corporation and others.  All Rights Reserved.\r\n"
    "*\r\n"
    "*******************************************************************************\r\n"
    "*/\r\n"
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE DISCARDABLE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED

#endif    // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED



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

#ifndef __RENDERINGSURFACE_H
#define __RENDERINGSURFACE_H

#include "layout/LETypes.h"
#include "layout/LEFontInstance.h"

class RenderingSurface
{
public:
    RenderingSurface() {};
    virtual ~RenderingSurface() {};

    virtual void drawGlyphs(const LEFontInstance *font, const LEGlyphID *glyphs, le_int32 count,
                    const float *positions, le_int32 x, le_int32 y, le_int32 width, le_int32 height) = 0;
};

#endif


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

#include "layout/LETypes.h"

#include "unicode/uscript.h"

#include "FontMap.h"

#include "ScriptCompositeFontInstance.h"

const char ScriptCompositeFontInstance::fgClassID=0;

ScriptCompositeFontInstance::ScriptCompositeFontInstance(FontMap *fontMap)
    : fFontMap(fontMap)
{
    // nothing else to do
}

ScriptCompositeFontInstance::~ScriptCompositeFontInstance()
{
    delete fFontMap;
    fFontMap = NULL;
}

void ScriptCompositeFontInstance::getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const
{
    LEErrorCode status = LE_NO_ERROR;
    le_int32 script = LE_GET_SUB_FONT(glyph);
    const LEFontInstance *font = fFontMap->getScriptFont(script, status);

    advance.fX = 0;
    advance.fY = 0;

    if (LE_SUCCESS(status)) {
        font->getGlyphAdvance(LE_GET_GLYPH(glyph), advance);
    }
}

le_bool ScriptCompositeFontInstance::getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const
{
    LEErrorCode status = LE_NO_ERROR;
    le_int32 script = LE_GET_SUB_FONT(glyph);
    const LEFontInstance *font = fFontMap->getScriptFont(script, status);

    if (LE_SUCCESS(status)) {
        return font->getGlyphPoint(LE_GET_GLYPH(glyph), pointNumber, point);
    }

    return false;
}

const LEFontInstance *ScriptCompositeFontInstance::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;
    }

    const LEFontInstance *result = fFontMap->getScriptFont(script, success);

    if (LE_FAILURE(success)) {
        return NULL;
    }

    *offset = limit;
    return result;
}

// This is the really stupid version that doesn't look in any other font for the character...
// It would be better to also look in the "DEFAULT:" font. Another thing to do would be to
// look in all the fonts in some order, script code order being the most obvious...
LEGlyphID ScriptCompositeFontInstance::mapCharToGlyph(LEUnicode32 ch) const
{
    UErrorCode  error  = U_ZERO_ERROR;
    LEErrorCode status = LE_NO_ERROR;
    le_int32 script = uscript_getScript(ch, &error);
    const LEFontInstance *scriptFont = fFontMap->getScriptFont(script, status);
    LEGlyphID subFont = LE_SET_SUB_FONT(0, script);

    if (LE_FAILURE(status)) {
        return subFont;
    }

    LEGlyphID glyph = scriptFont->mapCharToGlyph(ch);

    return LE_SET_GLYPH(subFont, glyph);
}


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

#ifndef __SCRIPTCOMPOSITEFONTINSTANCE_H
#define __SCRIPTCOMPOSITEFONTINSTANCE_H

#include "layout/LETypes.h"
#include "layout/LEFontInstance.h"

#include "FontMap.h"

// U_NAMESPACE_BEGIN

class ScriptCompositeFontInstance : public LEFontInstance
{
public:

    ScriptCompositeFontInstance(FontMap *fontMap);

    virtual ~ScriptCompositeFontInstance();

      /**
     * Get a physical font which can render the given text. For composite fonts,
     * if there is no single physical font which can render all of the text,
     * return a physical font which can render an initial substring of the text,
     * and set the <code>offset</code> parameter to the end of that substring.
     *
     * Internally, the LayoutEngine works with runs of text all in the same
     * font and script, so it is best to call this method with text which is
     * in a single script, passing the script code in as a hint. If you don't
     * know the script of the text, you can use zero, which is the script code
     * for characters used in more than one script.
     *
     * The default implementation of this method is intended for instances of
     * <code>LEFontInstance</code> which represent a physical font. It returns
     * <code>this</code> and indicates that the entire string can be rendered.
     *
     * This method will return a valid <code>LEFontInstance</code> unless you
     * have passed illegal parameters, or an internal error has been encountered. 
     * For composite fonts, it may return the warning <code>LE_NO_SUBFONT_WARNING</code>
     * to indicate that the returned font may not be able to render all of
     * the text. Whenever a valid font is returned, the <code>offset</code> parameter
     * will be advanced by at least one.
     *
     * Subclasses which implement composite fonts must override this method.
     * Where it makes sense, they should use the script code as a hint to render
     * characters from the COMMON script in the font which is used for the given
     * script. For example, if the input text is a series of Arabic words separated
     * by spaces, and the script code passed in is <code>arabScriptCode</code> you
     * should return the font used for Arabic characters for all of the input text,
     * including the spaces. If, on the other hand, the input text contains characters
     * which cannot be rendered by the font used for Arabic characters, but which can
     * be rendered by another font, you should return that font for those characters.
     *
     * @param chars   - the array of Unicode characters.
     * @param offset  - a pointer to the starting offset in the text. On exit this
     *                  will be set the the limit offset of the text which can be
     *                  rendered using the returned font.
     * @param limit   - the limit offset for the input text.
     * @param script  - the script hint.
     * @param success - set to an error code if the arguments are illegal, or no font
     *                  can be returned for some reason. May also be set to
     *                  <code>LE_NO_SUBFONT_WARNING</code> if the subfont which
     *                  was returned cannot render all of the text.
     *
     * @return an <code>LEFontInstance</code> for the sub font which can render the characters, or
     *         <code>NULL</code> if there is an error.
     *
     * @see LEScripts.h
     *
     * @draft ICU 2.6
     */
    virtual const LEFontInstance *getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit, le_int32 script, LEErrorCode &success) const;

    /**
     * This method maps a single character to a glyph index, using the
     * font's charcter to glyph map.
     *
     * @param ch - the character
     *
     * @return the glyph index
     *
     * @draft ICU 2.6
     */
    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const;

    virtual const void *getFontTable(LETag tableTag) const;

    virtual le_int32 getUnitsPerEM() const;

    virtual le_int32 getAscent() const;

    virtual le_int32 getDescent() const;

    virtual le_int32 getLeading() const;

    virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const;

    virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const;

    float getXPixelsPerEm() const;

    float getYPixelsPerEm() const;

    float getScaleFactorX() const;

    float getScaleFactorY() const;

    /**
     * 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:
    FontMap *fFontMap;

private:

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

inline const void *ScriptCompositeFontInstance::getFontTable(LETag tableTag) const
{
    return NULL;
}

// Can't get units per EM without knowing which sub-font, so
// return a value that will make units == points
inline le_int32 ScriptCompositeFontInstance::getUnitsPerEM() const
{
    return 1;
}

inline le_int32 ScriptCompositeFontInstance::getAscent() const
{
    return fFontMap->getAscent();
}

inline le_int32 ScriptCompositeFontInstance::getDescent() const
{
    return fFontMap->getDescent();
}

inline le_int32 ScriptCompositeFontInstance::getLeading() const
{
    return fFontMap->getLeading();
}

inline float ScriptCompositeFontInstance::getXPixelsPerEm() const
{
    return fFontMap->getPointSize();
}

inline float ScriptCompositeFontInstance::getYPixelsPerEm() const
{
    return fFontMap->getPointSize();
}

// Can't get a scale factor without knowing the sub-font, so
// return 1.0.
inline float ScriptCompositeFontInstance::getScaleFactorX() const
{
    return 1.0;
}

// Can't get a scale factor without knowing the sub-font, so
// return 1.0
inline float ScriptCompositeFontInstance::getScaleFactorY() const
{
    return 1.0;
}

// U_NAMESPACE_END
#endif

--- NEW FILE: Surface.cpp ---
/*
 *   Copyright (C) 2003, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 */
void GDISurface::setFont(RenderingFontInstance *font)
{
    GDIFontInstance *gFont = (GDIFontInstance *) font;

    if (fCurrentFont != font) {
        fCurrentFont = font;
        SelectObject(fHdc, gFont->fFont);
    }
}

void GDISurface::drawGlyphs(RenderingFontInstance *font, const LEGlyphID *glyphs, le_int32 count, const le_int32 *dx,
    le_int32 x, le_int32 y, le_int32 width, le_int32 height)
{
    RECT clip;

    clip.top    = 0;
    clip.left   = 0;
    clip.bottom = height;
    clip.right  = width;

    setFont(font);

    ExtTextOut(fHdc, x, y - fAscent, ETO_CLIPPED | ETO_GLYPH_INDEX, &clip,
        glyphs, count, (INT *) dx);
}


--- NEW FILE: Surface.h ---
/*
 *   Copyright (C) 2003, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 */
class Surface
{
public:
    Surface(/*what?*/);

    void setFont(RenderingFontInstance *font);

    void drawGlyphs(RenderingFontInstance *font, const LEGlyphID *glyphs, le_int32 count, const le_int32 *dx,
        le_int32 x, le_int32 y, le_int32 width, le_int32 height);
};









--- NEW FILE: layout.sln ---
Microsoft Visual Studio Solution File, Format Version 7.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "layout", "layout.vcproj", "{497500ED-DE1D-4B20-B529-F41B5A0FBEEB}"
EndProject
Global
	GlobalSection(SolutionConfiguration) = preSolution
		ConfigName.0 = Debug
		ConfigName.1 = Release
	EndGlobalSection
	GlobalSection(ProjectDependencies) = postSolution
	EndGlobalSection
	GlobalSection(ProjectConfiguration) = postSolution
		{497500ED-DE1D-4B20-B529-F41B5A0FBEEB}.Debug.ActiveCfg = Debug|Win32
		{497500ED-DE1D-4B20-B529-F41B5A0FBEEB}.Debug.Build.0 = Debug|Win32
		{497500ED-DE1D-4B20-B529-F41B5A0FBEEB}.Release.ActiveCfg = Release|Win32
		{497500ED-DE1D-4B20-B529-F41B5A0FBEEB}.Release.Build.0 = Release|Win32
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
	EndGlobalSection
	GlobalSection(ExtensibilityAddIns) = postSolution
	EndGlobalSection
EndGlobal

--- 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="Release|Win32"
			OutputDirectory=".\Release"
			IntermediateDirectory=".\Release"
			ConfigurationType="1"
			UseOfMFC="0"
			ATLMinimizesCRunTimeLibraryUsage="FALSE"
			CharacterSet="2">
			<Tool
				Name="VCCLCompilerTool"
				InlineFunctionExpansion="1"
				OptimizeForProcessor="2"
				AdditionalIncludeDirectories="..\..\..\include,..\..\..\include\layout,..\..\common"
				PreprocessorDefinitions="NDEBUG,_CONSOLE,WIN32,UNICODE,_WIN32_WINNT=0X500,LE_USE_CMEMORY"
				StringPooling="TRUE"
				RuntimeLibrary="2"
				EnableFunctionLevelLinking="TRUE"
				UsePrecompiledHeader="2"
				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\iculx.lib ..\..\..\lib\icule.lib ..\..\..\lib\icuuc.lib ..\..\..\lib\icuin.lib odbc32.lib odbccp32.lib"
				OutputFile=".\Release/layout.exe"
				LinkIncremental="1"
				SuppressStartupBanner="TRUE"
				ProgramDatabaseFile=".\Release/layout.pdb"
				SubSystem="2"/>
			<Tool
				Name="VCMIDLTool"
				TypeLibraryName=".\Release/layout.tlb"/>
			<Tool
				Name="VCPostBuildEventTool"/>
			<Tool
				Name="VCPreBuildEventTool"/>
			<Tool
				Name="VCPreLinkEventTool"/>
			<Tool
				Name="VCResourceCompilerTool"
				PreprocessorDefinitions="NDEBUG"
				Culture="1033"/>
			<Tool
				Name="VCWebServiceProxyGeneratorTool"/>
			<Tool
				Name="VCWebDeploymentTool"/>
		</Configuration>
		<Configuration
			Name="Debug|Win32"
			OutputDirectory=".\Debug"
			IntermediateDirectory=".\Debug"
			ConfigurationType="1"
			UseOfMFC="0"
			ATLMinimizesCRunTimeLibraryUsage="FALSE"
			CharacterSet="2">
			<Tool
				Name="VCCLCompilerTool"
				Optimization="0"
				OptimizeForProcessor="2"
				AdditionalIncludeDirectories="..\..\..\include,..\..\..\include\layout,..\..\common"
				PreprocessorDefinitions="_DEBUG,WIN32,UNICODE,_WIN32_WINNT=0X500,LE_USE_CMEMORY"
				BasicRuntimeChecks="3"
				RuntimeLibrary="3"
				UsePrecompiledHeader="2"
				PrecompiledHeaderFile=".\Debug/layout.pch"
				AssemblerListingLocation=".\Debug/"
				ObjectFile=".\Debug/"
				ProgramDataBaseFileName=".\Debug/"
				WarningLevel="3"
				SuppressStartupBanner="TRUE"
				DebugInformationFormat="4"
				CompileAs="0"/>
			<Tool
				Name="VCCustomBuildTool"/>
			<Tool
				Name="VCLinkerTool"
				AdditionalOptions="/MACHINE:I386"
				AdditionalDependencies="..\..\..\lib\iculxd.lib ..\..\..\lib\iculed.lib ..\..\..\lib\icuucd.lib ..\..\..\lib\icuind.lib odbc32.lib odbccp32.lib"
				OutputFile=".\Debug/layout.exe"
				LinkIncremental="2"
				SuppressStartupBanner="TRUE"
				GenerateDebugInformation="TRUE"
				ProgramDatabaseFile=".\Debug/layout.pdb"
				SubSystem="2"/>
			<Tool
				Name="VCMIDLTool"
				TypeLibraryName=".\Debug/layout.tlb"/>
			<Tool
				Name="VCPostBuildEventTool"/>
			<Tool
				Name="VCPreBuildEventTool"/>
			<Tool
				Name="VCPreLinkEventTool"/>
			<Tool
				Name="VCResourceCompilerTool"
				PreprocessorDefinitions="_DEBUG"
				Culture="1033"/>
			<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=".\FontMap.cpp">
			</File>
			<File
				RelativePath=".\FontTableCache.cpp">
			</File>
			<File
				RelativePath=".\GDIFontInstance.cpp">
			</File>
			<File
				RelativePath=".\GDIFontMap.cpp">
			</File>
			<File
				RelativePath=".\GDIGUISupport.cpp">
			</File>
			<File
				RelativePath=".\LayoutSample.rc">
			</File>
			<File
				RelativePath=".\ScriptCompositeFontInstance.cpp">
			</File>
			<File
				RelativePath=".\UnicodeReader.cpp">
			</File>
			<File
				RelativePath=".\cmaps.cpp">
			</File>
			<File
				RelativePath=".\layout.cpp">
			</File>
			<File
				RelativePath=".\paragraph.cpp">
			</File>
		</Filter>
		<Filter
			Name="Header Files"
			Filter="h;hpp;hxx;hm;inl">
			<File
				RelativePath=".\FontMap.h">
			</File>
			<File
				RelativePath=".\FontTableCache.h">
			</File>
			<File
				RelativePath=".\GDIFontInstance.h">
			</File>
			<File
				RelativePath=".\GDIFontMap.h">
			</File>
			<File
				RelativePath=".\GDIGUISupport.h">
			</File>
			<File
				RelativePath=".\GUISupport.h">
			</File>
			<File
				RelativePath=".\RenderingSurface.h">
			</File>
			<File
				RelativePath=".\ScriptCompositeFontInstance.h">
			</File>
			<File
				RelativePath=".\UnicodeReader.h">
			</File>
			<File
				RelativePath=".\cmaps.h">
			</File>
			<File
				RelativePath=".\paragraph.h">
			</File>
			<File
				RelativePath=".\resource.h">
			</File>
			<File
				RelativePath=".\sfnt.h">
			</File>
		</Filter>
		<Filter
			Name="Resource Files"
			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
		</Filter>
	</Files>
	<Globals>
	</Globals>
</VisualStudioProject>




--- NEW FILE: resource.h ---
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Copyright (c) 2001-2003 International Business Machines
// Corporation and others. All Rights Reserved.
// Used by LayoutSample.rc
//
#define IDM_FILE_NEWSAMPLE              40001
#define IDM_FILE_OPEN                   40002
#define IDM_FILE_CLOSE                  40003
#define IDM_FILE_EXIT                   40004
#define IDM_HELP_ABOUTLAYOUTSAMPLE      40005

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        104
#define _APS_NEXT_COMMAND_VALUE         40006
#define _APS_NEXT_CONTROL_VALUE         1000
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif