Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

167 lines
4.4 KiB
C++

//========================================================================
//
// XFAScanner.h
//
// Copyright 2020 Glyph & Cog, LLC
//
//========================================================================
#ifndef XFASCANNER_H
#define XFASCANNER_H
#include <aconf.h>
#ifdef USE_GCC_PRAGMAS
#pragma interface
#endif
class GHash;
class ZxElement;
//------------------------------------------------------------------------
enum XFAFieldLayoutHAlign {
xfaFieldLayoutHAlignLeft,
xfaFieldLayoutHAlignCenter,
xfaFieldLayoutHAlignRight
};
enum XFAFieldLayoutVAlign {
xfaFieldLayoutVAlignTop,
xfaFieldLayoutVAlignMiddle,
xfaFieldLayoutVAlignBottom
};
class XFAFieldLayoutInfo {
public:
XFAFieldLayoutInfo(XFAFieldLayoutHAlign hAlignA,
XFAFieldLayoutVAlign vAlignA);
XFAFieldLayoutHAlign hAlign;
XFAFieldLayoutVAlign vAlign;
};
//------------------------------------------------------------------------
enum XFAFieldPictureSubtype {
xfaFieldPictureDateTime,
xfaFieldPictureNumeric,
xfaFieldPictureText
};
class XFAFieldPictureInfo {
public:
XFAFieldPictureInfo(XFAFieldPictureSubtype subtypeA, GString *formatA);
~XFAFieldPictureInfo();
XFAFieldPictureSubtype subtype;
GString *format; // picture format string
};
//------------------------------------------------------------------------
class XFAFieldBarcodeInfo {
public:
XFAFieldBarcodeInfo(GString *barcodeTypeA, double wideNarrowRatioA,
double moduleWidthA, double moduleHeightA,
int dataLengthA, int errorCorrectionLevelA,
GString *textLocationA);
~XFAFieldBarcodeInfo();
GString *barcodeType;
double wideNarrowRatio;
double moduleWidth;
double moduleHeight;
int dataLength;
int errorCorrectionLevel;
GString *textLocation;
};
//------------------------------------------------------------------------
class XFAField {
public:
XFAField(GString *nameA, GString *fullNameA, GString *valueA,
XFAFieldLayoutInfo *layoutInfoA,
XFAFieldPictureInfo *pictureInfoA,
XFAFieldBarcodeInfo *barcodeInfoA);
~XFAField();
// Get the field's value, or NULL if it doesn't have a value. Sets
// *[length] to the length of the Unicode string.
GString *getValue() { return value; }
// Return a pointer to the field's picture formatting info object,
// or NULL if the field doesn't have picture formatting.
XFAFieldPictureInfo *getPictureInfo() { return pictureInfo; }
// Return a pointer to the field's layout info object, or NULL if
// the field doesn't have layout info.
XFAFieldLayoutInfo *getLayoutInfo() { return layoutInfo; }
// Return a pointer to the field's barcode info object, or NULL if
// the field isn't a barcode.
XFAFieldBarcodeInfo *getBarcodeInfo() { return barcodeInfo; }
private:
friend class XFAScanner;
GString *name; // UTF-8
GString *fullName; // UTF-8
GString *value; // UTF-8
XFAFieldLayoutInfo *layoutInfo;
XFAFieldPictureInfo *pictureInfo;
XFAFieldBarcodeInfo *barcodeInfo;
};
//------------------------------------------------------------------------
class XFAScanner {
public:
static XFAScanner *load(Object *xfaObj);
virtual ~XFAScanner();
// Find an XFA field matchined the specified AcroForm field name.
// Returns NULL if there is no matching field.
XFAField *findField(GString *acroFormFieldName);
private:
XFAScanner();
static GString *readXFAStreams(Object *xfaObj);
GHash *scanFormValues(ZxElement *xmlRoot);
void scanFormNode(ZxElement *elem, GString *fullName,
GHash *formValues);
void scanNode(ZxElement *elem,
GString *parentName, GString *parentFullName,
GHash *nameIdx, GHash *fullNameIdx,
GString *exclGroupName, ZxElement *xmlRoot,
GHash *formValues);
void scanField(ZxElement *elem, GString *name, GString *fullName,
GString *exclGroupName, ZxElement *xmlRoot,
GHash *formValues);
GString *getFieldValue(ZxElement *elem, GString *name,
GString *fullName, GString *exclGroupName,
ZxElement *xmlRoot, GHash *formValues);
GString *getDatasetsValue(char *partName, ZxElement *elem);
XFAFieldLayoutInfo *getFieldLayoutInfo(ZxElement *elem);
XFAFieldPictureInfo *getFieldPictureInfo(ZxElement *elem);
XFAFieldBarcodeInfo *getFieldBarcodeInfo(ZxElement *elem);
double getMeasurement(GString *s);
GString *getNodeName(ZxElement *elem);
GString *getNodeFullName(ZxElement *elem);
GBool nodeIsBindGlobal(ZxElement *elem);
GBool nodeIsBindNone(ZxElement *elem);
GHash *fields; // [XFAField]
};
#endif