Add a NULL check in pdf_page_colors.cpp
[pdfium.git] / public / fpdfview.h
index 8379226..cd96bc2 100644 (file)
@@ -58,18 +58,17 @@ typedef unsigned char const* FPDF_LPCBYTE;
 // encoded), and platform dependent string
 typedef const char* FPDF_BYTESTRING;
 
-typedef const unsigned short*
-    FPDF_WIDESTRING;  // Foxit PDF SDK always use UTF-16LE encoding wide string,
-// each character use 2 bytes (except surrogation), with low byte first.
-
-// For Windows programmers: for most case it's OK to treat FPDF_WIDESTRING as
-// Windows unicode string,
-//       however, special care needs to be taken if you expect to process
-//       Unicode larger than 0xffff.
-// For Linux/Unix programmers: most compiler/library environment uses 4 bytes
-// for a Unicode character,
-//      you have to convert between FPDF_WIDESTRING and system wide string by
-//      yourself.
+// FPDFSDK always uses UTF-16LE encoded wide strings, each character uses 2
+// bytes (except surrogation), with the low byte first.
+typedef const unsigned short* FPDF_WIDESTRING;
+
+// For Windows programmers: In most cases it's OK to treat FPDF_WIDESTRING as a
+// Windows unicode string, however, special care needs to be taken if you
+// expect to process Unicode larger than 0xffff.
+//
+// For Linux/Unix programmers: most compiler/library environments use 4 bytes
+// for a Unicode character, and you have to convert between FPDF_WIDESTRING and
+// system wide string by yourself.
 
 #ifdef _WIN32_WCE
 typedef const unsigned short* FPDF_STRING;
@@ -77,30 +76,29 @@ typedef const unsigned short* FPDF_STRING;
 typedef const char* FPDF_STRING;
 #endif
 
-/** @brief Matrix for transformation. */
+// Matrix for transformation.
 typedef struct _FS_MATRIX_ {
-  float a; /**< @brief Coefficient a.*/
-  float b; /**< @brief Coefficient b.*/
-  float c; /**< @brief Coefficient c.*/
-  float d; /**< @brief Coefficient d.*/
-  float e; /**< @brief Coefficient e.*/
-  float f; /**< @brief Coefficient f.*/
+  float a;
+  float b;
+  float c;
+  float d;
+  float e;
+  float f;
 } FS_MATRIX;
 
-/** @brief Rectangle area(float) in device or page coordination system. */
+// Rectangle area(float) in device or page coordinate system.
 typedef struct _FS_RECTF_ {
-  /**@{*/
-  /** @brief The x-coordinate of the left-top corner. */
+  // The x-coordinate of the left-top corner.
   float left;
-  /** @brief The y-coordinate of the left-top corner. */
+  // The y-coordinate of the left-top corner.
   float top;
-  /** @brief The x-coordinate of the right-bottom corner. */
+  // The x-coordinate of the right-bottom corner.
   float right;
-  /** @brief The y-coordinate of the right-bottom corner. */
+  // The y-coordinate of the right-bottom corner.
   float bottom;
-  /**@}*/
 } * FS_LPRECTF, FS_RECTF;
-/** @brief Const Pointer to ::FS_RECTF structure.*/
+
+// Const Pointer to FS_RECTF structure.
 typedef const FS_RECTF* FS_LPCRECTF;
 
 #if defined(_WIN32) && defined(FPDFSDK_EXPORTS)
@@ -124,9 +122,44 @@ extern "C" {
 // Return value:
 //          None.
 // Comments:
+//          Convenience function to call FPDF_InitLibraryWithConfig() for
+//          backwards comatibility purposes.
+DLLEXPORT void STDCALL FPDF_InitLibrary();
+
+// Process-wide options for initializing the library.
+typedef struct FPDF_LIBRARY_CONFIG_ {
+  // Version number of the interface. Currently must be 2.
+  int version;
+
+  // Array of paths to scan in place of the defaults when using built-in
+  // FXGE font loading code. The array is terminated by a NULL pointer.
+  // The Array may be NULL itself to use the default paths. May be ignored
+  // entirely depending upon the platform.
+  const char** m_pUserFontPaths;
+
+  // Version 2.
+
+  // pointer to the v8::Isolate to use, or NULL to force PDFium to create one.
+  void* m_pIsolate;
+
+  // The embedder data slot to use in the v8::Isolate to store PDFium's
+  // per-isolate data. The value needs to be between 0 and
+  // v8::Internals::kNumIsolateDataLots (exclusive). Note that 0 is fine
+  // for most embedders.
+  unsigned int m_v8EmbedderSlot;
+} FPDF_LIBRARY_CONFIG;
+
+// Function: FPDF_InitLibraryWithConfig
+//          Initialize the FPDFSDK library
+// Parameters:
+//          config - configuration information as above.
+// Return value:
+//          None.
+// Comments:
 //          You have to call this function before you can call any PDF
 //          processing functions.
-DLLEXPORT void STDCALL FPDF_InitLibrary();
+DLLEXPORT void STDCALL FPDF_InitLibraryWithConfig(
+    const FPDF_LIBRARY_CONFIG* config);
 
 // Function: FPDF_DestroyLibary
 //          Release all resources allocated by the FPDFSDK library.
@@ -137,8 +170,8 @@ DLLEXPORT void STDCALL FPDF_InitLibrary();
 // Comments:
 //          You can call this function to release all memory blocks allocated by
 //          the library.
-//          After this function called, you should not call any PDF processing
-//          functions.
+//          After this function is called, you should not call any PDF
+//          processing functions.
 DLLEXPORT void STDCALL FPDF_DestroyLibrary();
 
 // Policy for accessing the local machine time.
@@ -147,9 +180,9 @@ DLLEXPORT void STDCALL FPDF_DestroyLibrary();
 // Function: FPDF_SetSandBoxPolicy
 //          Set the policy for the sandbox environment.
 // Parameters:
-//          policy      -   The specified policy for setting, for
-//          example:FPDF_POLICY_MACHINETIME_ACCESS.
-//          enable      -   True for enable, False for disable the policy.
+//          policy -   The specified policy for setting, for example:
+//                     FPDF_POLICY_MACHINETIME_ACCESS.
+//          enable -   True to enable, false to disable the policy.
 // Return value:
 //          None.
 DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy,
@@ -158,9 +191,9 @@ DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy,
 // Function: FPDF_LoadDocument
 //          Open and load a PDF document.
 // Parameters:
-//          file_path [in] -  Path to the PDF file (including extension).
-//          password [in]  -  A string used as the password for PDF file.
-//                            If no password needed, empty or NULL can be used.
+//          file_path -  Path to the PDF file (including extension).
+//          password  -  A string used as the password for the PDF file.
+//                       If no password is needed, empty or NULL can be used.
 // Return value:
 //          A handle to the loaded document, or NULL on failure.
 // Comments:
@@ -175,16 +208,15 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path,
 // Parameters:
 //          data_buf    -   Pointer to a buffer containing the PDF document.
 //          size        -   Number of bytes in the PDF document.
-//          password    -   A string used as the password for PDF file.
-//                          If no password needed, empty or NULL can be used.
+//          password    -   A string used as the password for the PDF file.
+//                          If no password is needed, empty or NULL can be used.
 // Return value:
-//          A handle to the loaded document. If failed, NULL is returned.
+//          A handle to the loaded document, or NULL on failure.
 // Comments:
 //          The memory buffer must remain valid when the document is open.
-//          Loaded document can be closed by FPDF_CloseDocument.
+//          The loaded document can be closed by FPDF_CloseDocument.
 //          If this function fails, you can use FPDF_GetLastError() to retrieve
-//          the reason why it fails.
-//
+//          the reason why it failed.
 DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf,
                                                      int size,
                                                      FPDF_BYTESTRING password);
@@ -194,47 +226,48 @@ typedef struct {
   // File length, in bytes.
   unsigned long m_FileLen;
 
-  // A function pointer for getting a block of data from specific position.
-  // Position is specified by byte offset from beginning of the file.
-  // The position and size will never go out range of file length.
+  // A function pointer for getting a block of data from a specific position.
+  // Position is specified by byte offset from the beginning of the file.
+  // The position and size will never go out of range of the file length.
   // It may be possible for FPDFSDK to call this function multiple times for
-  // same position.
+  // the same position.
   // Return value: should be non-zero if successful, zero for error.
   int (*m_GetBlock)(void* param,
                     unsigned long position,
                     unsigned char* pBuf,
                     unsigned long size);
 
-  // A custom pointer for all implementation specific data.
-  // This pointer will be used as the first parameter to m_GetBlock callback.
+  // A custom pointer for all implementation specific data.  This pointer will
+  // be used as the first parameter to the m_GetBlock callback.
   void* m_Param;
 } FPDF_FILEACCESS;
 
 // Function: FPDF_LoadCustomDocument
 //          Load PDF document from a custom access descriptor.
 // Parameters:
-//          pFileAccess -   A structure for access the file.
+//          pFileAccess -   A structure for accessing the file.
 //          password    -   Optional password for decrypting the PDF file.
 // Return value:
-//          A handle to the loaded document. If failed, NULL is returned.
+//          A handle to the loaded document, or NULL on failure.
 // Comments:
-//          The application should maintain the file resources being valid until
-//          the PDF document close.
-//          Loaded document can be closed by FPDF_CloseDocument.
+//          The application must keep the file resources valid until the PDF
+//          document is closed.
+//
+//          The loaded document can be closed with FPDF_CloseDocument.
 DLLEXPORT FPDF_DOCUMENT STDCALL
 FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess, FPDF_BYTESTRING password);
 
 // Function: FPDF_GetFileVersion
-//          Get the file version of the specific PDF document.
+//          Get the file version of the given PDF document.
 // Parameters:
-//          doc         -   Handle to document.
+//          doc         -   Handle to a document.
 //          fileVersion -   The PDF file version. File version: 14 for 1.4, 15
-//          for 1.5, ...
+//                          for 1.5, ...
 // Return value:
-//          TRUE if this call succeed, If failed, FALSE is returned.
+//          True if succeeds, false otherwise.
 // Comments:
-//          If the document is created by function ::FPDF_CreateNewDocument,
-//          then this function would always fail.
+//          If the document was created by FPDF_CreateNewDocument,
+//          then this function will always fail.
 DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc,
                                                 int* fileVersion);
 
@@ -247,156 +280,143 @@ DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc,
 #define FPDF_ERR_PAGE 6      // Page not found or content error.
 
 // Function: FPDF_GetLastError
-//          Get last error code when an SDK function failed.
+//          Get last error code when a function fails.
 // Parameters:
 //          None.
 // Return value:
-//          A 32-bit integer indicating error codes (defined above).
+//          A 32-bit integer indicating error code as defined above.
 // Comments:
 //          If the previous SDK call succeeded, the return value of this
-//          function
-//          is not defined.
-//
+//          function is not defined.
 DLLEXPORT unsigned long STDCALL FPDF_GetLastError();
 
 // Function: FPDF_GetDocPermission
 //          Get file permission flags of the document.
 // Parameters:
-//          document    -   Handle to document. Returned by FPDF_LoadDocument
-//          function.
+//          document    -   Handle to a document. Returned by FPDF_LoadDocument.
 // Return value:
-//          A 32-bit integer indicating permission flags. Please refer to PDF
-//          Reference for
-//          detailed description. If the document is not protected, 0xffffffff
-//          will be returned.
-//
+//          A 32-bit integer indicating permission flags. Please refer to the
+//          PDF Reference for detailed descriptions. If the document is not
+//          protected, 0xffffffff will be returned.
 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document);
 
 // Function: FPDF_GetSecurityHandlerRevision
-//          Get the revision for security handler.
+//          Get the revision for the security handler.
 // Parameters:
-//          document    -   Handle to document. Returned by FPDF_LoadDocument
-//          function.
+//          document    -   Handle to a document. Returned by FPDF_LoadDocument.
 // Return value:
-//          The security handler revision number. Please refer to PDF Reference
-//          for
-//          detailed description. If the document is not protected, -1 will be
-//          returned.
-//
+//          The security handler revision number. Please refer to the PDF
+//          Reference for a detailed description. If the document is not
+//          protected, -1 will be returned.
 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document);
 
 // Function: FPDF_GetPageCount
-//          Get total number of pages in a document.
+//          Get total number of pages in the document.
 // Parameters:
-//          document    -   Handle to document. Returned by FPDF_LoadDocument
-//          function.
+//          document    -   Handle to document. Returned by FPDF_LoadDocument.
 // Return value:
 //          Total number of pages in the document.
-//
 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document);
 
 // Function: FPDF_LoadPage
-//          Load a page inside a document.
+//          Load a page inside the document.
 // Parameters:
 //          document    -   Handle to document. Returned by FPDF_LoadDocument
-//          function.
 //          page_index  -   Index number of the page. 0 for the first page.
 // Return value:
-//          A handle to the loaded page. If failed, NULL is returned.
+//          A handle to the loaded page, or NULL if page load fails.
 // Comments:
-//          Loaded page can be rendered to devices using FPDF_RenderPage
-//          function.
-//          Loaded page can be closed by FPDF_ClosePage.
-//
+//          The loaded page can be rendered to devices using FPDF_RenderPage.
+//          The loaded page can be closed using FPDF_ClosePage.
 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document,
                                           int page_index);
 
 // Function: FPDF_GetPageWidth
 //          Get page width.
 // Parameters:
-//          page        -   Handle to the page. Returned by FPDF_LoadPage
-//          function.
+//          page        -   Handle to the page. Returned by FPDF_LoadPage.
 // Return value:
 //          Page width (excluding non-displayable area) measured in points.
 //          One point is 1/72 inch (around 0.3528 mm).
-//
 DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page);
 
 // Function: FPDF_GetPageHeight
 //          Get page height.
 // Parameters:
-//          page        -   Handle to the page. Returned by FPDF_LoadPage
-//          function.
+//          page        -   Handle to the page. Returned by FPDF_LoadPage.
 // Return value:
 //          Page height (excluding non-displayable area) measured in points.
 //          One point is 1/72 inch (around 0.3528 mm)
-//
 DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page);
 
 // Function: FPDF_GetPageSizeByIndex
-//          Get the size of a page by index.
+//          Get the size of the page at the given index.
 // Parameters:
-//          document    -   Handle to document. Returned by FPDF_LoadDocument
-//          function.
+//          document    -   Handle to document. Returned by FPDF_LoadDocument.
 //          page_index  -   Page index, zero for the first page.
-//          width       -   Pointer to a double value receiving the page width
-//          (in points).
-//          height      -   Pointer to a double value receiving the page height
-//          (in points).
+//          width       -   Pointer to a double to receive the page width
+//                          (in points).
+//          height      -   Pointer to a double to receive the page height
+//                          (in points).
 // Return value:
 //          Non-zero for success. 0 for error (document or page not found).
-//
 DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document,
                                               int page_index,
                                               double* width,
                                               double* height);
 
-// Page rendering flags. They can be combined with bit OR.
-#define FPDF_ANNOT 0x01  // Set if annotations are to be rendered.
-#define FPDF_LCD_TEXT \
-  0x02  // Set if using text rendering optimized for LCD display.
-#define FPDF_NO_NATIVETEXT \
-  0x04  // Don't use the native text output available on some platforms
-#define FPDF_GRAYSCALE 0x08   // Grayscale output.
-#define FPDF_DEBUG_INFO 0x80  // Set if you want to get some debug info.
-// Please discuss with Foxit first if you need to collect debug info.
-#define FPDF_NO_CATCH 0x100  // Set if you don't want to catch exception.
-#define FPDF_RENDER_LIMITEDIMAGECACHE 0x200  // Limit image cache size.
-#define FPDF_RENDER_FORCEHALFTONE \
-  0x400                      // Always use halftone for image stretching.
-#define FPDF_PRINTING 0x800  // Render for printing.
-#define FPDF_RENDER_NO_SMOOTHTEXT \
-  0x1000  // Set to disable anti-aliasing on text.
-#define FPDF_RENDER_NO_SMOOTHIMAGE \
-  0x2000  // Set to disable anti-aliasing on images.
-#define FPDF_RENDER_NO_SMOOTHPATH \
-  0x4000  // Set to disable anti-aliasing on paths.
-#define FPDF_REVERSE_BYTE_ORDER \
-  0x10  // set whether render in a reverse Byte order, this flag only
-// enable when render to a bitmap.
+// Page rendering flags. They can be combined with bit-wise OR.
+//
+// Set if annotations are to be rendered.
+#define FPDF_ANNOT 0x01
+// Set if using text rendering optimized for LCD display.
+#define FPDF_LCD_TEXT 0x02
+// Don't use the native text output available on some platforms
+#define FPDF_NO_NATIVETEXT 0x04
+// Grayscale output.
+#define FPDF_GRAYSCALE 0x08
+// Set if you want to get some debug info.
+#define FPDF_DEBUG_INFO 0x80
+// Set if you don't want to catch exceptions.
+#define FPDF_NO_CATCH 0x100
+// Limit image cache size.
+#define FPDF_RENDER_LIMITEDIMAGECACHE 0x200
+// Always use halftone for image stretching.
+#define FPDF_RENDER_FORCEHALFTONE 0x400
+// Render for printing.
+#define FPDF_PRINTING 0x800
+// Set to disable anti-aliasing on text.
+#define FPDF_RENDER_NO_SMOOTHTEXT 0x1000
+// Set to disable anti-aliasing on images.
+#define FPDF_RENDER_NO_SMOOTHIMAGE 0x2000
+// Set to disable anti-aliasing on paths.
+#define FPDF_RENDER_NO_SMOOTHPATH 0x4000
+// Set whether to render in a reverse Byte order, this flag is only used when
+// rendering to a bitmap.
+#define FPDF_REVERSE_BYTE_ORDER 0x10
+
 #ifdef _WIN32
 // Function: FPDF_RenderPage
-//          Render contents in a page to a device (screen, bitmap, or printer).
-//          This function is only supported on Windows system.
-// Parameters:
-//          dc          -   Handle to device context.
-//          page        -   Handle to the page. Returned by FPDF_LoadPage
-//          function.
-//          start_x     -   Left pixel position of the display area in the
-//          device coordinate.
-//          start_y     -   Top pixel position of the display area in the device
-//          coordinate.
+//          Render contents of a page to a device (screen, bitmap, or printer).
+//          This function is only supported on Windows.
+// Parameters:
+//          dc          -   Handle to the device context.
+//          page        -   Handle to the page. Returned by FPDF_LoadPage.
+//          start_x     -   Left pixel position of the display area in
+//                          device coordinates.
+//          start_y     -   Top pixel position of the display area in device
+//                          coordinates.
 //          size_x      -   Horizontal size (in pixels) for displaying the page.
 //          size_y      -   Vertical size (in pixels) for displaying the page.
-//          rotate      -   Page orientation: 0 (normal), 1 (rotated 90 degrees
-//          clockwise),
-//                              2 (rotated 180 degrees), 3 (rotated 90 degrees
-//                              counter-clockwise).
+//          rotate      -   Page orientation:
+//                            0 (normal)
+//                            1 (rotated 90 degrees clockwise)
+//                            2 (rotated 180 degrees)
+//                            3 (rotated 90 degrees counter-clockwise)
 //          flags       -   0 for normal display, or combination of flags
-//          defined above.
+//                          defined above.
 // Return value:
 //          None.
-//
 DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
                                        FPDF_PAGE page,
                                        int start_x,
@@ -408,29 +428,27 @@ DLLEXPORT void STDCALL FPDF_RenderPage(HDC dc,
 #endif
 
 // Function: FPDF_RenderPageBitmap
-//          Render contents in a page to a device independent bitmap
+//          Render contents of a page to a device independent bitmap.
 // Parameters:
 //          bitmap      -   Handle to the device independent bitmap (as the
-//          output buffer).
-//                          Bitmap handle can be created by FPDFBitmap_Create
-//                          function.
+//                          output buffer). The bitmap handle can be created
+//                          by FPDFBitmap_Create.
 //          page        -   Handle to the page. Returned by FPDF_LoadPage
-//          function.
-//          start_x     -   Left pixel position of the display area in the
-//          bitmap coordinate.
-//          start_y     -   Top pixel position of the display area in the bitmap
-//          coordinate.
+//          start_x     -   Left pixel position of the display area in
+//                          bitmap coordinates.
+//          start_y     -   Top pixel position of the display area in bitmap
+//                          coordinates.
 //          size_x      -   Horizontal size (in pixels) for displaying the page.
 //          size_y      -   Vertical size (in pixels) for displaying the page.
-//          rotate      -   Page orientation: 0 (normal), 1 (rotated 90 degrees
-//          clockwise),
-//                              2 (rotated 180 degrees), 3 (rotated 90 degrees
-//                              counter-clockwise).
+//          rotate      -   Page orientation:
+//                            0 (normal)
+//                            1 (rotated 90 degrees clockwise)
+//                            2 (rotated 180 degrees)
+//                            3 (rotated 90 degrees counter-clockwise)
 //          flags       -   0 for normal display, or combination of flags
-//          defined above.
+//                          defined above.
 // Return value:
 //          None.
-//
 DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap,
                                              FPDF_PAGE page,
                                              int start_x,
@@ -446,7 +464,6 @@ DLLEXPORT void STDCALL FPDF_RenderPageBitmap(FPDF_BITMAP bitmap,
 //          page        -   Handle to the loaded page.
 // Return value:
 //          None.
-//
 DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page);
 
 // Function: FPDF_CloseDocument
@@ -455,51 +472,48 @@ DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page);
 //          document    -   Handle to the loaded document.
 // Return value:
 //          None.
-//
 DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document);
 
 // Function: FPDF_DeviceToPage
-//          Convert the screen coordinate of a point to page coordinate.
+//          Convert the screen coordinates of a point to page coordinates.
 // Parameters:
-//          page        -   Handle to the page. Returned by FPDF_LoadPage
-//          function.
-//          start_x     -   Left pixel position of the display area in the
-//          device coordinate.
-//          start_y     -   Top pixel position of the display area in the device
-//          coordinate.
+//          page        -   Handle to the page. Returned by FPDF_LoadPage.
+//          start_x     -   Left pixel position of the display area in
+//                          device coordinates.
+//          start_y     -   Top pixel position of the display area in device
+//                          coordinates.
 //          size_x      -   Horizontal size (in pixels) for displaying the page.
 //          size_y      -   Vertical size (in pixels) for displaying the page.
-//          rotate      -   Page orientation: 0 (normal), 1 (rotated 90 degrees
-//          clockwise),
-//                              2 (rotated 180 degrees), 3 (rotated 90 degrees
-//                              counter-clockwise).
-//          device_x    -   X value in device coordinate, for the point to be
-//          converted.
-//          device_y    -   Y value in device coordinate, for the point to be
-//          converted.
-//          page_x      -   A Pointer to a double receiving the converted X
-//          value in page coordinate.
-//          page_y      -   A Pointer to a double receiving the converted Y
-//          value in page coordinate.
+//          rotate      -   Page orientation:
+//                            0 (normal)
+//                            1 (rotated 90 degrees clockwise)
+//                            2 (rotated 180 degrees)
+//                            3 (rotated 90 degrees counter-clockwise)
+//          device_x    -   X value in device coordinates to be converted.
+//          device_y    -   Y value in device coordinates to be converted.
+//          page_x      -   A pointer to a double receiving the converted X
+//                          value in page coordinates.
+//          page_y      -   A pointer to a double receiving the converted Y
+//                          value in page coordinates.
 // Return value:
 //          None.
 // Comments:
-//          The page coordinate system has its origin at left-bottom corner of
-//          the page, with X axis goes along
-//          the bottom side to the right, and Y axis goes along the left side
-//          upward. NOTE: this coordinate system
-//          can be altered when you zoom, scroll, or rotate a page, however, a
-//          point on the page should always have
+//          The page coordinate system has its origin at the left-bottom corner
+//          of the page, with the X-axis on the bottom going to the right, and
+//          the Y-axis on the left side going up.
+//
+//          NOTE: this coordinate system can be altered when you zoom, scroll,
+//          or rotate a page, however, a point on the page should always have
 //          the same coordinate values in the page coordinate system.
 //
 //          The device coordinate system is device dependent. For screen device,
-//          its origin is at left-top
-//          corner of the window. However this origin can be altered by Windows
-//          coordinate transformation
-//          utilities. You must make sure the start_x, start_y, size_x, size_y
-//          and rotate parameters have exactly
-//          same values as you used in FPDF_RenderPage() function call.
+//          its origin is at the left-top corner of the window. However this
+//          origin can be altered by the Windows coordinate transformation
+//          utilities.
 //
+//          You must make sure the start_x, start_y, size_x, size_y
+//          and rotate parameters have exactly same values as you used in
+//          the FPDF_RenderPage() function call.
 DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page,
                                          int start_x,
                                          int start_y,
@@ -512,33 +526,30 @@ DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page,
                                          double* page_y);
 
 // Function: FPDF_PageToDevice
-//          Convert the page coordinate of a point to screen coordinate.
+//          Convert the page coordinates of a point to screen coordinates.
 // Parameters:
-//          page        -   Handle to the page. Returned by FPDF_LoadPage
-//          function.
-//          start_x     -   Left pixel position of the display area in the
-//          device coordinate.
-//          start_y     -   Top pixel position of the display area in the device
-//          coordinate.
+//          page        -   Handle to the page. Returned by FPDF_LoadPage.
+//          start_x     -   Left pixel position of the display area in
+//                          device coordinates.
+//          start_y     -   Top pixel position of the display area in device
+//                          coordinates.
 //          size_x      -   Horizontal size (in pixels) for displaying the page.
 //          size_y      -   Vertical size (in pixels) for displaying the page.
-//          rotate      -   Page orientation: 0 (normal), 1 (rotated 90 degrees
-//          clockwise),
-//                              2 (rotated 180 degrees), 3 (rotated 90 degrees
-//                              counter-clockwise).
-//          page_x      -   X value in page coordinate, for the point to be
-//          converted.
-//          page_y      -   Y value in page coordinate, for the point to be
-//          converted.
-//          device_x    -   A pointer to an integer receiving the result X value
-//          in device coordinate.
-//          device_y    -   A pointer to an integer receiving the result Y value
-//          in device coordinate.
+//          rotate      -   Page orientation:
+//                            0 (normal)
+//                            1 (rotated 90 degrees clockwise)
+//                            2 (rotated 180 degrees)
+//                            3 (rotated 90 degrees counter-clockwise)
+//          page_x      -   X value in page coordinates.
+//          page_y      -   Y value in page coordinate.
+//          device_x    -   A pointer to an integer receiving the result X
+//                          value in device coordinates.
+//          device_y    -   A pointer to an integer receiving the result Y
+//                          value in device coordinates.
 // Return value:
 //          None.
 // Comments:
-//          See comments of FPDF_DeviceToPage() function.
-//
+//          See comments for FPDF_DeviceToPage().
 DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page,
                                          int start_x,
                                          int start_y,
@@ -551,79 +562,73 @@ DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page,
                                          int* device_y);
 
 // Function: FPDFBitmap_Create
-//          Create a Foxit Device Independent Bitmap (FXDIB).
+//          Create a device independent bitmap (FXDIB).
 // Parameters:
-//          width       -   Number of pixels in a horizontal line of the bitmap.
-//          Must be greater than 0.
-//          height      -   Number of pixels in a vertical line of the bitmap.
-//          Must be greater than 0.
-//          alpha       -   A flag indicating whether alpha channel is used.
-//          Non-zero for using alpha, zero for not using.
+//          width       -   The number of pixels in width for the bitmap.
+//                          Must be greater than 0.
+//          height      -   The number of pixels in height for the bitmap.
+//                          Must be greater than 0.
+//          alpha       -   A flag indicating whether the alpha channel is used.
+//                          Non-zero for using alpha, zero for not using.
 // Return value:
-//          The created bitmap handle, or NULL if parameter error or out of
+//          The created bitmap handle, or NULL if a parameter error or out of
 //          memory.
 // Comments:
-//          An FXDIB always use 4 byte per pixel. The first byte of a pixel is
-//          always double word aligned.
-//          Each pixel contains red (R), green (G), blue (B) and optionally
-//          alpha (A) values.
+//          The bitmap always uses 4 bytes per pixel. The first byte is always
+//          double word aligned.
+//
 //          The byte order is BGRx (the last byte unused if no alpha channel) or
 //          BGRA.
 //
-//          The pixels in a horizontal line (also called scan line) are stored
-//          side by side, with left most
-//          pixel stored first (with lower memory address). Each scan line uses
-//          width*4 bytes.
+//          The pixels in a horizontal line are stored side by side, with the
+//          left most pixel stored first (with lower memory address).
+//          Each line uses width * 4 bytes.
 //
-//          Scan lines are stored one after another, with top most scan line
-//          stored first. There is no gap
-//          between adjacent scan lines.
+//          Lines are stored one after another, with the top most line stored
+//          first. There is no gap between adjacent lines.
 //
 //          This function allocates enough memory for holding all pixels in the
-//          bitmap, but it doesn't
-//          initialize the buffer. Applications can use FPDFBitmap_FillRect to
-//          fill the bitmap using any color.
+//          bitmap, but it doesn't initialize the buffer. Applications can use
+//          FPDFBitmap_FillRect to fill the bitmap using any color.
 DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width,
                                                 int height,
                                                 int alpha);
 
 // More DIB formats
-#define FPDFBitmap_Gray 1  // Gray scale bitmap, one byte per pixel.
-#define FPDFBitmap_BGR 2   // 3 bytes per pixel, byte order: blue, green, red.
-#define FPDFBitmap_BGRx \
-  3  // 4 bytes per pixel, byte order: blue, green, red, unused.
-#define FPDFBitmap_BGRA \
-  4  // 4 bytes per pixel, byte order: blue, green, red, alpha.
+// Gray scale bitmap, one byte per pixel.
+#define FPDFBitmap_Gray 1
+// 3 bytes per pixel, byte order: blue, green, red.
+#define FPDFBitmap_BGR 2
+// 4 bytes per pixel, byte order: blue, green, red, unused.
+#define FPDFBitmap_BGRx 3
+// 4 bytes per pixel, byte order: blue, green, red, alpha.
+#define FPDFBitmap_BGRA 4
 
 // Function: FPDFBitmap_CreateEx
-//          Create a Foxit Device Independent Bitmap (FXDIB)
+//          Create a device independent bitmap (FXDIB)
 // Parameters:
-//          width       -   Number of pixels in a horizontal line of the bitmap.
-//          Must be greater than 0.
-//          height      -   Number of pixels in a vertical line of the bitmap.
-//          Must be greater than 0.
+//          width       -   The number of pixels in width for the bitmap.
+//                          Must be greater than 0.
+//          height      -   The number of pixels in height for the bitmap.
+//                          Must be greater than 0.
 //          format      -   A number indicating for bitmap format, as defined
-//          above.
-//          first_scan  -   A pointer to the first byte of first scan line, for
-//          external buffer
-//                          only. If this parameter is NULL, then the SDK will
-//                          create its own buffer.
+//                          above.
+//          first_scan  -   A pointer to the first byte of the first line if
+//                          using an external buffer. If this parameter is NULL,
+//                          then the a new buffer will be created.
 //          stride      -   Number of bytes for each scan line, for external
-//          buffer only..
+//                          buffer only.
 // Return value:
-//          The created bitmap handle, or NULL if parameter error or out of
-//          memory.
+//          The bitmap handle, or NULL if parameter error or out of memory.
 // Comments:
-//          Similar to FPDFBitmap_Create function, with more formats and
-//          external buffer supported.
-//          Bitmap created by this function can be used in any place that a
-//          FPDF_BITMAP handle is
+//          Similar to FPDFBitmap_Create function, but allows for more formats
+//          and an external buffer is supported. The bitmap created by this
+//          function can be used in any place that a FPDF_BITMAP handle is
 //          required.
 //
-//          If external scanline buffer is used, then the application should
-//          destroy the buffer
-//          by itself. FPDFBitmap_Destroy function will not destroy the buffer.
-//
+//          If an external buffer is used, then the application should destroy
+//          the buffer by itself. FPDFBitmap_Destroy function will not destroy
+//          the buffer.
 DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_CreateEx(int width,
                                                   int height,
                                                   int format,
@@ -631,29 +636,29 @@ DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_CreateEx(int width,
                                                   int stride);
 
 // Function: FPDFBitmap_FillRect
-//          Fill a rectangle area in an FXDIB.
+//          Fill a rectangle in a bitmap.
 // Parameters:
 //          bitmap      -   The handle to the bitmap. Returned by
-//          FPDFBitmap_Create function.
-//          left        -   The left side position. Starting from 0 at the
-//          left-most pixel.
-//          top         -   The top side position. Starting from 0 at the
-//          top-most scan line.
-//          width       -   Number of pixels to be filled in each scan line.
-//          height      -   Number of scan lines to be filled.
+//                          FPDFBitmap_Create.
+//          left        -   The left position. Starting from 0 at the
+//                          left-most pixel.
+//          top         -   The top position. Starting from 0 at the
+//                          top-most line.
+//          width       -   Width in pixels to be filled.
+//          height      -   Height in pixels to be filled.
 //          color       -   A 32-bit value specifing the color, in 8888 ARGB
-//          format.
+//                          format.
 // Return value:
 //          None.
 // Comments:
-//          This function set the color and (optionally) alpha value in
+//          This function sets the color and (optionally) alpha value in the
 //          specified region of the bitmap.
-//          NOTE: If alpha channel is used, this function does NOT composite the
-//          background with the source color,
-//          instead the background will be replaced by the source color and
-//          alpha.
-//          If alpha channel is not used, the "alpha" parameter is ignored.
 //
+//          NOTE: If the alpha channel is used, this function does NOT
+//          composite the background with the source color, instead the
+//          background will be replaced by the source color and the alpha.
+//
+//          If the alpha channel is not used, the alpha parameter is ignored.
 DLLEXPORT void STDCALL FPDFBitmap_FillRect(FPDF_BITMAP bitmap,
                                            int left,
                                            int top,
@@ -662,58 +667,57 @@ DLLEXPORT void STDCALL FPDFBitmap_FillRect(FPDF_BITMAP bitmap,
                                            FPDF_DWORD color);
 
 // Function: FPDFBitmap_GetBuffer
-//          Get data buffer of an FXDIB
+//          Get data buffer of a bitmap.
 // Parameters:
-//          bitmap      -   Handle to the bitmap. Returned by FPDFBitmap_Create
-//          function.
+//          bitmap      -   Handle to the bitmap. Returned by FPDFBitmap_Create.
 // Return value:
 //          The pointer to the first byte of the bitmap buffer.
 // Comments:
 //          The stride may be more than width * number of bytes per pixel
+//
 //          Applications can use this function to get the bitmap buffer pointer,
-//          then manipulate any color
-//          and/or alpha values for any pixels in the bitmap.
+//          then manipulate any color and/or alpha values for any pixels in the
+//          bitmap.
+//
+//          The data is in BGRA format. Where the A maybe unused if alpha was
+//          not specified.
 DLLEXPORT void* STDCALL FPDFBitmap_GetBuffer(FPDF_BITMAP bitmap);
 
 // Function: FPDFBitmap_GetWidth
-//          Get width of an FXDIB.
+//          Get width of a bitmap.
 // Parameters:
-//          bitmap      -   Handle to the bitmap. Returned by FPDFBitmap_Create
-//          function.
+//          bitmap      -   Handle to the bitmap. Returned by FPDFBitmap_Create.
 // Return value:
-//          The number of pixels in a horizontal line of the bitmap.
+//          The width of the bitmap in pixels.
 DLLEXPORT int STDCALL FPDFBitmap_GetWidth(FPDF_BITMAP bitmap);
 
 // Function: FPDFBitmap_GetHeight
-//          Get height of an FXDIB.
+//          Get height of a bitmap.
 // Parameters:
-//          bitmap      -   Handle to the bitmap. Returned by FPDFBitmap_Create
-//          function.
+//          bitmap      -   Handle to the bitmap. Returned by FPDFBitmap_Create.
 // Return value:
-//          The number of pixels in a vertical line of the bitmap.
+//          The height of the bitmap in pixels.
 DLLEXPORT int STDCALL FPDFBitmap_GetHeight(FPDF_BITMAP bitmap);
 
 // Function: FPDFBitmap_GetStride
-//          Get number of bytes for each scan line in the bitmap buffer.
+//          Get number of bytes for each line in the bitmap buffer.
 // Parameters:
-//          bitmap      -   Handle to the bitmap. Returned by FPDFBitmap_Create
-//          function.
+//          bitmap      -   Handle to the bitmap. Returned by FPDFBitmap_Create.
 // Return value:
-//          The number of bytes for each scan line in the bitmap buffer.
+//          The number of bytes for each line in the bitmap buffer.
 // Comments:
-//          The stride may be more than width * number of bytes per pixel
+//          The stride may be more than width * number of bytes per pixel.
 DLLEXPORT int STDCALL FPDFBitmap_GetStride(FPDF_BITMAP bitmap);
 
 // Function: FPDFBitmap_Destroy
-//          Destroy an FXDIB and release all related buffers.
+//          Destroy a bitmap and release all related buffers.
 // Parameters:
-//          bitmap      -   Handle to the bitmap. Returned by FPDFBitmap_Create
-//          function.
+//          bitmap      -   Handle to the bitmap. Returned by FPDFBitmap_Create.
 // Return value:
 //          None.
 // Comments:
-//          This function will not destroy any external buffer.
-//
+//          This function will not destroy any external buffers provided when
+//          the bitmap was created.
 DLLEXPORT void STDCALL FPDFBitmap_Destroy(FPDF_BITMAP bitmap);
 
 // Function: FPDF_VIEWERREF_GetPrintScaling
@@ -722,7 +726,6 @@ DLLEXPORT void STDCALL FPDFBitmap_Destroy(FPDF_BITMAP bitmap);
 //          document    -   Handle to the loaded document.
 // Return value:
 //          None.
-//
 DLLEXPORT FPDF_BOOL STDCALL
 FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document);
 
@@ -732,7 +735,6 @@ FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document);
 //          document    -   Handle to the loaded document.
 // Return value:
 //          The number of copies to be printed.
-//
 DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document);
 
 // Function: FPDF_VIEWERREF_GetPrintPageRange
@@ -741,18 +743,16 @@ DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document);
 //          document    -   Handle to the loaded document.
 // Return value:
 //          The print page range to be used for printing.
-//
 DLLEXPORT FPDF_PAGERANGE STDCALL
 FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document);
 
 // Function: FPDF_VIEWERREF_GetDuplex
 //          Returns the paper handling option to be used when printing from
-//          print dialog.
+//          the print dialog.
 // Parameters:
 //          document    -   Handle to the loaded document.
 // Return value:
 //          The paper handling option to be used when printing.
-//
 DLLEXPORT FPDF_DUPLEXTYPE STDCALL
 FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document);
 
@@ -765,36 +765,36 @@ FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document);
 DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document);
 
 // Function: FPDF_GetNamedDestByName
-//          get a special dest handle by the index.
+//          Get a the destination handle for the given name.
 // Parameters:
 //          document    -   Handle to the loaded document.
-//          name        -   The name of a special named dest.
+//          name        -   The name of a destination.
 // Return value:
-//          The handle of the dest.
-//
+//          The handle to the destination.
 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document,
                                                     FPDF_BYTESTRING name);
 
 // Function: FPDF_GetNamedDest
-//          Get the specified named destinations of the PDF document by index.
+//          Get the named destination by index.
 // Parameters:
 //          document        -   Handle to a document
-//          index           -   The index of named destination.
-//          buffer          -   The buffer to obtain destination name, used as
-//          wchar_t*.
-//          buflen [in/out] -   Size of the buffer in bytes on input, length of
-//          the result in bytes on output or -1 if the buffer is too small.
-// Return value:
-//          The destination handle of a named destination, or NULL if no named
-//          destination corresponding to |index|.
+//          index           -   The index of a named destination.
+//          buffer          -   The buffer to store the destination name,
+//                              used as wchar_t*.
+//          buflen [in/out] -   Size of the buffer in bytes on input,
+//                              length of the result in bytes on output
+//                              or -1 if the buffer is too small.
+// Return value:
+//          The destination handle for a given index, or NULL if there is no
+//          named destination corresponding to |index|.
 // Comments:
 //          Call this function twice to get the name of the named destination:
-//          1) First time pass in |buffer| as NULL and get buflen.
-//          2) Second time pass in allocated |buffer| and buflen to retrieve
-//          |buffer|, which should be used as wchar_t*.
-//             If buflen is not sufficiently large, it will be set to -1 upon
-//             return.
+//            1) First time pass in |buffer| as NULL and get buflen.
+//            2) Second time pass in allocated |buffer| and buflen to retrieve
+//               |buffer|, which should be used as wchar_t*.
 //
+//         If buflen is not sufficiently large, it will be set to -1 upon
+//         return.
 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document,
                                               int index,
                                               void* buffer,