//======================================================================== // // Error.h // // Copyright 1996-2003 Glyph & Cog, LLC // //======================================================================== //======================================================================== // // Modified under the Poppler project - http://poppler.freedesktop.org // // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // // Copyright (C) 2005, 2007 Jeff Muizelaar // Copyright (C) 2005, 2018, 2025 Albert Astals Cid // Copyright (C) 2005 Kristian Høgsberg // Copyright (C) 2013 Adrian Johnson // Copyright (C) 2014 Fabio D'Urso // Copyright (C) 2020 Adam Reichold // Copyright (C) 2025 g10 Code GmbH, Author: Sune Stolborg Vuorela // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git // //======================================================================== #ifndef ERROR_H #define ERROR_H #include "poppler-config.h" #include "poppler_private_export.h" #include "goo/gfile.h" #include "goo/GooString.h" enum ErrorCategory { errSyntaxWarning, // PDF syntax error which can be worked around; // output will probably be correct errSyntaxError, // PDF syntax error which can be worked around; // output will probably be incorrect errConfig, // error in Xpdf config info (xpdfrc file, etc.) errCommandLine, // error in user-supplied parameters, action not // allowed, etc. (only used by command-line tools) errIO, // error in file I/O errNotAllowed, // action not allowed by PDF permission bits errUnimplemented, // unimplemented PDF feature - display will be // incorrect errInternal // internal error - malfunction within the Xpdf code }; using ErrorCallback = void (*)(ErrorCategory category, Goffset pos, const char *msg); extern void POPPLER_PRIVATE_EXPORT setErrorCallback(ErrorCallback cbk); extern void CDECL POPPLER_PRIVATE_EXPORT error(ErrorCategory category, Goffset pos, const char *msg, ...) GOOSTRING_FORMAT; enum class ErrorStringType { ErrorCodeString, UserString }; struct ErrorString { std::string text; ErrorStringType type; }; #ifdef _MSC_VER # define POPPLER_FUNCTION_INFO __FUNCSIG__ #elif defined(__GNUC__) // this should also cover clang # define POPPLER_FUNCTION_INFO __PRETTY_FUNCTION__ #else // fallback # define POPPLER_FUNCTION_INFO __func__ #endif // Currently our base compiler doesn't support std::source_location, so we will have to deal with these compiler specific things #define ERROR_IN_CODE_LOCATION \ ErrorString \ { \ std::string { POPPLER_FUNCTION_INFO } + ":" + std::to_string(__LINE__), ErrorStringType::ErrorCodeString \ } #endif