diff options
-rw-r--r-- | core/include/fpdfdoc/fpdf_doc.h | 2 | ||||
-rw-r--r-- | core/include/fxcodec/fx_codec.h | 29 | ||||
-rw-r--r-- | core/include/fxcodec/fx_codec_def.h | 6 | ||||
-rw-r--r-- | core/include/fxcrt/fx_basic.h | 10 | ||||
-rw-r--r-- | core/include/fxcrt/fx_ext.h | 4 | ||||
-rw-r--r-- | core/include/fxcrt/fx_stream.h | 2 | ||||
-rw-r--r-- | core/include/fxcrt/fx_ucd.h | 12 | ||||
-rw-r--r-- | core/include/fxge/fx_font.h | 20 | ||||
-rw-r--r-- | core/src/fpdfdoc/doc_form.cpp | 2 | ||||
-rw-r--r-- | core/src/fpdfdoc/doc_formfield.cpp | 2 | ||||
-rw-r--r-- | core/src/fpdftext/fpdf_text_int.cpp | 69 | ||||
-rw-r--r-- | core/src/fpdftext/text_int.h | 6 | ||||
-rw-r--r-- | core/src/fxcodec/codec/codec_int.h | 8 | ||||
-rw-r--r-- | core/src/fxcodec/codec/fx_codec.cpp | 10 | ||||
-rw-r--r-- | core/src/fxcodec/codec/fx_codec_jpeg.cpp | 8 | ||||
-rw-r--r-- | core/src/fxcrt/extension.h | 2 | ||||
-rw-r--r-- | core/src/fxcrt/fx_basic_buffer.cpp | 2 | ||||
-rw-r--r-- | core/src/fxcrt/fx_extension.cpp | 4 | ||||
-rw-r--r-- | core/src/fxcrt/fx_unicode.cpp | 4 | ||||
-rw-r--r-- | core/src/fxge/dib/fx_dib_convert.cpp | 2 | ||||
-rw-r--r-- | core/src/fxge/ge/fx_ge_font.cpp | 24 | ||||
-rw-r--r-- | core/src/fxge/ge/fx_ge_fontmap.cpp | 6 |
22 files changed, 233 insertions, 1 deletions
diff --git a/core/include/fpdfdoc/fpdf_doc.h b/core/include/fpdfdoc/fpdf_doc.h index c270c78bcf..3f05fc9be9 100644 --- a/core/include/fpdfdoc/fpdf_doc.h +++ b/core/include/fpdfdoc/fpdf_doc.h @@ -825,12 +825,14 @@ class CPDF_FormField { FX_BOOL ClearSelectedOptions(FX_BOOL bNotify = FALSE); +#ifdef PDF_ENABLE_XFA FX_BOOL ClearOptions(FX_BOOL bNotify = FALSE); int InsertOption(CFX_WideString csOptLabel, int index = -1, FX_BOOL bNotify = FALSE); +#endif FX_FLOAT GetFontSize() { return m_FontSize; } CPDF_Font* GetFont() { return m_pFont; } diff --git a/core/include/fxcodec/fx_codec.h b/core/include/fxcodec/fx_codec.h index 54ea64544a..54d185a8ce 100644 --- a/core/include/fxcodec/fx_codec.h +++ b/core/include/fxcodec/fx_codec.h @@ -7,29 +7,45 @@ #ifndef CORE_INCLUDE_FXCODEC_FX_CODEC_H_ #define CORE_INCLUDE_FXCODEC_FX_CODEC_H_ +#ifdef PDF_ENABLE_XFA #include <map> +#endif #include <vector> #include "core/include/fxcrt/fx_basic.h" #include "fx_codec_def.h" #include "third_party/base/nonstd_unique_ptr.h" +#ifdef PDF_ENABLE_XFA #include "../fxcrt/fx_coordinates.h" // For FX_RECT. +#endif class CFX_DIBSource; class CJPX_Decoder; class CPDF_PrivateData; class CPDF_StreamAcc; +#ifndef PDF_ENABLE_XFA +class ICodec_ScanlineDecoder; +#endif class ICodec_BasicModule; class ICodec_FaxModule; +#ifdef PDF_ENABLE_XFA class ICodec_FlateModule; class ICodec_IccModule; class ICodec_Jbig2Encoder; class ICodec_Jbig2Module; +#endif class ICodec_JpegModule; class ICodec_JpxModule; +#ifndef PDF_ENABLE_XFA +class ICodec_Jbig2Module; +class ICodec_IccModule; +class ICodec_FlateModule; +class ICodec_Jbig2Encoder; +#endif class ICodec_ScanlineDecoder; +#ifdef PDF_ENABLE_XFA class ICodec_BmpModule; class ICodec_GifModule; class ICodec_PngModule; @@ -55,6 +71,7 @@ class CFX_DIBAttribute { std::map<FX_DWORD, void*> m_Exif; }; +#endif class CCodec_ModuleMgr { public: CCodec_ModuleMgr(); @@ -67,12 +84,14 @@ class CCodec_ModuleMgr { ICodec_IccModule* GetIccModule() const { return m_pIccModule.get(); } ICodec_FlateModule* GetFlateModule() const { return m_pFlateModule.get(); } +#ifdef PDF_ENABLE_XFA ICodec_ProgressiveDecoder* CreateProgressiveDecoder(); ICodec_PngModule* GetPngModule() const { return m_pPngModule.get(); } ICodec_GifModule* GetGifModule() const { return m_pGifModule.get(); } ICodec_BmpModule* GetBmpModule() const { return m_pBmpModule.get(); } ICodec_TiffModule* GetTiffModule() const { return m_pTiffModule.get(); } +#endif protected: nonstd::unique_ptr<ICodec_BasicModule> m_pBasicModule; nonstd::unique_ptr<ICodec_FaxModule> m_pFaxModule; @@ -81,11 +100,13 @@ class CCodec_ModuleMgr { nonstd::unique_ptr<ICodec_Jbig2Module> m_pJbig2Module; nonstd::unique_ptr<ICodec_IccModule> m_pIccModule; nonstd::unique_ptr<ICodec_FlateModule> m_pFlateModule; +#ifdef PDF_ENABLE_XFA nonstd::unique_ptr<ICodec_PngModule> m_pPngModule; nonstd::unique_ptr<ICodec_GifModule> m_pGifModule; nonstd::unique_ptr<ICodec_BmpModule> m_pBmpModule; nonstd::unique_ptr<ICodec_TiffModule> m_pTiffModule; +#endif }; class ICodec_BasicModule { public: @@ -229,8 +250,12 @@ class ICodec_JpegModule { virtual int ReadHeader(void* pContext, int* width, int* height, +#ifndef PDF_ENABLE_XFA + int* nComps) = 0; +#else int* nComps, CFX_DIBAttribute* pAttribute) = 0; +#endif virtual int StartScanline(void* pContext, int down_scale) = 0; @@ -260,6 +285,7 @@ class ICodec_JpxModule { virtual void DestroyDecoder(CJPX_Decoder* pDecoder) = 0; }; +#ifdef PDF_ENABLE_XFA class ICodec_PngModule { public: virtual ~ICodec_PngModule() {} @@ -387,6 +413,7 @@ class ICodec_TiffModule { virtual void DestroyDecoder(void* ctx) = 0; }; +#endif class ICodec_Jbig2Module { public: @@ -408,6 +435,7 @@ class ICodec_Jbig2Module { IFX_Pause* pPause) = 0; virtual void DestroyJbig2Context(void* pJbig2Content) = 0; }; +#ifdef PDF_ENABLE_XFA class ICodec_ProgressiveDecoder { public: virtual ~ICodec_ProgressiveDecoder() {} @@ -437,6 +465,7 @@ class ICodec_ProgressiveDecoder { virtual FXCODEC_STATUS ContinueDecode(IFX_Pause* pPause = NULL) = 0; }; +#endif class ICodec_Jbig2Encoder { public: virtual ~ICodec_Jbig2Encoder() {} diff --git a/core/include/fxcodec/fx_codec_def.h b/core/include/fxcodec/fx_codec_def.h index 1cb5909658..6dd4d0d309 100644 --- a/core/include/fxcodec/fx_codec_def.h +++ b/core/include/fxcodec/fx_codec_def.h @@ -7,6 +7,7 @@ #ifndef CORE_INCLUDE_FXCODEC_FX_CODEC_DEF_H_ #define CORE_INCLUDE_FXCODEC_FX_CODEC_DEF_H_ +#ifdef PDF_ENABLE_XFA enum FXCODEC_IMAGE_TYPE { FXCODEC_IMAGE_UNKNOWN = 0, FXCODEC_IMAGE_BMP, @@ -16,6 +17,7 @@ enum FXCODEC_IMAGE_TYPE { FXCODEC_IMAGE_TIF, FXCODEC_IMAGE_MAX }; +#endif enum FXCODEC_STATUS { FXCODEC_STATUS_ERROR = -1, FXCODEC_STATUS_FRAME_READY, @@ -23,7 +25,9 @@ enum FXCODEC_STATUS { FXCODEC_STATUS_DECODE_READY, FXCODEC_STATUS_DECODE_TOBECONTINUE, FXCODEC_STATUS_DECODE_FINISH, +#ifdef PDF_ENABLE_XFA FXCODEC_STATUS_ERR_MEMORY, +#endif FXCODEC_STATUS_ERR_READ, FXCODEC_STATUS_ERR_FLUSH, FXCODEC_STATUS_ERR_FORMAT, @@ -68,12 +72,14 @@ enum FXCODEC_STATUS { #define Icc_PARAMTYPE_NONE 0 #define Icc_PARAMTYPE_BUFFER 1 #define Icc_PARAMTYPE_PARAM 2 +#ifdef PDF_ENABLE_XFA enum FXCODEC_RESUNIT { FXCODEC_RESUNIT_NONE = 0, FXCODEC_RESUNIT_INCH, FXCODEC_RESUNIT_CENTIMETER, FXCODEC_RESUNIT_METER }; +#endif #define EXIFTAG_USHORT_RESUNIT 296 #define EXIFTAG_FLOAT_DPIX 282 #define EXIFTAG_FLOAT_DPIY 283 diff --git a/core/include/fxcrt/fx_basic.h b/core/include/fxcrt/fx_basic.h index 3a83a3de21..710bbcc3c3 100644 --- a/core/include/fxcrt/fx_basic.h +++ b/core/include/fxcrt/fx_basic.h @@ -130,6 +130,7 @@ class CFX_WideTextBuf : public CFX_BinaryBuf { CFX_WideStringC GetWideString() const; }; +#ifdef PDF_ENABLE_XFA class CFX_ArchiveSaver { public: CFX_ArchiveSaver() : m_pStream(NULL) {} @@ -192,6 +193,7 @@ class CFX_ArchiveLoader { FX_DWORD m_LoadingSize; }; +#endif class IFX_BufferArchive { public: @@ -436,8 +438,10 @@ typedef CFX_ArrayTemplate<FX_WORD> CFX_WordArray; typedef CFX_ArrayTemplate<FX_DWORD> CFX_DWordArray; typedef CFX_ArrayTemplate<void*> CFX_PtrArray; typedef CFX_ArrayTemplate<FX_FILESIZE> CFX_FileSizeArray; +#ifdef PDF_ENABLE_XFA typedef CFX_ArrayTemplate<FX_FLOAT> CFX_FloatArray; typedef CFX_ArrayTemplate<int32_t> CFX_Int32Array; +#endif template <class ObjectClass> class CFX_ObjectArray : public CFX_BasicArray { @@ -698,6 +702,7 @@ class CFX_MapPtrToPtr { CAssoc* GetAssocAt(void* key, FX_DWORD& hash) const; }; +#ifdef PDF_ENABLE_XFA template <class KeyType, class ValueType> class CFX_MapPtrTemplate : public CFX_MapPtrToPtr { public: @@ -723,7 +728,9 @@ class CFX_MapPtrTemplate : public CFX_MapPtrToPtr { FX_BOOL RemoveKey(KeyType key) { return CFX_MapPtrToPtr::RemoveKey((void*)(uintptr_t)key); } +#endif +#ifdef PDF_ENABLE_XFA void GetNextAssoc(FX_POSITION& rNextPosition, KeyType& rKey, ValueType& rValue) const { @@ -734,6 +741,7 @@ class CFX_MapPtrTemplate : public CFX_MapPtrToPtr { rValue = (ValueType)(uintptr_t)pValue; } }; +#endif class CFX_CMapByteStringToPtr { public: CFX_CMapByteStringToPtr(); @@ -1187,6 +1195,7 @@ typedef enum { } FX_ProgressiveStatus; #define ProgressiveStatus FX_ProgressiveStatus #define FX_NAMESPACE_DECLARE(namespace, type) namespace ::type +#ifdef PDF_ENABLE_XFA class IFX_Unknown { public: virtual ~IFX_Unknown() {} @@ -1194,6 +1203,7 @@ class IFX_Unknown { virtual FX_DWORD AddRef() = 0; }; #define FX_IsOdd(a) ((a)&1) +#endif class CFX_Vector_3by1 { public: diff --git a/core/include/fxcrt/fx_ext.h b/core/include/fxcrt/fx_ext.h index 8530263a79..908d6c3fe5 100644 --- a/core/include/fxcrt/fx_ext.h +++ b/core/include/fxcrt/fx_ext.h @@ -10,7 +10,9 @@ #include <cctype> #include <cwctype> +#ifdef PDF_ENABLE_XFA #include "fx_string.h" +#endif #include "fx_system.h" FX_FLOAT FXSYS_tan(FX_FLOAT a); @@ -76,6 +78,7 @@ void FX_Random_GenerateMT(FX_DWORD* pBuffer, int32_t iCount); void FX_Random_GenerateCrypto(FX_DWORD* pBuffer, int32_t iCount); +#ifdef PDF_ENABLE_XFA typedef struct FX_GUID { FX_DWORD data1; FX_WORD data2; @@ -90,6 +93,7 @@ void FX_GUID_ToString(FX_LPCGUID pGUID, CFX_ByteString& bsStr, FX_BOOL bSeparator = TRUE); +#endif template <class baseType> class CFX_SSortTemplate { public: diff --git a/core/include/fxcrt/fx_stream.h b/core/include/fxcrt/fx_stream.h index 544eacdb5b..300bfb1941 100644 --- a/core/include/fxcrt/fx_stream.h +++ b/core/include/fxcrt/fx_stream.h @@ -127,6 +127,7 @@ class IFX_FileStream : public IFX_FileRead, public IFX_FileWrite { IFX_FileStream* FX_CreateFileStream(const FX_CHAR* filename, FX_DWORD dwModes); IFX_FileStream* FX_CreateFileStream(const FX_WCHAR* filename, FX_DWORD dwModes); +#ifdef PDF_ENABLE_XFA class IFX_FileAccess { public: virtual ~IFX_FileAccess() {} @@ -137,6 +138,7 @@ class IFX_FileAccess { }; IFX_FileAccess* FX_CreateDefaultFileAccess(const CFX_WideStringC& wsPath); +#endif class IFX_MemoryStream : public IFX_FileStream { public: virtual FX_BOOL IsConsecutive() const = 0; diff --git a/core/include/fxcrt/fx_ucd.h b/core/include/fxcrt/fx_ucd.h index d4a43bd096..852a893843 100644 --- a/core/include/fxcrt/fx_ucd.h +++ b/core/include/fxcrt/fx_ucd.h @@ -7,8 +7,13 @@ #ifndef CORE_INCLUDE_FXCRT_FX_UCD_H_ #define CORE_INCLUDE_FXCRT_FX_UCD_H_ +#ifndef PDF_ENABLE_XFA +#include "fx_system.h" +#else #include "fx_basic.h" +#endif +#ifdef PDF_ENABLE_XFA enum FX_CHARBREAKPROP { FX_CBP_OP = 0, FX_CBP_CL = 1, @@ -50,6 +55,7 @@ enum FX_CHARBREAKPROP { FX_CBP_TB = 37, FX_CBP_NONE = 36, }; +#endif #define FX_BIDICLASSBITS 6 #define FX_BIDICLASSBITSMASK (31 << FX_BIDICLASSBITS) enum FX_BIDICLASS { @@ -84,6 +90,7 @@ extern const size_t kFXTextLayoutVerticalMirrorSize; extern const FX_WCHAR kFXTextLayoutBidiMirror[]; extern const size_t kFXTextLayoutBidiMirrorSize; +#ifdef PDF_ENABLE_XFA #define FX_CHARTYPEBITS 11 #define FX_CHARTYPEBITSMASK (15 << FX_CHARTYPEBITS) enum FX_CHARTYPE { @@ -102,9 +109,13 @@ enum FX_CHARTYPE { FX_CHARTYPE_Arabic = (12 << FX_CHARTYPEBITS), }; +#endif FX_DWORD FX_GetUnicodeProperties(FX_WCHAR wch); +#ifdef PDF_ENABLE_XFA FX_BOOL FX_IsCtrlCode(FX_WCHAR ch); +#endif FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical); +#ifdef PDF_ENABLE_XFA FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_DWORD dwProps, FX_BOOL bRTL, @@ -183,5 +194,6 @@ class CFX_RTFChar : public CFX_Char { IFX_Unknown* m_pUserData; }; typedef CFX_ArrayTemplate<CFX_RTFChar> CFX_RTFCharArray; +#endif #endif // CORE_INCLUDE_FXCRT_FX_UCD_H_ diff --git a/core/include/fxge/fx_font.h b/core/include/fxge/fx_font.h index d2b1d5459a..5b31126b3e 100644 --- a/core/include/fxge/fx_font.h +++ b/core/include/fxge/fx_font.h @@ -34,7 +34,9 @@ class IFX_SystemFontInfo; #define FXFONT_BOLD 0x40000 #define FXFONT_USEEXTERNATTR 0x80000 #define FXFONT_CIDFONT 0x100000 +#ifdef PDF_ENABLE_XFA #define FXFONT_EXACTMATCH 0x80000000 +#endif #define FXFONT_ANSI_CHARSET 0 #define FXFONT_DEFAULT_CHARSET 1 #define FXFONT_SYMBOL_CHARSET 2 @@ -69,6 +71,7 @@ class CFX_Font { int CharsetCP, FX_BOOL bVertical = FALSE); FX_BOOL LoadEmbedded(const uint8_t* data, FX_DWORD size); +#ifdef PDF_ENABLE_XFA FX_BOOL LoadFile(IFX_FileRead* pFile, int nFaceIndex = 0, @@ -76,10 +79,15 @@ class CFX_Font { FX_BOOL LoadClone(const CFX_Font* pFont); +#endif FXFT_Face GetFace() const { return m_Face; } +#ifndef PDF_ENABLE_XFA + const CFX_SubstFont* GetSubstFont() const { return m_pSubstFont; } +#else CFX_SubstFont* GetSubstFont() const { return m_pSubstFont; } void SetFace(FXFT_Face face) { m_Face = face; } void SetSubstFont(CFX_SubstFont* subst) { m_pSubstFont = subst; } +#endif CFX_PathData* LoadGlyphPath(FX_DWORD glyph_index, int dest_width = 0); int GetGlyphWidth(FX_DWORD glyph_index); int GetAscent() const; @@ -125,15 +133,18 @@ class CFX_Font { FX_BOOL m_bDwLoaded; FX_BOOL m_bEmbedded; FX_BOOL m_bVertical; +#ifdef PDF_ENABLE_XFA protected: FX_BOOL m_bLogic; void* m_pOwnedStream; +#endif }; #define ENCODING_INTERNAL 0 #define ENCODING_UNICODE 1 +#ifdef PDF_ENABLE_XFA #define FXFM_ENC_TAG(a, b, c, d) \ (((FX_DWORD)(a) << 24) | ((FX_DWORD)(b) << 16) | ((FX_DWORD)(c) << 8) | \ (FX_DWORD)(d)) @@ -152,6 +163,7 @@ class CFX_Font { #define FXFM_ENCODING_OLD_LATIN_2 FXFM_ENC_TAG('l', 'a', 't', '2') #define FXFM_ENCODING_APPLE_ROMAN FXFM_ENC_TAG('a', 'r', 'm', 'n') +#endif class CFX_UnicodeEncoding { public: explicit CFX_UnicodeEncoding(CFX_Font* pFont); @@ -164,6 +176,7 @@ class CFX_UnicodeEncoding { CFX_Font* m_pFont; }; +#ifdef PDF_ENABLE_XFA class CFX_UnicodeEncodingEx : public CFX_UnicodeEncoding { public: CFX_UnicodeEncodingEx(CFX_Font* pFont, FX_DWORD EncodingID); @@ -182,6 +195,7 @@ CFX_UnicodeEncodingEx* FX_CreateFontEncodingEx( CFX_Font* pFont, FX_DWORD nEncodingID = FXFM_ENCODING_NONE); +#endif #define FXFONT_SUBST_MM 0x01 #define FXFONT_SUBST_GLYPHPATH 0x04 #define FXFONT_SUBST_CLEARTYPE 0x08 @@ -307,11 +321,13 @@ class CFX_FontMapper { int italic_angle, int CharsetCP, CFX_SubstFont* pSubstFont); +#ifdef PDF_ENABLE_XFA FXFT_Face FindSubstFontByUnicode(FX_DWORD dwUnicode, FX_DWORD flags, int weight, int italic_angle); FX_BOOL IsBuiltinFace(const FXFT_Face face) const; +#endif private: static const size_t MM_FACE_COUNT = 2; @@ -348,12 +364,14 @@ class IFX_SystemFontInfo { int pitch_family, const FX_CHAR* face, int& iExact) = 0; +#ifdef PDF_ENABLE_XFA virtual void* MapFontByUnicode(FX_DWORD dwUnicode, int weight, FX_BOOL bItalic, int pitch_family) { return NULL; } +#endif virtual void* GetFont(const FX_CHAR* face) = 0; virtual FX_DWORD GetFontData(void* hFont, FX_DWORD table, @@ -384,10 +402,12 @@ class CFX_FolderFontInfo : public IFX_SystemFontInfo { int pitch_family, const FX_CHAR* face, int& bExact) override; +#ifdef PDF_ENABLE_XFA void* MapFontByUnicode(FX_DWORD dwUnicode, int weight, FX_BOOL bItalic, int pitch_family) override; +#endif void* GetFont(const FX_CHAR* face) override; FX_DWORD GetFontData(void* hFont, FX_DWORD table, diff --git a/core/src/fpdfdoc/doc_form.cpp b/core/src/fpdfdoc/doc_form.cpp index 241609efbc..ffd6bf7955 100644 --- a/core/src/fpdfdoc/doc_form.cpp +++ b/core/src/fpdfdoc/doc_form.cpp @@ -371,6 +371,7 @@ static FX_BOOL RetrieveSpecificFont(uint8_t charSet, } return RetrieveSpecificFont(lf); } +#ifdef PDF_ENABLE_XFA static FX_BOOL RetrieveStockFont(int iFontObject, uint8_t charSet, LOGFONTA& lf) { @@ -385,6 +386,7 @@ static FX_BOOL RetrieveStockFont(int iFontObject, return FALSE; } #endif +#endif CPDF_Font* CPDF_InterForm::AddStandardFont(CPDF_Document* pDocument, CFX_ByteString csFontName) { diff --git a/core/src/fpdfdoc/doc_formfield.cpp b/core/src/fpdfdoc/doc_formfield.cpp index a4de7bbee3..6f90d7e396 100644 --- a/core/src/fpdfdoc/doc_formfield.cpp +++ b/core/src/fpdfdoc/doc_formfield.cpp @@ -739,6 +739,7 @@ int CPDF_FormField::FindOptionValue(const CFX_WideString& csOptValue, } return -1; } +#ifdef PDF_ENABLE_XFA int CPDF_FormField::InsertOption(CFX_WideString csOptLabel, int index, FX_BOOL bNotify) { @@ -816,6 +817,7 @@ FX_BOOL CPDF_FormField::ClearOptions(FX_BOOL bNotify) { m_pForm->m_bUpdated = TRUE; return TRUE; } +#endif FX_BOOL CPDF_FormField::CheckControl(int iControlIndex, FX_BOOL bChecked, FX_BOOL bNotify) { diff --git a/core/src/fpdftext/fpdf_text_int.cpp b/core/src/fpdftext/fpdf_text_int.cpp index 3342f38da9..c69ffc8ee8 100644 --- a/core/src/fpdftext/fpdf_text_int.cpp +++ b/core/src/fpdftext/fpdf_text_int.cpp @@ -1525,6 +1525,10 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) { int nItems = pTextObj->CountItems(); FX_FLOAT baseSpace = _CalculateBaseSpace(pTextObj, matrix); +#ifndef PDF_ENABLE_XFA + const FX_BOOL bR2L = IsRightToLeft(pTextObj, pFont, nItems); + const FX_BOOL bIsBidiAndMirrorInverse = +#else FX_BOOL bIsBidiAndMirrosInverse = FALSE; CFX_BidiChar* BidiChar = new CFX_BidiChar; int32_t nR2L = 0; @@ -1566,6 +1570,7 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) { bR2L = TRUE; } bIsBidiAndMirrosInverse = +#endif bR2L && (matrix.a * matrix.d - matrix.b * matrix.c) < 0; int32_t iBufStartAppend = m_TempTextBuf.GetLength(); int32_t iCharListStartAppend = m_TempCharList.GetSize(); @@ -1724,6 +1729,45 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) { } } } +#ifndef PDF_ENABLE_XFA + if (bIsBidiAndMirrorInverse) { + SwapTempTextBuf(iCharListStartAppend, iBufStartAppend); + } +} +void CPDF_TextPage::SwapTempTextBuf(int32_t iCharListStartAppend, + int32_t iBufStartAppend) { + int32_t i, j; + i = iCharListStartAppend; + j = m_TempCharList.GetSize() - 1; + for (; i < j; i++, j--) { + std::swap(m_TempCharList[i], m_TempCharList[j]); + std::swap(m_TempCharList[i].m_Index, m_TempCharList[j].m_Index); + } + FX_WCHAR* pTempBuffer = m_TempTextBuf.GetBuffer(); + i = iBufStartAppend; + j = m_TempTextBuf.GetLength() - 1; + for (; i < j; i++, j--) { + std::swap(pTempBuffer[i], pTempBuffer[j]); + } +} +FX_BOOL CPDF_TextPage::IsRightToLeft(const CPDF_TextObject* pTextObj, + const CPDF_Font* pFont, + int nItems) const { + nonstd::unique_ptr<CFX_BidiChar> pBidiChar(new CFX_BidiChar); + int32_t nR2L = 0; + int32_t nL2R = 0; + int32_t start = 0, count = 0; + CPDF_TextObjectItem item; + for (int32_t i = 0; i < nItems; i++) { + pTextObj->GetItemInfo(i, &item); + if (item.m_CharCode == (FX_DWORD)-1) { + continue; + } + CFX_WideString wstrItem = pFont->UnicodeFromCharCode(item.m_CharCode); + FX_WCHAR wChar = wstrItem.GetAt(0); + if ((wstrItem.IsEmpty() || wChar == 0) && item.m_CharCode) { + wChar = (FX_WCHAR)item.m_CharCode; +#else if (bIsBidiAndMirrosInverse) { int32_t i, j; i = iCharListStartAppend; @@ -1731,14 +1775,39 @@ void CPDF_TextPage::ProcessTextObject(PDFTEXT_Obj Obj) { for (; i < j; i++, j--) { std::swap(m_TempCharList[i], m_TempCharList[j]); std::swap(m_TempCharList[i].m_Index, m_TempCharList[j].m_Index); +#endif + } +#ifndef PDF_ENABLE_XFA + if (!wChar) { + continue; + } + if (pBidiChar->AppendChar(wChar)) { + CFX_BidiChar::Direction ret = pBidiChar->GetBidiInfo(&start, &count); + if (ret == CFX_BidiChar::RIGHT) { + nR2L++; + } else if (ret == CFX_BidiChar::LEFT) { + nL2R++; + } } + } + if (pBidiChar->EndChar()) { + CFX_BidiChar::Direction ret = pBidiChar->GetBidiInfo(&start, &count); + if (ret == CFX_BidiChar::RIGHT) { + nR2L++; + } else if (ret == CFX_BidiChar::LEFT) { + nL2R++; +#else FX_WCHAR* pTempBuffer = m_TempTextBuf.GetBuffer(); i = iBufStartAppend; j = m_TempTextBuf.GetLength() - 1; for (; i < j; i++, j--) { std::swap(pTempBuffer[i], pTempBuffer[j]); +#endif } } +#ifndef PDF_ENABLE_XFA + return (nR2L > 0 && nR2L >= nL2R); +#endif } int32_t CPDF_TextPage::GetTextObjectWritingMode( const CPDF_TextObject* pTextObj) { diff --git a/core/src/fpdftext/text_int.h b/core/src/fpdftext/text_int.h index da4bf70ad1..d8e79b9610 100644 --- a/core/src/fpdftext/text_int.h +++ b/core/src/fpdftext/text_int.h @@ -125,6 +125,12 @@ class CPDF_TextPage : public IPDF_TextPage { void AddCharInfoByRLDirection(CFX_WideString& str, int i); int32_t GetTextObjectWritingMode(const CPDF_TextObject* pTextObj); int32_t FindTextlineFlowDirection(); +#ifndef PDF_ENABLE_XFA + void SwapTempTextBuf(int32_t iCharListStartAppend, int32_t iBufStartAppend); + FX_BOOL IsRightToLeft(const CPDF_TextObject* pTextObj, + const CPDF_Font* pFont, + int nItems) const; +#endif CPDFText_ParseOptions m_ParseOptions; CFX_WordArray m_CharIndex; diff --git a/core/src/fxcodec/codec/codec_int.h b/core/src/fxcodec/codec/codec_int.h index 3d2acaf8c0..5abe2e4a6a 100644 --- a/core/src/fxcodec/codec/codec_int.h +++ b/core/src/fxcodec/codec/codec_int.h @@ -187,15 +187,20 @@ class CCodec_JpegModule : public ICodec_JpegModule { void Input(void* pContext, const uint8_t* src_buf, FX_DWORD src_size) override; +#ifndef PDF_ENABLE_XFA + int ReadHeader(void* pContext, int* width, int* height, int* nComps) override; +#else int ReadHeader(void* pContext, int* width, int* height, int* nComps, CFX_DIBAttribute* pAttribute) override; +#endif int StartScanline(void* pContext, int down_scale) override; FX_BOOL ReadScanline(void* pContext, uint8_t* dest_buf) override; FX_DWORD GetAvailInput(void* pContext, uint8_t** avail_buf_ptr) override; }; +#ifdef PDF_ENABLE_XFA #define PNG_ERROR_SIZE 256 class CCodec_PngModule : public ICodec_PngModule { public: @@ -258,6 +263,7 @@ class CCodec_BmpModule : public ICodec_BmpModule { protected: FX_CHAR m_szLastError[256]; }; +#endif class CCodec_IccModule : public ICodec_IccModule { public: ~CCodec_IccModule() override; @@ -336,6 +342,7 @@ class CCodec_JpxModule : public ICodec_JpxModule { void DestroyDecoder(CJPX_Decoder* pDecoder) override; }; +#ifdef PDF_ENABLE_XFA class CCodec_TiffModule : public ICodec_TiffModule { public: // ICodec_TiffModule @@ -355,6 +362,7 @@ class CCodec_TiffModule : public ICodec_TiffModule { ~CCodec_TiffModule() override {} }; +#endif class CCodec_Jbig2Context { public: CCodec_Jbig2Context(); diff --git a/core/src/fxcodec/codec/fx_codec.cpp b/core/src/fxcodec/codec/fx_codec.cpp index 1efccf9af5..fb98fee3c5 100644 --- a/core/src/fxcodec/codec/fx_codec.cpp +++ b/core/src/fxcodec/codec/fx_codec.cpp @@ -21,11 +21,17 @@ CCodec_ModuleMgr::CCodec_ModuleMgr() m_pJpxModule(new CCodec_JpxModule), m_pJbig2Module(new CCodec_Jbig2Module), m_pIccModule(new CCodec_IccModule), +#ifndef PDF_ENABLE_XFA + m_pFlateModule(new CCodec_FlateModule) { +} +#else m_pFlateModule(new CCodec_FlateModule), m_pPngModule(new CCodec_PngModule), m_pGifModule(new CCodec_GifModule), m_pBmpModule(new CCodec_BmpModule), - m_pTiffModule(new CCodec_TiffModule) {} + m_pTiffModule(new CCodec_TiffModule) { +} +#endif CCodec_ScanlineDecoder::ImageDataCache::ImageDataCache(int width, int height, @@ -261,6 +267,7 @@ FX_BOOL CCodec_BasicModule::A85Encode(const uint8_t* src_buf, FX_DWORD& dest_size) { return FALSE; } +#ifdef PDF_ENABLE_XFA CFX_DIBAttribute::CFX_DIBAttribute() : m_nXDPI(-1), m_nYDPI(-1), @@ -278,6 +285,7 @@ CFX_DIBAttribute::~CFX_DIBAttribute() { FX_Free(pair.second); } +#endif class CCodec_RLScanlineDecoder : public CCodec_ScanlineDecoder { public: CCodec_RLScanlineDecoder(); diff --git a/core/src/fxcodec/codec/fx_codec_jpeg.cpp b/core/src/fxcodec/codec/fx_codec_jpeg.cpp index b59deb5a0d..b5eb4b2692 100644 --- a/core/src/fxcodec/codec/fx_codec_jpeg.cpp +++ b/core/src/fxcodec/codec/fx_codec_jpeg.cpp @@ -230,6 +230,7 @@ static void _JpegEncode(const CFX_DIBSource* pSource, FX_Free(line_buf); dest_size = dest_buf_length - (FX_STRSIZE)dest.free_in_buffer; } +#ifdef PDF_ENABLE_XFA static void _JpegLoadAttribute(struct jpeg_decompress_struct* pInfo, CFX_DIBAttribute* pAttribute) { if (pInfo == NULL || pAttribute == NULL) { @@ -241,6 +242,7 @@ static void _JpegLoadAttribute(struct jpeg_decompress_struct* pInfo, pAttribute->m_wDPIUnit = pInfo->density_unit; } } +#endif static FX_BOOL _JpegLoadInfo(const uint8_t* src_buf, FX_DWORD src_size, int& width, @@ -630,8 +632,12 @@ void CCodec_JpegModule::Input(void* pContext, int CCodec_JpegModule::ReadHeader(void* pContext, int* width, int* height, +#ifndef PDF_ENABLE_XFA + int* nComps) { +#else int* nComps, CFX_DIBAttribute* pAttribute) { +#endif FXJPEG_Context* p = (FXJPEG_Context*)pContext; if (setjmp(p->m_JumpMark) == -1) { return 1; @@ -646,7 +652,9 @@ int CCodec_JpegModule::ReadHeader(void* pContext, *width = p->m_Info.image_width; *height = p->m_Info.image_height; *nComps = p->m_Info.num_components; +#ifdef PDF_ENABLE_XFA _JpegLoadAttribute(&p->m_Info, pAttribute); +#endif return 0; } int CCodec_JpegModule::StartScanline(void* pContext, int down_scale) { diff --git a/core/src/fxcrt/extension.h b/core/src/fxcrt/extension.h index 718c8f0423..42cebdf605 100644 --- a/core/src/fxcrt/extension.h +++ b/core/src/fxcrt/extension.h @@ -31,6 +31,7 @@ class IFXCRT_FileAccess { }; IFXCRT_FileAccess* FXCRT_FileAccess_Create(); +#ifdef PDF_ENABLE_XFA class CFX_CRTFileAccess : public IFX_FileAccess { public: CFX_CRTFileAccess() : m_RefCount(0) {} @@ -63,6 +64,7 @@ class CFX_CRTFileAccess : public IFX_FileAccess { FX_DWORD m_RefCount; }; +#endif class CFX_CRTFileStream final : public IFX_FileStream { public: CFX_CRTFileStream(IFXCRT_FileAccess* pFA) : m_pFile(pFA), m_dwCount(1) {} diff --git a/core/src/fxcrt/fx_basic_buffer.cpp b/core/src/fxcrt/fx_basic_buffer.cpp index 1178331283..77af01202b 100644 --- a/core/src/fxcrt/fx_basic_buffer.cpp +++ b/core/src/fxcrt/fx_basic_buffer.cpp @@ -207,6 +207,7 @@ CFX_WideStringC CFX_WideTextBuf::GetWideString() const { return CFX_WideStringC((const FX_WCHAR*)m_pBuffer, m_DataSize / sizeof(FX_WCHAR)); } +#ifdef PDF_ENABLE_XFA CFX_ArchiveSaver& CFX_ArchiveSaver::operator<<(uint8_t i) { if (m_pStream) { m_pStream->WriteBlock(&i, 1); @@ -331,6 +332,7 @@ FX_BOOL CFX_ArchiveLoader::Read(void* pBuf, FX_DWORD dwSize) { m_LoadingPos += dwSize; return TRUE; } +#endif void CFX_BitStream::Init(const uint8_t* pData, FX_DWORD dwSize) { m_pData = pData; m_BitSize = dwSize * 8; diff --git a/core/src/fxcrt/fx_extension.cpp b/core/src/fxcrt/fx_extension.cpp index 3761192a8d..c796a57102 100644 --- a/core/src/fxcrt/fx_extension.cpp +++ b/core/src/fxcrt/fx_extension.cpp @@ -14,6 +14,7 @@ #include <ctime> #endif +#ifdef PDF_ENABLE_XFA IFX_FileAccess* FX_CreateDefaultFileAccess(const CFX_WideStringC& wsPath) { if (wsPath.GetLength() == 0) return NULL; @@ -26,6 +27,7 @@ IFX_FileAccess* FX_CreateDefaultFileAccess(const CFX_WideStringC& wsPath) { pFA->Init(wsPath); return pFA; } +#endif IFX_FileStream* FX_CreateFileStream(const FX_CHAR* filename, FX_DWORD dwModes) { IFXCRT_FileAccess* pFA = FXCRT_FileAccess_Create(); if (!pFA) { @@ -303,6 +305,7 @@ void FX_Random_GenerateCrypto(FX_DWORD* pBuffer, int32_t iCount) { FX_Random_GenerateBase(pBuffer, iCount); #endif } +#ifdef PDF_ENABLE_XFA void FX_GUID_CreateV4(FX_LPGUID pGUID) { #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ @@ -336,3 +339,4 @@ void FX_GUID_ToString(FX_LPCGUID pGUID, } bsStr.ReleaseBuffer(bSeparator ? 36 : 32); } +#endif diff --git a/core/src/fxcrt/fx_unicode.cpp b/core/src/fxcrt/fx_unicode.cpp index 2e86aec64c..fe97a14f46 100644 --- a/core/src/fxcrt/fx_unicode.cpp +++ b/core/src/fxcrt/fx_unicode.cpp @@ -13,11 +13,13 @@ FX_DWORD FX_GetUnicodeProperties(FX_WCHAR wch) { return 0; } +#ifdef PDF_ENABLE_XFA FX_BOOL FX_IsCtrlCode(FX_WCHAR ch) { FX_DWORD dwRet = (FX_GetUnicodeProperties(ch) & FX_CHARTYPEBITSMASK); return dwRet == FX_CHARTYPE_Tab || dwRet == FX_CHARTYPE_Control; } +#endif FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical) { FX_DWORD dwProps = FX_GetUnicodeProperties(wch); FX_DWORD dwTemp = (dwProps & 0xFF800000); @@ -38,6 +40,7 @@ FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_BOOL bRTL, FX_BOOL bVertical) { } return wch; } +#ifdef PDF_ENABLE_XFA FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, FX_DWORD dwProps, @@ -61,3 +64,4 @@ FX_WCHAR FX_GetMirrorChar(FX_WCHAR wch, } return wch; } +#endif diff --git a/core/src/fxge/dib/fx_dib_convert.cpp b/core/src/fxge/dib/fx_dib_convert.cpp index 6a01c1f10d..80483f07d3 100644 --- a/core/src/fxge/dib/fx_dib_convert.cpp +++ b/core/src/fxge/dib/fx_dib_convert.cpp @@ -617,10 +617,12 @@ FX_BOOL _ConvertBuffer_Rgb2PltRgb8(uint8_t* dest_buf, int src_top, FX_DWORD* dst_plt, void* pIccTransform) { +#ifdef PDF_ENABLE_XFA ICodec_IccModule* pIccModule = NULL; if (pIccTransform) { pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); } +#endif FX_BOOL ret = _ConvertBuffer_Rgb2PltRgb8_NoTransform( dest_buf, dest_pitch, width, height, pSrcBitmap, src_left, src_top, dst_plt); diff --git a/core/src/fxge/ge/fx_ge_font.cpp b/core/src/fxge/ge/fx_ge_font.cpp index e02d46ffad..ffd7b77fb4 100644 --- a/core/src/fxge/ge/fx_ge_font.cpp +++ b/core/src/fxge/ge/fx_ge_font.cpp @@ -10,12 +10,15 @@ #define EM_ADJUST(em, a) (em == 0 ? (a) : (a)*1000 / em) +#ifdef PDF_ENABLE_XFA extern void _FPDFAPI_GetInternalFontData(int id1, const uint8_t*& data, FX_DWORD& size); +#endif namespace { +#ifdef PDF_ENABLE_XFA const FX_DWORD g_EncodingID[] = { FXFM_ENCODING_MS_SYMBOL, FXFM_ENCODING_UNICODE, @@ -39,6 +42,7 @@ CFX_UnicodeEncodingEx* _FXFM_CreateFontEncoding(CFX_Font* pFont, return new CFX_UnicodeEncodingEx(pFont, nEncodingID); } +#endif FXFT_Face FT_LoadFont(const uint8_t* pData, int size) { return CFX_GEModule::Get()->GetFontMgr()->GetFixedFace(pData, size, 0); } @@ -53,13 +57,16 @@ CFX_Font::CFX_Font() { m_pFontData = NULL; m_pFontDataAllocation = NULL; m_dwSize = 0; +#ifdef PDF_ENABLE_XFA m_pOwnedStream = NULL; +#endif m_pGsubData = NULL; m_pPlatformFont = NULL; m_pPlatformFontCollection = NULL; m_pDwFont = NULL; m_hHandle = NULL; m_bDwLoaded = FALSE; +#ifdef PDF_ENABLE_XFA m_bLogic = FALSE; } FX_BOOL CFX_Font::LoadClone(const CFX_Font* pFont) { @@ -93,23 +100,36 @@ FX_BOOL CFX_Font::LoadClone(const CFX_Font* pFont) { m_bDwLoaded = pFont->m_bDwLoaded; m_pOwnedStream = pFont->m_pOwnedStream; return TRUE; +#endif } CFX_Font::~CFX_Font() { delete m_pSubstFont; m_pSubstFont = NULL; +#ifndef PDF_ENABLE_XFA + FX_Free(m_pFontDataAllocation); + m_pFontDataAllocation = NULL; +#else if (m_bLogic) { m_OtfFontData.DetachBuffer(); return; } +#endif if (m_Face) { +#ifndef PDF_ENABLE_XFA + if (FXFT_Get_Face_External_Stream(m_Face)) { + FXFT_Clear_Face_External_Stream(m_Face); + } +#endif if (m_bEmbedded) { DeleteFace(); } else { CFX_GEModule::Get()->GetFontMgr()->ReleaseFace(m_Face); } } +#ifdef PDF_ENABLE_XFA FX_Free(m_pOwnedStream); m_pOwnedStream = NULL; +#endif FX_Free(m_pGsubData); m_pGsubData = NULL; #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ @@ -144,6 +164,7 @@ void CFX_Font::LoadSubst(const CFX_ByteString& face_name, m_dwSize = FXFT_Get_Face_Stream_Size(m_Face); } } +#ifdef PDF_ENABLE_XFA extern "C" { unsigned long _FTStreamRead(FXFT_Stream stream, unsigned long offset, @@ -205,6 +226,7 @@ FX_BOOL CFX_Font::LoadFile(IFX_FileRead* pFile, FXFT_Set_Pixel_Sizes(m_Face, 0, 64); return TRUE; } +#endif int CFX_Font::GetGlyphWidth(FX_DWORD glyph_index) { if (!m_Face) { @@ -460,6 +482,7 @@ FX_DWORD CFX_UnicodeEncoding::GlyphFromCharCode(FX_DWORD charcode) { } return charcode; } +#ifdef PDF_ENABLE_XFA CFX_UnicodeEncodingEx::CFX_UnicodeEncodingEx(CFX_Font* pFont, FX_DWORD EncodingID) @@ -532,3 +555,4 @@ CFX_UnicodeEncodingEx* FX_CreateFontEncodingEx(CFX_Font* pFont, } return NULL; } +#endif diff --git a/core/src/fxge/ge/fx_ge_fontmap.cpp b/core/src/fxge/ge/fx_ge_fontmap.cpp index c41f448e89..6b0d7bf7e8 100644 --- a/core/src/fxge/ge/fx_ge_fontmap.cpp +++ b/core/src/fxge/ge/fx_ge_fontmap.cpp @@ -1083,9 +1083,11 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, pSubstFont->m_SubstFlags |= FXFONT_SUBST_EXACT; } if (hFont == NULL) { +#ifdef PDF_ENABLE_XFA if (flags & FXFONT_EXACTMATCH) { return NULL; } +#endif if (bCJK) { if (italic_angle != 0) { bItalic = TRUE; @@ -1211,6 +1213,7 @@ FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name, m_pFontInfo->DeleteFont(hFont); return face; } +#ifdef PDF_ENABLE_XFA FXFT_Face CFX_FontMapper::FindSubstFontByUnicode(FX_DWORD dwUnicode, FX_DWORD flags, int weight, @@ -1293,6 +1296,7 @@ FX_BOOL CFX_FontMapper::IsBuiltinFace(const FXFT_Face face) const { } return FALSE; } +#endif extern "C" { unsigned long _FTStreamRead(FXFT_Stream stream, unsigned long offset, @@ -1514,12 +1518,14 @@ void* CFX_FolderFontInfo::MapFont(int weight, int& iExact) { return NULL; } +#ifdef PDF_ENABLE_XFA void* CFX_FolderFontInfo::MapFontByUnicode(FX_DWORD dwUnicode, int weight, FX_BOOL bItalic, int pitch_family) { return NULL; } +#endif void* CFX_FolderFontInfo::GetFont(const FX_CHAR* face) { auto it = m_FontList.find(face); return it != m_FontList.end() ? it->second : nullptr; |