Mercurial > projects > dstep
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; +} +