diff -r 000000000000 -r 6474c204b198 gfx/thebes/MathTableStructures.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/thebes/MathTableStructures.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,121 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// This file contains the structures described in Microsoft's document +// "The MATH table and OpenType Features for Math Processing" (not yet public). +// +// Arrays of varying size are indicated in comments. Typically, gfxMathTable +// will read the header of the structure first, verify that there is enough +// space for the specified arrays and then use a pointer to browse these arrays. + +#ifndef MATH_TABLE_STRUCTURE_H +#define MATH_TABLE_STRUCTURE_H + +#include "gfxFontUtils.h" + +typedef mozilla::AutoSwap_PRUint16 Count16; +typedef mozilla::AutoSwap_PRUint16 GlyphID; +typedef mozilla::AutoSwap_PRUint16 Offset; + +struct MathValueRecord { + mozilla::AutoSwap_PRInt16 mValue; + Offset mDeviceTable; +}; + +struct RangeRecord { + GlyphID mStart; + GlyphID mEnd; + mozilla::AutoSwap_PRUint16 mStartCoverageIndex; +}; + +struct Coverage { + mozilla::AutoSwap_PRUint16 mFormat; +}; + +struct CoverageFormat1 { + mozilla::AutoSwap_PRUint16 mFormat; + Count16 mGlyphCount; + // GlyphID mGlyphArray[mGlyphCount] +}; + +struct CoverageFormat2 { + mozilla::AutoSwap_PRUint16 mFormat; + Count16 mRangeCount; + // RangeRecord mRangeArray[mRangeCount]; +}; + +struct MATHTableHeader { + mozilla::AutoSwap_PRUint32 mVersion; + Offset mMathConstants; + Offset mMathGlyphInfo; + Offset mMathVariants; +}; + +struct MathConstants { + mozilla::AutoSwap_PRInt16 mInt16[gfxFontEntry::ScriptScriptPercentScaleDown - + gfxFontEntry::ScriptPercentScaleDown + 1]; + mozilla::AutoSwap_PRUint16 mUint16[gfxFontEntry::DisplayOperatorMinHeight - + gfxFontEntry:: + DelimitedSubFormulaMinHeight + 1]; + MathValueRecord mMathValues[gfxFontEntry::RadicalKernAfterDegree - + gfxFontEntry::MathLeading + 1]; + mozilla::AutoSwap_PRUint16 mRadicalDegreeBottomRaisePercent; +}; + +struct MathGlyphInfo { + Offset mMathItalicsCorrectionInfo; + Offset mMathTopAccentAttachment; + Offset mExtendedShapeCoverage; + Offset mMathKernInfo; +}; + +struct MathItalicsCorrectionInfo { + Offset mCoverage; + Count16 mItalicsCorrectionCount; + // MathValueRecord mItalicsCorrection[mItalicsCorrectionCount] +}; + +struct MathVariants { + mozilla::AutoSwap_PRUint16 mMinConnectorOverlap; + Offset mVertGlyphCoverage; + Offset mHorizGlyphCoverage; + Count16 mVertGlyphCount; + Count16 mHorizGlyphCount; + // Offset mVertGlyphConstruction[mVertGlyphCount]; + // Offset mHorizGlyphConstruction[mHorizGlyphCount]; +}; + +struct MathGlyphVariantRecord { + GlyphID mVariantGlyph; + mozilla::AutoSwap_PRUint16 mAdvanceMeasurement; +}; + +struct MathGlyphConstruction { + Offset mGlyphAssembly; + Count16 mVariantCount; + // MathGlyphVariantRecord mMathGlyphVariantRecord[mVariantCount] +}; + +struct GlyphPartRecord { + GlyphID mGlyph; + mozilla::AutoSwap_PRUint16 mStartConnectorLength; + mozilla::AutoSwap_PRUint16 mEndConnectorLength; + mozilla::AutoSwap_PRUint16 mFullAdvance; + mozilla::AutoSwap_PRUint16 mPartFlags; +}; + +// PartFlags enumeration currently uses only one bit: +// 0x0001 If set, the part can be skipped or repeated. +// 0xFFFE Reserved. +enum { + PART_FLAG_EXTENDER = 0x01 +}; + +struct GlyphAssembly { + MathValueRecord mItalicsCorrection; + Count16 mPartCount; + // GlyphPartRecord mPartRecords[mPartCount] +}; + +#endif