mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-08 06:53:45 +00:00
ICU-2253 Initial support for language codes, CJK language-specific variants and associated clean-up.
X-SVN-Rev: 11534
This commit is contained in:
parent
f69ff31d30
commit
1bb8d611a2
19 changed files with 553 additions and 114 deletions
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
#include "LETypes.h"
|
||||
#include "LEScripts.h"
|
||||
#include "LEGlyphFilter.h"
|
||||
#include "LayoutEngine.h"
|
||||
#include "OpenTypeLayoutEngine.h"
|
||||
|
@ -54,13 +55,13 @@ ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fon
|
|||
const GlyphSubstitutionTableHeader *gsubTable)
|
||||
: OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable)
|
||||
{
|
||||
fFeatureOrder = ArabicShaping::getFeatureOrder();
|
||||
// fFeatureOrder = ArabicShaping::getFeatureOrder();
|
||||
}
|
||||
|
||||
ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode)
|
||||
: OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode)
|
||||
{
|
||||
fFeatureOrder = ArabicShaping::getFeatureOrder();
|
||||
// fFeatureOrder = ArabicShaping::getFeatureOrder();
|
||||
}
|
||||
|
||||
ArabicOpenTypeLayoutEngine::~ArabicOpenTypeLayoutEngine()
|
||||
|
|
|
@ -65,36 +65,36 @@ ArabicShaping::ShapeType ArabicShaping::getShapeType(LEUnicode c)
|
|||
}
|
||||
|
||||
#if 0
|
||||
const LETag GlyphShaper::isolFeatureTag = 0x69736F6C; // 'isol'
|
||||
const LETag GlyphShaper::initFeatureTag = 0x696E6974; // 'init'
|
||||
const LETag GlyphShaper::mediFeatureTag = 0x6D656469; // 'medi'
|
||||
const LETag GlyphShaper::finaFeatureTag = 0x66696E61; // 'fina'
|
||||
const LETag GlyphShaper::ligaFeatureTag = 0x6C696761; // 'liga'
|
||||
const LETag GlyphShaper::msetFeatureTag = 0x6D736574; // 'mset'
|
||||
const LETag GlyphShaper::markFeatureTag = 0x6D61726B; // 'mark'
|
||||
const LETag GlyphShaper::isolFeatureTag = LE_MAKE_TAG('i', 's', 'o', 'l');
|
||||
const LETag GlyphShaper::initFeatureTag = LE_MAKE_TAG('i', 'n', 'i', 't');
|
||||
const LETag GlyphShaper::mediFeatureTag = LE_MAKE_TAG('m', 'e', 'd', 'i');
|
||||
const LETag GlyphShaper::finaFeatureTag = LE_MAKE_TAG('f', 'i', 'n', 'a');
|
||||
const LETag GlyphShaper::ligaFeatureTag = LE_MAKE_TAG('l', 'i', 'g', 'a');
|
||||
const LETag GlyphShaper::msetFeatureTag = LE_MAKE_TAG('m', 's', 'e', 't');
|
||||
const LETag GlyphShaper::markFeatureTag = LE_MAKE_TAG('m', 'a', 'r', 'k');
|
||||
|
||||
const LETag GlyphShaper::emptyTag = 0x00000000; // ''
|
||||
#else
|
||||
|
||||
const LETag isolFeatureTag = 0x69736F6C; // 'isol'
|
||||
const LETag initFeatureTag = 0x696E6974; // 'init'
|
||||
const LETag mediFeatureTag = 0x6D656469; // 'medi'
|
||||
const LETag finaFeatureTag = 0x66696E61; // 'fina'
|
||||
const LETag ligaFeatureTag = 0x6C696761; // 'liga'
|
||||
const LETag msetFeatureTag = 0x6D736574; // 'mset'
|
||||
const LETag markFeatureTag = 0x6D61726B; // 'mark'
|
||||
const LETag isolFeatureTag = LE_MAKE_TAG('i', 's', 'o', 'l');
|
||||
const LETag initFeatureTag = LE_MAKE_TAG('i', 'n', 'i', 't');
|
||||
const LETag mediFeatureTag = LE_MAKE_TAG('m', 'e', 'd', 'i');
|
||||
const LETag finaFeatureTag = LE_MAKE_TAG('f', 'i', 'n', 'a');
|
||||
const LETag ligaFeatureTag = LE_MAKE_TAG('l', 'i', 'g', 'a');
|
||||
const LETag msetFeatureTag = LE_MAKE_TAG('m', 's', 'e', 't');
|
||||
const LETag markFeatureTag = LE_MAKE_TAG('m', 'a', 'r', 'k');
|
||||
|
||||
const LETag emptyTag = 0x00000000; // ''
|
||||
#endif
|
||||
|
||||
const LETag ccmpFeatureTag = 0x63636D70; // 'ccmp'
|
||||
const LETag rligFeatureTag = 0x726C6967; // 'rlig'
|
||||
const LETag caltFeatureTag = 0x63616C74; // 'calt'
|
||||
const LETag dligFeatureTag = 0x646C6967; // 'dlig'
|
||||
const LETag cswhFeatureTag = 0x63737768; // 'cswh'
|
||||
const LETag cursFeatureTag = 0x63757273; // 'curs'
|
||||
const LETag kernFeatureTag = 0x6B65726E; // 'kern'
|
||||
const LETag mkmkFeatureTag = 0x6D6B6D6B; // 'mkmk'
|
||||
const LETag ccmpFeatureTag = LE_MAKE_TAG('c', 'c', 'm', 'p');
|
||||
const LETag rligFeatureTag = LE_MAKE_TAG('r', 'l', 'i', 'g');
|
||||
const LETag caltFeatureTag = LE_MAKE_TAG('c', 'a', 'l', 't');
|
||||
const LETag dligFeatureTag = LE_MAKE_TAG('d', 'l', 'i', 'g');
|
||||
const LETag cswhFeatureTag = LE_MAKE_TAG('c', 's', 'w', 'h');
|
||||
const LETag cursFeatureTag = LE_MAKE_TAG('c', 'u', 'r', 's');
|
||||
const LETag kernFeatureTag = LE_MAKE_TAG('k', 'e', 'r', 'n');
|
||||
const LETag mkmkFeatureTag = LE_MAKE_TAG('m', 'k', 'm', 'k');
|
||||
|
||||
|
||||
const LETag featureOrder[] =
|
||||
|
|
|
@ -35,4 +35,11 @@ le_bool GlyphSubstitutionTableHeader::coversScript(LETag scriptTag) const
|
|||
return scriptListTable->findScript(scriptTag) != NULL;
|
||||
}
|
||||
|
||||
le_bool GlyphSubstitutionTableHeader::coversScriptAndLanguage(LETag scriptTag, LETag languageTag) const
|
||||
{
|
||||
const ScriptListTable *scriptListTable = (const ScriptListTable *) ((char *)this + SWAPW(scriptListOffset));
|
||||
|
||||
return scriptListTable->findLanguage(scriptTag, languageTag, true) != NULL;
|
||||
}
|
||||
|
||||
U_NAMESPACE_END
|
||||
|
|
|
@ -35,6 +35,7 @@ struct GlyphSubstitutionTableHeader
|
|||
const LEGlyphFilter *filter = NULL, const LETag *featureOrder = NULL) const;
|
||||
|
||||
le_bool coversScript(LETag scriptTag) const;
|
||||
le_bool coversScriptAndLanguage(LETag scriptTag, LETag languageTag) const;
|
||||
};
|
||||
|
||||
enum GlyphSubstitutionSubtableTypes
|
||||
|
|
68
icu4c/source/layout/HanLayoutEngine.cpp
Normal file
68
icu4c/source/layout/HanLayoutEngine.cpp
Normal file
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* HanLayoutEngine.cpp: OpenType processing for Han fonts.
|
||||
*
|
||||
* (C) Copyright IBM Corp. 1998 - 2003 - All Rights Reserved.
|
||||
*
|
||||
* $Source: /xsrl/Nsvn/icu/icu/source/layout/HanLayoutEngine.cpp,v $ $Date: 2003/04/12 00:37:11 $ $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_MAKE_TAG('l', 'o', 'c', 'l');
|
||||
const LETag smplFeatureTag = LE_MAKE_TAG('s', 'm', 'p', 'l');
|
||||
const LETag tradFeatureTag = LE_MAKE_TAG('t', 'r', 'a', 'd');
|
||||
|
||||
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;
|
||||
}
|
111
icu4c/source/layout/HanLayoutEngine.h
Normal file
111
icu4c/source/layout/HanLayoutEngine.h
Normal file
|
@ -0,0 +1,111 @@
|
|||
|
||||
/*
|
||||
* HanLayoutEngine.h: OpenType processing for Han fonts.
|
||||
*
|
||||
* (C) Copyright IBM Corp. 1998 - 2003 - All Rights Reserved.
|
||||
*
|
||||
* $Source: /xsrl/Nsvn/icu/icu/source/layout/HanLayoutEngine.h,v $ $Date: 2003/04/12 00:37:11 $ $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
|
|
@ -2,8 +2,8 @@
|
|||
* (C) Copyright IBM Corp. 1998 - 2003 - All Rights Reserved
|
||||
*
|
||||
* $Source: /xsrl/Nsvn/icu/icu/source/layout/IndicReordering.cpp,v $
|
||||
* $Date: 2003/01/28 23:30:56 $
|
||||
* $Revision: 1.9 $
|
||||
* $Date: 2003/04/12 00:37:11 $
|
||||
* $Revision: 1.10 $
|
||||
*
|
||||
*/
|
||||
|
||||
|
@ -155,22 +155,22 @@ enum
|
|||
|
||||
const LETag emptyTag = 0x00000000; // ''
|
||||
|
||||
const LETag nuktFeatureTag = 0x6E756B74; // 'nukt'
|
||||
const LETag akhnFeatureTag = 0x616B686E; // 'akhn'
|
||||
const LETag rphfFeatureTag = 0x72706866; // 'rphf'
|
||||
const LETag blwfFeatureTag = 0x626C7766; // 'blwf'
|
||||
const LETag halfFeatureTag = 0x68616C66; // 'half'
|
||||
const LETag pstfFeatureTag = 0x70737466; // 'pstf'
|
||||
const LETag vatuFeatureTag = 0x76617475; // 'vatu'
|
||||
const LETag presFeatureTag = 0x70726573; // 'pres'
|
||||
const LETag blwsFeatureTag = 0x626C7773; // 'blws'
|
||||
const LETag abvsFeatureTag = 0x61627673; // 'abvs'
|
||||
const LETag pstsFeatureTag = 0x70737473; // 'psts'
|
||||
const LETag halnFeatureTag = 0x68616C6E; // 'haln'
|
||||
const LETag nuktFeatureTag = LE_MAKE_TAG('n', 'u', 'k', 't');
|
||||
const LETag akhnFeatureTag = LE_MAKE_TAG('a', 'k', 'h', 'n');
|
||||
const LETag rphfFeatureTag = LE_MAKE_TAG('r', 'p', 'h', 'f');
|
||||
const LETag blwfFeatureTag = LE_MAKE_TAG('b', 'l', 'w', 'f');
|
||||
const LETag halfFeatureTag = LE_MAKE_TAG('h', 'a', 'l', 'f');
|
||||
const LETag pstfFeatureTag = LE_MAKE_TAG('p', 's', 't', 'f');
|
||||
const LETag vatuFeatureTag = LE_MAKE_TAG('v', 'a', 't', 'u');
|
||||
const LETag presFeatureTag = LE_MAKE_TAG('p', 'r', 'e', 's');
|
||||
const LETag blwsFeatureTag = LE_MAKE_TAG('b', 'l', 'w', 's');
|
||||
const LETag abvsFeatureTag = LE_MAKE_TAG('a', 'b', 'v', 's');
|
||||
const LETag pstsFeatureTag = LE_MAKE_TAG('p', 's', 't', 's');
|
||||
const LETag halnFeatureTag = LE_MAKE_TAG('h', 'a', 'l', 'n');
|
||||
|
||||
const LETag blwmFeatureTag = 0x626C776D; // 'blwm'
|
||||
const LETag abvmFeatureTag = 0x6162766D; // 'abvm'
|
||||
const LETag distFeatureTag = 0x64697374; // 'dist'
|
||||
const LETag blwmFeatureTag = LE_MAKE_TAG('b', 'l', 'w', 'm');
|
||||
const LETag abvmFeatureTag = LE_MAKE_TAG('a', 'b', 'v', 'm');
|
||||
const LETag distFeatureTag = LE_MAKE_TAG('d', 'i', 's', 't');
|
||||
|
||||
// These are in the order in which the features need to be applied
|
||||
// for correct processing
|
||||
|
|
59
icu4c/source/layout/LELanguages.h
Normal file
59
icu4c/source/layout/LELanguages.h
Normal file
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
*
|
||||
* (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: /xsrl/Nsvn/icu/icu/source/layout/LELanguages.h,v $ $Date: 2003/04/12 00:37:12 $ $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 {
|
||||
araLanguageCode = 0,
|
||||
asmLanguageCode = 1,
|
||||
benLanguageCode = 2,
|
||||
farLanguageCode = 3,
|
||||
gujLanguageCode = 4,
|
||||
hinLanguageCode = 5,
|
||||
iwrLanguageCode = 6,
|
||||
jiiLanguageCode = 7,
|
||||
janLanguageCode = 8,
|
||||
kanLanguageCode = 9,
|
||||
kokLanguageCode = 10,
|
||||
korLanguageCode = 11,
|
||||
kshLanguageCode = 12,
|
||||
malLanguageCode = 13,
|
||||
marLanguageCode = 14,
|
||||
mlrLanguageCode = 15,
|
||||
mniLanguageCode = 16,
|
||||
oriLanguageCode = 17,
|
||||
sanLanguageCode = 18,
|
||||
sndLanguageCode = 19,
|
||||
snhLanguageCode = 20,
|
||||
syrLanguageCode = 21,
|
||||
tamLanguageCode = 22,
|
||||
telLanguageCode = 23,
|
||||
thaLanguageCode = 24,
|
||||
urdLanguageCode = 25,
|
||||
zhpLanguageCode = 26,
|
||||
zhsLanguageCode = 27,
|
||||
zhtLanguageCode = 28,
|
||||
|
||||
languageCodeCount = 29
|
||||
};
|
||||
|
||||
U_NAMESPACE_END
|
||||
#endif
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* %W% %E%
|
||||
*
|
||||
* (C) Copyright IBM Corp. 1998 - 2002. All Rights Reserved.
|
||||
* (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: /xsrl/Nsvn/icu/icu/source/layout/LEScripts.h,v $ $Date: 2003/04/12 00:37:12 $ $Revision: 1.6 $
|
||||
*/
|
||||
|
||||
#ifndef __LESCRIPTS_H
|
||||
|
@ -17,8 +17,9 @@ U_NAMESPACE_BEGIN
|
|||
* Constants for Unicode script values, generated using
|
||||
* ICU4J's <code>UScript</code> class.
|
||||
*
|
||||
* @draft ICU 2.4
|
||||
* @draft ICU 2.6
|
||||
*/
|
||||
|
||||
enum ScriptCodes {
|
||||
zyyyScriptCode = 0,
|
||||
qaaiScriptCode = 1,
|
||||
|
@ -66,8 +67,16 @@ enum ScriptCodes {
|
|||
hanoScriptCode = 43,
|
||||
buhdScriptCode = 44,
|
||||
tagbScriptCode = 45,
|
||||
braiScriptCode = 46,
|
||||
cprtScriptCode = 47,
|
||||
limbScriptCode = 48,
|
||||
linbScriptCode = 49,
|
||||
osmaScriptCode = 50,
|
||||
shawScriptCode = 51,
|
||||
taleScriptCode = 52,
|
||||
ugarScriptCode = 53,
|
||||
|
||||
scriptCodeCount = 46
|
||||
scriptCodeCount = 54
|
||||
};
|
||||
|
||||
U_NAMESPACE_END
|
||||
|
|
|
@ -295,7 +295,7 @@ typedef struct LEPoint LEPoint;
|
|||
*
|
||||
* @draft ICU 2.6
|
||||
*/
|
||||
#define LE_GROW_ARRAY(array, newSize) uprv_realloc((void *) (array), newSize * sizeof (array)[0])
|
||||
#define LE_GROW_ARRAY(array, newSize) uprv_realloc((void *) (array), (newSize) * sizeof (array)[0])
|
||||
|
||||
/**
|
||||
* Free an array of basic types. This is used to isolate the rest of
|
||||
|
@ -305,6 +305,19 @@ typedef struct LEPoint LEPoint;
|
|||
*/
|
||||
#define LE_DELETE_ARRAY(array) uprv_free((void *) (array))
|
||||
|
||||
/**
|
||||
* A macro to construct the four-letter tags used to
|
||||
* label TrueType tables, and for script, language and
|
||||
* feature tags in OpenType tables.
|
||||
*
|
||||
* @draft ICU 2.6
|
||||
*/
|
||||
#define LE_MAKE_TAG(a, b, c, d) \
|
||||
(((le_uint32)(a) << 24) | \
|
||||
((le_uint32)(b) << 16) | \
|
||||
((le_uint32)(c) << 8) | \
|
||||
(le_uint32)(d))
|
||||
|
||||
/**
|
||||
* Error codes returned by the LayoutEngine.
|
||||
*
|
||||
|
|
|
@ -7,9 +7,12 @@
|
|||
*/
|
||||
|
||||
#include "LETypes.h"
|
||||
#include "LEScripts.h"
|
||||
#include "LELanguages.h"
|
||||
|
||||
#include "LayoutEngine.h"
|
||||
#include "ArabicLayoutEngine.h"
|
||||
//#include "HebrewLayoutEngine.h"
|
||||
#include "HanLayoutEngine.h"
|
||||
#include "IndicLayoutEngine.h"
|
||||
#include "ThaiLayoutEngine.h"
|
||||
#include "GXLayoutEngine.h"
|
||||
|
@ -320,8 +323,8 @@ void LayoutEngine::reset()
|
|||
|
||||
LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success)
|
||||
{
|
||||
static le_uint32 gsubTableTag = 0x47535542; // "GSUB"
|
||||
static le_uint32 mortTableTag = 0x6D6F7274; // 'mort'
|
||||
static le_uint32 gsubTableTag = LE_MAKE_TAG('G', 'S', 'U', 'B');
|
||||
static le_uint32 mortTableTag = LE_MAKE_TAG('m', 'o', 'r', 't');
|
||||
|
||||
if (LE_FAILURE(success)) {
|
||||
return NULL;
|
||||
|
@ -329,8 +332,10 @@ LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstan
|
|||
|
||||
const GlyphSubstitutionTableHeader *gsubTable = (const GlyphSubstitutionTableHeader *) fontInstance->getFontTable(gsubTableTag);
|
||||
LayoutEngine *result = NULL;
|
||||
LETag scriptTag = 0x00000000;
|
||||
LETag languageTag = 0x00000000;
|
||||
|
||||
if (gsubTable != NULL && gsubTable->coversScript(OpenTypeLayoutEngine::getScriptTag(scriptCode))) {
|
||||
if (gsubTable != NULL && gsubTable->coversScript(scriptTag = OpenTypeLayoutEngine::getScriptTag(scriptCode))) {
|
||||
switch (scriptCode) {
|
||||
case bengScriptCode:
|
||||
case devaScriptCode:
|
||||
|
@ -348,6 +353,27 @@ LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstan
|
|||
result = new ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable);
|
||||
break;
|
||||
|
||||
case haniScriptCode:
|
||||
languageTag = OpenTypeLayoutEngine::getLangSysTag(languageCode);
|
||||
|
||||
switch (languageCode) {
|
||||
case korLanguageCode:
|
||||
case janLanguageCode:
|
||||
case zhtLanguageCode:
|
||||
case zhsLanguageCode:
|
||||
if (gsubTable->coversScriptAndLanguage(scriptTag, languageTag)) {
|
||||
result = new HanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable);
|
||||
break;
|
||||
}
|
||||
|
||||
// note: falling through to default case.
|
||||
default:
|
||||
result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, gsubTable);
|
||||
break;
|
||||
|
|
|
@ -29,7 +29,7 @@ le_uint32 MultipleSubstitutionSubtable::process(GlyphIterator *glyphIterator, co
|
|||
if (glyphCount == 0) {
|
||||
glyphIterator->setCurrGlyphID(0xFFFF);
|
||||
return 1;
|
||||
} else if (glyphCount == 1) {
|
||||
} else if (glyphCount >= 1) {
|
||||
TTGlyphID substitute = SWAPW(sequenceTable->substituteArray[0]);
|
||||
|
||||
if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, substitute))) {
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
*/
|
||||
|
||||
#include "LETypes.h"
|
||||
#include "LEScripts.h"
|
||||
#include "LELanguages.h"
|
||||
|
||||
#include "LayoutEngine.h"
|
||||
#include "OpenTypeLayoutEngine.h"
|
||||
#include "ScriptAndLanguageTags.h"
|
||||
|
@ -26,8 +29,8 @@ OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, l
|
|||
: LayoutEngine(fontInstance, scriptCode, languageCode), fFeatureTags(NULL), fGSUBTable(gsubTable),
|
||||
fSubstitutionFilter(NULL), fFeatureOrder(NULL)
|
||||
{
|
||||
static le_uint32 gdefTableTag = 0x47444546; // "GDEF"
|
||||
static le_uint32 gposTableTag = 0x47504F53; // "GPOS"
|
||||
static le_uint32 gdefTableTag = LE_MAKE_TAG('G', 'D', 'E', 'F');
|
||||
static le_uint32 gposTableTag = LE_MAKE_TAG('G', 'P', 'O', 'S');
|
||||
|
||||
fGDEFTable = (const GlyphDefinitionTableHeader *) getFontTable(gdefTableTag);
|
||||
fGPOSTable = (const GlyphPositioningTableHeader *) getFontTable(gposTableTag);
|
||||
|
@ -76,8 +79,11 @@ LETag OpenTypeLayoutEngine::getScriptTag(le_int32 scriptCode)
|
|||
|
||||
LETag OpenTypeLayoutEngine::getLangSysTag(le_int32 languageCode)
|
||||
{
|
||||
// FIXME: do this for real some day (soon?)
|
||||
return 0xFFFFFFFF;
|
||||
if (languageCode < 0 || languageCode >= languageCodeCount) {
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
return languageTags[languageCode];
|
||||
}
|
||||
|
||||
void OpenTypeLayoutEngine::setScriptAndLanguageTags()
|
||||
|
|
|
@ -137,6 +137,11 @@ private:
|
|||
*/
|
||||
static const LETag scriptTags[];
|
||||
|
||||
/**
|
||||
* The array of language tags, indexed by language code.
|
||||
*/
|
||||
static const LETag languageTags[];
|
||||
|
||||
/**
|
||||
* The address of this static class variable serves as this class's ID
|
||||
* for ICU "poor man's RTTI".
|
||||
|
|
|
@ -13,10 +13,10 @@
|
|||
|
||||
U_NAMESPACE_BEGIN
|
||||
|
||||
const LangSysTable *ScriptTable::findLanguage(LETag languageTag) const
|
||||
const LangSysTable *ScriptTable::findLanguage(LETag languageTag, le_bool exactMatch) const
|
||||
{
|
||||
le_uint16 count = SWAPW(langSysCount);
|
||||
Offset langSysTableOffset = defaultLangSysTableOffset;
|
||||
Offset langSysTableOffset = exactMatch? 0 : SWAPW(defaultLangSysTableOffset);
|
||||
|
||||
if (count > 0) {
|
||||
Offset foundOffset =
|
||||
|
@ -28,7 +28,7 @@ const LangSysTable *ScriptTable::findLanguage(LETag languageTag) const
|
|||
}
|
||||
|
||||
if (langSysTableOffset != 0) {
|
||||
return (const LangSysTable *) ((char *)this + SWAPW(langSysTableOffset));
|
||||
return (const LangSysTable *) ((char *)this + langSysTableOffset);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -47,7 +47,7 @@ const ScriptTable *ScriptListTable::findScript(LETag scriptTag) const
|
|||
return 0;
|
||||
}
|
||||
|
||||
const LangSysTable *ScriptListTable::findLanguage(LETag scriptTag, LETag languageTag) const
|
||||
const LangSysTable *ScriptListTable::findLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch) const
|
||||
{
|
||||
const ScriptTable *scriptTable = findScript(scriptTag);
|
||||
|
||||
|
@ -55,7 +55,7 @@ const LangSysTable *ScriptListTable::findLanguage(LETag scriptTag, LETag languag
|
|||
return 0;
|
||||
}
|
||||
|
||||
return scriptTable->findLanguage(languageTag);
|
||||
return scriptTable->findLanguage(languageTag, exactMatch);
|
||||
}
|
||||
|
||||
U_NAMESPACE_END
|
||||
|
|
|
@ -34,7 +34,7 @@ struct ScriptTable
|
|||
le_uint16 langSysCount;
|
||||
LangSysRecord langSysRecordArray[ANY_NUMBER];
|
||||
|
||||
const LangSysTable *findLanguage(LETag languageTag) const;
|
||||
const LangSysTable *findLanguage(LETag languageTag, le_bool exactMatch = false) const;
|
||||
};
|
||||
|
||||
typedef TagAndOffsetRecord ScriptRecord;
|
||||
|
@ -45,7 +45,7 @@ struct ScriptListTable
|
|||
ScriptRecord scriptRecordArray[ANY_NUMBER];
|
||||
|
||||
const ScriptTable *findScript(LETag scriptTag) const;
|
||||
const LangSysTable *findLanguage(LETag scriptTag, LETag languageTag) const;
|
||||
const LangSysTable *findLanguage(LETag scriptTag, LETag languageTag, le_bool exactMatch = false) const;
|
||||
};
|
||||
|
||||
U_NAMESPACE_END
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* %W% %E%
|
||||
*
|
||||
* (C) Copyright IBM Corp. 1998 - 2002. All Rights Reserved.
|
||||
* (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: /xsrl/Nsvn/icu/icu/source/layout/ScriptAndLanguageTags.cpp,v $ $Date: 2003/04/12 00:37:12 $ $Revision: 1.5 $
|
||||
*/
|
||||
|
||||
#include "LETypes.h"
|
||||
|
@ -60,7 +60,47 @@ const LETag OpenTypeLayoutEngine::scriptTags[] = {
|
|||
tglgScriptTag, /* 'tglg' (TAGALOG) */
|
||||
hanoScriptTag, /* 'hano' (HANUNOO) */
|
||||
buhdScriptTag, /* 'buhd' (BUHID) */
|
||||
tagbScriptTag /* 'tagb' (TAGBANWA) */
|
||||
tagbScriptTag, /* 'tagb' (TAGBANWA) */
|
||||
braiScriptTag, /* 'brai' (BRAILLE) */
|
||||
cprtScriptTag, /* 'cprt' (CYPRIOT) */
|
||||
limbScriptTag, /* 'limb' (LIMBU) */
|
||||
linbScriptTag, /* 'linb' (LINEAR_B) */
|
||||
osmaScriptTag, /* 'osma' (OSMANYA) */
|
||||
shawScriptTag, /* 'shaw' (SHAVIAN) */
|
||||
taleScriptTag, /* 'tale' (TAI_LE) */
|
||||
ugarScriptTag /* 'ugar' (UGARITIC) */
|
||||
};
|
||||
|
||||
const LETag OpenTypeLayoutEngine::languageTags[] = {
|
||||
araLanguageTag, /* 'ARA' (Arabic) */
|
||||
asmLanguageTag, /* 'ASM' (Assamese) */
|
||||
benLanguageTag, /* 'BEN' (Bengali) */
|
||||
farLanguageTag, /* 'FAR' (Farsi) */
|
||||
gujLanguageTag, /* 'GUJ' (Gujarati) */
|
||||
hinLanguageTag, /* 'HIN' (Hindi) */
|
||||
iwrLanguageTag, /* 'IWR' (Hebrew) */
|
||||
jiiLanguageTag, /* 'JII' (Yiddish) */
|
||||
janLanguageTag, /* 'JAN' (Japanese) */
|
||||
kanLanguageTag, /* 'KAN' (Kannada) */
|
||||
kokLanguageTag, /* 'KOK' (Konkani) */
|
||||
korLanguageTag, /* 'KOR' (Korean) */
|
||||
kshLanguageTag, /* 'KSH' (Kashmiri) */
|
||||
malLanguageTag, /* 'MAL' (Malayalam (Traditional)) */
|
||||
marLanguageTag, /* 'MAR' (Marathi) */
|
||||
mlrLanguageTag, /* 'MLR' (Malayalam (Reformed)) */
|
||||
mniLanguageTag, /* 'MNI' (Manipuri) */
|
||||
oriLanguageTag, /* 'ORI' (Oriya) */
|
||||
sanLanguageTag, /* 'SAN' (Sanscrit) */
|
||||
sndLanguageTag, /* 'SND' (Sindhi) */
|
||||
snhLanguageTag, /* 'SNH' (Sinhalese) */
|
||||
syrLanguageTag, /* 'SYR' (Syriac) */
|
||||
tamLanguageTag, /* 'TAM' (Tamil) */
|
||||
telLanguageTag, /* 'TEL' (Telugu) */
|
||||
thaLanguageTag, /* 'THA' (Thai) */
|
||||
urdLanguageTag, /* 'URD' (Urdu) */
|
||||
zhpLanguageTag, /* 'ZHP' (Chinese (Phonetic)) */
|
||||
zhsLanguageTag, /* 'ZHS' (Chinese (Simplified)) */
|
||||
zhtLanguageTag /* 'ZHT' (Chinese (Traditional)) */
|
||||
};
|
||||
|
||||
U_NAMESPACE_END
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* %W% %E%
|
||||
*
|
||||
* (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: /xsrl/Nsvn/icu/icu/source/layout/ScriptAndLanguageTags.h,v $ $Date: 2003/04/12 00:37:12 $ $Revision: 1.7 $
|
||||
*/
|
||||
|
||||
#ifndef __SCRIPTANDLANGUAGES_H
|
||||
|
@ -17,60 +17,98 @@
|
|||
*/
|
||||
|
||||
#include "LETypes.h"
|
||||
#include "LEScripts.h"
|
||||
|
||||
U_NAMESPACE_BEGIN
|
||||
|
||||
const LETag zyyyScriptTag = 0x7A797979; /* 'zyyy' (COMMON) */
|
||||
const LETag qaaiScriptTag = 0x71616169; /* 'qaai' (INHERITED) */
|
||||
const LETag arabScriptTag = 0x61726162; /* 'arab' (ARABIC) */
|
||||
const LETag armnScriptTag = 0x61726D6E; /* 'armn' (ARMENIAN) */
|
||||
const LETag bengScriptTag = 0x62656E67; /* 'beng' (BENGALI) */
|
||||
const LETag bopoScriptTag = 0x626F706F; /* 'bopo' (BOPOMOFO) */
|
||||
const LETag cherScriptTag = 0x63686572; /* 'cher' (CHEROKEE) */
|
||||
const LETag qaacScriptTag = 0x71616163; /* 'qaac' (COPTIC) */
|
||||
const LETag cyrlScriptTag = 0x6379726C; /* 'cyrl' (CYRILLIC) */
|
||||
const LETag dsrtScriptTag = 0x64737274; /* 'dsrt' (DESERET) */
|
||||
const LETag devaScriptTag = 0x64657661; /* 'deva' (DEVANAGARI) */
|
||||
const LETag ethiScriptTag = 0x65746869; /* 'ethi' (ETHIOPIC) */
|
||||
const LETag georScriptTag = 0x67656F72; /* 'geor' (GEORGIAN) */
|
||||
const LETag gothScriptTag = 0x676F7468; /* 'goth' (GOTHIC) */
|
||||
const LETag grekScriptTag = 0x6772656B; /* 'grek' (GREEK) */
|
||||
const LETag gujrScriptTag = 0x67756A72; /* 'gujr' (GUJARATI) */
|
||||
const LETag guruScriptTag = 0x67757275; /* 'guru' (GURMUKHI) */
|
||||
const LETag haniScriptTag = 0x68616E69; /* 'hani' (HAN) */
|
||||
const LETag hangScriptTag = 0x68616E67; /* 'hang' (HANGUL) */
|
||||
const LETag hebrScriptTag = 0x68656272; /* 'hebr' (HEBREW) */
|
||||
const LETag hiraScriptTag = 0x68697261; /* 'hira' (HIRAGANA) */
|
||||
const LETag kndaScriptTag = 0x6B6E6461; /* 'knda' (KANNADA) */
|
||||
const LETag kanaScriptTag = 0x6B616E61; /* 'kana' (KATAKANA) */
|
||||
const LETag khmrScriptTag = 0x6B686D72; /* 'khmr' (KHMER) */
|
||||
const LETag laooScriptTag = 0x6C616F6F; /* 'laoo' (LAO) */
|
||||
const LETag latnScriptTag = 0x6C61746E; /* 'latn' (LATIN) */
|
||||
const LETag mlymScriptTag = 0x6D6C796D; /* 'mlym' (MALAYALAM) */
|
||||
const LETag mongScriptTag = 0x6D6F6E67; /* 'mong' (MONGOLIAN) */
|
||||
const LETag mymrScriptTag = 0x6D796D72; /* 'mymr' (MYANMAR) */
|
||||
const LETag ogamScriptTag = 0x6F67616D; /* 'ogam' (OGHAM) */
|
||||
const LETag italScriptTag = 0x6974616C; /* 'ital' (OLD_ITALIC) */
|
||||
const LETag oryaScriptTag = 0x6F727961; /* 'orya' (ORIYA) */
|
||||
const LETag runrScriptTag = 0x72756E72; /* 'runr' (RUNIC) */
|
||||
const LETag sinhScriptTag = 0x73696E68; /* 'sinh' (SINHALA) */
|
||||
const LETag syrcScriptTag = 0x73797263; /* 'syrc' (SYRIAC) */
|
||||
const LETag tamlScriptTag = 0x74616D6C; /* 'taml' (TAMIL) */
|
||||
const LETag teluScriptTag = 0x74656C75; /* 'telu' (TELUGU) */
|
||||
const LETag thaaScriptTag = 0x74686161; /* 'thaa' (THAANA) */
|
||||
const LETag thaiScriptTag = 0x74686169; /* 'thai' (THAI) */
|
||||
const LETag tibtScriptTag = 0x74696274; /* 'tibt' (TIBETAN) */
|
||||
const LETag cansScriptTag = 0x63616E73; /* 'cans' (CANADIAN_ABORIGINAL) */
|
||||
const LETag yiiiScriptTag = 0x79696969; /* 'yiii' (YI) */
|
||||
const LETag tglgScriptTag = 0x74676C67; /* 'tglg' (TAGALOG) */
|
||||
const LETag hanoScriptTag = 0x68616E6F; /* 'hano' (HANUNOO) */
|
||||
const LETag buhdScriptTag = 0x62756864; /* 'buhd' (BUHID) */
|
||||
const LETag tagbScriptTag = 0x74616762; /* 'tagb' (TAGBANWA) */
|
||||
const LETag zyyyScriptTag = LE_MAKE_TAG('z', 'y', 'y', 'y'); /* COMMON */
|
||||
const LETag qaaiScriptTag = LE_MAKE_TAG('q', 'a', 'a', 'i'); /* INHERITED */
|
||||
const LETag arabScriptTag = LE_MAKE_TAG('a', 'r', 'a', 'b'); /* ARABIC */
|
||||
const LETag armnScriptTag = LE_MAKE_TAG('a', 'r', 'm', 'n'); /* ARMENIAN */
|
||||
const LETag bengScriptTag = LE_MAKE_TAG('b', 'e', 'n', 'g'); /* BENGALI */
|
||||
const LETag bopoScriptTag = LE_MAKE_TAG('b', 'o', 'p', 'o'); /* BOPOMOFO */
|
||||
const LETag cherScriptTag = LE_MAKE_TAG('c', 'h', 'e', 'r'); /* CHEROKEE */
|
||||
const LETag qaacScriptTag = LE_MAKE_TAG('q', 'a', 'a', 'c'); /* COPTIC */
|
||||
const LETag cyrlScriptTag = LE_MAKE_TAG('c', 'y', 'r', 'l'); /* CYRILLIC */
|
||||
const LETag dsrtScriptTag = LE_MAKE_TAG('d', 's', 'r', 't'); /* DESERET */
|
||||
const LETag devaScriptTag = LE_MAKE_TAG('d', 'e', 'v', 'a'); /* DEVANAGARI */
|
||||
const LETag ethiScriptTag = LE_MAKE_TAG('e', 't', 'h', 'i'); /* ETHIOPIC */
|
||||
const LETag georScriptTag = LE_MAKE_TAG('g', 'e', 'o', 'r'); /* GEORGIAN */
|
||||
const LETag gothScriptTag = LE_MAKE_TAG('g', 'o', 't', 'h'); /* GOTHIC */
|
||||
const LETag grekScriptTag = LE_MAKE_TAG('g', 'r', 'e', 'k'); /* GREEK */
|
||||
const LETag gujrScriptTag = LE_MAKE_TAG('g', 'u', 'j', 'r'); /* GUJARATI */
|
||||
const LETag guruScriptTag = LE_MAKE_TAG('g', 'u', 'r', 'u'); /* GURMUKHI */
|
||||
const LETag haniScriptTag = LE_MAKE_TAG('h', 'a', 'n', 'i'); /* HAN */
|
||||
const LETag hangScriptTag = LE_MAKE_TAG('h', 'a', 'n', 'g'); /* HANGUL */
|
||||
const LETag hebrScriptTag = LE_MAKE_TAG('h', 'e', 'b', 'r'); /* HEBREW */
|
||||
const LETag hiraScriptTag = LE_MAKE_TAG('h', 'i', 'r', 'a'); /* HIRAGANA */
|
||||
const LETag kndaScriptTag = LE_MAKE_TAG('k', 'n', 'd', 'a'); /* KANNADA */
|
||||
const LETag kanaScriptTag = LE_MAKE_TAG('k', 'a', 'n', 'a'); /* KATAKANA */
|
||||
const LETag khmrScriptTag = LE_MAKE_TAG('k', 'h', 'm', 'r'); /* KHMER */
|
||||
const LETag laooScriptTag = LE_MAKE_TAG('l', 'a', 'o', 'o'); /* LAO */
|
||||
const LETag latnScriptTag = LE_MAKE_TAG('l', 'a', 't', 'n'); /* LATIN */
|
||||
const LETag mlymScriptTag = LE_MAKE_TAG('m', 'l', 'y', 'm'); /* MALAYALAM */
|
||||
const LETag mongScriptTag = LE_MAKE_TAG('m', 'o', 'n', 'g'); /* MONGOLIAN */
|
||||
const LETag mymrScriptTag = LE_MAKE_TAG('m', 'y', 'm', 'r'); /* MYANMAR */
|
||||
const LETag ogamScriptTag = LE_MAKE_TAG('o', 'g', 'a', 'm'); /* OGHAM */
|
||||
const LETag italScriptTag = LE_MAKE_TAG('i', 't', 'a', 'l'); /* OLD_ITALIC */
|
||||
const LETag oryaScriptTag = LE_MAKE_TAG('o', 'r', 'y', 'a'); /* ORIYA */
|
||||
const LETag runrScriptTag = LE_MAKE_TAG('r', 'u', 'n', 'r'); /* RUNIC */
|
||||
const LETag sinhScriptTag = LE_MAKE_TAG('s', 'i', 'n', 'h'); /* SINHALA */
|
||||
const LETag syrcScriptTag = LE_MAKE_TAG('s', 'y', 'r', 'c'); /* SYRIAC */
|
||||
const LETag tamlScriptTag = LE_MAKE_TAG('t', 'a', 'm', 'l'); /* TAMIL */
|
||||
const LETag teluScriptTag = LE_MAKE_TAG('t', 'e', 'l', 'u'); /* TELUGU */
|
||||
const LETag thaaScriptTag = LE_MAKE_TAG('t', 'h', 'a', 'a'); /* THAANA */
|
||||
const LETag thaiScriptTag = LE_MAKE_TAG('t', 'h', 'a', 'i'); /* THAI */
|
||||
const LETag tibtScriptTag = LE_MAKE_TAG('t', 'i', 'b', 't'); /* TIBETAN */
|
||||
const LETag cansScriptTag = LE_MAKE_TAG('c', 'a', 'n', 's'); /* CANADIAN_ABORIGINAL */
|
||||
const LETag yiiiScriptTag = LE_MAKE_TAG('y', 'i', 'i', 'i'); /* YI */
|
||||
const LETag tglgScriptTag = LE_MAKE_TAG('t', 'g', 'l', 'g'); /* TAGALOG */
|
||||
const LETag hanoScriptTag = LE_MAKE_TAG('h', 'a', 'n', 'o'); /* HANUNOO */
|
||||
const LETag buhdScriptTag = LE_MAKE_TAG('b', 'u', 'h', 'd'); /* BUHID */
|
||||
const LETag tagbScriptTag = LE_MAKE_TAG('t', 'a', 'g', 'b'); /* TAGBANWA */
|
||||
const LETag braiScriptTag = LE_MAKE_TAG('b', 'r', 'a', 'i'); /* BRAILLE */
|
||||
const LETag cprtScriptTag = LE_MAKE_TAG('c', 'p', 'r', 't'); /* CYPRIOT */
|
||||
const LETag limbScriptTag = LE_MAKE_TAG('l', 'i', 'm', 'b'); /* LIMBU */
|
||||
const LETag linbScriptTag = LE_MAKE_TAG('l', 'i', 'n', 'b'); /* LINEAR_B */
|
||||
const LETag osmaScriptTag = LE_MAKE_TAG('o', 's', 'm', 'a'); /* OSMANYA */
|
||||
const LETag shawScriptTag = LE_MAKE_TAG('s', 'h', 'a', 'w'); /* SHAVIAN */
|
||||
const LETag taleScriptTag = LE_MAKE_TAG('t', 'a', 'l', 'e'); /* TAI_LE */
|
||||
const LETag ugarScriptTag = LE_MAKE_TAG('u', 'g', 'a', 'r'); /* UGARITIC */
|
||||
|
||||
const LETag nullScriptTag = 0x00000000; /* '' (NULL) */
|
||||
|
||||
const LETag noLangSysTag = 0x00000000; /* '' (NONE) */
|
||||
|
||||
const LETag araLanguageTag = LE_MAKE_TAG('A', 'R', 'A', ' '); /* Arabic */
|
||||
const LETag asmLanguageTag = LE_MAKE_TAG('A', 'S', 'M', ' '); /* Assamese */
|
||||
const LETag benLanguageTag = LE_MAKE_TAG('B', 'E', 'N', ' '); /* Bengali */
|
||||
const LETag farLanguageTag = LE_MAKE_TAG('F', 'A', 'R', ' '); /* Farsi */
|
||||
const LETag gujLanguageTag = LE_MAKE_TAG('G', 'U', 'J', ' '); /* Gujarati */
|
||||
const LETag hinLanguageTag = LE_MAKE_TAG('H', 'I', 'N', ' '); /* Hindi */
|
||||
const LETag iwrLanguageTag = LE_MAKE_TAG('I', 'W', 'R', ' '); /* Hebrew */
|
||||
const LETag jiiLanguageTag = LE_MAKE_TAG('J', 'I', 'I', ' '); /* Yiddish */
|
||||
const LETag janLanguageTag = LE_MAKE_TAG('J', 'A', 'N', ' '); /* Japanese */
|
||||
const LETag kanLanguageTag = LE_MAKE_TAG('K', 'A', 'N', ' '); /* Kannada */
|
||||
const LETag kokLanguageTag = LE_MAKE_TAG('K', 'O', 'K', ' '); /* Konkani */
|
||||
const LETag korLanguageTag = LE_MAKE_TAG('K', 'O', 'R', ' '); /* Korean */
|
||||
const LETag kshLanguageTag = LE_MAKE_TAG('K', 'S', 'H', ' '); /* Kashmiri */
|
||||
const LETag malLanguageTag = LE_MAKE_TAG('M', 'A', 'L', ' '); /* Malayalam (Traditional) */
|
||||
const LETag marLanguageTag = LE_MAKE_TAG('M', 'A', 'R', ' '); /* Marathi */
|
||||
const LETag mlrLanguageTag = LE_MAKE_TAG('M', 'L', 'R', ' '); /* Malayalam (Reformed) */
|
||||
const LETag mniLanguageTag = LE_MAKE_TAG('M', 'N', 'I', ' '); /* Manipuri */
|
||||
const LETag oriLanguageTag = LE_MAKE_TAG('O', 'R', 'I', ' '); /* Oriya */
|
||||
const LETag sanLanguageTag = LE_MAKE_TAG('S', 'A', 'N', ' '); /* Sanscrit */
|
||||
const LETag sndLanguageTag = LE_MAKE_TAG('S', 'N', 'D', ' '); /* Sindhi */
|
||||
const LETag snhLanguageTag = LE_MAKE_TAG('S', 'N', 'H', ' '); /* Sinhalese */
|
||||
const LETag syrLanguageTag = LE_MAKE_TAG('S', 'Y', 'R', ' '); /* Syriac */
|
||||
const LETag tamLanguageTag = LE_MAKE_TAG('T', 'A', 'M', ' '); /* Tamil */
|
||||
const LETag telLanguageTag = LE_MAKE_TAG('T', 'E', 'L', ' '); /* Telugu */
|
||||
const LETag thaLanguageTag = LE_MAKE_TAG('T', 'H', 'A', ' '); /* Thai */
|
||||
const LETag urdLanguageTag = LE_MAKE_TAG('U', 'R', 'D', ' '); /* Urdu */
|
||||
const LETag zhpLanguageTag = LE_MAKE_TAG('Z', 'H', 'P', ' '); /* Chinese (Phonetic) */
|
||||
const LETag zhsLanguageTag = LE_MAKE_TAG('Z', 'H', 'S', ' '); /* Chinese (Simplified) */
|
||||
const LETag zhtLanguageTag = LE_MAKE_TAG('Z', 'H', 'T', ' '); /* Chinese (Traditional) */
|
||||
|
||||
const LETag noLanguageTag = 0x00000000; /* '' (NONE) */
|
||||
|
||||
U_NAMESPACE_END
|
||||
#endif
|
||||
|
|
|
@ -234,6 +234,10 @@ SOURCE=.\GXLayoutEngine.cpp
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\HanLayoutEngine.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\HebrewLigatureData.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -502,6 +506,10 @@ SOURCE=.\GXLayoutEngine.h
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\HanLayoutEngine.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\HebrewShaping.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -671,6 +679,53 @@ InputPath=.\LEGlyphFilter.h
|
|||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\LELanguages.h
|
||||
|
||||
!IF "$(CFG)" == "layout - Win32 Release"
|
||||
|
||||
# Begin Custom Build
|
||||
InputPath=.\LELanguages.h
|
||||
|
||||
"..\..\include\layout\LELanguages.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
|
||||
copy $(InputPath) ..\..\include\layout
|
||||
|
||||
# End Custom Build
|
||||
|
||||
!ELSEIF "$(CFG)" == "layout - Win32 Debug"
|
||||
|
||||
# Begin Custom Build
|
||||
InputPath=.\LELanguages.h
|
||||
|
||||
"..\..\include\layout\LELanguages.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
|
||||
copy $(InputPath) ..\..\include\layout
|
||||
|
||||
# End Custom Build
|
||||
|
||||
!ELSEIF "$(CFG)" == "layout - Win64 Release"
|
||||
|
||||
# Begin Custom Build
|
||||
InputPath=.\LELanguages.h
|
||||
|
||||
"..\..\include\layout\LELanguages.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
|
||||
copy $(InputPath) ..\..\include\layout
|
||||
|
||||
# End Custom Build
|
||||
|
||||
!ELSEIF "$(CFG)" == "layout - Win64 Debug"
|
||||
|
||||
# Begin Custom Build
|
||||
InputPath=.\LELanguages.h
|
||||
|
||||
"..\..\include\layout\LELanguages.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
|
||||
copy $(InputPath) ..\..\include\layout
|
||||
|
||||
# End Custom Build
|
||||
|
||||
!ENDIF
|
||||
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\LEScripts.h
|
||||
|
||||
!IF "$(CFG)" == "layout - Win32 Release"
|
||||
|
|
Loading…
Add table
Reference in a new issue