#ifndef FPDFSDK_CPDFSDK_HELPERS_H_
#define FPDFSDK_CPDFSDK_HELPERS_H_
#include <vector>
#include "build/build_config.h"
#include "core/fpdfapi/page/cpdf_page.h"
#include "core/fpdfapi/parser/cpdf_parser.h"
#include "core/fxcrt/compiler_specific.h"
#include "core/fxcrt/numerics/safe_conversions.h"
#include "core/fxcrt/retain_ptr.h"
#include "core/fxcrt/span.h"
#include "core/fxge/cfx_path.h"
#include "core/fxge/dib/fx_dib.h"
#include "public/fpdf_doc.h"
#include "public/fpdf_ext.h"
#include "public/fpdfview.h"
#ifdef PDF_ENABLE_XFA
#include "core/fxcrt/fx_stream.h"
#endif
class CFX_DIBitmap;
class CPDF_Annot;
class CPDF_AnnotContext;
class CPDF_ClipPath;
class CPDF_ContentMarkItem;
class CPDF_Object;
class CPDF_Font;
class CPDF_LinkExtract;
class CPDF_PageObject;
class CPDF_RenderOptions;
class CPDF_Stream;
class CPDF_StructElement;
class CPDF_StructTree;
class CPDF_TextPage;
class CPDF_TextPageFind;
class CPDFSDK_FormFillEnvironment;
class CPDFSDK_InteractiveForm;
struct CPDF_JavaScript;
struct XObjectContext;
#if defined(PDF_USE_SKIA)
class SkCanvas;
#endif
IPDF_Page* IPDFPageFromFPDFPage(FPDF_PAGE page);
FPDF_PAGE FPDFPageFromIPDFPage(IPDF_Page* page);
CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page);
FPDF_DOCUMENT FPDFDocumentFromCPDFDocument(CPDF_Document* doc);
CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc);
inline FPDF_ACTION FPDFActionFromCPDFDictionary(const CPDF_Dictionary* action) { … }
inline CPDF_Dictionary* CPDFDictionaryFromFPDFAction(FPDF_ACTION action) { … }
inline FPDF_ANNOTATION FPDFAnnotationFromCPDFAnnotContext(
CPDF_AnnotContext* annot) { … }
inline CPDF_AnnotContext* CPDFAnnotContextFromFPDFAnnotation(
FPDF_ANNOTATION annot) { … }
inline FPDF_ATTACHMENT FPDFAttachmentFromCPDFObject(CPDF_Object* attachment) { … }
inline CPDF_Object* CPDFObjectFromFPDFAttachment(FPDF_ATTACHMENT attachment) { … }
inline FPDF_BITMAP FPDFBitmapFromCFXDIBitmap(CFX_DIBitmap* bitmap) { … }
inline CFX_DIBitmap* CFXDIBitmapFromFPDFBitmap(FPDF_BITMAP bitmap) { … }
#if defined(PDF_USE_SKIA)
inline FPDF_SKIA_CANVAS FPDFSkiaCanvasFromSkCanvas(SkCanvas* canvas) { … }
inline SkCanvas* SkCanvasFromFPDFSkiaCanvas(FPDF_SKIA_CANVAS canvas) { … }
#endif
inline FPDF_BOOKMARK FPDFBookmarkFromCPDFDictionary(
const CPDF_Dictionary* bookmark) { … }
inline CPDF_Dictionary* CPDFDictionaryFromFPDFBookmark(FPDF_BOOKMARK bookmark) { … }
inline FPDF_CLIPPATH FPDFClipPathFromCPDFClipPath(CPDF_ClipPath* path) { … }
inline CPDF_ClipPath* CPDFClipPathFromFPDFClipPath(FPDF_CLIPPATH path) { … }
inline FPDF_DEST FPDFDestFromCPDFArray(const CPDF_Array* dest) { … }
inline CPDF_Array* CPDFArrayFromFPDFDest(FPDF_DEST dest) { … }
inline FPDF_FONT FPDFFontFromCPDFFont(CPDF_Font* font) { … }
inline CPDF_Font* CPDFFontFromFPDFFont(FPDF_FONT font) { … }
inline FPDF_JAVASCRIPT_ACTION FPDFJavaScriptActionFromCPDFJavaScriptAction(
CPDF_JavaScript* javascript) { … }
inline CPDF_JavaScript* CPDFJavaScriptActionFromFPDFJavaScriptAction(
FPDF_JAVASCRIPT_ACTION javascript) { … }
inline FPDF_LINK FPDFLinkFromCPDFDictionary(CPDF_Dictionary* link) { … }
inline CPDF_Dictionary* CPDFDictionaryFromFPDFLink(FPDF_LINK link) { … }
inline FPDF_PAGELINK FPDFPageLinkFromCPDFLinkExtract(CPDF_LinkExtract* link) { … }
inline CPDF_LinkExtract* CPDFLinkExtractFromFPDFPageLink(FPDF_PAGELINK link) { … }
inline FPDF_PAGEOBJECT FPDFPageObjectFromCPDFPageObject(
CPDF_PageObject* page_object) { … }
inline CPDF_PageObject* CPDFPageObjectFromFPDFPageObject(
FPDF_PAGEOBJECT page_object) { … }
inline FPDF_PAGEOBJECTMARK FPDFPageObjectMarkFromCPDFContentMarkItem(
CPDF_ContentMarkItem* mark) { … }
inline CPDF_ContentMarkItem* CPDFContentMarkItemFromFPDFPageObjectMark(
FPDF_PAGEOBJECTMARK mark) { … }
inline FPDF_PAGERANGE FPDFPageRangeFromCPDFArray(const CPDF_Array* range) { … }
inline const CPDF_Array* CPDFArrayFromFPDFPageRange(FPDF_PAGERANGE range) { … }
inline FPDF_PATHSEGMENT FPDFPathSegmentFromFXPathPoint(
const CFX_Path::Point* segment) { … }
inline const CFX_Path::Point* FXPathPointFromFPDFPathSegment(
FPDF_PATHSEGMENT segment) { … }
inline FPDF_STRUCTTREE FPDFStructTreeFromCPDFStructTree(
CPDF_StructTree* struct_tree) { … }
inline CPDF_StructTree* CPDFStructTreeFromFPDFStructTree(
FPDF_STRUCTTREE struct_tree) { … }
inline FPDF_STRUCTELEMENT FPDFStructElementFromCPDFStructElement(
CPDF_StructElement* struct_element) { … }
inline CPDF_StructElement* CPDFStructElementFromFPDFStructElement(
FPDF_STRUCTELEMENT struct_element) { … }
inline FPDF_STRUCTELEMENT_ATTR FPDFStructElementAttrFromCPDFDictionary(
const CPDF_Dictionary* dictionary) { … }
inline const CPDF_Dictionary* CPDFDictionaryFromFPDFStructElementAttr(
FPDF_STRUCTELEMENT_ATTR struct_element_attr) { … }
inline FPDF_STRUCTELEMENT_ATTR_VALUE FPDFStructElementAttrValueFromCPDFObject(
const CPDF_Object* object) { … }
inline const CPDF_Object* CPDFObjectFromFPDFStructElementAttrValue(
FPDF_STRUCTELEMENT_ATTR_VALUE struct_element_attr_value) { … }
inline FPDF_TEXTPAGE FPDFTextPageFromCPDFTextPage(CPDF_TextPage* page) { … }
inline CPDF_TextPage* CPDFTextPageFromFPDFTextPage(FPDF_TEXTPAGE page) { … }
inline FPDF_SCHHANDLE FPDFSchHandleFromCPDFTextPageFind(
CPDF_TextPageFind* handle) { … }
inline CPDF_TextPageFind* CPDFTextPageFindFromFPDFSchHandle(
FPDF_SCHHANDLE handle) { … }
inline FPDF_FORMHANDLE FPDFFormHandleFromCPDFSDKFormFillEnvironment(
CPDFSDK_FormFillEnvironment* handle) { … }
inline CPDFSDK_FormFillEnvironment*
CPDFSDKFormFillEnvironmentFromFPDFFormHandle(FPDF_FORMHANDLE handle) { … }
inline FPDF_SIGNATURE FPDFSignatureFromCPDFDictionary(
const CPDF_Dictionary* dictionary) { … }
inline const CPDF_Dictionary* CPDFDictionaryFromFPDFSignature(
FPDF_SIGNATURE signature) { … }
inline FPDF_XOBJECT FPDFXObjectFromXObjectContext(XObjectContext* xobject) { … }
inline XObjectContext* XObjectContextFromFPDFXObject(FPDF_XOBJECT xobject) { … }
FXDIB_Format FXDIBFormatFromFPDFFormat(int format);
CPDFSDK_InteractiveForm* FormHandleToInteractiveForm(FPDF_FORMHANDLE hHandle);
UNSAFE_BUFFER_USAGE ByteString
ByteStringFromFPDFWideString(FPDF_WIDESTRING wide_string);
UNSAFE_BUFFER_USAGE WideString
WideStringFromFPDFWideString(FPDF_WIDESTRING wide_string);
UNSAFE_BUFFER_USAGE pdfium::span<char> SpanFromFPDFApiArgs(
void* buffer,
pdfium::StrictNumeric<size_t> buflen);
#ifdef PDF_ENABLE_XFA
RetainPtr<IFX_SeekableStream> MakeSeekableStream(
FPDF_FILEHANDLER* pFileHandler);
#endif
RetainPtr<const CPDF_Array> GetQuadPointsArrayFromDictionary(
const CPDF_Dictionary* dict);
RetainPtr<CPDF_Array> GetMutableQuadPointsArrayFromDictionary(
CPDF_Dictionary* dict);
RetainPtr<CPDF_Array> AddQuadPointsArrayToDictionary(CPDF_Dictionary* dict);
bool IsValidQuadPointsIndex(const CPDF_Array* array, size_t index);
bool GetQuadPointsAtIndex(RetainPtr<const CPDF_Array> array,
size_t quad_index,
FS_QUADPOINTSF* quad_points);
CFX_PointF CFXPointFFromFSPointF(const FS_POINTF& point);
CFX_FloatRect CFXFloatRectFromFSRectF(const FS_RECTF& rect);
FS_RECTF FSRectFFromCFXFloatRect(const CFX_FloatRect& rect);
CFX_Matrix CFXMatrixFromFSMatrix(const FS_MATRIX& matrix);
FS_MATRIX FSMatrixFromCFXMatrix(const CFX_Matrix& matrix);
unsigned long NulTerminateMaybeCopyAndReturnLength(
const ByteString& text,
pdfium::span<char> result_span);
unsigned long Utf16EncodeMaybeCopyAndReturnLength(
const WideString& text,
pdfium::span<char> result_span);
unsigned long GetRawStreamMaybeCopyAndReturnLength(
RetainPtr<const CPDF_Stream> stream,
pdfium::span<uint8_t> buffer);
unsigned long DecodeStreamMaybeCopyAndReturnLength(
RetainPtr<const CPDF_Stream> stream,
pdfium::span<uint8_t> buffer);
void SetPDFSandboxPolicy(FPDF_DWORD policy, FPDF_BOOL enable);
FPDF_BOOL IsPDFSandboxPolicyEnabled(FPDF_DWORD policy);
void SetPDFUnsupportInfo(UNSUPPORT_INFO* unsp_info);
void ReportUnsupportedFeatures(const CPDF_Document* pDoc);
void ReportUnsupportedXFA(const CPDF_Document* pDoc);
void CheckForUnsupportedAnnot(const CPDF_Annot* pAnnot);
void ProcessParseError(CPDF_Parser::Error err);
void SetColorFromScheme(const FPDF_COLORSCHEME* pColorScheme,
CPDF_RenderOptions* pRenderOptions);
std::vector<uint32_t> ParsePageRangeString(const ByteString& bsPageRange,
uint32_t nCount);
#endif