#ifndef _FS_LAYOUTRECOGNITION_C_H_
#define _FS_LAYOUTRECOGNITION_C_H_

#ifdef __cplusplus
extern "C" {
#endif



typedef enum _FSElementType {
e_FSElementTypeDocument = 0x0000,
e_FSElementTypeDocumentFragment = 0x0001,
e_FSElementTypePart = 0x0002,
e_FSElementTypeArt = 0x0101,
e_FSElementTypeSect = 0x0102,
e_FSElementTypeDiv = 0x0100,
e_FSElementTypeBlockQuote = 0x0103,
e_FSElementTypeCaption = 0x0104,
e_FSElementTypeTOC = 0x0105,
e_FSElementTypeTOCI = 0x0106,
e_FSElementTypeIndex = 0x0107,
e_FSElementTypeAside = 0x0108,
e_FSElementTypeTitle = 0x0109,
e_FSElementTypeFENote = 0x010A,
e_FSElementTypeNonStruct = 0x010F,
e_FSElementTypePrivate = 0x0110,
e_FSElementTypeParagraph = 0x0200,
e_FSElementTypeHeading = 0x0201,
e_FSElementTypeHeading1 = 0x0202,
e_FSElementTypeHeading2 = 0x0203,
e_FSElementTypeHeading3 = 0x0204,
e_FSElementTypeHeading4 = 0x0205,
e_FSElementTypeHeading5 = 0x0206,
e_FSElementTypeHeading6 = 0x0207,
e_FSElementTypeHeadingN = 0x0208,
e_FSElementTypeList = 0x0209,
e_FSElementTypeListItem = 0x020A,
e_FSElementTypeListLabel = 0x020B,
e_FSElementTypeListBody = 0x020C,
e_FSElementTypeTable = 0x020D,
e_FSElementTypeTableRow = 0x020E,
e_FSElementTypeTableHeaderCell = 0x020F,
e_FSElementTypeTableDataCell = 0x0210,
e_FSElementTypeTableHeaderGroup = 0x0211,
e_FSElementTypeTableBodyGroup = 0x0212,
e_FSElementTypeTableFootGroup = 0x0213,
e_FSElementTypeSpan = 0x0300,
e_FSElementTypeQuote = 0x0301,
e_FSElementTypeNote = 0x0302,
e_FSElementTypeReference = 0x0303,
e_FSElementTypeBibEntry = 0x0304,
e_FSElementTypeCode = 0x0305,
e_FSElementTypeLink = 0x0306,
e_FSElementTypeAnnot = 0x0307,
e_FSElementTypeRuby = 0x0308,
e_FSElementTypeRubyBase = 0x0309,
e_FSElementTypeRubyAnnot = 0x030A,
e_FSElementTypeRubyPunc = 0x030B,
e_FSElementTypeWarichu = 0x030C,
e_FSElementTypeWarichuText = 0x030D,
e_FSElementTypeWarichuPunc = 0x030E,
e_FSElementTypeEm = 0x030F,
e_FSElementTypeStrong = 0x0310,
e_FSElementTypeSub = 0x0311,
e_FSElementTypeFigure = 0x0400,
e_FSElementTypeFormula = 0x0401,
e_FSElementTypeForm = 0x0402,
e_FSElementTypeArtifact = 0x1000,
e_FSElementTypeTextObject = 0x80000001,
e_FSElementTypePathObject = 0x80000002,
e_FSElementTypeImageObject = 0x80000003,
e_FSElementTypeShadingObject = 0x80000004,
e_FSElementTypeFormObject = 0x80000005,
e_FSElementTypeContainerObject = 0x8000000C,
e_FSElementTypeAnnotObject = 0x8000000E,
e_FSElementTypePageObject = 0x8000000F,
e_FSElementTypeTextContent = 0xC0000001,
e_FSElementTypePathContent = 0xC0000002,
e_FSElementTypeImageContent = 0xC0000003,
e_FSElementTypeShadingContent = 0xC0000004,
e_FSElementTypeComplexContent = 0xC000000D,
e_FSElementTypeAnnotContent = 0xC000000E,
}FSElementType;



typedef enum _FSAttributeType {
e_FSAttributeTypeInvalid = 0x0,
e_FSAttributeTypeRole = 0x524f4c45,
e_FSAttributeTypePlacement = 0x504c4143,
e_FSAttributeTypeRotation = 0x524f5441,
e_FSAttributeTypeWritingMode = 0x574d4f44,
e_FSAttributeTypeDestination = 0x44455354,
e_FSAttributeTypeBBox = 0x42424f58,
e_FSAttributeTypeWidth = 0x57445448,
e_FSAttributeTypeHeight = 0x48474854,
e_FSAttributeTypeBackgroundColor = 0x424b4743,
e_FSAttributeTypeBorderColor = 0x42445243,
e_FSAttributeTypeBorderStyle = 0x42445253,
e_FSAttributeTypeBorderThickness = 0x42445254,
e_FSAttributeTypeAttached = 0x41545448,
e_FSAttributeTypeSubType = 0x53554254,
e_FSAttributeTypePadding = 0x50414447,
e_FSAttributeTypeColor = 0x434f4c52,
e_FSAttributeTypeSpaceBefore = 0x53504246,
e_FSAttributeTypeSpaceAfter = 0x53504146,
e_FSAttributeTypeStartIndent = 0x53494e44,
e_FSAttributeTypeEndIndent = 0x45494e44,
e_FSAttributeTypeTextIndent = 0x54494e44,
e_FSAttributeTypeTextAlign = 0x54414c4e,
e_FSAttributeTypeBlockAlign = 0x42414c4e,
e_FSAttributeTypeInlineAlign = 0x49414c4e,
e_FSAttributeTypeTBorderStyle = 0x54424453,
e_FSAttributeTypeTPadding = 0x54504144,
e_FSAttributeTypeBaselineShift = 0x42534846,
e_FSAttributeTypeLineHeight = 0x4c484754,
e_FSAttributeTypeTextDecorationColor = 0x5444434c,
e_FSAttributeTypeTextDecorationThickness = 0x54445448,
e_FSAttributeTypeTextDecorationType = 0x54445459,
e_FSAttributeTypeRubyAlign = 0x5242414c,
e_FSAttributeTypeRubyPosition = 0x52425053,
e_FSAttributeTypeGlyphOrientationVertical = 0x474f5654,
e_FSAttributeTypeColumnCount = 0x434c434e,
e_FSAttributeTypeColumnGap = 0x434c4750,
e_FSAttributeTypeColumnWidths = 0x434c5744,
e_FSAttributeTypeListNumbering = 0x4c4e554d,
e_FSAttributeTypeFieldRole = 0x46524f4c,
e_FSAttributeTypeFieldChecked = 0x43484b44,
e_FSAttributeTypeFieldDesc = 0x46445343,
e_FSAttributeTypeRowSpan = 0x5253504e,
e_FSAttributeTypeColSpan = 0x4353504e,
e_FSAttributeTypeTableHeaders = 0x54484453,
e_FSAttributeTypeTableHeaderScope = 0x54485343,
e_FSAttributeTypeTableSummary = 0x5442534d,
e_FSAttributeTypeShort	= 0x53484f52,
e_FSAttributeTypeDirection = 0x44495245,
e_FSAttributeTypeABox = 0x414c4258,
e_FSAttributeTypeVersion = 0x5645534e,
}FSAttributeType;



typedef enum _FSAttributeValueEnum {
e_FSAttributeValueEnumInvalid = 0x0,
e_FSAttributeValueEnumBlock = 0x424c434b,
e_FSAttributeValueEnumInline = 0x494e4c4e,
e_FSAttributeValueEnumWarichu = 0x57415249,
e_FSAttributeValueEnumBefore = 0x42454652,
e_FSAttributeValueEnumAfter = 0x41465445,
e_FSAttributeValueEnumStart = 0x53545254,
e_FSAttributeValueEnumEnd = 0x454e4400,
e_FSAttributeValueEnumLrTb = 0x4c525442,
e_FSAttributeValueEnumRlTb = 0x524c5442,
e_FSAttributeValueEnumTbRl = 0x5442524c,
e_FSAttributeValueEnumTbLr = 0x54424c52,
e_FSAttributeValueEnumNone = 0x4e4f4e45,
e_FSAttributeValueEnumHidden = 0x4849444e,
e_FSAttributeValueEnumDotted = 0x444f5444,
e_FSAttributeValueEnumDashed = 0x44534844,
e_FSAttributeValueEnumSolid = 0x534f4c44,
e_FSAttributeValueEnumDouble = 0x44424c45,
e_FSAttributeValueEnumGroove = 0x41525459,
e_FSAttributeValueEnumRidge = 0x52444745,
e_FSAttributeValueEnumInset = 0x494e5354,
e_FSAttributeValueEnumOutset = 0x4f545354,
e_FSAttributeValueEnumAttributeValueEnumNormal = 0x4e524d4c,
e_FSAttributeValueEnumAuto = 0x4155544f,
e_FSAttributeValueEnumCenter = 0x434e5452,
e_FSAttributeValueEnumJustify = 0x4a535459,
e_FSAttributeValueEnumMiddle = 0x4d49444c,
e_FSAttributeValueEnumUnderline = 0x55444c4e,
e_FSAttributeValueEnumOverline = 0x4f564c4e,
e_FSAttributeValueEnumLineThrough = 0x4c4e5448,
e_FSAttributeValueEnumDistribute = 0x44535442,
e_FSAttributeValueEnumDisc = 0x44495343,
e_FSAttributeValueEnumCircle = 0x4352434c,
e_FSAttributeValueEnumSquare = 0x53515552,
e_FSAttributeValueEnumDecimal = 0x44434d4c,
e_FSAttributeValueEnumUpperRoman = 0x5550524d,
e_FSAttributeValueEnumLowerRoman = 0x4c57524d,
e_FSAttributeValueEnumUpperAlpha = 0x5550414c,
e_FSAttributeValueEnumLowerAlpha = 0x4c57414c,
e_FSAttributeValueEnumUnordered = 0x554e4f52,
e_FSAttributeValueEnumOrdered = 0x4f524445,
e_FSAttributeValueEnumFloat = 0x464c4f54,
e_FSAttributeValueEnumRB = 0x52420000,
e_FSAttributeValueEnumCB = 0x43420000,
e_FSAttributeValueEnumPB = 0x50440000,
e_FSAttributeValueEnumTV = 0x54560000,
e_FSAttributeValueEnumOn = 0x4f4e0000,
e_FSAttributeValueEnumOff = 0x4f464600,
e_FSAttributeValueEnumNeutral = 0x4e555452,
e_FSAttributeValueEnumRow = 0x524f5700,
e_FSAttributeValueEnumColumn = 0x434c4d4e,
e_FSAttributeValueEnumBoth = 0x424f5448,
e_FSAttributeValueEnumLeft = 0x4c454654,
e_FSAttributeValueEnumTop = 0x544f5000,
e_FSAttributeValueEnumBottom = 0x42544f4d,
e_FSAttributeValueEnumRight = 0x52474854,
e_FSAttributeValueEnumPagination = 0x5041474e,
e_FSAttributeValueEnumLayout = 0x4c41594f,
e_FSAttributeValueEnumPage = 0x50414745,
e_FSAttributeValueEnumBackground = 0x424b474e,
e_FSAttributeValueEnumHeader = 0x48454144,
e_FSAttributeValueEnumFooter = 0x464f4f54,
e_FSAttributeValueEnumWatermark = 0x57544d4b,
e_FSAttributeValueEnumPageNum = 0x504e554d,
e_FSAttributeValueEnumBates = 0x42415445,
e_FSAttributeValueEnumOther = 0x4f544845,
}FSAttributeValueEnum;



typedef enum _FSAttributeValueType {
e_FSAttributeValueTypeEmpty = 0x0,
e_FSAttributeValueTypeEnum = 0x1,
e_FSAttributeValueTypeInt32 = 0x2,
e_FSAttributeValueTypeFloat = 0x3,
e_FSAttributeValueTypeARGB = 0x4,
e_FSAttributeValueTypeWStr = 0x5,
e_FSAttributeValueTypeElement = 0x6,
e_FSAttributeValueTypeEnumArray = 0x101,
e_FSAttributeValueTypeInt32Array = 0x102,
e_FSAttributeValueTypeFloatArray = 0x103,
e_FSAttributeValueTypeARGBArray = 0x104,
e_FSAttributeValueTypeWStrArray = 0x105,
e_FSAttributeValueTypeElementArray = 0x106,
}FSAttributeValueType;


FSErrorCode FSDK_LRElement_Create(FS_LRELEMENT_HANDLE* lrelement_return_value);
FSErrorCode FSDK_LRElement_Release(FS_LRELEMENT_HANDLE lrelement_handle);
FSErrorCode FSDK_LRElement_IsEmpty(FS_LRELEMENT_HANDLE lrelement_handle, FS_BOOL* return_value);
FSErrorCode FSDK_LRElement_GetElementType(FS_LRELEMENT_HANDLE lrelement_handle, FSElementType* return_value);
FSErrorCode FSDK_LRElement_IsContentElement(FS_LRELEMENT_HANDLE lrelement_handle, FS_BOOL* return_value);
FSErrorCode FSDK_LRElement_IsGraphicsObjectElement(FS_LRELEMENT_HANDLE lrelement_handle, FS_BOOL* return_value);
FSErrorCode FSDK_LRElement_IsStructureElement(FS_LRELEMENT_HANDLE lrelement_handle, FS_BOOL* return_value);
FSErrorCode FSDK_LRElement_StringifyType(FS_LRELEMENT_HANDLE lrelement_handle, FS_BSTR* return_value);
FSErrorCode FSDK_LRElement_StringifyElementType(FSElementType type, FS_BSTR* return_value);
FSErrorCode FSDK_LRStructureElement_Create(FS_LRSTRUCTUREELEMENT_HANDLE* lrstructureelement_return_value);
FSErrorCode FSDK_LRStructureElement_Create0(const FS_LRELEMENT_HANDLE element, FS_LRSTRUCTUREELEMENT_HANDLE* lrstructureelement_return_value);
FSErrorCode FSDK_LRStructureElement_Release(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle);
FSErrorCode FSDK_LRStructureElement_StringifyAttributeType(FSAttributeType type, FS_BSTR* return_value);
FSErrorCode FSDK_LRStructureElement_ParseAttributeType(FS_BSTR type_string, FSAttributeType* return_value);
FSErrorCode FSDK_LRStructureElement_StringifyEnumVariant(FSAttributeValueEnum type, FS_BSTR* return_value);
FSErrorCode FSDK_LRStructureElement_IsArrayAttributeValueType(FSAttributeValueType type, FS_BOOL* return_value);
FSErrorCode FSDK_LRStructureElement_GetSupportedAttributeCount(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, int* return_value);
FSErrorCode FSDK_LRStructureElement_GetSupportedAttribute(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, int index, FSAttributeType* return_value);
FSErrorCode FSDK_LRStructureElement_GetAttributeValueCount(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, FSAttributeType type, int* return_value);
FSErrorCode FSDK_LRStructureElement_GetAttributeValueType(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, FSAttributeType type, FSAttributeValueType* return_value);
FSErrorCode FSDK_LRStructureElement_GetAttributeValueEnum(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, FSAttributeType type, int index, FSAttributeValueEnum* return_value);
FSErrorCode FSDK_LRStructureElement_GetAttributeValueInt32(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, FSAttributeType type, int index, FS_INT32* return_value);
FSErrorCode FSDK_LRStructureElement_GetAttributeValueFloat(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, FSAttributeType type, int index, float* return_value);
FSErrorCode FSDK_LRStructureElement_GetAttributeValueARGB(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, FSAttributeType type, int index, FSDK_ARGB* return_value);
FSErrorCode FSDK_LRStructureElement_GetAttributeValueString(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, FSAttributeType type, int index, FS_WSTR* return_value);
FSErrorCode FSDK_LRStructureElement_GetAttributeValueElement(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, FSAttributeType type, int index, FS_LRSTRUCTUREELEMENT_HANDLE* return_value);
FSErrorCode FSDK_LRStructureElement_GetParentElement(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, FS_LRSTRUCTUREELEMENT_HANDLE* return_value);
FSErrorCode FSDK_LRStructureElement_GetChildCount(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, int* return_value);
FSErrorCode FSDK_LRStructureElement_GetChild(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, int index, FS_LRELEMENT_HANDLE* return_value);
FSErrorCode FSDK_LRStructureElement_GetBBox(FS_LRSTRUCTUREELEMENT_HANDLE lrstructureelement_handle, FSRectF* return_value);
FSErrorCode FSDK_LRGraphicsObjectElement_Create(FS_LRGRAPHICSOBJECTELEMENT_HANDLE* lrgraphicsobjectelement_return_value);
FSErrorCode FSDK_LRGraphicsObjectElement_Create0(const FS_LRELEMENT_HANDLE element, FS_LRGRAPHICSOBJECTELEMENT_HANDLE* lrgraphicsobjectelement_return_value);
FSErrorCode FSDK_LRGraphicsObjectElement_Release(FS_LRGRAPHICSOBJECTELEMENT_HANDLE lrgraphicsobjectelement_handle);
FSErrorCode FSDK_LRGraphicsObjectElement_GetParentGraphicsObjectElement(FS_LRGRAPHICSOBJECTELEMENT_HANDLE lrgraphicsobjectelement_handle, FS_LRGRAPHICSOBJECTELEMENT_HANDLE* return_value);
FSErrorCode FSDK_LRGraphicsObjectElement_GetGraphicsObject(FS_LRGRAPHICSOBJECTELEMENT_HANDLE lrgraphicsobjectelement_handle, FS_GRAPHICSOBJECT_HANDLE* return_value);
FSErrorCode FSDK_LRGraphicsObjectElement_GetDict(FS_LRGRAPHICSOBJECTELEMENT_HANDLE lrgraphicsobjectelement_handle, FS_PDFDICTIONARY_HANDLE* return_value);
FSErrorCode FSDK_LRGraphicsObjectElement_GetGraphicsObjectIndex(FS_LRGRAPHICSOBJECTELEMENT_HANDLE lrgraphicsobjectelement_handle, int* return_value);
FSErrorCode FSDK_LRGraphicsObjectElement_GetBBox(FS_LRGRAPHICSOBJECTELEMENT_HANDLE lrgraphicsobjectelement_handle, FSRectF* return_value);
FSErrorCode FSDK_LRGraphicsObjectElement_GetMatrix(FS_LRGRAPHICSOBJECTELEMENT_HANDLE lrgraphicsobjectelement_handle, FSMatrix* return_value);
FSErrorCode FSDK_LRContentElement_Create(FS_LRCONTENTELEMENT_HANDLE* lrcontentelement_return_value);
FSErrorCode FSDK_LRContentElement_Create0(const FS_LRELEMENT_HANDLE element, FS_LRCONTENTELEMENT_HANDLE* lrcontentelement_return_value);
FSErrorCode FSDK_LRContentElement_Release(FS_LRCONTENTELEMENT_HANDLE lrcontentelement_handle);
FSErrorCode FSDK_LRContentElement_GetParentElement(FS_LRCONTENTELEMENT_HANDLE lrcontentelement_handle, FS_LRSTRUCTUREELEMENT_HANDLE* return_value);
FSErrorCode FSDK_LRContentElement_GetGraphicsObjectElement(FS_LRCONTENTELEMENT_HANDLE lrcontentelement_handle, FS_LRGRAPHICSOBJECTELEMENT_HANDLE* return_value);
FSErrorCode FSDK_LRContentElement_GetGraphicsObjectRange(FS_LRCONTENTELEMENT_HANDLE lrcontentelement_handle, FS_RANGE_HANDLE* return_value);
FSErrorCode FSDK_LRContentElement_GetBBox(FS_LRCONTENTELEMENT_HANDLE lrcontentelement_handle, FSRectF* return_value);
FSErrorCode FSDK_LRContentElement_GetMatrix(FS_LRCONTENTELEMENT_HANDLE lrcontentelement_handle, FSMatrix* return_value);
FSErrorCode FSDK_LRContext_Create(const FS_PDFPAGE_HANDLE page, FS_LRCONTEXT_HANDLE* lrcontext_return_value);
FSErrorCode FSDK_LRContext_Release(FS_LRCONTEXT_HANDLE lrcontext_handle);
FSErrorCode FSDK_LRContext_IsEmpty(FS_LRCONTEXT_HANDLE lrcontext_handle, FS_BOOL* return_value);
FSErrorCode FSDK_LRContext_StartParse(FS_LRCONTEXT_HANDLE lrcontext_handle,  FSPauseCallback* pause, FS_PROGRESSIVE_HANDLE* return_value);
FSErrorCode FSDK_LRContext_GetRootElement(FS_LRCONTEXT_HANDLE lrcontext_handle, FS_LRSTRUCTUREELEMENT_HANDLE* return_value);
#ifdef __cplusplus
}
#endif
#endif
