diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp
index 3f0d67b..12f79fe 100644
--- a/core/fxge/cfx_face.cpp
+++ b/core/fxge/cfx_face.cpp
@@ -4,7 +4,6 @@
 
 #include "core/fxge/cfx_face.h"
 
-
 // static
 RetainPtr<CFX_Face> CFX_Face::New(FT_Library library,
                                   const RetainPtr<Retainable>& pDesc,
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index 3841d55..3528168 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -166,9 +166,7 @@
 
   void GotoURL(const WideString& wsURL);
   FS_RECTF GetPageViewRect(IPDF_Page* page);
-  bool PopupMenu(IPDF_Page* page,
-                 int menuFlag,
-                 const CFX_PointF& pt);
+  bool PopupMenu(IPDF_Page* page, int menuFlag, const CFX_PointF& pt);
   void EmailTo(FPDF_FILEHANDLER* fileHandler,
                FPDF_WIDESTRING pTo,
                FPDF_WIDESTRING pSubject,
diff --git a/fpdfsdk/formfiller/cffl_combobox.cpp b/fpdfsdk/formfiller/cffl_combobox.cpp
index 3a04ad6..a759b53 100644
--- a/fpdfsdk/formfiller/cffl_combobox.cpp
+++ b/fpdfsdk/formfiller/cffl_combobox.cpp
@@ -17,8 +17,7 @@
 
 CFFL_ComboBox::CFFL_ComboBox(CPDFSDK_FormFillEnvironment* pApp,
                              CPDFSDK_Widget* pWidget)
-    : CFFL_TextObject(pApp, pWidget) {
-}
+    : CFFL_TextObject(pApp, pWidget) {}
 
 CFFL_ComboBox::~CFFL_ComboBox() {
   for (const auto& it : m_Maps)
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index 294e53c..b4fd9c7 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -2978,7 +2978,7 @@
   EXPECT_EQ(kBlobLen, out_buffer_len);
   EXPECT_EQ(0, memcmp(block_value, buffer, kBlobLen));
 
-// Render and check the bitmap is the expected one.
+  // Render and check the bitmap is the expected one.
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
     CompareBitmap(page_bitmap.get(), 612, 792, kLoadedFontTextChecksum);
diff --git a/xfa/fgas/crt/cfgas_stringformatter.h b/xfa/fgas/crt/cfgas_stringformatter.h
index afdeeb9..a8a82fd 100644
--- a/xfa/fgas/crt/cfgas_stringformatter.h
+++ b/xfa/fgas/crt/cfgas_stringformatter.h
@@ -30,20 +30,16 @@
 
   FX_LOCALECATEGORY GetCategory() const;
 
-  bool ParseText(const WideString& wsSrcText,
-                 WideString* wsValue) const;
-  bool ParseNum(const WideString& wsSrcNum,
-                WideString* wsValue) const;
+  bool ParseText(const WideString& wsSrcText, WideString* wsValue) const;
+  bool ParseNum(const WideString& wsSrcNum, WideString* wsValue) const;
   bool ParseDateTime(const WideString& wsSrcDateTime,
                      FX_DATETIMETYPE eDateTimeType,
                      CFX_DateTime* dtValue) const;
   bool ParseZero(const WideString& wsSrcText) const;
   bool ParseNull(const WideString& wsSrcText) const;
 
-  bool FormatText(const WideString& wsSrcText,
-                  WideString* wsOutput) const;
-  bool FormatNum(const WideString& wsSrcNum,
-                 WideString* wsOutput) const;
+  bool FormatText(const WideString& wsSrcText, WideString* wsOutput) const;
+  bool FormatNum(const WideString& wsSrcNum, WideString* wsOutput) const;
   bool FormatDateTime(const WideString& wsSrcDateTime,
                       FX_DATETIMETYPE eDateTimeType,
                       WideString* wsOutput) const;
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 7af2f02..044ad47 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -443,9 +443,8 @@
   return flags;
 }
 
-RetainPtr<IFX_SeekableReadStream> CreateFontStream(
-    CFX_FontMapper* pFontMapper,
-    uint32_t index) {
+RetainPtr<IFX_SeekableReadStream> CreateFontStream(CFX_FontMapper* pFontMapper,
+                                                   uint32_t index) {
   size_t dwFileSize = 0;
   std::unique_ptr<uint8_t, FxFreeDeleter> pBuffer =
       pFontMapper->RawBytesForIndex(index, &dwFileSize);
diff --git a/xfa/fwl/cfwl_comboedit.cpp b/xfa/fwl/cfwl_comboedit.cpp
index 6ab081a..1b04c39 100644
--- a/xfa/fwl/cfwl_comboedit.cpp
+++ b/xfa/fwl/cfwl_comboedit.cpp
@@ -17,8 +17,7 @@
     const CFWL_App* app,
     std::unique_ptr<CFWL_WidgetProperties> properties,
     CFWL_Widget* pOuter)
-    : CFWL_Edit(app, std::move(properties), pOuter) {
-}
+    : CFWL_Edit(app, std::move(properties), pOuter) {}
 
 CFWL_ComboEdit::~CFWL_ComboEdit() = default;
 
diff --git a/xfa/fwl/cfwl_messagekey.cpp b/xfa/fwl/cfwl_messagekey.cpp
index a3c689b..bf9ded8 100644
--- a/xfa/fwl/cfwl_messagekey.cpp
+++ b/xfa/fwl/cfwl_messagekey.cpp
@@ -8,7 +8,6 @@
 
 #include <memory>
 
-
 CFWL_MessageKey::CFWL_MessageKey(CFWL_Widget* pDstTarget,
                                  FWL_KeyCommand cmd,
                                  uint32_t flags,
diff --git a/xfa/fwl/cfwl_messagekillfocus.cpp b/xfa/fwl/cfwl_messagekillfocus.cpp
index e4c9ec5..d7c426b 100644
--- a/xfa/fwl/cfwl_messagekillfocus.cpp
+++ b/xfa/fwl/cfwl_messagekillfocus.cpp
@@ -8,7 +8,6 @@
 
 #include <memory>
 
-
 CFWL_MessageKillFocus::CFWL_MessageKillFocus(CFWL_Widget* pSrcTarget)
     : CFWL_MessageKillFocus(pSrcTarget, nullptr) {}
 
diff --git a/xfa/fwl/cfwl_messagemouse.cpp b/xfa/fwl/cfwl_messagemouse.cpp
index 86e7f2a..68b50c3 100644
--- a/xfa/fwl/cfwl_messagemouse.cpp
+++ b/xfa/fwl/cfwl_messagemouse.cpp
@@ -8,7 +8,6 @@
 
 #include <memory>
 
-
 CFWL_MessageMouse::CFWL_MessageMouse(CFWL_Widget* pDstTarget,
                                      FWL_MouseCommand cmd)
     : CFWL_Message(CFWL_Message::Type::Mouse, nullptr, pDstTarget),
diff --git a/xfa/fwl/cfwl_messagesetfocus.cpp b/xfa/fwl/cfwl_messagesetfocus.cpp
index ac45083..f9abc7b 100644
--- a/xfa/fwl/cfwl_messagesetfocus.cpp
+++ b/xfa/fwl/cfwl_messagesetfocus.cpp
@@ -8,10 +8,8 @@
 
 #include <memory>
 
-
 CFWL_MessageSetFocus::CFWL_MessageSetFocus(CFWL_Widget* pSrcTarget,
                                            CFWL_Widget* pDstTarget)
     : CFWL_Message(CFWL_Message::Type::SetFocus, pSrcTarget, pDstTarget) {}
 
 CFWL_MessageSetFocus::~CFWL_MessageSetFocus() = default;
-
diff --git a/xfa/fwl/theme/cfwl_widgettp.cpp b/xfa/fwl/theme/cfwl_widgettp.cpp
index 047a8a5..7e2e593 100644
--- a/xfa/fwl/theme/cfwl_widgettp.cpp
+++ b/xfa/fwl/theme/cfwl_widgettp.cpp
@@ -282,4 +282,3 @@
   m_FontsArray.push_back(std::move(pFontData));
   return m_FontsArray.back()->GetFont();
 }
-
diff --git a/xfa/fxfa/cxfa_fwltheme.cpp b/xfa/fxfa/cxfa_fwltheme.cpp
index 5139b80..0cba241 100644
--- a/xfa/fxfa/cxfa_fwltheme.cpp
+++ b/xfa/fxfa/cxfa_fwltheme.cpp
@@ -32,7 +32,9 @@
 namespace {
 
 const wchar_t* const g_FWLTheme_CalFonts[] = {
-    L"Arial", L"Courier New", L"DejaVu Sans",
+    L"Arial",
+    L"Courier New",
+    L"DejaVu Sans",
 };
 
 const float kLineHeight = 12.0f;
diff --git a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp
index 2b254ca..db3cd11 100644
--- a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp
@@ -328,64 +328,44 @@
     XFA_FM_TOKEN op,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp2)
-    : CXFA_FMBinExpression(L"eq_op",
-                           op,
-                           std::move(pExp1),
-                           std::move(pExp2)) {}
+    : CXFA_FMBinExpression(L"eq_op", op, std::move(pExp1), std::move(pExp2)) {}
 
 CXFA_FMNotEqualExpression::CXFA_FMNotEqualExpression(
     XFA_FM_TOKEN op,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp2)
-    : CXFA_FMBinExpression(L"neq_op",
-                           op,
-                           std::move(pExp1),
-                           std::move(pExp2)) {}
+    : CXFA_FMBinExpression(L"neq_op", op, std::move(pExp1), std::move(pExp2)) {}
 
 CXFA_FMGtExpression::CXFA_FMGtExpression(
     XFA_FM_TOKEN op,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp2)
-    : CXFA_FMBinExpression(L"gt_op",
-                           op,
-                           std::move(pExp1),
-                           std::move(pExp2)) {}
+    : CXFA_FMBinExpression(L"gt_op", op, std::move(pExp1), std::move(pExp2)) {}
 
 CXFA_FMGeExpression::CXFA_FMGeExpression(
     XFA_FM_TOKEN op,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp2)
-    : CXFA_FMBinExpression(L"ge_op",
-                           op,
-                           std::move(pExp1),
-                           std::move(pExp2)) {}
+    : CXFA_FMBinExpression(L"ge_op", op, std::move(pExp1), std::move(pExp2)) {}
 
 CXFA_FMLtExpression::CXFA_FMLtExpression(
     XFA_FM_TOKEN op,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp2)
-    : CXFA_FMBinExpression(L"lt_op",
-                           op,
-                           std::move(pExp1),
-                           std::move(pExp2)) {}
+    : CXFA_FMBinExpression(L"lt_op", op, std::move(pExp1), std::move(pExp2)) {}
 
 CXFA_FMLeExpression::CXFA_FMLeExpression(
     XFA_FM_TOKEN op,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp2)
-    : CXFA_FMBinExpression(L"le_op",
-                           op,
-                           std::move(pExp1),
-                           std::move(pExp2)) {}
+    : CXFA_FMBinExpression(L"le_op", op, std::move(pExp1), std::move(pExp2)) {}
 
 CXFA_FMPlusExpression::CXFA_FMPlusExpression(
     XFA_FM_TOKEN op,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp2)
-    : CXFA_FMBinExpression(L"plus_op",
-                           op,
-                           std::move(pExp1),
-                           std::move(pExp2)) {}
+    : CXFA_FMBinExpression(L"plus_op", op, std::move(pExp1), std::move(pExp2)) {
+}
 
 CXFA_FMMinusExpression::CXFA_FMMinusExpression(
     XFA_FM_TOKEN op,
@@ -400,19 +380,13 @@
     XFA_FM_TOKEN op,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp2)
-    : CXFA_FMBinExpression(L"mul_op",
-                           op,
-                           std::move(pExp1),
-                           std::move(pExp2)) {}
+    : CXFA_FMBinExpression(L"mul_op", op, std::move(pExp1), std::move(pExp2)) {}
 
 CXFA_FMDivExpression::CXFA_FMDivExpression(
     XFA_FM_TOKEN op,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp1,
     std::unique_ptr<CXFA_FMSimpleExpression> pExp2)
-    : CXFA_FMBinExpression(L"div_op",
-                           op,
-                           std::move(pExp1),
-                           std::move(pExp2)) {}
+    : CXFA_FMBinExpression(L"div_op", op, std::move(pExp1), std::move(pExp2)) {}
 
 CXFA_FMUnaryExpression::CXFA_FMUnaryExpression(
     const WideString& opName,
diff --git a/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp b/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
index dfd8cf0..1897604 100644
--- a/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
+++ b/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
@@ -23,7 +23,6 @@
   return true;
 }
 
-
 CXFA_Node* XFA_DataMerge_FindFormDOMInstance(CXFA_Document* pDocument,
                                              XFA_Element eType,
                                              uint32_t dwNameHash,
@@ -103,4 +102,3 @@
   return ToNode(
       pParentFormNode->GetDocument()->GetXFAObject(XFA_HASHCODE_Data));
 }
-
diff --git a/xfa/fxgraphics/cxfa_graphics.cpp b/xfa/fxgraphics/cxfa_graphics.cpp
index c74a617..1a56972 100644
--- a/xfa/fxgraphics/cxfa_graphics.cpp
+++ b/xfa/fxgraphics/cxfa_graphics.cpp
@@ -165,7 +165,7 @@
 }
 
 void CXFA_Graphics::SetFillColor(const CXFA_GEColor& color) {
-    m_info.fillColor = color;
+  m_info.fillColor = color;
 }
 
 void CXFA_Graphics::StrokePath(CXFA_GEPath* path, const CFX_Matrix* matrix) {
