diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index 4463a34..346a316 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -464,7 +464,8 @@
       CFX_XMLNode* pSaveXMLNode = pXMLNode;
       for (; pXMLNode; pXMLNode = pXMLNode->GetNextSibling()) {
         if (!LoadRichText(pXMLNode, szText.width, &fLinePos,
-                          m_pLoader->m_pParentStyle, true, nullptr)) {
+                          m_pLoader->m_pParentStyle, true, nullptr, true, false,
+                          0)) {
           break;
         }
       }
@@ -473,7 +474,8 @@
         if (pXMLNode == pContainerNode)
           break;
         if (!LoadRichText(pXMLNode, szText.width, &fLinePos,
-                          m_pLoader->m_pParentStyle, true, nullptr, false)) {
+                          m_pLoader->m_pParentStyle, true, nullptr, false,
+                          false, 0)) {
           break;
         }
         pSaveXMLNode = pXMLNode;
@@ -482,7 +484,8 @@
           continue;
         for (; pXMLNode; pXMLNode = pXMLNode->GetNextSibling()) {
           if (!LoadRichText(pXMLNode, szText.width, &fLinePos,
-                            m_pLoader->m_pParentStyle, true, nullptr)) {
+                            m_pLoader->m_pParentStyle, true, nullptr, true,
+                            false, 0)) {
             break;
           }
         }
@@ -636,7 +639,7 @@
 
       auto pRootStyle = m_textParser.CreateRootStyle(m_pTextProvider);
       LoadRichText(pXMLContainer, textWidth, pLinePos, pRootStyle, bSavePieces,
-                   nullptr);
+                   nullptr, true, false, 0);
     }
   } else {
     LoadText(m_pTextDataNode, textWidth, pLinePos, bSavePieces);
@@ -881,7 +884,7 @@
 
     dwStatus = m_pBreak->AppendChar(wch);
     if (dwStatus != CFX_BreakType::None && dwStatus != CFX_BreakType::Piece) {
-      AppendTextLine(dwStatus, pLinePos, bSavePieces);
+      AppendTextLine(dwStatus, pLinePos, bSavePieces, false);
       if (IsEnd(bSavePieces)) {
         if (m_pLoader)
           m_pLoader->m_iChar = i;
@@ -1259,15 +1262,15 @@
 }
 
 int32_t CXFA_TextLayout::GetDisplayPos(const CXFA_TextPiece* pPiece,
-                                       FXTEXT_CHARPOS* pCharPos,
-                                       bool bCharCode) {
+                                       FXTEXT_CHARPOS* pCharPos) {
   if (!pPiece)
     return 0;
 
   FX_RTFTEXTOBJ tr;
   if (!ToRun(pPiece, &tr))
     return 0;
-  return m_pBreak->GetDisplayPos(&tr, pCharPos, bCharCode);
+
+  return m_pBreak->GetDisplayPos(&tr, pCharPos, false);
 }
 
 bool CXFA_TextLayout::ToRun(const CXFA_TextPiece* pPiece, FX_RTFTEXTOBJ* tr) {
diff --git a/xfa/fxfa/cxfa_textlayout.h b/xfa/fxfa/cxfa_textlayout.h
index 25c7387..e8c56fd 100644
--- a/xfa/fxfa/cxfa_textlayout.h
+++ b/xfa/fxfa/cxfa_textlayout.h
@@ -78,9 +78,9 @@
                     const RetainPtr<CFX_CSSComputedStyle>& pParentStyle,
                     bool bSavePieces,
                     RetainPtr<CXFA_LinkUserData> pLinkData,
-                    bool bEndBreak = true,
-                    bool bIsOl = false,
-                    int32_t iLiCount = 0);
+                    bool bEndBreak,
+                    bool bIsOl,
+                    int32_t iLiCount);
   bool AppendChar(const WideString& wsText,
                   float* pLinePos,
                   float fSpaceAbove,
@@ -88,7 +88,7 @@
   void AppendTextLine(CFX_BreakType dwStatus,
                       float* pLinePos,
                       bool bSavePieces,
-                      bool bEndBreak = false);
+                      bool bEndBreak);
   void EndBreak(CFX_BreakType dwStatus, float* pLinePos, bool bDefault);
   bool IsEnd(bool bSavePieces);
   void ProcessText(WideString& wsText);
@@ -103,9 +103,7 @@
                   int32_t iPiece,
                   FXTEXT_CHARPOS* pCharPos,
                   const CFX_Matrix& tmDoc2Device);
-  int32_t GetDisplayPos(const CXFA_TextPiece* pPiece,
-                        FXTEXT_CHARPOS* pCharPos,
-                        bool bCharCode = false);
+  int32_t GetDisplayPos(const CXFA_TextPiece* pPiece, FXTEXT_CHARPOS* pCharPos);
   bool ToRun(const CXFA_TextPiece* pPiece, FX_RTFTEXTOBJ* tr);
   void DoTabstops(CFX_CSSComputedStyle* pStyle, CXFA_PieceLine* pPieceLine);
   bool Layout(int32_t iBlock);
