topical media & game development
lib-of-vs-libs-QTDevWin-CIncludes-WorldScript.h / h
/*
File: WorldScript.h
Contains: WorldScript I Interfaces.
Version: Technology: System 7.5
Release: QuickTime 6.0.2
Copyright: (c) 1994-2001 by Apple Computer, Inc., all rights reserved.
Bugs?: For bug reports, consult the following page on
the World Wide Web:
http://developer.apple.com/bugreporter/
*/
ifndef __WORLDSCRIPT__
define __WORLDSCRIPT__
ifndef __MACTYPES__
include <MacTypes.h>
endif
ifndef __TRAPS__
include <Traps.h>
endif
ifndef __QUICKDRAWTEXT__
include <QuickdrawText.h>
endif
if PRAGMA_ONCE
#pragma once
endif
ifdef __cplusplus
extern "C" {
endif
if PRAGMA_IMPORT
#pragma import on
endif
if PRAGMA_STRUCT_ALIGN
#pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
#pragma pack(2)
endif
typedef UInt16 WSIOffset;
typedef UInt8 WSIByteCount;
typedef UInt8 WSIByteIndex;
/* offset from start of sub-table to row in state table */
typedef UInt16 WSIStateOffset;
typedef UInt32 WSITableOffset;
typedef UInt16 WSISubtableOffset;
typedef UInt16 WSIGlyphcode;
typedef UInt32 WSITableIdentifiers;
enum {
kScriptSettingsTag = FOUR_CHAR_CODE('info'),
kMetamorphosisTag = FOUR_CHAR_CODE('mort'),
kGlyphExpansionTag = FOUR_CHAR_CODE('g2g#'),
kPropertiesTag = FOUR_CHAR_CODE('prop'),
kJustificationTag = FOUR_CHAR_CODE('kash'),
kCharToGlyphTag = FOUR_CHAR_CODE('cmap'),
kGlyphToCharTag = FOUR_CHAR_CODE('pamc'),
kFindScriptRunTag = FOUR_CHAR_CODE('fstb')
};
** L O O K U P T A B L E T Y P E S ***
enum {
WSILookupSimpleArray = 0, /* a simple array indexed by glyph code */
WSILookupSegmentSingle = 2, /* segment mapping to single value */
WSILookupSegmentArray = 4, /* segment mapping to lookup array */
WSILookupSingleTable = 6, /* sorted list of glyph, value pairs */
WSILookupTrimmedArray = 8 /* a simple trimmed array indexed by glyph code */
};
typedef unsigned short WSILookupTableFormat;
typedef unsigned short WSILookupValue;
/* An offset from the beginning of the lookup table */
typedef unsigned short WSILookupOffset;
/* FORMAT SPECIFIC DEFINITIONS */
/*
lookupSimpleArray:
This is a simple array which maps all glyphs in the font
to lookup values.
*/
struct WSILookupArrayHeader {
WSILookupValue lookupValues[1]; /* The array of values indexed by glyph code */
};
typedef struct WSILookupArrayHeader WSILookupArrayHeader;
/*
lookupTrimmedArray:
This is a single trimmed array which maps a single range
of glyhs in the font to lookup values.
*/
struct WSILookupTrimmedArrayHeader {
WSIGlyphcode firstGlyph;
WSIGlyphcode limitGlyph;
WSILookupValue valueArray[1];
};
typedef struct WSILookupTrimmedArrayHeader WSILookupTrimmedArrayHeader;
/* The format specific part of the subtable header */
union WSILookupFormatSpecificHeader {
WSILookupArrayHeader simpleArray; /* rename lookupArray as simpleArray <9> */
WSILookupTrimmedArrayHeader trimmedArray;
};
typedef union WSILookupFormatSpecificHeader WSILookupFormatSpecificHeader;
/* The overall subtable header */
struct WSILookupTableHeader {
WSILookupTableFormat format; /* table format */
WSILookupFormatSpecificHeader fsHeader; /* format specific header */
};
typedef struct WSILookupTableHeader WSILookupTableHeader;
** G L Y P H E X P A N S I O N ***
enum {
/* fixed 1.0 */
kCurrentGlyphExpansionVersion = 0x00010000
};
typedef unsigned short GlyphExpansionFormats;
enum {
GlyphExpansionLookupFormat = 1,
GlyphExpansionContextualFormat = 2
};
struct ExpandedGlyphCluster {
WSIByteCount numGlyphs;
WSIByteIndex bestGlyph;
WSIGlyphcode glyphs[1];
};
typedef struct ExpandedGlyphCluster ExpandedGlyphCluster;
struct ExpandedGlyphOffset {
WSIGlyphcode glyph;
WSIOffset offset; /* offset to ExpandedGlyphCluster */
};
typedef struct ExpandedGlyphOffset ExpandedGlyphOffset;
struct GlyphExpansionStateTable {
WSISubtableOffset stateTableOffset;
WSISubtableOffset classTableOffset;
WSISubtableOffset actionTableOffset; /* state, class and actions tables follow here... */
};
typedef struct GlyphExpansionStateTable GlyphExpansionStateTable;
struct GlyphExpansionTable {
Fixed version;
short format;
short expansionNumer;
short expansionDenom; /* num/denom ratio for expansion <2> */
union {
GlyphExpansionStateTable stateTable;
WSILookupTableHeader lookup; /* expanded glyph clusters follow here... */
} table;
};
typedef struct GlyphExpansionTable GlyphExpansionTable;
/* Glyph-to-Character constants and types */
enum {
kCurrentGlyphToCharVersion = 0x00010100
};
typedef unsigned short GlyphToCharLookupFormats;
enum {
kGlyphToCharLookup8Format = 1,
kGlyphToCharLookup16Format = 2,
kGlyphToCharLookup32Format = 3
};
typedef UInt8 GlyphToCharFontIndex;
typedef UInt8 QDGlyphcode;
struct GlyphToCharActionTable {
WSISubtableOffset fontNameOffset; /* offset relative to this table */
WSILookupTableHeader actions; /* only support lookupSimpleArray format for now */
};
typedef struct GlyphToCharActionTable GlyphToCharActionTable;
struct GlyphToCharActionHeader {
short numTables; /* 0..n */
WSISubtableOffset offsets[1]; /* offsets from start of action table header */
};
typedef struct GlyphToCharActionHeader GlyphToCharActionHeader;
struct GlyphToCharHeader {
Fixed version;
WSISubtableOffset actionOffset; /* offset to GlyphToCharActionHeader */
short format; /* size of font mask */
WSILookupTableHeader mappingTable;
};
typedef struct GlyphToCharHeader GlyphToCharHeader;
/* JUSTIFICATION TYPES
WorldScript supports justification of text using insertion. The justification
table specifies a insertion string to insert between 2 specified glyphs.
Each combination of inter-glyph boundary can be assigned a justification priority,
the higher the priority the more justification strings inserted at that position.
The priorities for each inter-glyph boundary are specified by the justification table's
state table.
Special handling is done for scripts which use spaces to justify, because the width of
a space varies depending on the setting of SpaceExtra. This is why the number of spaces
per inserting string is specified in the justification table.
*/
enum {
/* 1.0 not supported */
kCurrentJustificationVersion = 0x0200
};
enum {
kJustificationStateTableFormat = 1
};
enum {
/* WSI's internal limitation <12> */
kMaxJustificationStringLength = 13
};
typedef UInt8 WSIJustificationPriority;
enum {
WSIJustificationSetMarkMask = 0x80
};
struct WSIJustificationStateEntry {
WSIJustificationPriority markPriority; /* non-zero priorities means insertion */
WSIJustificationPriority priority;
WSIStateOffset newState;
};
typedef struct WSIJustificationStateEntry WSIJustificationStateEntry;
typedef unsigned short WSIJustificationClasses;
enum {
wsiJustEndOfLineClass = 0,
wsiJustEndOfRunClass = 1,
wsiJustDeletedGlyphClass = 2,
wsiJustUserDefinedClass = 3
};
typedef unsigned short WSIJustificationStates;
enum {
wsiStartOfLineState = 0, /* pre-defined states */
wsiStartOfRunState = 1,
wsiUserDefinedState = 2
};
/* pre-multiplied: class# * sizeof(WSIJustificationStateEntry) */
typedef UInt8 WSIJustificationClassOffset;
struct WSIJustificationStateTable {
short maxPriorities;
unsigned short rowWidth; /* width of a state table row in bytes */
short classTableOffset;
short stateTableOffset;
};
typedef struct WSIJustificationStateTable WSIJustificationStateTable;
/*
Last two fields of above structure - someday?
WSIJustificationClassOffset classes[up to 64 classes supported];
WSIJustificationStateEntry states[up to your heart's desire];
*/
struct WSIJustificationHeader {
short version;
short format;
Point scaling; /* numer/denom scaling of priority weights <7> */
unsigned short spacesPerInsertion; /* # of $20 chars in justification insertion string <12> */
unsigned short justStringOffset; /* offset to justification string */
WSIJustificationStateTable stateTable; /* long-aligned boundary aligned w/ spacesPerInsertion field - justification string follows */
};
typedef struct WSIJustificationHeader WSIJustificationHeader;
/* Line Layout's Property table version <11> */
enum {
/* v1.0 */
currentPropsTableVersion = 0x00010000
};
enum {
/* version is octal 0100 or hex 0x40 (#64) */
kCharToGlyphCurrentVersion = 0x40
};
/* pass as priorityWeight to JustifyWSILayout to use script's current just setting */
enum {
kScriptsDefaultJustWeight = -1
};
/* feature selectors used in FindScriptRun and itl5 configuration tables <9> */
typedef UInt16 WSIFeatureType;
typedef UInt16 WSIFeatureSelector;
struct WSIFeature {
WSIFeatureType featureType;
WSIFeatureSelector featureSelector;
};
typedef struct WSIFeature WSIFeature;
if PRAGMA_STRUCT_ALIGN
#pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
#pragma pack()
endif
ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
endif
ifdef __cplusplus
}
endif
endif /* __WORLDSCRIPT__ */
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.