diff dstep/applicationservices/ats/SFNTLayoutTypes.d @ 12:9f0b49a2f64e

Added the ApplicationServices frameworks: ATS, ColorSync and CoreGraphics
author Jacob Carlborg <doob@me.com>
date Mon, 03 Aug 2009 14:00:21 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dstep/applicationservices/ats/SFNTLayoutTypes.d	Mon Aug 03 14:00:21 2009 +0200
@@ -0,0 +1,1244 @@
+/**
+ * Copyright: Copyright (c) 2009 Jacob Carlborg.
+ * Authors: Jacob Carlborg
+ * Version: Initial created: Aug 1, 2009 
+ * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
+ */
+module dstep.applicationservices.ats.SFNTLayoutTypes;
+
+//import dstep.AvailabilityMacros;
+import dstep.coreservices.CoreServices;
+import dstep.internal.Types;
+
+alias ushort SFNTLookupTableFormat;
+alias ushort SFNTLookupValue;
+alias ushort SFNTLookupOffset;
+alias uint SFNTLookupKind;
+alias SFNTLookupTable* SFNTLookupTablePtr;
+alias SFNTLookupTablePtr* SFNTLookupTableHandle;
+alias ubyte STClass;
+alias ubyte STEntryIndex;
+alias ushort STXClass;
+alias ushort STXStateIndex;
+alias ushort STXEntryIndex;
+alias SFNTLookupTable STXClassTable;
+alias LcarCaretTable* LcarCaretTablePtr;
+alias ushort JustPCActionType;
+alias ushort JustificationFlags;
+alias ushort JustPCUnconditionalAddAction;
+alias ushort OpbdTableFormat;
+alias uint MortSubtableMaskFlags;
+alias uint MortLigatureActionEntry;
+alias ushort PropCharProperties;
+alias short TrakValue;
+alias ubyte KernTableFormat;
+alias ushort KernSubtableInfo;
+alias short KernKerningValue;
+alias ushort KernArrayOffset;
+alias KernTableHeader* KernTableHeaderPtr;
+alias KernTableHeaderPtr* KernTableHeaderHandle;
+alias KernOrderedListEntry* KernOrderedListEntryPtr;
+alias KernOffsetTable* KernOffsetTablePtr;
+alias KernSubtableHeader* KernSubtableHeaderPtr;
+alias uint BslnBaselineClass;
+alias ushort BslnTableFormat;
+alias BslnTable* BslnTablePtr;
+
+enum
+{
+	kAllTypographicFeaturesType = 0,
+	kLigaturesType = 1,
+	kCursiveConnectionType = 2,
+	kLetterCaseType = 3,
+	kVerticalSubstitutionType = 4,
+	kLinguisticRearrangementType = 5,
+	kNumberSpacingType = 6,
+	kSmartSwashType = 8,
+	kDiacriticsType = 9,
+	kVerticalPositionType = 10,
+	kFractionsType = 11,
+	kOverlappingCharactersType = 13,
+	kTypographicExtrasType = 14,
+	kMathematicalExtrasType = 15,
+	kOrnamentSetsType = 16,
+	kCharacterAlternativesType = 17,
+	kDesignComplexityType = 18,
+	kStyleOptionsType = 19,
+	kCharacterShapeType = 20,
+	kNumberCaseType = 21,
+	kTextSpacingType = 22,
+	kTransliterationType = 23,
+	kAnnotationType = 24,
+	kKanaSpacingType = 25,
+	kIdeographicSpacingType = 26,
+	kUnicodeDecompositionType = 27,
+	kRubyKanaType = 28,
+	kCJKSymbolAlternativesType = 29,
+	kIdeographicAlternativesType = 30,
+	kCJKVerticalRomanPlacementType = 31,
+	kItalicCJKRomanType = 32,
+	kCJKRomanSpacingType = 103,
+	kLastFeatureType = -1
+}
+
+enum
+{
+	kAllTypeFeaturesOnSelector = 0,
+	kAllTypeFeaturesOffSelector = 1
+}
+
+enum
+{
+	kRequiredLigaturesOnSelector = 0,
+	kRequiredLigaturesOffSelector = 1,
+	kCommonLigaturesOnSelector = 2,
+	kCommonLigaturesOffSelector = 3,
+	kRareLigaturesOnSelector = 4,
+	kRareLigaturesOffSelector = 5,
+	kLogosOnSelector = 6,
+	kLogosOffSelector = 7,
+	kRebusPicturesOnSelector = 8,
+	kRebusPicturesOffSelector = 9,
+	kDiphthongLigaturesOnSelector = 10,
+	kDiphthongLigaturesOffSelector = 11,
+	kSquaredLigaturesOnSelector = 12,
+	kSquaredLigaturesOffSelector = 13,
+	kAbbrevSquaredLigaturesOnSelector = 14,
+	kAbbrevSquaredLigaturesOffSelector = 15,
+	kSymbolLigaturesOnSelector = 16,
+	kSymbolLigaturesOffSelector = 17
+}
+
+enum
+{
+	kUnconnectedSelector = 0,
+	kPartiallyConnectedSelector = 1,
+	kCursiveSelector = 2
+}
+
+enum
+{
+	kUpperAndLowerCaseSelector = 0,
+	kAllCapsSelector = 1,
+	kAllLowerCaseSelector = 2,
+	kSmallCapsSelector = 3,
+	kInitialCapsSelector = 4,
+	kInitialCapsAndSmallCapsSelector = 5
+}
+
+enum
+{
+	kSubstituteVerticalFormsOnSelector = 0,
+	kSubstituteVerticalFormsOffSelector = 1
+}
+
+enum
+{
+	kLinguisticRearrangementOnSelector = 0,
+	kLinguisticRearrangementOffSelector = 1
+}
+
+enum
+{
+	kMonospacedNumbersSelector = 0,
+	kProportionalNumbersSelector = 1,
+	kThirdWidthNumbersSelector = 2,
+	kQuarterWidthNumbersSelector = 3
+}
+
+enum
+{
+	kWordInitialSwashesOnSelector = 0,
+	kWordInitialSwashesOffSelector = 1,
+	kWordFinalSwashesOnSelector = 2,
+	kWordFinalSwashesOffSelector = 3,
+	kLineInitialSwashesOnSelector = 4,
+	kLineInitialSwashesOffSelector = 5,
+	kLineFinalSwashesOnSelector = 6,
+	kLineFinalSwashesOffSelector = 7,
+	kNonFinalSwashesOnSelector = 8,
+	kNonFinalSwashesOffSelector = 9
+}
+
+enum
+{
+	kShowDiacriticsSelector = 0,
+	kHideDiacriticsSelector = 1,
+	kDecomposeDiacriticsSelector = 2
+}
+
+enum
+{
+	kNormalPositionSelector = 0,
+	kSuperiorsSelector = 1,
+	kInferiorsSelector = 2,
+	kOrdinalsSelector = 3
+}
+
+enum
+{
+	kNoFractionsSelector = 0,
+	kVerticalFractionsSelector = 1,
+	kDiagonalFractionsSelector = 2
+}
+
+enum
+{
+	kPreventOverlapOnSelector = 0,
+	kPreventOverlapOffSelector = 1
+}
+
+enum
+{
+	kHyphensToEmDashOnSelector = 0,
+	kHyphensToEmDashOffSelector = 1,
+	kHyphenToEnDashOnSelector = 2,
+	kHyphenToEnDashOffSelector = 3,
+	kSlashedZeroOnSelector = 4,
+	kSlashedZeroOffSelector = 5,
+	kFormInterrobangOnSelector = 6,
+	kFormInterrobangOffSelector = 7,
+	kSmartQuotesOnSelector = 8,
+	kSmartQuotesOffSelector = 9,
+	kPeriodsToEllipsisOnSelector = 10,
+	kPeriodsToEllipsisOffSelector = 11
+}
+
+enum
+{
+	kHyphenToMinusOnSelector = 0,
+	kHyphenToMinusOffSelector = 1,
+	kAsteriskToMultiplyOnSelector = 2,
+	kAsteriskToMultiplyOffSelector = 3,
+	kSlashToDivideOnSelector = 4,
+	kSlashToDivideOffSelector = 5,
+	kInequalityLigaturesOnSelector = 6,
+	kInequalityLigaturesOffSelector = 7,
+	kExponentsOnSelector = 8,
+	kExponentsOffSelector = 9
+}
+
+enum
+{
+	kNoOrnamentsSelector = 0,
+	kDingbatsSelector = 1,
+	kPiCharactersSelector = 2,
+	kFleuronsSelector = 3,
+	kDecorativeBordersSelector = 4,
+	kInternationalSymbolsSelector = 5,
+	kMathSymbolsSelector = 6
+}
+
+enum
+{
+	kNoAlternatesSelector = 0
+}
+
+enum
+{
+	kDesignLevel1Selector = 0,
+	kDesignLevel2Selector = 1,
+	kDesignLevel3Selector = 2,
+	kDesignLevel4Selector = 3,
+	kDesignLevel5Selector = 4
+}
+
+enum
+{
+	kNoStyleOptionsSelector = 0,
+	kDisplayTextSelector = 1,
+	kEngravedTextSelector = 2,
+	kIlluminatedCapsSelector = 3,
+	kTitlingCapsSelector = 4,
+	kTallCapsSelector = 5
+}
+
+enum
+{
+	kTraditionalCharactersSelector = 0,
+	kSimplifiedCharactersSelector = 1,
+	kJIS1978CharactersSelector = 2,
+	kJIS1983CharactersSelector = 3,
+	kJIS1990CharactersSelector = 4,
+	kTraditionalAltOneSelector = 5,
+	kTraditionalAltTwoSelector = 6,
+	kTraditionalAltThreeSelector = 7,
+	kTraditionalAltFourSelector = 8,
+	kTraditionalAltFiveSelector = 9,
+	kExpertCharactersSelector = 10
+}
+
+enum
+{
+	kLowerCaseNumbersSelector = 0,
+	kUpperCaseNumbersSelector = 1
+}
+
+enum
+{
+	kProportionalTextSelector = 0,
+	kMonospacedTextSelector = 1,
+	kHalfWidthTextSelector = 2
+}
+
+enum
+{
+	kNoTransliterationSelector = 0,
+	kHanjaToHangulSelector = 1,
+	kHiraganaToKatakanaSelector = 2,
+	kKatakanaToHiraganaSelector = 3,
+	kKanaToRomanizationSelector = 4,
+	kRomanizationToHiraganaSelector = 5,
+	kRomanizationToKatakanaSelector = 6,
+	kHanjaToHangulAltOneSelector = 7,
+	kHanjaToHangulAltTwoSelector = 8,
+	kHanjaToHangulAltThreeSelector = 9
+}
+
+enum
+{
+	kNoAnnotationSelector = 0,
+	kBoxAnnotationSelector = 1,
+	kRoundedBoxAnnotationSelector = 2,
+	kCircleAnnotationSelector = 3,
+	kInvertedCircleAnnotationSelector = 4,
+	kParenthesisAnnotationSelector = 5,
+	kPeriodAnnotationSelector = 6,
+	kRomanNumeralAnnotationSelector = 7,
+	kDiamondAnnotationSelector = 8,
+	kInvertedBoxAnnotationSelector = 9,
+	kInvertedRoundedBoxAnnotationSelector = 10
+}
+
+enum
+{
+	kFullWidthKanaSelector = 0,
+	kProportionalKanaSelector = 1
+}
+
+enum
+{
+	kFullWidthIdeographsSelector = 0,
+	kProportionalIdeographsSelector = 1,
+	kHalfWidthIdeographsSelector = 2
+}
+
+enum
+{
+	kCanonicalCompositionOnSelector = 0,
+	kCanonicalCompositionOffSelector = 1,
+	kCompatibilityCompositionOnSelector = 2,
+	kCompatibilityCompositionOffSelector = 3,
+	kTranscodingCompositionOnSelector = 4,
+	kTranscodingCompositionOffSelector = 5
+}
+
+enum
+{
+	kNoRubyKanaSelector = 0,
+	kRubyKanaSelector = 1,
+	kRubyKanaOnSelector = 2,
+	kRubyKanaOffSelector = 3
+}
+
+enum
+{
+	kNoCJKSymbolAlternativesSelector = 0,
+	kCJKSymbolAltOneSelector = 1,
+	kCJKSymbolAltTwoSelector = 2,
+	kCJKSymbolAltThreeSelector = 3,
+	kCJKSymbolAltFourSelector = 4,
+	kCJKSymbolAltFiveSelector = 5
+}
+
+enum
+{
+	kNoIdeographicAlternativesSelector = 0,
+	kIdeographicAltOneSelector = 1,
+	kIdeographicAltTwoSelector = 2,
+	kIdeographicAltThreeSelector = 3,
+	kIdeographicAltFourSelector = 4,
+	kIdeographicAltFiveSelector = 5
+}
+
+enum
+{
+	kCJKVerticalRomanCenteredSelector = 0,
+	kCJKVerticalRomanHBaselineSelector = 1
+}
+
+enum
+{
+	kNoCJKItalicRomanSelector = 0,
+	kCJKItalicRomanSelector = 1,
+	kCJKItalicRomanOnSelector = 2,
+	kCJKItalicRomanOffSelector = 3
+}
+
+enum
+{
+	kHalfWidthCJKRomanSelector = 0,
+	kProportionalCJKRomanSelector = 1,
+	kDefaultCJKRomanSelector = 2,
+	kFullWidthCJKRomanSelector = 3
+}
+
+enum
+{
+	kSFNTLookupSimpleArray = 0,
+	kSFNTLookupSegmentSingle = 2,
+	kSFNTLookupSegmentArray = 4,
+	kSFNTLookupSingleTable = 6,
+	kSFNTLookupTrimmedArray = 8
+}
+
+enum
+{
+	kSTClassEndOfText = 0,
+	kSTClassOutOfBounds = 1,
+	kSTClassDeletedGlyph = 2,
+	kSTClassEndOfLine = 3,
+	kSTSetMark = 0x8000,
+	kSTNoAdvance = 0x4000,
+	kSTMarkEnd = 0x2000,
+	kSTLigActionMask = 0x3FFF,
+	kSTRearrVerbMask = 0x000F
+}
+
+enum
+{
+	kSTXHasLigAction = 0x2000
+}
+
+enum
+{
+	kLCARTag = 0x6C636172,
+	kLCARCurrentVersion = 0x00010000,
+	kLCARLinearFormat = 0,
+	kLCARCtlPointFormat = 1
+}
+
+enum
+{
+	kJUSTTag = 0x6A757374,
+	kJUSTCurrentVersion = 0x00010000,
+	kJUSTStandardFormat = 0,
+	kJUSTnoGlyphcode = 0xFFFF,
+	kJUSTpcDecompositionAction = 0,
+	kJUSTpcUnconditionalAddAction = 1,
+	kJUSTpcConditionalAddAction = 2,
+	kJUSTpcGlyphStretchAction = 3,
+	kJUSTpcDuctilityAction = 4,
+	kJUSTpcGlyphRepeatAddAction = 5
+}
+
+enum
+{
+	kJUSTKashidaPriority = 0,
+	kJUSTSpacePriority = 1,
+	kJUSTLetterPriority = 2,
+	kJUSTNullPriority = 3,
+	kJUSTPriorityCount = 4
+}
+
+enum
+{
+	kJUSTOverridePriority = 0x8000,
+	kJUSTOverrideLimits = 0x4000,
+	kJUSTOverrideUnlimited = 0x2000,
+	kJUSTUnlimited = 0x1000,
+	kJUSTPriorityMask = 0x0003
+}
+
+enum
+{
+	kOPBDTag = 0x6F706264,
+	kOPBDCurrentVersion = 0x00010000,
+	kOPBDDistanceFormat = 0,
+	kOPBDControlPointFormat = 1
+}
+
+enum
+{
+	kMORTTag = 0x6D6F7274,
+	kMORTCurrentVersion = 0x00010000,
+	kMORTCoverVertical = 0x8000,
+	kMORTCoverDescending = 0x4000,
+	kMORTCoverIgnoreVertical = 0x2000,
+	kMORTCoverTypeMask = 0x000F,
+	kMORTRearrangementType = 0,
+	kMORTContextualType = 1,
+	kMORTLigatureType = 2,
+	kMORTSwashType = 4,
+	kMORTInsertionType = 5,
+	kMORTLigLastAction = cast(c_long)0x80000000,
+	kMORTLigStoreLigature = 0x40000000,
+	kMORTLigFormOffsetMask = 0x3FFFFFFF,
+	kMORTLigFormOffsetShift = 2,
+	kMORTraNoAction = 0,
+	kMORTraxA = 1,
+	kMORTraDx = 2,
+	kMORTraDxA = 3,
+	kMORTraxAB = 4,
+	kMORTraxBA = 5,
+	kMORTraCDx = 6,
+	kMORTraDCx = 7,
+	kMORTraCDxA = 8,
+	kMORTraDCxA = 9,
+	kMORTraDxAB = 10,
+	kMORTraDxBA = 11,
+	kMORTraCDxAB = 12,
+	kMORTraCDxBA = 13,
+	kMORTraDCxAB = 14,
+	kMORTraDCxBA = 15,
+	kMORTDoInsertionsBefore = 0x80,
+	kMORTIsSplitVowelPiece = 0x40,
+	kMORTInsertionsCountMask = 0x3F,
+	kMORTCurrInsertKashidaLike = 0x2000,
+	kMORTMarkInsertKashidaLike = 0x1000,
+	kMORTCurrInsertBefore = 0x0800,
+	kMORTMarkInsertBefore = 0x0400,
+	kMORTMarkJustTableCountMask = 0x3F80,
+	kMORTMarkJustTableCountShift = 7,
+	kMORTCurrJustTableCountMask = 0x007F,
+	kMORTCurrJustTableCountShift = 0,
+	kMORTCurrInsertCountMask = 0x03E0,
+	kMORTCurrInsertCountShift = 5,
+	kMORTMarkInsertCountMask = 0x001F,
+	kMORTMarkInsertCountShift = 0
+}
+
+enum
+{
+	kMORXTag = 0x6D6F7278,
+	kMORXCurrentVersion = 0x00020000,
+	kMORXCoverVertical = cast(c_long)0x80000000,
+	kMORXCoverDescending = 0x40000000,
+	kMORXCoverIgnoreVertical = 0x20000000,
+	kMORXCoverTypeMask = 0x000000FF
+}
+
+enum
+{
+	kPROPTag = 0x70726F70,
+	kPROPCurrentVersion = 0x00030000,
+	kPROPPairOffsetShift = 8,
+	kPROPPairOffsetSign = 7,
+	kPROPIsFloaterMask = 0x8000,
+	kPROPCanHangLTMask = 0x4000,
+	kPROPCanHangRBMask = 0x2000,
+	kPROPUseRLPairMask = 0x1000,
+	kPROPPairOffsetMask = 0x0F00,
+	kPROPRightConnectMask = 0x0080,
+	kPROPZeroReserved = 0x0060,
+	kPROPDirectionMask = 0x001F
+}
+
+enum
+{
+	kPROPLDirectionClass = 0,
+	kPROPRDirectionClass = 1,
+	kPROPALDirectionClass = 2,
+	kPROPENDirectionClass = 3,
+	kPROPESDirectionClass = 4,
+	kPROPETDirectionClass = 5,
+	kPROPANDirectionClass = 6,
+	kPROPCSDirectionClass = 7,
+	kPROPPSDirectionClass = 8,
+	kPROPSDirectionClass = 9,
+	kPROPWSDirectionClass = 10,
+	kPROPONDirectionClass = 11,
+	kPROPSENDirectionClass = 12,
+	kPROPLREDirectionClass = 13,
+	kPROPLRODirectionClass = 14,
+	kPROPRLEDirectionClass = 15,
+	kPROPRLODirectionClass = 16,
+	kPROPPDFDirectionClass = 17,
+	kPROPNSMDirectionClass = 18,
+	kPROPBNDirectionClass = 19,
+	kPROPNumDirectionClasses = 20
+}
+
+enum
+{
+	kTRAKTag = 0x7472616B,
+	kTRAKCurrentVersion = 0x00010000,
+	kTRAKUniformFormat = 0
+}
+
+enum
+{
+	kKERNTag = 0x6B65726E,
+	kKERNCurrentVersion = 0x00010000,
+	kKERNVertical = 0x8000,
+	kKERNResetCrossStream = 0x8000,
+	kKERNCrossStream = 0x4000,
+	kKERNVariation = 0x2000,
+	kKERNUnusedBits = 0x1F00,
+	kKERNFormatMask = 0x00FF
+}
+
+enum
+{
+	kKERNOrderedList = 0,
+	kKERNStateTable = 1,
+	kKERNSimpleArray = 2,
+	kKERNIndexArray = 3
+}
+
+enum
+{
+	kKERNLineStart = 0x00000001,
+	kKERNLineEndKerning = 0x00000002,
+	kKERNNoCrossKerning = 0x00000004,
+	kKERNNotesRequested = 0x00000008,
+	kKERNNoStakeNote = 1,
+	kKERNCrossStreamResetNote = 2,
+	kKERNNotApplied = 0x00000001
+}
+
+enum
+{
+	kBSLNTag = 0x62736C6E,
+	kBSLNCurrentVersion = 0x00010000,
+	kBSLNDistanceFormatNoMap = 0,
+	kBSLNDistanceFormatWithMap = 1,
+	kBSLNControlPointFormatNoMap = 2,
+	kBSLNControlPointFormatWithMap = 3
+}
+
+enum
+{
+	kBSLNRomanBaseline = 0,
+	kBSLNIdeographicCenterBaseline = 1,
+	kBSLNIdeographicLowBaseline = 2,
+	kBSLNHangingBaseline = 3,
+	kBSLNMathBaseline = 4,
+	kBSLNLastBaseline = 31,
+	kBSLNNumBaselineClasses = kBSLNLastBaseline + 1,
+	kBSLNNoBaselineOverride = 255
+}
+
+struct SFNTLookupBinarySearchHeader
+{
+	ushort unitSize;
+	ushort nUnits;
+	ushort searchRange;
+	ushort entrySelector;
+	ushort rangeShift;
+}
+
+
+struct SFNTLookupArrayHeader
+{
+	SFNTLookupValue* lookupValues;
+}
+
+
+struct SFNTLookupTrimmedArrayHeader
+{
+	ushort firstGlyph;
+	ushort count;
+	SFNTLookupValue* valueArray;
+}
+
+
+struct SFNTLookupSegment
+{
+	ushort lastGlyph;
+	ushort firstGlyph;
+	UInt16* value;
+}
+
+
+struct SFNTLookupSegmentHeader
+{
+	SFNTLookupBinarySearchHeader binSearch;
+	SFNTLookupSegment* segments;
+}
+
+
+struct SFNTLookupSingle
+{
+	ushort glyph;
+	UInt16* value;
+}
+
+
+struct SFNTLookupSingleHeader
+{
+	SFNTLookupBinarySearchHeader binSearch;
+	SFNTLookupSingle* entries;
+}
+
+union SFNTLookupFormatSpecificHeader
+{
+	SFNTLookupArrayHeader theArray;
+	SFNTLookupSegmentHeader segment;
+	SFNTLookupSingleHeader single;
+	SFNTLookupTrimmedArrayHeader trimmedArray;
+}
+
+struct SFNTLookupTable
+{
+	ushort format;
+	SFNTLookupFormatSpecificHeader fsHeader;
+}
+
+
+struct STHeader
+{
+	ubyte filler;
+	ubyte nClasses;
+	ushort classTableOffset;
+	ushort stateArrayOffset;
+	ushort entryTableOffset;
+}
+
+
+struct STClassTable
+{
+	ushort firstGlyph;
+	ushort nGlyphs;
+	char* classes;
+}
+
+
+struct STEntryZero
+{
+	ushort newState;
+	ushort flags;
+}
+
+
+struct STEntryOne
+{
+	ushort newState;
+	ushort flags;
+	ushort offset1;
+}
+
+
+struct STEntryTwo
+{
+	ushort newState;
+	ushort flags;
+	ushort offset1;
+	ushort offset2;
+}
+
+
+struct STXHeader
+{
+	uint nClasses;
+	uint classTableOffset;
+	uint stateArrayOffset;
+	uint entryTableOffset;
+}
+
+
+struct STXEntryZero
+{
+	ushort newState;
+	ushort flags;
+}
+
+
+struct STXEntryOne
+{
+	ushort newState;
+	ushort flags;
+	ushort index1;
+}
+
+
+struct STXEntryTwo
+{
+	ushort newState;
+	ushort flags;
+	ushort index1;
+	ushort index2;
+}
+
+
+struct LcarCaretClassEntry
+{
+	ushort count;
+	UInt16* partials;
+}
+
+
+struct LcarCaretTable
+{
+	int version_;
+	ushort format;
+	SFNTLookupTable lookup;
+}
+
+
+struct JustPCDecompositionAction
+{
+	int lowerLimit;
+	int upperLimit;
+	ushort order;
+	ushort count;
+	UInt16* glyphs;
+}
+
+
+struct JustPCConditionalAddAction
+{
+	int substThreshhold;
+	ushort addGlyph;
+	ushort substGlyph;
+}
+
+
+struct JustPCDuctilityAction
+{
+	uint ductilityAxis;
+	int minimumLimit;
+	int noStretchValue;
+	int maximumLimit;
+}
+
+
+struct JustPCGlyphRepeatAddAction
+{
+	ushort flags;
+	ushort glyph;
+}
+
+
+struct JustPCActionSubrecord
+{
+	ushort theClass;
+	ushort theType;
+	uint length;
+	uint data;
+}
+
+
+struct JustPCAction
+{
+	uint actionCount;
+	JustPCActionSubrecord* actions;
+}
+
+
+struct JustWidthDeltaEntry
+{
+	uint justClass;
+	int beforeGrowLimit;
+	int beforeShrinkLimit;
+	int afterGrowLimit;
+	int afterShrinkLimit;
+	ushort growFlags;
+	ushort shrinkFlags;
+}
+
+
+struct JustWidthDeltaGroup
+{
+	uint count;
+	JustWidthDeltaEntry* entries;
+}
+
+
+struct JustPostcompTable
+{
+	SFNTLookupTable lookupTable;
+}
+
+
+struct JustDirectionTable
+{
+	ushort justClass;
+	ushort widthDeltaClusters;
+	ushort postcomp;
+	SFNTLookupTable lookup;
+}
+
+
+struct JustTable
+{
+	int version_;
+	ushort format;
+	ushort horizHeaderOffset;
+	ushort vertHeaderOffset;
+}
+
+
+struct OpbdSideValues
+{
+	short leftSideShift;
+	short topSideShift;
+	short rightSideShift;
+	short bottomSideShift;
+}
+
+
+struct OpbdTable
+{
+	int version_;
+	ushort format;
+	SFNTLookupTable lookupTable;
+}
+
+
+struct MortRearrangementSubtable
+{
+	STHeader header;
+}
+
+
+struct MortContextualSubtable
+{
+	STHeader header;
+	ushort substitutionTableOffset;
+}
+
+
+struct MortLigatureSubtable
+{
+	STHeader header;
+	ushort ligatureActionTableOffset;
+	ushort componentTableOffset;
+	ushort ligatureTableOffset;
+}
+
+
+struct MortSwashSubtable
+{
+	SFNTLookupTable lookup;
+}
+
+
+struct MortInsertionSubtable
+{
+	STHeader header;
+}
+
+union MortSpecificSubtable
+{
+	MortRearrangementSubtable rearrangement;
+	MortContextualSubtable contextual;
+	MortLigatureSubtable ligature;
+	MortSwashSubtable swash;
+	MortInsertionSubtable insertion;
+}
+
+struct MortSubtable
+{
+	ushort length;
+	ushort coverage;
+	uint flags;
+	MortSpecificSubtable u;
+}
+
+
+struct MortFeatureEntry
+{
+	ushort featureType;
+	ushort featureSelector;
+	uint enableFlags;
+	uint disableFlags;
+}
+
+
+struct MortChain
+{
+	uint defaultFlags;
+	uint length;
+	ushort nFeatures;
+	ushort nSubtables;
+	MortFeatureEntry* featureEntries;
+}
+
+
+struct MortTable
+{
+	int version_;
+	uint nChains;
+	MortChain* chains;
+}
+
+
+struct MorxRearrangementSubtable
+{
+	STXHeader header;
+}
+
+
+struct MorxContextualSubtable
+{
+	STXHeader header;
+	uint substitutionTableOffset;
+}
+
+
+struct MorxLigatureSubtable
+{
+	STXHeader header;
+	uint ligatureActionTableOffset;
+	uint componentTableOffset;
+	uint ligatureTableOffset;
+}
+
+
+struct MorxInsertionSubtable
+{
+	STXHeader header;
+	uint insertionGlyphTableOffset;
+}
+
+union MorxSpecificSubtable
+{
+	MorxRearrangementSubtable rearrangement;
+	MorxRearrangementSubtable contextual;
+	MorxRearrangementSubtable ligature;
+	MorxRearrangementSubtable swash;
+	MorxRearrangementSubtable insertion;
+}
+
+struct MorxSubtable
+{
+	uint length;
+	uint coverage;
+	uint flags;
+	MorxSpecificSubtable u;
+}
+
+
+struct MorxChain
+{
+	uint defaultFlags;
+	uint length;
+	uint nFeatures;
+	uint nSubtables;
+	MortFeatureEntry* featureEntries;
+}
+
+
+struct MorxTable
+{
+	int version_;
+	uint nChains;
+	MorxChain* chains;
+}
+
+
+struct PropTable
+{
+	int version_;
+	ushort format;
+	ushort defaultProps;
+	SFNTLookupTable lookup;
+}
+
+
+struct PropLookupSegment
+{
+	ushort lastGlyph;
+	ushort firstGlyph;
+	ushort value;
+}
+
+
+struct PropLookupSingle
+{
+	ushort glyph;
+	ushort props;
+}
+
+
+struct TrakTableEntry
+{
+	int track;
+	ushort nameTableIndex;
+	ushort sizesOffset;
+}
+
+
+struct TrakTableData
+{
+	ushort nTracks;
+	ushort nSizes;
+	uint sizeTableOffset;
+	TrakTableEntry* trakTable;
+}
+
+
+struct TrakTable
+{
+	int version_;
+	ushort format;
+	ushort horizOffset;
+	ushort vertOffset;
+}
+
+
+struct KernVersion0Header
+{
+	ushort version_;
+	ushort nTables;
+	UInt16* firstSubtable;
+}
+
+
+struct KernTableHeader
+{
+	int version_;
+	int nTables;
+	UInt16* firstSubtable;
+}
+
+
+struct KernKerningPair
+{
+	ushort left;
+	ushort right;
+}
+
+
+struct KernOrderedListEntry
+{
+	KernKerningPair pair;
+	short value;
+}
+
+
+struct KernOrderedListHeader
+{
+	ushort nPairs;
+	ushort searchRange;
+	ushort entrySelector;
+	ushort rangeShift;
+	UInt16* table;
+}
+
+
+struct KernStateHeader
+{
+	STHeader header;
+	ushort valueTable;
+	char* firstTable;
+}
+
+
+struct KernStateEntry
+{
+	ushort newState;
+	ushort flags;
+}
+
+
+struct KernOffsetTable
+{
+	ushort firstGlyph;
+	ushort nGlyphs;
+	KernArrayOffset* offsetTable;
+}
+
+
+struct KernSimpleArrayHeader
+{
+	ushort rowWidth;
+	ushort leftOffsetTable;
+	ushort rightOffsetTable;
+	ushort theArray;
+	UInt16* firstTable;
+}
+
+
+struct KernIndexArrayHeader
+{
+	ushort glyphCount;
+	ubyte kernValueCount;
+	ubyte leftClassCount;
+	ubyte rightClassCount;
+	ubyte flags;
+	SInt16* kernValue;
+	char* leftClass;
+	char* rightClass;
+	char* kernIndex;
+}
+
+/*
+ * union KernFormatSpecificHeader {
+  KernOrderedListHeader  orderedList;
+  KernStateHeader     stateTable;
+  KernSimpleArrayHeader  simpleArray;
+  KernIndexArrayHeader  indexArray;
+};
+ */
+
+union KernFormatSpecificHeader
+{
+	KernOrderedListHeader orderedList;
+	KernStateHeader stateTable;
+	KernSimpleArrayHeader simpleArray;
+	KernIndexArrayHeader indexArray;
+}
+
+struct KernVersion0SubtableHeader
+{
+	ushort version_;
+	ushort length;
+	ushort stInfo;
+	KernFormatSpecificHeader fsHeader;
+}
+
+
+struct KernSubtableHeader
+{
+	int length;
+	ushort stInfo;
+	short tupleIndex;
+	KernFormatSpecificHeader fsHeader;
+}
+
+
+struct BslnFormat0Part
+{
+	SInt16* deltas;
+}
+
+
+struct BslnFormat1Part
+{
+	SInt16* deltas;
+	SFNTLookupTable mappingData;
+}
+
+
+struct BslnFormat2Part
+{
+	ushort stdGlyph;
+	SInt16* ctlPoints;
+}
+
+
+struct BslnFormat3Part
+{
+	ushort stdGlyph;
+	SInt16* ctlPoints;
+	SFNTLookupTable mappingData;
+}
+
+union BslnFormatUnion
+{
+	BslnFormat0Part fmt0Part;
+	BslnFormat1Part fmt1Part;
+	BslnFormat2Part fmt2Part;
+	BslnFormat3Part fmt3Part;
+}
+
+struct BslnTable
+{
+	int version_;
+	ushort format;
+	ushort defaultBaseline;
+	BslnFormatUnion parts;
+}
+