diff --git a/PRESUBMIT.py b/PRESUBMIT.py
new file mode 100644
index 0000000..1ad3a5e
--- /dev/null
+++ b/PRESUBMIT.py
@@ -0,0 +1,14 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Presubmit script for pdfium.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details about the presubmit API built into depot_tools.
+"""
+
+def CheckChangeOnUpload(input_api, output_api):
+  results = []
+  results += input_api.canned_checks.CheckPatchFormatted(input_api, output_api)
+  return results
diff --git a/core/include/fpdfapi/fpdf_objects.h b/core/include/fpdfapi/fpdf_objects.h
index d1615b5..58fb37c 100644
--- a/core/include/fpdfapi/fpdf_objects.h
+++ b/core/include/fpdfapi/fpdf_objects.h
@@ -101,9 +101,7 @@
 };
 class CPDF_Boolean : public CPDF_Object {
  public:
-  static CPDF_Boolean* Create(FX_BOOL value) {
-    return new CPDF_Boolean(value);
-  }
+  static CPDF_Boolean* Create(FX_BOOL value) { return new CPDF_Boolean(value); }
 
   CPDF_Boolean() : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(false) {}
   CPDF_Boolean(FX_BOOL value) : CPDF_Object(PDFOBJ_BOOLEAN), m_bValue(value) {}
@@ -120,9 +118,7 @@
  public:
   static CPDF_Number* Create(int value) { return new CPDF_Number(value); }
 
-  static CPDF_Number* Create(FX_FLOAT value) {
-    return new CPDF_Number(value);
-  }
+  static CPDF_Number* Create(FX_FLOAT value) { return new CPDF_Number(value); }
 
   static CPDF_Number* Create(const CFX_ByteStringC& str) {
     return new CPDF_Number(str);
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
index 55fba8d..f057ce7 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
@@ -2443,7 +2443,7 @@
   unsigned char byte1 = 0;
   unsigned char byte2 = 0;
   GetCharAt(pos, byte1);
-  GetCharAt(pos+1, byte2);
+  GetCharAt(pos + 1, byte2);
   unsigned int markers = 0;
   if (byte1 == '\r' && byte2 == '\n') {
     markers = 2;
@@ -2463,7 +2463,7 @@
                    ((CPDF_Reference*)pLenObj)->GetRefObjNum() != objnum))) {
     len = pLenObj->GetInteger();
   }
-  //Check whether end of line markers follow the keyword 'stream'.
+  // Check whether end of line markers follow the keyword 'stream'.
   unsigned int numMarkers = ReadEOLMarkers(m_Pos);
   m_Pos += numMarkers;
   FX_FILESIZE streamStartPos = m_Pos;
@@ -2472,7 +2472,8 @@
   }
   const unsigned int ENDSTREAM_LEN = sizeof("endstream") - 1;
   const unsigned int ENDOBJ_LEN = sizeof("endobj") - 1;
-  CPDF_CryptoHandler* pCryptoHandler = objnum == (FX_DWORD)m_MetadataObjnum ? nullptr : m_pCryptoHandler;
+  CPDF_CryptoHandler* pCryptoHandler =
+      objnum == (FX_DWORD)m_MetadataObjnum ? nullptr : m_pCryptoHandler;
   if (!pCryptoHandler) {
     FX_BOOL bSearchForKeyword = TRUE;
     unsigned int prevMarkers = 0;
@@ -2492,27 +2493,28 @@
       }
     }
     if (bSearchForKeyword) {
-      //If len is not available, len needs to be calculated
-      //by searching the keywords "endstream" or "endobj".
+      // If len is not available, len needs to be calculated
+      // by searching the keywords "endstream" or "endobj".
       m_Pos = streamStartPos;
       FX_FILESIZE endStreamOffset = 0;
       while (endStreamOffset >= 0) {
         endStreamOffset = FindTag(FX_BSTRC("endstream"), 0);
         if (endStreamOffset < 0) {
-          //Can't find any "endstream".
+          // Can't find any "endstream".
           break;
         }
         prevMarkers = ReadEOLMarkers(streamStartPos + endStreamOffset - 1);
-        nextMarkers = ReadEOLMarkers(streamStartPos + endStreamOffset + ENDSTREAM_LEN);
+        nextMarkers =
+            ReadEOLMarkers(streamStartPos + endStreamOffset + ENDSTREAM_LEN);
         if (prevMarkers != 0 && nextMarkers != 0) {
-          //Stop searching when the keyword "endstream" is found.
+          // Stop searching when the keyword "endstream" is found.
           break;
         } else {
           unsigned char ch = 0x00;
           GetCharAt(streamStartPos + endStreamOffset + ENDSTREAM_LEN, ch);
           if (ch == 0x09 || ch == 0x20) {
             //"endstream" is treated as a keyword
-            //when it is followed by a tab or whitespace
+            // when it is followed by a tab or whitespace
             break;
           }
         }
@@ -2523,26 +2525,27 @@
       while (endObjOffset >= 0) {
         endObjOffset = FindTag(FX_BSTRC("endobj"), 0);
         if (endObjOffset < 0) {
-          //Can't find any "endobj".
+          // Can't find any "endobj".
           break;
         }
         prevMarkers = ReadEOLMarkers(streamStartPos + endObjOffset - 1);
-        nextMarkers = ReadEOLMarkers(streamStartPos + endObjOffset + ENDOBJ_LEN);
+        nextMarkers =
+            ReadEOLMarkers(streamStartPos + endObjOffset + ENDOBJ_LEN);
         if (prevMarkers != 0 && nextMarkers != 0) {
-          //Stop searching when the keyword "endobj" is found.
+          // Stop searching when the keyword "endobj" is found.
           break;
         }
         m_Pos += ENDOBJ_LEN;
       }
       if (endStreamOffset < 0 && endObjOffset < 0) {
-        //Can't find "endstream" or "endobj".
+        // Can't find "endstream" or "endobj".
         return nullptr;
       }
       if (endStreamOffset < 0 && endObjOffset >= 0) {
-        //Correct the position of end stream.
+        // Correct the position of end stream.
         endStreamOffset = endObjOffset;
       } else if (endStreamOffset >= 0 && endObjOffset < 0) {
-        //Correct the position of end obj.
+        // Correct the position of end obj.
         endObjOffset = endStreamOffset;
       } else if (endStreamOffset > endObjOffset) {
         endStreamOffset = endObjOffset;
@@ -2587,8 +2590,8 @@
   streamStartPos = m_Pos;
   GetNextWord();
   numMarkers = ReadEOLMarkers(m_Pos);
-  if (m_WordSize == ENDOBJ_LEN && numMarkers != 0 && 
-    FXSYS_memcmp(m_WordBuffer, "endobj", ENDOBJ_LEN) == 0) {
+  if (m_WordSize == ENDOBJ_LEN && numMarkers != 0 &&
+      FXSYS_memcmp(m_WordBuffer, "endobj", ENDOBJ_LEN) == 0) {
     m_Pos = streamStartPos;
   }
   return pStream;
diff --git a/core/src/fpdfdoc/doc_vt.cpp b/core/src/fpdfdoc/doc_vt.cpp
index 77afab8..3970523 100644
--- a/core/src/fpdfdoc/doc_vt.cpp
+++ b/core/src/fpdfdoc/doc_vt.cpp
@@ -817,7 +817,7 @@
     if (m_bRichText) {
       secinfo.pSecProps = new CPVT_SecProps(0.0f, 0.0f, 0);
       secinfo.pWordProps = new CPVT_WordProps(GetDefaultFontIndex(),
-                                                 PVT_DEFAULT_FONTSIZE, 0, 0, 0);
+                                              PVT_DEFAULT_FONTSIZE, 0, 0, 0);
     }
     CPVT_WordPlace place;
     place.nSecIndex = 0;
diff --git a/core/src/fxcrt/extension.h b/core/src/fxcrt/extension.h
index 45355ab..0fdf8ab 100644
--- a/core/src/fxcrt/extension.h
+++ b/core/src/fxcrt/extension.h
@@ -62,10 +62,7 @@
 };
 class CFX_CRTFileStream final : public IFX_FileStream {
  public:
-  CFX_CRTFileStream(IFXCRT_FileAccess* pFA)
-      : m_pFile(pFA),
-        m_dwCount(1) {
-  }
+  CFX_CRTFileStream(IFXCRT_FileAccess* pFA) : m_pFile(pFA), m_dwCount(1) {}
   ~CFX_CRTFileStream() {
     if (m_pFile) {
       m_pFile->Release();
@@ -81,13 +78,9 @@
       delete this;
     }
   }
-  virtual FX_FILESIZE GetSize() override {
-    return m_pFile->GetSize();
-  }
+  virtual FX_FILESIZE GetSize() override { return m_pFile->GetSize(); }
   virtual FX_BOOL IsEOF() override { return GetPosition() >= GetSize(); }
-  virtual FX_FILESIZE GetPosition() override {
-    return m_pFile->GetPosition();
-  }
+  virtual FX_FILESIZE GetPosition() override { return m_pFile->GetPosition(); }
   virtual FX_BOOL ReadBlock(void* buffer,
                             FX_FILESIZE offset,
                             size_t size) override {
@@ -150,13 +143,9 @@
     }
     delete this;
   }
-  virtual FX_FILESIZE GetSize() override {
-    return (FX_FILESIZE)m_nCurSize;
-  }
+  virtual FX_FILESIZE GetSize() override { return (FX_FILESIZE)m_nCurSize; }
   virtual FX_BOOL IsEOF() override { return m_nCurPos >= (size_t)GetSize(); }
-  virtual FX_FILESIZE GetPosition() override {
-    return (FX_FILESIZE)m_nCurPos;
-  }
+  virtual FX_FILESIZE GetPosition() override { return (FX_FILESIZE)m_nCurPos; }
   virtual FX_BOOL ReadBlock(void* buffer,
                             FX_FILESIZE offset,
                             size_t size) override {
diff --git a/core/src/fxge/agg/src/fx_agg_driver.cpp b/core/src/fxge/agg/src/fx_agg_driver.cpp
index 993f50a..2a4d199 100644
--- a/core/src/fxge/agg/src/fx_agg_driver.cpp
+++ b/core/src/fxge/agg/src/fx_agg_driver.cpp
@@ -187,7 +187,7 @@
     CFX_DIBitmap* pOriDevice,
     FX_BOOL bGroupKnockout) {
   return new CFX_AggDeviceDriver(pBitmap, 0, bRgbByteOrder, pOriDevice,
-                                    bGroupKnockout);
+                                 bGroupKnockout);
 }
 CFX_AggDeviceDriver::CFX_AggDeviceDriver(CFX_DIBitmap* pBitmap,
                                          int dither_bits,
@@ -323,7 +323,7 @@
   m_FillFlags = fill_mode;
   if (m_pClipRgn == NULL) {
     m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
-                                    GetDeviceCaps(FXDC_PIXEL_HEIGHT));
+                                 GetDeviceCaps(FXDC_PIXEL_HEIGHT));
     if (!m_pClipRgn) {
       return FALSE;
     }
@@ -358,7 +358,7 @@
     const CFX_GraphStateData* pGraphState) {
   if (m_pClipRgn == NULL) {
     m_pClipRgn = new CFX_ClipRgn(GetDeviceCaps(FXDC_PIXEL_WIDTH),
-                                    GetDeviceCaps(FXDC_PIXEL_HEIGHT));
+                                 GetDeviceCaps(FXDC_PIXEL_HEIGHT));
     if (!m_pClipRgn) {
       return FALSE;
     }
@@ -1800,8 +1800,8 @@
     return FALSE;
   }
   SetBitmap(pBitmap);
-  IFX_RenderDeviceDriver* pDriver = new CFX_AggDeviceDriver(
-      pBitmap, dither_bits, FALSE, pOriDevice, FALSE);
+  IFX_RenderDeviceDriver* pDriver =
+      new CFX_AggDeviceDriver(pBitmap, dither_bits, FALSE, pOriDevice, FALSE);
   if (!pDriver) {
     return FALSE;
   }
diff --git a/core/src/fxge/dib/fx_dib_engine.cpp b/core/src/fxge/dib/fx_dib_engine.cpp
index 86d495f..ce95a6e 100644
--- a/core/src/fxge/dib/fx_dib_engine.cpp
+++ b/core/src/fxge/dib/fx_dib_engine.cpp
@@ -852,7 +852,7 @@
 FX_BOOL CFX_ImageStretcher::StartStretch() {
   m_pStretchEngine =
       new CStretchEngine(m_pDest, m_DestFormat, m_DestWidth, m_DestHeight,
-                            m_ClipRect, m_pSource, m_Flags);
+                         m_ClipRect, m_pSource, m_Flags);
   if (!m_pStretchEngine) {
     return FALSE;
   }
diff --git a/core/src/fxge/ge/text_int.h b/core/src/fxge/ge/text_int.h
index 3ebd9ae..9279969 100644
--- a/core/src/fxge/ge/text_int.h
+++ b/core/src/fxge/ge/text_int.h
@@ -67,8 +67,10 @@
 
 class CFX_FontFaceInfo {
  public:
-  CFX_FontFaceInfo(CFX_ByteString filePath, CFX_ByteString faceName,
-                   CFX_ByteString fontTables, FX_DWORD fontOffset,
+  CFX_FontFaceInfo(CFX_ByteString filePath,
+                   CFX_ByteString faceName,
+                   CFX_ByteString fontTables,
+                   FX_DWORD fontOffset,
                    FX_DWORD fileSize)
       : m_FilePath(filePath),
         m_FaceName(faceName),
diff --git a/core/src/fxge/skia/fx_skia_device.cpp b/core/src/fxge/skia/fx_skia_device.cpp
index a13c218..d7f448e 100644
--- a/core/src/fxge/skia/fx_skia_device.cpp
+++ b/core/src/fxge/skia/fx_skia_device.cpp
@@ -266,7 +266,7 @@
                                            CFX_DIBitmap* pOriDevice,
                                            FX_BOOL bGroupKnockout) {
   m_pAggDriver = new CFX_AggDeviceDriver(pBitmap, dither_bits, bRgbByteOrder,
-                                            pOriDevice, bGroupKnockout);
+                                         pOriDevice, bGroupKnockout);
 }
 CFX_SkiaDeviceDriver::~CFX_SkiaDeviceDriver() {
   delete m_pAggDriver;
@@ -616,8 +616,8 @@
     return FALSE;
   }
   SetBitmap(pBitmap);
-  CFX_SkiaDeviceDriver* pDriver = new CFX_SkiaDeviceDriver(
-      pBitmap, dither_bits, FALSE, pOriDevice, FALSE);
+  CFX_SkiaDeviceDriver* pDriver =
+      new CFX_SkiaDeviceDriver(pBitmap, dither_bits, FALSE, pOriDevice, FALSE);
   SetDeviceDriver(pDriver);
   return TRUE;
 }
diff --git a/fpdfsdk/include/fsdk_baseform.h b/fpdfsdk/include/fsdk_baseform.h
index 089a34c..2abafca 100644
--- a/fpdfsdk/include/fsdk_baseform.h
+++ b/fpdfsdk/include/fsdk_baseform.h
@@ -50,18 +50,18 @@
     bRC = TRUE;
   }
 
-  FX_BOOL bModifier;  // in
-  FX_BOOL bShift;  // in
-  int nCommitKey;  // in
-  CFX_WideString sChange;  // in[out]
+  FX_BOOL bModifier;         // in
+  FX_BOOL bShift;            // in
+  int nCommitKey;            // in
+  CFX_WideString sChange;    // in[out]
   CFX_WideString sChangeEx;  // in
-  FX_BOOL bKeyDown;  // in
-  int nSelEnd;  // in[out]
-  int nSelStart;  // in[out]
-  CFX_WideString sValue;  // in[out]
-  FX_BOOL bWillCommit;  // in
-  FX_BOOL bFieldFull;  // in
-  FX_BOOL bRC;  // in[out]
+  FX_BOOL bKeyDown;          // in
+  int nSelEnd;               // in[out]
+  int nSelStart;             // in[out]
+  CFX_WideString sValue;     // in[out]
+  FX_BOOL bWillCommit;       // in
+  FX_BOOL bFieldFull;        // in
+  FX_BOOL bRC;               // in[out]
 } PDFSDK_FieldAction;
 class CPDFSDK_Widget : public CPDFSDK_BAAnnot {
  public:
diff --git a/fpdfsdk/include/fxedit/fxet_list.h b/fpdfsdk/include/fxedit/fxet_list.h
index 4aa3568..8c5584a 100644
--- a/fpdfsdk/include/fxedit/fxet_list.h
+++ b/fpdfsdk/include/fxedit/fxet_list.h
@@ -339,10 +339,10 @@
   FX_BOOL m_bNotifyFlag;
   CPDF_Point m_ptScrollPos;
   CPLST_Select m_aSelItems;  // for multiple
-  int32_t m_nSelItem;  // for single
-  int32_t m_nFootIndex;  // for multiple
-  FX_BOOL m_bCtrlSel;  // for multiple
-  int32_t m_nCaretIndex;  // for multiple
+  int32_t m_nSelItem;        // for single
+  int32_t m_nFootIndex;      // for multiple
+  FX_BOOL m_bCtrlSel;        // for multiple
+  int32_t m_nCaretIndex;     // for multiple
 };
 
 #endif  // FPDFSDK_INCLUDE_FXEDIT_FXET_LIST_H_
diff --git a/fpdfsdk/include/javascript/JS_Define.h b/fpdfsdk/include/javascript/JS_Define.h
index 11471af..17bf7b1 100644
--- a/fpdfsdk/include/javascript/JS_Define.h
+++ b/fpdfsdk/include/javascript/JS_Define.h
@@ -37,10 +37,10 @@
 #define BEGIN_JS_STATIC_CONST(js_class_name) \
   JSConstSpec js_class_name::JS_Class_Consts[] = {
 #define JS_STATIC_CONST_ENTRY_NUMBER(const_name, pValue) \
-  { const_name, pValue, L"", 0 }          \
+  { const_name, pValue, L"", 0 }                         \
   ,
-#define JS_STATIC_CONST_ENTRY_STRING(const_name, pValue)     \
-  { const_name, 0, pValue, 1 } \
+#define JS_STATIC_CONST_ENTRY_STRING(const_name, pValue) \
+  { const_name, 0, pValue, 1 }                           \
   ,
 #define END_JS_STATIC_CONST() \
   { 0, 0, 0, 0 }              \
@@ -190,8 +190,8 @@
   const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name);      \
   void js_class_name::JSConstructor(IFXJS_Context* cc, JSFXObject obj,         \
                                     JSFXObject global) {                       \
-    CJS_Object* pObj = new js_class_name(obj);                              \
-    pObj->SetEmbedObject(new class_alternate(pObj));                        \
+    CJS_Object* pObj = new js_class_name(obj);                                 \
+    pObj->SetEmbedObject(new class_alternate(pObj));                           \
     JS_SetPrivate(NULL, obj, (void*)pObj);                                     \
     pObj->InitInstance(cc);                                                    \
   }                                                                            \
@@ -398,8 +398,8 @@
   }                                                                            \
   void js_class_name::JSConstructor(IFXJS_Context* cc, JSFXObject obj,         \
                                     JSFXObject global) {                       \
-    CJS_Object* pObj = new js_class_name(obj);                              \
-    pObj->SetEmbedObject(new class_alternate(pObj));                        \
+    CJS_Object* pObj = new js_class_name(obj);                                 \
+    pObj->SetEmbedObject(new class_alternate(pObj));                           \
     JS_SetPrivate(NULL, obj, (void*)pObj);                                     \
     pObj->InitInstance(cc);                                                    \
   }                                                                            \
diff --git a/fpdfsdk/include/javascript/app.h b/fpdfsdk/include/javascript/app.h
index 221a7c1..b131213 100644
--- a/fpdfsdk/include/javascript/app.h
+++ b/fpdfsdk/include/javascript/app.h
@@ -36,71 +36,6 @@
   DECLARE_JS_CLASS(CJS_TimerObj);
 };
 
-// struct APP_MENUITEM_ARRAY;
-//
-// struct APP_MENUITEM
-// {
-// 	APP_MENUITEM() : oSubMenu(NULL), cName(L""), cReturn(L""),
-// bMarked(false), bEnabled(true)
-// 	{
-// 	}
-// 	CFX_WideString cName;
-// 	CFX_WideString cReturn;
-// 	APP_MENUITEM_ARRAY* oSubMenu;
-// 	bool bMarked;
-// 	bool bEnabled;
-// };
-
-// struct APP_MENUITEM_ARRAY
-// {
-// 	APP_MENUITEM_ARRAY() : m_hMenu(NULL), pContents(NULL), nSize(0)
-// 	{
-//
-// 	}
-// 	APP_MENUITEM * pContents;
-// 	HMENU m_hMenu;
-// 	int	nSize;
-// };
-
-// struct APP_MENU;
-// struct APP_MENU_ARRAY
-// {
-// 	APP_MENU_ARRAY():
-//     pContent(NULL)
-// 	{
-// 	}
-//
-// 	APP_MENU* pContent;
-// };
-
-// struct APP_MENU
-// {
-// 	APP_MENU():bSubMenu(false),
-// 	SubMenuItems(NULL),
-// 	cwMenuItemName(L""),
-// 	hMenu(NULL),
-// 	iSize(0)
-// 	{
-//
-// 	}
-//
-// 	APP_MENU(CFX_WideString &cwName):
-// 	cwMenuItemName(cwName),
-// 	bSubMenu(false),
-// 	SubMenuItems(NULL),
-// 	hMenu(NULL),
-// 	iSize(0)
-// 	{
-//
-// 	}
-//
-// 	CFX_WideString cwMenuItemName;
-// 	bool bSubMenu;
-// 	APP_MENU_ARRAY* SubMenuItems;
-// 	int iSize;
-// 	HMENU hMenu;
-// };
-
 class app : public CJS_EmbedObj {
  public:
   app(CJS_Object* pJSObject);
@@ -226,25 +161,8 @@
                      CFX_WideString& sError);
 
  private:
-  //	FX_DWORD					AppGetTickCount();
   void TimerProc(CJS_Timer* pTimer);
   void RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript);
-  //	void						ParsePopupMenuObj(APP_MENUITEM *
-  //ppMenuItem,JSObject * pObj);
-  //	void						DeleteMenuItems(APP_MENUITEM_ARRAY *
-  //pMenuItems);
-  // 	void						AddMenuItem(APP_MENUITEM_ARRAY * pMenuItems, HMENU
-  // hMenu, MENUITEMINFO MenuItemInfo);
-  // 	void						InitMenuItemInfo(MENUITEMINFO&
-  // MenuItemInfo);
-  // 	void						DestroyPopUpMenu();
-
-  // 	void						ParserMenuItem(APP_MENU* pHead, const
-  // CJS_Parameters&params);
-  // 	void						AddItemToMenu(APP_MENU* pHead, HMENU hMenu,
-  // MENUITEMINFO MenuItemInfo);
-  // 	void						DestroyMenuItems(APP_MENU*
-  // pHead);
 
  public:
   static CFX_WideString SysPathToPDFPath(const CFX_WideString& sOldPath);
@@ -254,10 +172,6 @@
   bool m_bRuntimeHighLight;
 
   CFX_ArrayTemplate<CJS_Timer*> m_aTimer;
-  //	APP_MENU*					m_pMenuHead;
-
- public:
-  //	static CReader_App* s_App;
 };
 
 class CJS_App : public CJS_Object {
diff --git a/fpdfsdk/include/pdfwindow/PWL_Wnd.h b/fpdfsdk/include/pdfwindow/PWL_Wnd.h
index 235786b..29c49fb 100644
--- a/fpdfsdk/include/pdfwindow/PWL_Wnd.h
+++ b/fpdfsdk/include/pdfwindow/PWL_Wnd.h
@@ -226,28 +226,28 @@
         eCursorType(FXCT_ARROW),
         mtChild(1, 0, 0, 1, 0, 0) {}
 
-  CPDF_Rect rcRectWnd;  // required
+  CPDF_Rect rcRectWnd;                // required
   IFX_SystemHandler* pSystemHandler;  // required
-  IFX_Edit_FontMap* pFontMap;  // required for text window
-  IPWL_Provider* pProvider;  // required for self coordinate
-  IPWL_FocusHandler* pFocusHandler;  // optional
-  FX_DWORD dwFlags;  // optional
-  CPWL_Color sBackgroundColor;  // optional
-  FX_HWND hAttachedWnd;  // required for no-reader framework
-  IPWL_SpellCheck* pSpellCheck;  // required for spellchecking
-  int32_t nBorderStyle;  // optional
-  int32_t dwBorderWidth;  // optional
-  CPWL_Color sBorderColor;  // optional
-  CPWL_Color sTextColor;  // optional
-  CPWL_Color sTextStrokeColor;  // optional
-  int32_t nTransparency;  // optional
-  FX_FLOAT fFontSize;  // optional
-  CPWL_Dash sDash;  // optional
-  void* pAttachedData;  // optional
-  CPWL_Wnd* pParentWnd;  // ignore
-  CPWL_MsgControl* pMsgControl;  // ignore
-  int32_t eCursorType;  // ignore
-  CPDF_Matrix mtChild;  // ignore
+  IFX_Edit_FontMap* pFontMap;         // required for text window
+  IPWL_Provider* pProvider;           // required for self coordinate
+  IPWL_FocusHandler* pFocusHandler;   // optional
+  FX_DWORD dwFlags;                   // optional
+  CPWL_Color sBackgroundColor;        // optional
+  FX_HWND hAttachedWnd;               // required for no-reader framework
+  IPWL_SpellCheck* pSpellCheck;       // required for spellchecking
+  int32_t nBorderStyle;               // optional
+  int32_t dwBorderWidth;              // optional
+  CPWL_Color sBorderColor;            // optional
+  CPWL_Color sTextColor;              // optional
+  CPWL_Color sTextStrokeColor;        // optional
+  int32_t nTransparency;              // optional
+  FX_FLOAT fFontSize;                 // optional
+  CPWL_Dash sDash;                    // optional
+  void* pAttachedData;                // optional
+  CPWL_Wnd* pParentWnd;               // ignore
+  CPWL_MsgControl* pMsgControl;       // ignore
+  int32_t eCursorType;                // ignore
+  CPDF_Matrix mtChild;                // ignore
 };
 
 class CPWL_Timer {
diff --git a/fpdfsdk/src/fpdf_flatten.cpp b/fpdfsdk/src/fpdf_flatten.cpp
index e48c6ab..3049384 100644
--- a/fpdfsdk/src/fpdf_flatten.cpp
+++ b/fpdfsdk/src/fpdf_flatten.cpp
@@ -196,8 +196,7 @@
   if (!pContentsObj) {
     // Create a new contents dictionary
     if (!key.IsEmpty()) {
-      CPDF_Stream* pNewContents =
-          new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
+      CPDF_Stream* pNewContents = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
       if (!pNewContents)
         return;
       pPage->SetAtReference("Contents", pDocument,
@@ -246,8 +245,7 @@
   pPage->SetAtReference("Contents", pDocument, dwObjNum);
 
   if (!key.IsEmpty()) {
-    CPDF_Stream* pNewContents =
-        new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
+    CPDF_Stream* pNewContents = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
     dwObjNum = pDocument->AddIndirectObject(pNewContents);
     pContentsArray->AddReference(pDocument, dwObjNum);
 
@@ -391,8 +389,7 @@
     pPageDict->SetAt("Resources", pRes);
   }
 
-  CPDF_Stream* pNewXObject =
-      new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
+  CPDF_Stream* pNewXObject = new CPDF_Stream(NULL, 0, new CPDF_Dictionary);
   FX_DWORD dwObjNum = pDocument->AddIndirectObject(pNewXObject);
   CPDF_Dictionary* pPageXObject = pRes->GetDict("XObject");
   if (!pPageXObject) {
diff --git a/fpdfsdk/src/fpdf_transformpage.cpp b/fpdfsdk/src/fpdf_transformpage.cpp
index aa08f68..6e72431 100644
--- a/fpdfsdk/src/fpdf_transformpage.cpp
+++ b/fpdfsdk/src/fpdf_transformpage.cpp
@@ -151,8 +151,7 @@
     if (pDirectObj != NULL) {
       if (pDirectObj->GetType() == PDFOBJ_ARRAY) {
         pContentArray = (CPDF_Array*)pDirectObj;
-        CPDF_Reference* pRef =
-            new CPDF_Reference(pDoc, pStream->GetObjNum());
+        CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
         pContentArray->InsertAt(0, pRef);
         pContentArray->AddReference(pDoc, pEndStream);
 
@@ -324,8 +323,7 @@
     if (pDirectObj != NULL) {
       if (pDirectObj->GetType() == PDFOBJ_ARRAY) {
         pContentArray = (CPDF_Array*)pDirectObj;
-        CPDF_Reference* pRef =
-            new CPDF_Reference(pDoc, pStream->GetObjNum());
+        CPDF_Reference* pRef = new CPDF_Reference(pDoc, pStream->GetObjNum());
         pContentArray->InsertAt(0, pRef);
 
       } else if (pDirectObj->GetType() == PDFOBJ_STREAM) {
diff --git a/fpdfsdk/src/fpdfeditimg.cpp b/fpdfsdk/src/fpdfeditimg.cpp
index f839d2c..170a2dd 100644
--- a/fpdfsdk/src/fpdfeditimg.cpp
+++ b/fpdfsdk/src/fpdfeditimg.cpp
@@ -14,8 +14,7 @@
   if (!document)
     return NULL;
   CPDF_ImageObject* pImageObj = new CPDF_ImageObject;
-  CPDF_Image* pImg =
-      new CPDF_Image(((CPDFXFA_Document*)document)->GetPDFDoc());
+  CPDF_Image* pImg = new CPDF_Image(((CPDFXFA_Document*)document)->GetPDFDoc());
   pImageObj->m_pImage = pImg;
   return pImageObj;
 }
diff --git a/fpdfsdk/src/fpdfview.cpp b/fpdfsdk/src/fpdfview.cpp
index a308f17..87b23c3 100644
--- a/fpdfsdk/src/fpdfview.cpp
+++ b/fpdfsdk/src/fpdfview.cpp
@@ -237,7 +237,6 @@
   return FSDK_SetSandBoxPolicy(policy, enable);
 }
 
-
 DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path,
                                                   FPDF_BYTESTRING password) {
   // NOTE: the creation of the file needs to be by the embedder on the
diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
index be3b235..9378735 100644
--- a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
+++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp
@@ -546,7 +546,8 @@
   CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
 
   if (dwEvent == XFA_WIDGETEVENT_PostAdded) {
-    // 			CPDFSDK_Annot* pAnnot = pAnnotHandlerMgr->NewAnnot(hWidget,
+    // 			CPDFSDK_Annot* pAnnot =
+    // pAnnotHandlerMgr->NewAnnot(hWidget,
     // pSdkPageView);
     // 			pAnnotHandlerMgr->Annot_OnLoad(pAnnot);
 
diff --git a/fpdfsdk/src/fsdk_annothandler.cpp b/fpdfsdk/src/fsdk_annothandler.cpp
index a729fb7..55d4629 100644
--- a/fpdfsdk/src/fsdk_annothandler.cpp
+++ b/fpdfsdk/src/fsdk_annothandler.cpp
@@ -742,7 +742,7 @@
 // CPDFSDK_XFAAnnotHandler
 
 #define FWL_WGTHITTEST_Unknown 0
-#define FWL_WGTHITTEST_Client 1  // arrow
+#define FWL_WGTHITTEST_Client 1     // arrow
 #define FWL_WGTHITTEST_Titlebar 11  // caption
 #define FWL_WGTHITTEST_HScrollBar 15
 #define FWL_WGTHITTEST_VScrollBar 16
diff --git a/fpdfsdk/src/fsdk_baseform.cpp b/fpdfsdk/src/fsdk_baseform.cpp
index d06fcc0..b153ceb 100644
--- a/fpdfsdk/src/fsdk_baseform.cpp
+++ b/fpdfsdk/src/fsdk_baseform.cpp
@@ -1126,10 +1126,7 @@
   ASSERT(pDoc != NULL);
   CPDFDoc_Environment* pEnv = pDoc->GetEnv();
 
-  CBA_FontMap FontMap(
-      this,
-      pEnv->GetSysHandler());  //,
-                               //ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv()));
+  CBA_FontMap FontMap(this, pEnv->GetSysHandler());
   FontMap.Initial();
 
   FontMap.SetAPType("N");
@@ -1689,10 +1686,7 @@
     ASSERT(pDoc != NULL);
     CPDFDoc_Environment* pEnv = pDoc->GetEnv();
 
-    CBA_FontMap FontMap(
-        this,
-        pEnv->GetSysHandler());  //,
-                                 //ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv()));
+    CBA_FontMap FontMap(this, pEnv->GetSysHandler());
     FontMap.Initial();
     pEdit->SetFontMap(&FontMap);
 
diff --git a/fpdfsdk/src/fxedit/fxet_ap.cpp b/fpdfsdk/src/fxedit/fxet_ap.cpp
index b9900d8..4e92099 100644
--- a/fpdfsdk/src/fxedit/fxet_ap.cpp
+++ b/fpdfsdk/src/fxedit/fxet_ap.cpp
@@ -196,11 +196,6 @@
         CPVT_Word word;
         CPVT_Line line;
         if (pIterator->GetWord(word) && pIterator->GetLine(line)) {
-          // CPDF_Rect rcWordSel = CPDF_Rect(word.ptWord.x,line.ptLine.y +
-          // line.fLineDescent,
-          //		word.ptWord.x+word.fWidth,line.ptLine.y +
-          //line.fLineAscent);
-
           sRet << word.ptWord.x + ptOffset.x << " "
                << line.ptLine.y + line.fLineDescent << " " << word.fWidth << " "
                << line.fLineAscent - line.fLineDescent << " re\nf\n";
diff --git a/fpdfsdk/src/javascript/app.cpp b/fpdfsdk/src/javascript/app.cpp
index ed1a7ca..136b544 100644
--- a/fpdfsdk/src/javascript/app.cpp
+++ b/fpdfsdk/src/javascript/app.cpp
@@ -308,10 +308,10 @@
           CJS_Value* pValue = new CJS_Value(isolate);
           //					if (iLenth == 1)
           //						pValue = new
-          //CJS_Value(isolate);
+          // CJS_Value(isolate);
           //					else if (iLenth > 1)
           //						pValue = new
-          //CJS_Value[iLenth];
+          // CJS_Value[iLenth];
 
           for (int i = 0; i < iLenth; i++) {
             carray.GetElement(i, *pValue);
diff --git a/fpdfsdk/src/jsapi/fxjs_v8.cpp b/fpdfsdk/src/jsapi/fxjs_v8.cpp
index 760702e..d0e8e6e 100644
--- a/fpdfsdk/src/jsapi/fxjs_v8.cpp
+++ b/fpdfsdk/src/jsapi/fxjs_v8.cpp
@@ -88,8 +88,8 @@
     pArray = new CFX_PtrArray();
     isolate->SetData(g_embedderDataSlot, pArray);
   }
-  CJS_ObjDefintion* pObjDef = new CJS_ObjDefintion(
-      isolate, sObjName, eObjType, pConstructor, pDestructor);
+  CJS_ObjDefintion* pObjDef = new CJS_ObjDefintion(isolate, sObjName, eObjType,
+                                                   pConstructor, pDestructor);
   pArray->Add(pObjDef);
   return pArray->GetSize() - 1;
 }
diff --git a/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp b/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp
index ba75e55..b252bff 100644
--- a/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp
+++ b/fpdfsdk/src/pdfwindow/PWL_ListBox.cpp
@@ -183,7 +183,7 @@
 
       if (m_pList->IsItemSelected(i)) {
         //	CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem,
-        //ArgbEncode(255,0,51,113));
+        // ArgbEncode(255,0,51,113));
         IFX_SystemHandler* pSysHandler = GetSystemHandler();
         if (pSysHandler && pSysHandler->IsSelectionImplemented()) {
           IFX_Edit::DrawEdit(
diff --git a/public/fpdf_formfill.h b/public/fpdf_formfill.h
index 0b42cac..73fe491 100644
--- a/public/fpdf_formfill.h
+++ b/public/fpdf_formfill.h
@@ -11,9 +11,9 @@
 
 typedef void* FPDF_FORMHANDLE;
 
-#define DOCTYPE_PDF 0  // Normal pdf Document
+#define DOCTYPE_PDF 0          // Normal pdf Document
 #define DOCTYPE_DYNIMIC_XFA 1  // Dynimic xfa Document Type
-#define DOCTYPE_STATIC_XFA 2  // Static xfa Document Type
+#define DOCTYPE_STATIC_XFA 2   // Static xfa Document Type
 
 // Exported Functions
 #ifdef __cplusplus
@@ -1104,6 +1104,7 @@
   0x13  // WP, before printing document, JavaScript action.
 #define FPDFDOC_AACTION_DP \
   0x14  // DP, after printing document, JavaScript action.
+
 /**
 * Function: FORM_DoDocumentAAction
 *           This method is required for performing the document's
diff --git a/xfa/include/fwl/core/fwl_note.h b/xfa/include/fwl/core/fwl_note.h
index ee85b96..66366e9 100644
--- a/xfa/include/fwl/core/fwl_note.h
+++ b/xfa/include/fwl/core/fwl_note.h
@@ -169,20 +169,20 @@
   virtual ~CFWL_Message() {}
   virtual CFWL_Event* CloneToEvent() { return NULL; }
 };
-#define BEGIN_FWL_MESSAGE_DEF(classname, msghashcode)              \
-  class classname : public CFWL_Message {                          \
-   public:                                                         \
-    classname() : CFWL_Message() {}                                \
-    virtual CFWL_Note* Clone() { return new classname(*this); } \
-    virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const {  \
-      wsClass = L" ## classname ## ";                              \
-      return FWL_ERR_Succeeded;                                    \
-    }                                                              \
-    virtual FX_DWORD GetClassID() const { return msghashcode; }    \
-    virtual CFWL_Event* CloneToEvent() {                           \
-      classname* pEvent = new classname;                        \
-      pEvent->m_bIsEvent = TRUE;                                   \
-      return (CFWL_Event*)pEvent;                                  \
+#define BEGIN_FWL_MESSAGE_DEF(classname, msghashcode)             \
+  class classname : public CFWL_Message {                         \
+   public:                                                        \
+    classname() : CFWL_Message() {}                               \
+    virtual CFWL_Note* Clone() { return new classname(*this); }   \
+    virtual FWL_ERR GetClassName(CFX_WideString& wsClass) const { \
+      wsClass = L" ## classname ## ";                             \
+      return FWL_ERR_Succeeded;                                   \
+    }                                                             \
+    virtual FX_DWORD GetClassID() const { return msghashcode; }   \
+    virtual CFWL_Event* CloneToEvent() {                          \
+      classname* pEvent = new classname;                          \
+      pEvent->m_bIsEvent = TRUE;                                  \
+      return (CFWL_Event*)pEvent;                                 \
     }
 #define END_FWL_MESSAGE_DEF \
   }                         \
diff --git a/xfa/src/fee/src/fee/fde_txtedtengine.cpp b/xfa/src/fee/src/fee/fde_txtedtengine.cpp
index b4f2062..7efd95d 100644
--- a/xfa/src/fee/src/fee/fde_txtedtengine.cpp
+++ b/xfa/src/fee/src/fee/fde_txtedtengine.cpp
@@ -485,11 +485,10 @@
         Replace(nBgn, nEnd - nBgn + 1, wsDisplay);
         int32_t nNewCaret = nBgn + nCaret;
         if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
-          IFDE_TxtEdtDoRecord* pRecord =
-              new CFDE_TxtEdtDoRecord_FieldReplace(
-                  this, m_nCaret, nNewCaret, pField, nIndexInField, nBgn,
-                  wsDisplay.GetLength(), wsDel,
-                  CFX_WideStringC(lpText, nLength), TRUE);
+          IFDE_TxtEdtDoRecord* pRecord = new CFDE_TxtEdtDoRecord_FieldReplace(
+              this, m_nCaret, nNewCaret, pField, nIndexInField, nBgn,
+              wsDisplay.GetLength(), wsDel, CFX_WideStringC(lpText, nLength),
+              TRUE);
           CFX_ByteString bsDoRecord;
           pRecord->Serialize(bsDoRecord);
           m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord);
diff --git a/xfa/src/fwl/src/basewidget/fwl_datetimepickerimp.cpp b/xfa/src/fwl/src/basewidget/fwl_datetimepickerimp.cpp
index b7bc8fc..c378ccd 100644
--- a/xfa/src/fwl/src/basewidget/fwl_datetimepickerimp.cpp
+++ b/xfa/src/fwl/src/basewidget/fwl_datetimepickerimp.cpp
@@ -210,8 +210,7 @@
   if (m_pDelegate) {
     delete (CFWL_MonthCalendarImpDelegate*)m_pDelegate;
   }
-  m_pDelegate =
-      (IFWL_WidgetDelegate*)new CFWL_DateTimeCalendarDelegate(this);
+  m_pDelegate = (IFWL_WidgetDelegate*)new CFWL_DateTimeCalendarDelegate(this);
   return FWL_ERR_Succeeded;
 }
 FWL_ERR CFWL_DateTimeCalendar::Finalize() {
@@ -454,8 +453,7 @@
 FWL_ERR CFWL_DateTimePickerImp::Initialize() {
   _FWL_ERR_CHECK_RETURN_VALUE_IF_FAIL(CFWL_WidgetImp::Initialize(),
                                       FWL_ERR_Indefinite);
-  m_pDelegate =
-      (IFWL_WidgetDelegate*)new CFWL_DateTimePickerImpDelegate(this);
+  m_pDelegate = (IFWL_WidgetDelegate*)new CFWL_DateTimePickerImpDelegate(this);
   m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat;
   CFWL_WidgetImpProperties propMonth;
   propMonth.m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border;
diff --git a/xfa/src/fwl/src/basewidget/fwl_monthcalendarimp.cpp b/xfa/src/fwl/src/basewidget/fwl_monthcalendarimp.cpp
index 494bc31..efe5017 100644
--- a/xfa/src/fwl/src/basewidget/fwl_monthcalendarimp.cpp
+++ b/xfa/src/fwl/src/basewidget/fwl_monthcalendarimp.cpp
@@ -131,8 +131,7 @@
 FWL_ERR CFWL_MonthCalendarImp::Initialize() {
   _FWL_ERR_CHECK_RETURN_VALUE_IF_FAIL(CFWL_WidgetImp::Initialize(),
                                       FWL_ERR_Indefinite);
-  m_pDelegate =
-      (IFWL_WidgetDelegate*)new CFWL_MonthCalendarImpDelegate(this);
+  m_pDelegate = (IFWL_WidgetDelegate*)new CFWL_MonthCalendarImpDelegate(this);
   return FWL_ERR_Succeeded;
 }
 FWL_ERR CFWL_MonthCalendarImp::Finalize() {
diff --git a/xfa/src/fxbarcode/BC_BarCode.cpp b/xfa/src/fxbarcode/BC_BarCode.cpp
index 03618e9..bb7ed6b 100644
--- a/xfa/src/fxbarcode/BC_BarCode.cpp
+++ b/xfa/src/fxbarcode/BC_BarCode.cpp
@@ -174,8 +174,8 @@
   }
 }
 CBC_Code39::CBC_Code39() {
-  m_pBCReader = (CBC_Reader*)new(CBC_OnedCode39Reader);
-  m_pBCWriter = (CBC_Writer*)new(CBC_OnedCode39Writer);
+  m_pBCReader = (CBC_Reader*)new (CBC_OnedCode39Reader);
+  m_pBCWriter = (CBC_Writer*)new (CBC_OnedCode39Writer);
 }
 CBC_Code39::CBC_Code39(FX_BOOL usingCheckDigit) {
   m_pBCReader = (CBC_Reader*)new CBC_OnedCode39Reader(usingCheckDigit);
@@ -267,8 +267,8 @@
   return FALSE;
 }
 CBC_Codabar::CBC_Codabar() {
-  m_pBCReader = (CBC_Reader*)new(CBC_OnedCodaBarReader);
-  m_pBCWriter = (CBC_Writer*)new(CBC_OnedCodaBarWriter);
+  m_pBCReader = (CBC_Reader*)new (CBC_OnedCodaBarReader);
+  m_pBCWriter = (CBC_Writer*)new (CBC_OnedCodaBarWriter);
 }
 CBC_Codabar::~CBC_Codabar() {
   if (m_pBCReader) {
@@ -358,7 +358,7 @@
   return CFX_WideString::FromUTF8(str, str.GetLength());
 }
 CBC_Code128::CBC_Code128(BC_TYPE type) {
-  m_pBCReader = (CBC_Reader*)new(CBC_OnedCode128Reader);
+  m_pBCReader = (CBC_Reader*)new (CBC_OnedCode128Reader);
   m_pBCWriter = (CBC_Writer*)new CBC_OnedCode128Writer(type);
 }
 CBC_Code128::~CBC_Code128() {
@@ -435,8 +435,8 @@
   return CFX_WideString::FromUTF8(str, str.GetLength());
 }
 CBC_EAN8::CBC_EAN8() {
-  m_pBCReader = (CBC_Reader*)new(CBC_OnedEAN8Reader);
-  m_pBCWriter = (CBC_Writer*)new(CBC_OnedEAN8Writer);
+  m_pBCReader = (CBC_Reader*)new (CBC_OnedEAN8Reader);
+  m_pBCWriter = (CBC_Writer*)new (CBC_OnedEAN8Writer);
 }
 CBC_EAN8::~CBC_EAN8() {
   if (m_pBCReader) {
@@ -518,8 +518,8 @@
   return CFX_WideString::FromUTF8(str, str.GetLength());
 }
 CBC_EAN13::CBC_EAN13() {
-  m_pBCReader = (CBC_Reader*)new(CBC_OnedEAN13Reader);
-  m_pBCWriter = (CBC_Writer*)new(CBC_OnedEAN13Writer);
+  m_pBCReader = (CBC_Reader*)new (CBC_OnedEAN13Reader);
+  m_pBCWriter = (CBC_Writer*)new (CBC_OnedEAN13Writer);
 }
 CBC_EAN13::~CBC_EAN13() {
   if (m_pBCReader) {
@@ -602,9 +602,9 @@
   return CFX_WideString::FromUTF8(str, str.GetLength());
 }
 CBC_UPCA::CBC_UPCA() {
-  m_pBCReader = (CBC_Reader*)new(CBC_OnedUPCAReader);
+  m_pBCReader = (CBC_Reader*)new (CBC_OnedUPCAReader);
   ((CBC_OnedUPCAReader*)m_pBCReader)->Init();
-  m_pBCWriter = (CBC_Writer*)new(CBC_OnedUPCAWriter);
+  m_pBCWriter = (CBC_Writer*)new (CBC_OnedUPCAWriter);
 }
 CBC_UPCA::~CBC_UPCA() {
   if (m_pBCReader) {
@@ -688,9 +688,9 @@
   return CFX_WideString::FromUTF8(str, str.GetLength());
 }
 CBC_QRCode::CBC_QRCode() {
-  m_pBCReader = (CBC_Reader*)new(CBC_QRCodeReader);
+  m_pBCReader = (CBC_Reader*)new (CBC_QRCodeReader);
   ((CBC_QRCodeReader*)m_pBCReader)->Init();
-  m_pBCWriter = (CBC_Writer*)new(CBC_QRCodeWriter);
+  m_pBCWriter = (CBC_Writer*)new (CBC_QRCodeWriter);
 }
 CBC_QRCode::~CBC_QRCode() {
   if (m_pBCReader) {
@@ -762,8 +762,8 @@
   return CFX_WideString::FromUTF8(retStr, retStr.GetLength());
 }
 CBC_PDF417I::CBC_PDF417I() {
-  m_pBCReader = (CBC_Reader*)new(CBC_PDF417Reader);
-  m_pBCWriter = (CBC_Writer*)new(CBC_PDF417Writer);
+  m_pBCReader = (CBC_Reader*)new (CBC_PDF417Reader);
+  m_pBCWriter = (CBC_Writer*)new (CBC_PDF417Writer);
 }
 CBC_PDF417I::~CBC_PDF417I() {
   if (m_pBCReader) {
@@ -823,9 +823,9 @@
   return CFX_WideString::FromUTF8(bytestring, bytestring.GetLength());
 }
 CBC_DataMatrix::CBC_DataMatrix() {
-  m_pBCReader = (CBC_Reader*)new(CBC_DataMatrixReader);
+  m_pBCReader = (CBC_Reader*)new (CBC_DataMatrixReader);
   ((CBC_DataMatrixReader*)m_pBCReader)->Init();
-  m_pBCWriter = (CBC_Writer*)new(CBC_DataMatrixWriter);
+  m_pBCWriter = (CBC_Writer*)new (CBC_DataMatrixWriter);
 }
 CBC_DataMatrix::~CBC_DataMatrix() {
   if (m_pBCReader) {
diff --git a/xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.cpp b/xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.cpp
index 50dd8fa..6edbac1 100644
--- a/xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.cpp
+++ b/xfa/src/fxbarcode/common/BC_CommonPerspectiveTransform.cpp
@@ -97,7 +97,7 @@
   FX_FLOAT dy3 = y0 - y1 + y2 - y3;
   if ((dy2 == 0.0f) && (dy3 == 0.0f)) {
     return new CBC_CommonPerspectiveTransform(x1 - x0, x2 - x1, x0, y1 - y0,
-                                                 y2 - y1, y0, 0.0f, 0.0f, 1.0f);
+                                              y2 - y1, y0, 0.0f, 0.0f, 1.0f);
   } else {
     FX_FLOAT dx1 = x1 - x2;
     FX_FLOAT dx2 = x3 - x2;
diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp
index e642478..69257b1 100644
--- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp
+++ b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixVersion.cpp
@@ -96,67 +96,67 @@
     return NULL;
   }
   if (VERSIONS->GetSize() == 0) {
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        1, 10, 10, 8, 8, new ECBlocks(5, new ECB(1, 3))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        2, 12, 12, 10, 10, new ECBlocks(7, new ECB(1, 5))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        3, 14, 14, 12, 12, new ECBlocks(10, new ECB(1, 8))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        4, 16, 16, 14, 14, new ECBlocks(12, new ECB(1, 12))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        5, 18, 18, 16, 16, new ECBlocks(14, new ECB(1, 18))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        6, 20, 20, 18, 18, new ECBlocks(18, new ECB(1, 22))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        7, 22, 22, 20, 20, new ECBlocks(20, new ECB(1, 30))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        8, 24, 24, 22, 22, new ECBlocks(24, new ECB(1, 36))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        9, 26, 26, 24, 24, new ECBlocks(28, new ECB(1, 44))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        10, 32, 32, 14, 14, new ECBlocks(36, new ECB(1, 62))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        11, 36, 36, 16, 16, new ECBlocks(42, new ECB(1, 86))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        12, 40, 40, 18, 18, new ECBlocks(48, new ECB(1, 114))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        13, 44, 44, 20, 20, new ECBlocks(56, new ECB(1, 144))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        14, 48, 48, 22, 22, new ECBlocks(68, new ECB(1, 174))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        15, 52, 52, 24, 24, new ECBlocks(42, new ECB(2, 102))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        16, 64, 64, 14, 14, new ECBlocks(56, new ECB(2, 140))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        17, 72, 72, 16, 16, new ECBlocks(36, new ECB(4, 92))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        18, 80, 80, 18, 18, new ECBlocks(48, new ECB(4, 114))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        19, 88, 88, 20, 20, new ECBlocks(56, new ECB(4, 144))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        20, 96, 96, 22, 22, new ECBlocks(68, new ECB(4, 174))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        21, 104, 104, 24, 24, new ECBlocks(56, new ECB(6, 136))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        22, 120, 120, 18, 18, new ECBlocks(68, new ECB(6, 175))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        23, 132, 132, 20, 20, new ECBlocks(62, new ECB(8, 163))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(1, 10, 10, 8, 8,
+                                            new ECBlocks(5, new ECB(1, 3))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(2, 12, 12, 10, 10,
+                                            new ECBlocks(7, new ECB(1, 5))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(3, 14, 14, 12, 12,
+                                            new ECBlocks(10, new ECB(1, 8))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(4, 16, 16, 14, 14,
+                                            new ECBlocks(12, new ECB(1, 12))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(5, 18, 18, 16, 16,
+                                            new ECBlocks(14, new ECB(1, 18))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(6, 20, 20, 18, 18,
+                                            new ECBlocks(18, new ECB(1, 22))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(7, 22, 22, 20, 20,
+                                            new ECBlocks(20, new ECB(1, 30))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(8, 24, 24, 22, 22,
+                                            new ECBlocks(24, new ECB(1, 36))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(9, 26, 26, 24, 24,
+                                            new ECBlocks(28, new ECB(1, 44))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(10, 32, 32, 14, 14,
+                                            new ECBlocks(36, new ECB(1, 62))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(11, 36, 36, 16, 16,
+                                            new ECBlocks(42, new ECB(1, 86))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(12, 40, 40, 18, 18,
+                                            new ECBlocks(48, new ECB(1, 114))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(13, 44, 44, 20, 20,
+                                            new ECBlocks(56, new ECB(1, 144))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(14, 48, 48, 22, 22,
+                                            new ECBlocks(68, new ECB(1, 174))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(15, 52, 52, 24, 24,
+                                            new ECBlocks(42, new ECB(2, 102))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(16, 64, 64, 14, 14,
+                                            new ECBlocks(56, new ECB(2, 140))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(17, 72, 72, 16, 16,
+                                            new ECBlocks(36, new ECB(4, 92))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(18, 80, 80, 18, 18,
+                                            new ECBlocks(48, new ECB(4, 114))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(19, 88, 88, 20, 20,
+                                            new ECBlocks(56, new ECB(4, 144))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(20, 96, 96, 22, 22,
+                                            new ECBlocks(68, new ECB(4, 174))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(21, 104, 104, 24, 24,
+                                            new ECBlocks(56, new ECB(6, 136))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(22, 120, 120, 18, 18,
+                                            new ECBlocks(68, new ECB(6, 175))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(23, 132, 132, 20, 20,
+                                            new ECBlocks(62, new ECB(8, 163))));
     VERSIONS->Add(new CBC_DataMatrixVersion(
         24, 144, 144, 22, 22,
         new ECBlocks(62, new ECB(8, 156), new ECB(2, 155))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        25, 8, 18, 6, 16, new ECBlocks(7, new ECB(1, 5))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        26, 8, 32, 6, 14, new ECBlocks(11, new ECB(1, 10))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        27, 12, 26, 10, 24, new ECBlocks(14, new ECB(1, 16))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        28, 12, 36, 10, 16, new ECBlocks(18, new ECB(1, 22))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        29, 16, 36, 14, 16, new ECBlocks(24, new ECB(1, 32))));
-    VERSIONS->Add(new CBC_DataMatrixVersion(
-        30, 16, 48, 14, 22, new ECBlocks(28, new ECB(1, 49))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(25, 8, 18, 6, 16,
+                                            new ECBlocks(7, new ECB(1, 5))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(26, 8, 32, 6, 14,
+                                            new ECBlocks(11, new ECB(1, 10))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(27, 12, 26, 10, 24,
+                                            new ECBlocks(14, new ECB(1, 16))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(28, 12, 36, 10, 16,
+                                            new ECBlocks(18, new ECB(1, 22))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(29, 16, 36, 14, 16,
+                                            new ECBlocks(24, new ECB(1, 32))));
+    VERSIONS->Add(new CBC_DataMatrixVersion(30, 16, 48, 14, 22,
+                                            new ECBlocks(28, new ECB(1, 49))));
   }
   int32_t numVersions = VERSIONS->GetSize();
   for (int32_t i = 0; i < numVersions; ++i) {
diff --git a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
index 20eaa4c..408a598 100644
--- a/xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
+++ b/xfa/src/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
@@ -73,7 +73,7 @@
   BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
   CBC_DefaultPlacement* placement =
       new CBC_DefaultPlacement(codewords, symbolInfo->getSymbolDataWidth(e),
-                                  symbolInfo->getSymbolDataHeight(e));
+                               symbolInfo->getSymbolDataHeight(e));
   BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
   placement->place();
   CBC_CommonByteMatrix* bytematrix = encodeLowLevel(placement, symbolInfo, e);
diff --git a/xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.cpp b/xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.cpp
index 68b5b4c..b6a1932 100644
--- a/xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.cpp
+++ b/xfa/src/fxbarcode/datamatrix/BC_SymbolInfo.cpp
@@ -57,20 +57,13 @@
   m_PROD_SYMBOLS[17] = new CBC_SymbolInfo(FALSE, 114, 48, 18, 18, 4);
   m_PROD_SYMBOLS[18] = new CBC_SymbolInfo(FALSE, 144, 56, 20, 20, 4);
   m_PROD_SYMBOLS[19] = new CBC_SymbolInfo(FALSE, 174, 68, 22, 22, 4);
-  m_PROD_SYMBOLS[20] =
-      new CBC_SymbolInfo(FALSE, 204, 84, 24, 24, 4, 102, 42);
-  m_PROD_SYMBOLS[21] =
-      new CBC_SymbolInfo(FALSE, 280, 112, 14, 14, 16, 140, 56);
-  m_PROD_SYMBOLS[22] =
-      new CBC_SymbolInfo(FALSE, 368, 144, 16, 16, 16, 92, 36);
-  m_PROD_SYMBOLS[23] =
-      new CBC_SymbolInfo(FALSE, 456, 192, 18, 18, 16, 114, 48);
-  m_PROD_SYMBOLS[24] =
-      new CBC_SymbolInfo(FALSE, 576, 224, 20, 20, 16, 144, 56);
-  m_PROD_SYMBOLS[25] =
-      new CBC_SymbolInfo(FALSE, 696, 272, 22, 22, 16, 174, 68);
-  m_PROD_SYMBOLS[26] =
-      new CBC_SymbolInfo(FALSE, 816, 336, 24, 24, 16, 136, 56);
+  m_PROD_SYMBOLS[20] = new CBC_SymbolInfo(FALSE, 204, 84, 24, 24, 4, 102, 42);
+  m_PROD_SYMBOLS[21] = new CBC_SymbolInfo(FALSE, 280, 112, 14, 14, 16, 140, 56);
+  m_PROD_SYMBOLS[22] = new CBC_SymbolInfo(FALSE, 368, 144, 16, 16, 16, 92, 36);
+  m_PROD_SYMBOLS[23] = new CBC_SymbolInfo(FALSE, 456, 192, 18, 18, 16, 114, 48);
+  m_PROD_SYMBOLS[24] = new CBC_SymbolInfo(FALSE, 576, 224, 20, 20, 16, 144, 56);
+  m_PROD_SYMBOLS[25] = new CBC_SymbolInfo(FALSE, 696, 272, 22, 22, 16, 174, 68);
+  m_PROD_SYMBOLS[26] = new CBC_SymbolInfo(FALSE, 816, 336, 24, 24, 16, 136, 56);
   m_PROD_SYMBOLS[27] =
       new CBC_SymbolInfo(FALSE, 1050, 408, 18, 18, 36, 175, 68);
   m_PROD_SYMBOLS[28] =
diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.cpp
index 8aef43f..c1a7394 100644
--- a/xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.cpp
+++ b/xfa/src/fxbarcode/pdf417/BC_PDF417BoundingBox.cpp
@@ -68,9 +68,9 @@
     boundingBox = new CBC_BoundingBox(leftBox);
     return boundingBox;
   }
-  boundingBox = new CBC_BoundingBox(
-      leftBox->m_image, leftBox->m_topLeft, leftBox->m_bottomLeft,
-      rightBox->m_topRight, rightBox->m_bottomRight, e);
+  boundingBox = new CBC_BoundingBox(leftBox->m_image, leftBox->m_topLeft,
+                                    leftBox->m_bottomLeft, rightBox->m_topRight,
+                                    rightBox->m_bottomRight, e);
   BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
   return boundingBox;
 }
@@ -130,8 +130,7 @@
   if (m_bottomRight) {
     delete m_bottomRight;
   }
-  m_bottomRight =
-      new CBC_ResultPoint(bottomRight.GetX(), bottomRight.GetY());
+  m_bottomRight = new CBC_ResultPoint(bottomRight.GetX(), bottomRight.GetY());
   calculateMinMaxValues();
 }
 int32_t CBC_BoundingBox::getMinX() {
@@ -172,8 +171,7 @@
     m_topLeft = new CBC_ResultPoint(topLeft->GetX(), topLeft->GetY());
   }
   if (bottomLeft) {
-    m_bottomLeft =
-        new CBC_ResultPoint(bottomLeft->GetX(), bottomLeft->GetY());
+    m_bottomLeft = new CBC_ResultPoint(bottomLeft->GetX(), bottomLeft->GetY());
   }
   if (topRight) {
     m_topRight = new CBC_ResultPoint(topRight->GetX(), topRight->GetY());
@@ -190,9 +188,9 @@
     m_bottomLeft = new CBC_ResultPoint(0, m_bottomRight->GetY());
   } else if (m_topRight == NULL) {
     m_topRight = new CBC_ResultPoint((FX_FLOAT)m_image->GetWidth() - 1,
-                                        (FX_FLOAT)m_topLeft->GetY());
+                                     (FX_FLOAT)m_topLeft->GetY());
     m_bottomRight = new CBC_ResultPoint((FX_FLOAT)m_image->GetWidth() - 1,
-                                           (FX_FLOAT)m_bottomLeft->GetY());
+                                        (FX_FLOAT)m_bottomLeft->GetY());
   }
   m_minX = (int32_t)(m_topLeft->GetX() < m_bottomLeft->GetX()
                          ? m_topLeft->GetX()
diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.cpp
index bc3fb4c..0a0067c 100644
--- a/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.cpp
+++ b/xfa/src/fxbarcode/pdf417/BC_PDF417DetectionResultRowIndicatorColumn.cpp
@@ -210,9 +210,9 @@
   }
   CBC_BarcodeMetadata* barcodeMetadata =
       new CBC_BarcodeMetadata(barcodeColumnCount.getValue()->GetAt(0),
-                                 barcodeRowCountUpperPart.getValue()->GetAt(0),
-                                 barcodeRowCountLowerPart.getValue()->GetAt(0),
-                                 barcodeECLevel.getValue()->GetAt(0));
+                              barcodeRowCountUpperPart.getValue()->GetAt(0),
+                              barcodeRowCountLowerPart.getValue()->GetAt(0),
+                              barcodeECLevel.getValue()->GetAt(0));
   removeIncorrectCodewords(codewords, *barcodeMetadata);
   return barcodeMetadata;
 }
diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417Detector.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417Detector.cpp
index 7f3940d..3f0532a 100644
--- a/xfa/src/fxbarcode/pdf417/BC_PDF417Detector.cpp
+++ b/xfa/src/fxbarcode/pdf417/BC_PDF417Detector.cpp
@@ -214,10 +214,10 @@
           break;
         }
       }
-      result->SetAt(0, new CBC_ResultPoint((FX_FLOAT)loc->GetAt(0),
-                                              (FX_FLOAT)startRow));
-      result->SetAt(1, new CBC_ResultPoint((FX_FLOAT)loc->GetAt(1),
-                                              (FX_FLOAT)startRow));
+      result->SetAt(
+          0, new CBC_ResultPoint((FX_FLOAT)loc->GetAt(0), (FX_FLOAT)startRow));
+      result->SetAt(
+          1, new CBC_ResultPoint((FX_FLOAT)loc->GetAt(1), (FX_FLOAT)startRow));
       found = TRUE;
       delete loc;
       break;
@@ -250,9 +250,9 @@
     }
     stopRow -= skippedRowCount + 1;
     result->SetAt(2, new CBC_ResultPoint((FX_FLOAT)previousRowLoc.GetAt(0),
-                                            (FX_FLOAT)stopRow));
+                                         (FX_FLOAT)stopRow));
     result->SetAt(3, new CBC_ResultPoint((FX_FLOAT)previousRowLoc.GetAt(1),
-                                            (FX_FLOAT)stopRow));
+                                         (FX_FLOAT)stopRow));
   }
   if (stopRow - startRow < BARCODE_MIN_HEIGHT) {
     for (int32_t i = 0; i < result->GetSize(); i++) {
diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.cpp
index 6f3462c..d9952c6 100644
--- a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.cpp
+++ b/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.cpp
@@ -74,7 +74,7 @@
   CBC_PDF417ECModulusPoly* modulusPoly = NULL;
   if (coefficient == 0) {
     modulusPoly = new CBC_PDF417ECModulusPoly(m_zero->getField(),
-                                                 m_zero->getCoefficients(), e);
+                                              m_zero->getCoefficients(), e);
     BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
     return modulusPoly;
   }
diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp
index 423a700..2e06fdb 100644
--- a/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp
+++ b/xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp
@@ -94,7 +94,7 @@
   CBC_PDF417ECModulusPoly* modulusPoly = NULL;
   if (isZero()) {
     modulusPoly = new CBC_PDF417ECModulusPoly(other->getField(),
-                                                 other->getCoefficients(), e);
+                                              other->getCoefficients(), e);
     BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
     return modulusPoly;
   }
@@ -149,9 +149,9 @@
     int32_t& e) {
   CBC_PDF417ECModulusPoly* modulusPoly = NULL;
   if (isZero() || other->isZero()) {
-    modulusPoly = new CBC_PDF417ECModulusPoly(
-        m_field->getZero()->getField(), m_field->getZero()->getCoefficients(),
-        e);
+    modulusPoly =
+        new CBC_PDF417ECModulusPoly(m_field->getZero()->getField(),
+                                    m_field->getZero()->getCoefficients(), e);
     BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
     return modulusPoly;
   }
@@ -190,9 +190,9 @@
                                                            int32_t& e) {
   CBC_PDF417ECModulusPoly* modulusPoly = NULL;
   if (scalar == 0) {
-    modulusPoly = new CBC_PDF417ECModulusPoly(
-        m_field->getZero()->getField(), m_field->getZero()->getCoefficients(),
-        e);
+    modulusPoly =
+        new CBC_PDF417ECModulusPoly(m_field->getZero()->getField(),
+                                    m_field->getZero()->getCoefficients(), e);
     BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
     return modulusPoly;
   }
diff --git a/xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.cpp b/xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.cpp
index 7427b31..1c12c64 100644
--- a/xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.cpp
+++ b/xfa/src/fxbarcode/pdf417/BC_PDF417ScanningDecoder.cpp
@@ -591,7 +591,7 @@
     return NULL;
   }
   return new CBC_Codeword(startColumn, endColumn,
-                             getCodewordBucketNumber(decodedValue), codeword);
+                          getCodewordBucketNumber(decodedValue), codeword);
 }
 CFX_Int32Array* CBC_PDF417ScanningDecoder::getModuleBitCount(
     CBC_CommonBitMatrix* image,
diff --git a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp b/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp
index f8af90b..51bfa32 100644
--- a/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp
+++ b/xfa/src/fxbarcode/qrcode/BC_QRAlignmentPatternFinder.cpp
@@ -193,7 +193,7 @@
           (CBC_QRAlignmentPattern*)(m_possibleCenters[index]);
       if (center->AboutEquals(estimatedModuleSize, centerI, centerJ)) {
         return new CBC_QRAlignmentPattern(centerJ, centerI,
-                                             estimatedModuleSize);
+                                          estimatedModuleSize);
       }
     }
     m_possibleCenters.Add(
diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
index f084660..6488619 100644
--- a/xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
+++ b/xfa/src/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
@@ -146,8 +146,8 @@
     index += 2;
   }
   if (index != flag) {
-    result.Add(new Make_Pair(CBC_QRCoderMode::sGBK,
-                                content.Mid(flag, index - flag)));
+    result.Add(
+        new Make_Pair(CBC_QRCoderMode::sGBK, content.Mid(flag, index - flag)));
   }
   flag = index;
   if (index >= content.GetLength()) {
@@ -170,8 +170,8 @@
     }
   }
   if (index != flag) {
-    result.Add(new Make_Pair(CBC_QRCoderMode::sBYTE,
-                                content.Mid(flag, index - flag)));
+    result.Add(
+        new Make_Pair(CBC_QRCoderMode::sBYTE, content.Mid(flag, index - flag)));
   }
   flag = index;
   if (index >= content.GetLength()) {
@@ -183,7 +183,7 @@
   }
   if (index != flag) {
     result.Add(new Make_Pair(CBC_QRCoderMode::sNUMERIC,
-                                content.Mid(flag, index - flag)));
+                             content.Mid(flag, index - flag)));
   }
   flag = index;
   if (index >= content.GetLength()) {
@@ -195,7 +195,7 @@
   }
   if (index != flag) {
     result.Add(new Make_Pair(CBC_QRCoderMode::sALPHANUMERIC,
-                                content.Mid(flag, index - flag)));
+                             content.Mid(flag, index - flag)));
   }
   flag = index;
   if (index >= content.GetLength()) {
diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderMode.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderMode.cpp
index e910c3f..7481a8e 100644
--- a/xfa/src/fxbarcode/qrcode/BC_QRCoderMode.cpp
+++ b/xfa/src/fxbarcode/qrcode/BC_QRCoderMode.cpp
@@ -55,11 +55,10 @@
 }
 void CBC_QRCoderMode::Initialize() {
   sBYTE = new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 8, 16, 16, 0x4, "BYTE");
-  sALPHANUMERIC = new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 9, 11, 13, 0x2,
-                                         "ALPHANUMERIC");
+  sALPHANUMERIC =
+      new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 9, 11, 13, 0x2, "ALPHANUMERIC");
   sECI = new CBC_QRCoderMode(NULL, 0, 0, 0, 0x7, "ECI");
-  sKANJI =
-      new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 8, 10, 12, 0x8, "KANJI");
+  sKANJI = new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 8, 10, 12, 0x8, "KANJI");
   sNUMERIC =
       new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 10, 12, 14, 0x1, "NUMERIC");
   sGBK = new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 8, 10, 12, 0x0D, "GBK");
@@ -69,8 +68,8 @@
       new CBC_QRCoderMode(NULL, 0, 0, 0, 0x05, "FNC1_FIRST_POSITION");
   sFNC1_SECOND_POSITION =
       new CBC_QRCoderMode(NULL, 0, 0, 0, 0x09, "FNC1_SECOND_POSITION");
-  sSTRUCTURED_APPEND = new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 0, 0, 0,
-                                              0x03, "STRUCTURED_APPEND");
+  sSTRUCTURED_APPEND = new CBC_QRCoderMode(FX_Alloc(int32_t, 3), 0, 0, 0, 0x03,
+                                           "STRUCTURED_APPEND");
 }
 void CBC_QRCoderMode::Finalize() {
   delete sBYTE;
diff --git a/xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.cpp b/xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.cpp
index a357bf7..dde09ee 100644
--- a/xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.cpp
+++ b/xfa/src/fxbarcode/qrcode/BC_QRCoderVersion.cpp
@@ -449,9 +449,9 @@
         5, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 108)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 43)),
         new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 15),
-                                   new CBC_QRCoderECB(2, 16)),
+                                new CBC_QRCoderECB(2, 16)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 11),
-                                   new CBC_QRCoderECB(2, 12))));
+                                new CBC_QRCoderECB(2, 12))));
     VERSION->Add(new CBC_QRCoderVersion(
         6, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68)),
         new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 27)),
@@ -461,298 +461,298 @@
         7, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(2, 78)),
         new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(4, 31)),
         new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 14),
-                                   new CBC_QRCoderECB(4, 15)),
+                                new CBC_QRCoderECB(4, 15)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 13),
-                                   new CBC_QRCoderECB(1, 14))));
+                                new CBC_QRCoderECB(1, 14))));
     VERSION->Add(new CBC_QRCoderVersion(
         8, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 97)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 38),
-                                   new CBC_QRCoderECB(2, 39)),
+                                new CBC_QRCoderECB(2, 39)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(4, 18),
-                                   new CBC_QRCoderECB(2, 19)),
+                                new CBC_QRCoderECB(2, 19)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 14),
-                                   new CBC_QRCoderECB(2, 15))));
+                                new CBC_QRCoderECB(2, 15))));
     VERSION->Add(new CBC_QRCoderVersion(
         9, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 116)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(3, 36),
-                                   new CBC_QRCoderECB(2, 37)),
+                                new CBC_QRCoderECB(2, 37)),
         new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 16),
-                                   new CBC_QRCoderECB(4, 17)),
+                                new CBC_QRCoderECB(4, 17)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 12),
-                                   new CBC_QRCoderECB(4, 13))));
+                                new CBC_QRCoderECB(4, 13))));
     VERSION->Add(new CBC_QRCoderVersion(
         10, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68),
-                                       new CBC_QRCoderECB(2, 69)),
+                                    new CBC_QRCoderECB(2, 69)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 43),
-                                   new CBC_QRCoderECB(1, 44)),
+                                new CBC_QRCoderECB(1, 44)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(6, 19),
-                                   new CBC_QRCoderECB(2, 20)),
+                                new CBC_QRCoderECB(2, 20)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 15),
-                                   new CBC_QRCoderECB(2, 16))));
+                                new CBC_QRCoderECB(2, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         11, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 81)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 50),
-                                   new CBC_QRCoderECB(4, 51)),
+                                new CBC_QRCoderECB(4, 51)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 22),
-                                   new CBC_QRCoderECB(4, 23)),
+                                new CBC_QRCoderECB(4, 23)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(3, 12),
-                                   new CBC_QRCoderECB(8, 13))));
+                                new CBC_QRCoderECB(8, 13))));
     VERSION->Add(new CBC_QRCoderVersion(
         12, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 92),
-                                       new CBC_QRCoderECB(2, 93)),
+                                    new CBC_QRCoderECB(2, 93)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(6, 36),
-                                   new CBC_QRCoderECB(2, 37)),
+                                new CBC_QRCoderECB(2, 37)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 20),
-                                   new CBC_QRCoderECB(6, 21)),
+                                new CBC_QRCoderECB(6, 21)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 14),
-                                   new CBC_QRCoderECB(4, 15))));
+                                new CBC_QRCoderECB(4, 15))));
     VERSION->Add(new CBC_QRCoderVersion(
         13, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 107)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(8, 37),
-                                   new CBC_QRCoderECB(1, 38)),
+                                new CBC_QRCoderECB(1, 38)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(8, 20),
-                                   new CBC_QRCoderECB(4, 21)),
+                                new CBC_QRCoderECB(4, 21)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(12, 11),
-                                   new CBC_QRCoderECB(4, 12))));
+                                new CBC_QRCoderECB(4, 12))));
     VERSION->Add(new CBC_QRCoderVersion(
         14, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 115),
-                                       new CBC_QRCoderECB(1, 116)),
+                                    new CBC_QRCoderECB(1, 116)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 40),
-                                   new CBC_QRCoderECB(5, 41)),
+                                new CBC_QRCoderECB(5, 41)),
         new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(11, 16),
-                                   new CBC_QRCoderECB(5, 17)),
+                                new CBC_QRCoderECB(5, 17)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
-                                   new CBC_QRCoderECB(5, 13))));
+                                new CBC_QRCoderECB(5, 13))));
     VERSION->Add(new CBC_QRCoderVersion(
         15, new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(5, 87),
-                                       new CBC_QRCoderECB(1, 88)),
+                                    new CBC_QRCoderECB(1, 88)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 41),
-                                   new CBC_QRCoderECB(5, 42)),
+                                new CBC_QRCoderECB(5, 42)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 24),
-                                   new CBC_QRCoderECB(7, 25)),
+                                new CBC_QRCoderECB(7, 25)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
-                                   new CBC_QRCoderECB(7, 13))));
+                                new CBC_QRCoderECB(7, 13))));
     VERSION->Add(new CBC_QRCoderVersion(
         16, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 98),
-                                       new CBC_QRCoderECB(1, 99)),
+                                    new CBC_QRCoderECB(1, 99)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 45),
-                                   new CBC_QRCoderECB(3, 46)),
+                                new CBC_QRCoderECB(3, 46)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(15, 19),
-                                   new CBC_QRCoderECB(2, 20)),
+                                new CBC_QRCoderECB(2, 20)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 15),
-                                   new CBC_QRCoderECB(13, 16))));
+                                new CBC_QRCoderECB(13, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         17, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 107),
-                                       new CBC_QRCoderECB(5, 108)),
+                                    new CBC_QRCoderECB(5, 108)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
-                                   new CBC_QRCoderECB(1, 47)),
+                                new CBC_QRCoderECB(1, 47)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 22),
-                                   new CBC_QRCoderECB(15, 23)),
+                                new CBC_QRCoderECB(15, 23)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
-                                   new CBC_QRCoderECB(17, 15))));
+                                new CBC_QRCoderECB(17, 15))));
     VERSION->Add(new CBC_QRCoderVersion(
         18, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 120),
-                                       new CBC_QRCoderECB(1, 121)),
+                                    new CBC_QRCoderECB(1, 121)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 43),
-                                   new CBC_QRCoderECB(4, 44)),
+                                new CBC_QRCoderECB(4, 44)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
-                                   new CBC_QRCoderECB(1, 23)),
+                                new CBC_QRCoderECB(1, 23)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
-                                   new CBC_QRCoderECB(19, 15))));
+                                new CBC_QRCoderECB(19, 15))));
     VERSION->Add(new CBC_QRCoderVersion(
         19, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 113),
-                                       new CBC_QRCoderECB(4, 114)),
+                                    new CBC_QRCoderECB(4, 114)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 44),
-                                   new CBC_QRCoderECB(11, 45)),
+                                new CBC_QRCoderECB(11, 45)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 21),
-                                   new CBC_QRCoderECB(4, 22)),
+                                new CBC_QRCoderECB(4, 22)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 13),
-                                   new CBC_QRCoderECB(16, 14))));
+                                new CBC_QRCoderECB(16, 14))));
     VERSION->Add(new CBC_QRCoderVersion(
         20, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 107),
-                                       new CBC_QRCoderECB(5, 108)),
+                                    new CBC_QRCoderECB(5, 108)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 41),
-                                   new CBC_QRCoderECB(13, 42)),
+                                new CBC_QRCoderECB(13, 42)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
-                                   new CBC_QRCoderECB(5, 25)),
+                                new CBC_QRCoderECB(5, 25)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(15, 15),
-                                   new CBC_QRCoderECB(10, 16))));
+                                new CBC_QRCoderECB(10, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         21, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 116),
-                                       new CBC_QRCoderECB(4, 117)),
+                                    new CBC_QRCoderECB(4, 117)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 42)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
-                                   new CBC_QRCoderECB(6, 23)),
+                                new CBC_QRCoderECB(6, 23)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 16),
-                                   new CBC_QRCoderECB(6, 17))));
+                                new CBC_QRCoderECB(6, 17))));
     VERSION->Add(new CBC_QRCoderVersion(
         22, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 111),
-                                       new CBC_QRCoderECB(7, 112)),
+                                    new CBC_QRCoderECB(7, 112)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 46)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
-                                   new CBC_QRCoderECB(16, 25)),
+                                new CBC_QRCoderECB(16, 25)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(34, 13))));
     VERSION->Add(new CBC_QRCoderVersion(
         23, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 121),
-                                       new CBC_QRCoderECB(5, 122)),
+                                    new CBC_QRCoderECB(5, 122)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 47),
-                                   new CBC_QRCoderECB(14, 48)),
+                                new CBC_QRCoderECB(14, 48)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
-                                   new CBC_QRCoderECB(14, 25)),
+                                new CBC_QRCoderECB(14, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(16, 15),
-                                   new CBC_QRCoderECB(14, 16))));
+                                new CBC_QRCoderECB(14, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         24, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 117),
-                                       new CBC_QRCoderECB(4, 118)),
+                                    new CBC_QRCoderECB(4, 118)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 45),
-                                   new CBC_QRCoderECB(14, 46)),
+                                new CBC_QRCoderECB(14, 46)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
-                                   new CBC_QRCoderECB(16, 25)),
+                                new CBC_QRCoderECB(16, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(30, 16),
-                                   new CBC_QRCoderECB(2, 17))));
+                                new CBC_QRCoderECB(2, 17))));
     VERSION->Add(new CBC_QRCoderVersion(
         25, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(8, 106),
-                                       new CBC_QRCoderECB(4, 107)),
+                                    new CBC_QRCoderECB(4, 107)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(8, 47),
-                                   new CBC_QRCoderECB(13, 48)),
+                                new CBC_QRCoderECB(13, 48)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
-                                   new CBC_QRCoderECB(22, 25)),
+                                new CBC_QRCoderECB(22, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
-                                   new CBC_QRCoderECB(13, 16))));
+                                new CBC_QRCoderECB(13, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         26, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 114),
-                                       new CBC_QRCoderECB(2, 115)),
+                                    new CBC_QRCoderECB(2, 115)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 46),
-                                   new CBC_QRCoderECB(4, 47)),
+                                new CBC_QRCoderECB(4, 47)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(28, 22),
-                                   new CBC_QRCoderECB(6, 23)),
+                                new CBC_QRCoderECB(6, 23)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(33, 16),
-                                   new CBC_QRCoderECB(4, 17))));
+                                new CBC_QRCoderECB(4, 17))));
     VERSION->Add(new CBC_QRCoderVersion(
         27, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 122),
-                                       new CBC_QRCoderECB(4, 123)),
+                                    new CBC_QRCoderECB(4, 123)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(22, 45),
-                                   new CBC_QRCoderECB(3, 46)),
+                                new CBC_QRCoderECB(3, 46)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 23),
-                                   new CBC_QRCoderECB(26, 24)),
+                                new CBC_QRCoderECB(26, 24)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 15),
-                                   new CBC_QRCoderECB(28, 16))));
+                                new CBC_QRCoderECB(28, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         28, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 117),
-                                       new CBC_QRCoderECB(10, 118)),
+                                    new CBC_QRCoderECB(10, 118)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 45),
-                                   new CBC_QRCoderECB(23, 46)),
+                                new CBC_QRCoderECB(23, 46)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 24),
-                                   new CBC_QRCoderECB(31, 25)),
+                                new CBC_QRCoderECB(31, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
-                                   new CBC_QRCoderECB(31, 16))));
+                                new CBC_QRCoderECB(31, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         29, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 116),
-                                       new CBC_QRCoderECB(7, 117)),
+                                    new CBC_QRCoderECB(7, 117)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(21, 45),
-                                   new CBC_QRCoderECB(7, 46)),
+                                new CBC_QRCoderECB(7, 46)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 23),
-                                   new CBC_QRCoderECB(37, 24)),
+                                new CBC_QRCoderECB(37, 24)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
-                                   new CBC_QRCoderECB(26, 16))));
+                                new CBC_QRCoderECB(26, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         30, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 115),
-                                       new CBC_QRCoderECB(10, 116)),
+                                    new CBC_QRCoderECB(10, 116)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 47),
-                                   new CBC_QRCoderECB(10, 48)),
+                                new CBC_QRCoderECB(10, 48)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
-                                   new CBC_QRCoderECB(25, 25)),
+                                new CBC_QRCoderECB(25, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
-                                   new CBC_QRCoderECB(25, 16))));
+                                new CBC_QRCoderECB(25, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         31, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
-                                       new CBC_QRCoderECB(3, 116)),
+                                    new CBC_QRCoderECB(3, 116)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 46),
-                                   new CBC_QRCoderECB(29, 47)),
+                                new CBC_QRCoderECB(29, 47)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 24),
-                                   new CBC_QRCoderECB(1, 25)),
+                                new CBC_QRCoderECB(1, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
-                                   new CBC_QRCoderECB(28, 16))));
+                                new CBC_QRCoderECB(28, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         32, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
-                                   new CBC_QRCoderECB(23, 47)),
+                                new CBC_QRCoderECB(23, 47)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 24),
-                                   new CBC_QRCoderECB(35, 25)),
+                                new CBC_QRCoderECB(35, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
-                                   new CBC_QRCoderECB(35, 16))));
+                                new CBC_QRCoderECB(35, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         33, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115),
-                                       new CBC_QRCoderECB(1, 116)),
+                                    new CBC_QRCoderECB(1, 116)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
-                                   new CBC_QRCoderECB(21, 47)),
+                                new CBC_QRCoderECB(21, 47)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(29, 24),
-                                   new CBC_QRCoderECB(19, 25)),
+                                new CBC_QRCoderECB(19, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
-                                   new CBC_QRCoderECB(46, 16))));
+                                new CBC_QRCoderECB(46, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         34, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
-                                       new CBC_QRCoderECB(6, 116)),
+                                    new CBC_QRCoderECB(6, 116)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
-                                   new CBC_QRCoderECB(23, 47)),
+                                new CBC_QRCoderECB(23, 47)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(44, 24),
-                                   new CBC_QRCoderECB(7, 25)),
+                                new CBC_QRCoderECB(7, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(59, 16),
-                                   new CBC_QRCoderECB(1, 17))));
+                                new CBC_QRCoderECB(1, 17))));
     VERSION->Add(new CBC_QRCoderVersion(
         35, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 121),
-                                       new CBC_QRCoderECB(7, 122)),
+                                    new CBC_QRCoderECB(7, 122)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(12, 47),
-                                   new CBC_QRCoderECB(26, 48)),
+                                new CBC_QRCoderECB(26, 48)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(39, 24),
-                                   new CBC_QRCoderECB(14, 25)),
+                                new CBC_QRCoderECB(14, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
-                                   new CBC_QRCoderECB(41, 16))));
+                                new CBC_QRCoderECB(41, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         36, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 121),
-                                       new CBC_QRCoderECB(14, 122)),
+                                    new CBC_QRCoderECB(14, 122)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 47),
-                                   new CBC_QRCoderECB(34, 48)),
+                                new CBC_QRCoderECB(34, 48)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(46, 24),
-                                   new CBC_QRCoderECB(10, 25)),
+                                new CBC_QRCoderECB(10, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 15),
-                                   new CBC_QRCoderECB(64, 16))));
+                                new CBC_QRCoderECB(64, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         37, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 122),
-                                       new CBC_QRCoderECB(4, 123)),
+                                    new CBC_QRCoderECB(4, 123)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(29, 46),
-                                   new CBC_QRCoderECB(14, 47)),
+                                new CBC_QRCoderECB(14, 47)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(49, 24),
-                                   new CBC_QRCoderECB(10, 25)),
+                                new CBC_QRCoderECB(10, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(24, 15),
-                                   new CBC_QRCoderECB(46, 16))));
+                                new CBC_QRCoderECB(46, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         38, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 122),
-                                       new CBC_QRCoderECB(18, 123)),
+                                    new CBC_QRCoderECB(18, 123)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(13, 46),
-                                   new CBC_QRCoderECB(32, 47)),
+                                new CBC_QRCoderECB(32, 47)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(48, 24),
-                                   new CBC_QRCoderECB(14, 25)),
+                                new CBC_QRCoderECB(14, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 15),
-                                   new CBC_QRCoderECB(32, 16))));
+                                new CBC_QRCoderECB(32, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         39, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 117),
-                                       new CBC_QRCoderECB(4, 118)),
+                                    new CBC_QRCoderECB(4, 118)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(40, 47),
-                                   new CBC_QRCoderECB(7, 48)),
+                                new CBC_QRCoderECB(7, 48)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(43, 24),
-                                   new CBC_QRCoderECB(22, 25)),
+                                new CBC_QRCoderECB(22, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 15),
-                                   new CBC_QRCoderECB(67, 16))));
+                                new CBC_QRCoderECB(67, 16))));
     VERSION->Add(new CBC_QRCoderVersion(
         40, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 118),
-                                       new CBC_QRCoderECB(6, 119)),
+                                    new CBC_QRCoderECB(6, 119)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(18, 47),
-                                   new CBC_QRCoderECB(31, 48)),
+                                new CBC_QRCoderECB(31, 48)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(34, 24),
-                                   new CBC_QRCoderECB(34, 25)),
+                                new CBC_QRCoderECB(34, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 15),
-                                   new CBC_QRCoderECB(61, 16))));
+                                new CBC_QRCoderECB(61, 16))));
   }
   if (versionNumber < 1 || versionNumber > 40) {
     e = BCExceptionIllegalArgument;
diff --git a/xfa/src/fxfa/src/app/xfa_ffdocview.cpp b/xfa/src/fxfa/src/app/xfa_ffdocview.cpp
index 8585f6b..1b3432a 100644
--- a/xfa/src/fxfa/src/app/xfa_ffdocview.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffdocview.cpp
@@ -891,7 +891,7 @@
     return NULL;
   }
   return new CXFA_WidgetAccIterator(pTravelRoot->GetDocView(),
-                                       pTravelRoot->GetNode());
+                                    pTravelRoot->GetNode());
 }
 CXFA_WidgetAccIterator::CXFA_WidgetAccIterator(CXFA_FFDocView* pDocView,
                                                CXFA_Node* pTravelRoot)
diff --git a/xfa/src/fxfa/src/app/xfa_ffpushbutton.cpp b/xfa/src/fxfa/src/app/xfa_ffpushbutton.cpp
index 29f7bd6..0c31fb1 100644
--- a/xfa/src/fxfa/src/app/xfa_ffpushbutton.cpp
+++ b/xfa/src/fxfa/src/app/xfa_ffpushbutton.cpp
@@ -144,8 +144,8 @@
       FX_BOOL bRichText;
       if (m_pDataAcc->GetButtonRollover(wsRollover, bRichText)) {
         if (m_pRollProvider == NULL) {
-          m_pRollProvider = new CXFA_TextProvider(
-              m_pDataAcc, XFA_TEXTPROVIDERTYPE_Rollover);
+          m_pRollProvider =
+              new CXFA_TextProvider(m_pDataAcc, XFA_TEXTPROVIDERTYPE_Rollover);
         }
         m_pRolloverTextLayout = new CXFA_TextLayout(m_pRollProvider);
       }
diff --git a/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp b/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp
index 595e655..0a04aae 100644
--- a/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp
+++ b/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp
@@ -147,8 +147,7 @@
     Check(TOKendfunc);
   }
   if (m_pErrorInfo->message.IsEmpty()) {
-    e = new CXFA_FMFunctionDefinition(line, 0, ident, pArguments,
-                                         pExpressions);
+    e = new CXFA_FMFunctionDefinition(line, 0, ident, pArguments, pExpressions);
   } else {
     int32_t size = 0;
     int32_t index = 0;
@@ -537,8 +536,8 @@
       if (m_pToken->m_type == TOKlbracket) {
         CXFA_FMSimpleExpression* s = ParseIndexExpression();
         if (s) {
-          e = new CXFA_FMDotAccessorExpression(line, NULL, TOKdot,
-                                                  wsIdentifier, s);
+          e = new CXFA_FMDotAccessorExpression(line, NULL, TOKdot, wsIdentifier,
+                                               s);
         }
         NextToken();
       } else {
@@ -606,7 +605,7 @@
           CXFA_FMSimpleExpression* s = ParseIndexExpression();
           if (s) {
             e = new CXFA_FMDotAccessorExpression(line, e, TOKcall,
-                                                    FX_WSTRC(L""), s);
+                                                 FX_WSTRC(L""), s);
           } else {
             delete e;
             e = 0;
@@ -657,8 +656,7 @@
                   new CXFA_FMIdentifierExpressionn(tempLine, tempStr);
               pExpCall =
                   new CXFA_FMCallExpression(line, pIdentifier, pArray, TRUE);
-              e = new CXFA_FMMethodCallExpression(line, pExpAccessor,
-                                                     pExpCall);
+              e = new CXFA_FMMethodCallExpression(line, pExpAccessor, pExpCall);
               NextToken();
               if (m_pToken->m_type != TOKlbracket) {
                 continue;
@@ -666,7 +664,7 @@
               CXFA_FMSimpleExpression* s = ParseIndexExpression();
               if (s) {
                 e = new CXFA_FMDotAccessorExpression(line, e, TOKcall,
-                                                        FX_WSTRC(L""), s);
+                                                     FX_WSTRC(L""), s);
               } else {
                 delete e;
                 e = 0;
@@ -695,13 +693,12 @@
               }
               return e;
             }
-            e = new CXFA_FMDotAccessorExpression(tempLine, e, TOKdot,
-                                                    tempStr, s);
+            e = new CXFA_FMDotAccessorExpression(tempLine, e, TOKdot, tempStr,
+                                                 s);
           } else {
             CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression(
                 tempLine, ACCESSOR_NO_INDEX, NULL, FALSE);
-            e = new CXFA_FMDotAccessorExpression(line, e, TOKdot, tempStr,
-                                                    s);
+            e = new CXFA_FMDotAccessorExpression(line, e, TOKdot, tempStr, s);
             continue;
           }
         } else {
@@ -731,12 +728,12 @@
               return e;
             }
             e = new CXFA_FMDotDotAccessorExpression(tempLine, e, TOKdotdot,
-                                                       tempStr, s);
+                                                    tempStr, s);
           } else {
             CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression(
                 tempLine, ACCESSOR_NO_INDEX, NULL, FALSE);
-            e = new CXFA_FMDotDotAccessorExpression(line, e, TOKdotdot,
-                                                       tempStr, s);
+            e = new CXFA_FMDotDotAccessorExpression(line, e, TOKdotdot, tempStr,
+                                                    s);
             continue;
           }
         } else {
@@ -766,12 +763,12 @@
               return e;
             }
             e = new CXFA_FMDotAccessorExpression(tempLine, e, TOKdotscream,
-                                                    tempStr, s);
+                                                 tempStr, s);
           } else {
             CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression(
                 tempLine, ACCESSOR_NO_INDEX, NULL, FALSE);
-            e = new CXFA_FMDotAccessorExpression(line, e, TOKdotscream,
-                                                    tempStr, s);
+            e = new CXFA_FMDotAccessorExpression(line, e, TOKdotscream, tempStr,
+                                                 s);
             continue;
           }
         } else {
@@ -785,7 +782,7 @@
         CXFA_FMSimpleExpression* s =
             new CXFA_FMIndexExpression(line, ACCESSOR_NO_INDEX, NULL, FALSE);
         e = new CXFA_FMDotAccessorExpression(line, e, TOKdotstar,
-                                                FX_WSTRC(L"*"), s);
+                                             FX_WSTRC(L"*"), s);
       } break;
       default:
         return e;
@@ -963,7 +960,7 @@
   CXFA_FMIfExpression* pExp = 0;
   if (m_pErrorInfo->message.IsEmpty()) {
     pExp = new CXFA_FMIfExpression(line, pExpression, pIfExpression,
-                                      pElseExpression);
+                                   pElseExpression);
   } else {
     if (pExpression) {
       delete pExpression;
@@ -1061,7 +1058,7 @@
   Check(TOKendfor);
   if (m_pErrorInfo->message.IsEmpty()) {
     e = new CXFA_FMForExpression(line, wsVariant, pAssignment, pAccessor,
-                                    iDirection, pStep, pList);
+                                 iDirection, pStep, pList);
   } else {
     if (pAssignment) {
       delete pAssignment;
diff --git a/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp b/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp
index 7cf99b8..22f8941 100644
--- a/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp
+++ b/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp
@@ -2487,8 +2487,7 @@
           } else if (m_pPageMgr &&
                      m_pPageMgr->ProcessBookendLeaderOrTrailer(
                          m_pCurChildNode, TRUE, pLeaderNode)) {
-            pProcessor =
-                new CXFA_ItemLayoutProcessor(pLeaderNode, m_pPageMgr);
+            pProcessor = new CXFA_ItemLayoutProcessor(pLeaderNode, m_pPageMgr);
 #ifndef _XFA_LAYOUTITEM_ProcessCACHE_
             pProcessor->m_pPageMgrCreateItem = m_pPageMgrCreateItem;
 #endif
@@ -2517,8 +2516,7 @@
           } else if (m_pPageMgr &&
                      m_pPageMgr->ProcessBookendLeaderOrTrailer(
                          m_pCurChildNode, FALSE, pTrailerNode)) {
-            pProcessor =
-                new CXFA_ItemLayoutProcessor(pTrailerNode, m_pPageMgr);
+            pProcessor = new CXFA_ItemLayoutProcessor(pTrailerNode, m_pPageMgr);
 #ifndef _XFA_LAYOUTITEM_ProcessCACHE_
             pProcessor->m_pPageMgrCreateItem = m_pPageMgrCreateItem;
 #endif
diff --git a/xfa/src/fxfa/src/parser/xfa_object_imp.cpp b/xfa/src/fxfa/src/parser/xfa_object_imp.cpp
index a6527db..65f5f6f 100644
--- a/xfa/src/fxfa/src/parser/xfa_object_imp.cpp
+++ b/xfa/src/fxfa/src/parser/xfa_object_imp.cpp
@@ -745,8 +745,7 @@
     FXJSE_ThrowMessage(FX_BSTRC(""),
                        FX_UTF8Encode(wsMessage, wsMessage.GetLength()));
   } else {
-    CXFA_AttachNodeList* pNodeList =
-        new CXFA_AttachNodeList(m_pDocument, this);
+    CXFA_AttachNodeList* pNodeList = new CXFA_AttachNodeList(m_pDocument, this);
     FXJSE_Value_SetObject(hValue, (CXFA_Object*)pNodeList,
                           pScriptContext->GetJseNormalClass());
   }
diff --git a/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp b/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp
index 6f97305..9e85c1f 100644
--- a/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp
+++ b/xfa/src/fxfa/src/parser/xfa_parser_imp.cpp
@@ -128,8 +128,7 @@
   if (m_pXMLDoc == NULL) {
     return XFA_PARSESTATUS_StatusErr;
   }
-  CXFA_XMLParser* pParser =
-      new CXFA_XMLParser(m_pXMLDoc->GetRoot(), m_pStream);
+  CXFA_XMLParser* pParser = new CXFA_XMLParser(m_pXMLDoc->GetRoot(), m_pStream);
   if (pParser == NULL) {
     return XFA_PARSESTATUS_StatusErr;
   }
