CPDF_VariableText::GetIterator() never returns NULL.

Same goes for CFX_Edit::GetIterator().

Review-Url: https://codereview.chromium.org/1967963002
diff --git a/core/fpdfdoc/cpdf_variabletext.cpp b/core/fpdfdoc/cpdf_variabletext.cpp
index 427cd5d..3c71ed8 100644
--- a/core/fpdfdoc/cpdf_variabletext.cpp
+++ b/core/fpdfdoc/cpdf_variabletext.cpp
@@ -256,11 +256,9 @@
       m_fFontSize(0.0f),
       m_bInitial(FALSE),
       m_bRichText(FALSE),
-      m_pVTProvider(nullptr),
-      m_pVTIterator(nullptr) {}
+      m_pVTProvider(nullptr) {}
 
 CPDF_VariableText::~CPDF_VariableText() {
-  delete m_pVTIterator;
   ResetAll();
 }
 
@@ -1149,8 +1147,8 @@
 
 CPDF_VariableText::Iterator* CPDF_VariableText::GetIterator() {
   if (!m_pVTIterator)
-    m_pVTIterator = new CPDF_VariableText::Iterator(this);
-  return m_pVTIterator;
+    m_pVTIterator.reset(new CPDF_VariableText::Iterator(this));
+  return m_pVTIterator.get();
 }
 
 void CPDF_VariableText::SetProvider(CPDF_VariableText::Provider* pProvider) {
diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp
index 5ec9513..7fcd909 100644
--- a/core/fpdfdoc/cpvt_generateap.cpp
+++ b/core/fpdfdoc/cpvt_generateap.cpp
@@ -507,76 +507,73 @@
   CFX_ByteTextBuf sEditStream, sLineStream, sWords;
   CFX_FloatPoint ptOld(0.0f, 0.0f), ptNew(0.0f, 0.0f);
   int32_t nCurFontIndex = -1;
-  if (pIterator) {
-    pIterator->SetAt(0);
+  pIterator->SetAt(0);
 
-    CPVT_WordPlace oldplace;
-    while (pIterator->NextWord()) {
-      CPVT_WordPlace place = pIterator->GetAt();
-      if (bContinuous) {
-        if (place.LineCmp(oldplace) != 0) {
-          if (sWords.GetSize() > 0) {
-            sLineStream << GetWordRenderString(sWords.AsStringC());
-            sEditStream << sLineStream;
-            sLineStream.Clear();
-            sWords.Clear();
-          }
-          CPVT_Word word;
-          if (pIterator->GetWord(word)) {
-            ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x,
-                                   word.ptWord.y + ptOffset.y);
-          } else {
-            CPVT_Line line;
-            pIterator->GetLine(line);
-            ptNew = CFX_FloatPoint(line.ptLine.x + ptOffset.x,
-                                   line.ptLine.y + ptOffset.y);
-          }
-          if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
-            sLineStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
-                        << " Td\n";
-            ptOld = ptNew;
-          }
+  CPVT_WordPlace oldplace;
+  while (pIterator->NextWord()) {
+    CPVT_WordPlace place = pIterator->GetAt();
+    if (bContinuous) {
+      if (place.LineCmp(oldplace) != 0) {
+        if (sWords.GetSize() > 0) {
+          sLineStream << GetWordRenderString(sWords.AsStringC());
+          sEditStream << sLineStream;
+          sLineStream.Clear();
+          sWords.Clear();
         }
         CPVT_Word word;
         if (pIterator->GetWord(word)) {
-          if (word.nFontIndex != nCurFontIndex) {
-            if (sWords.GetSize() > 0) {
-              sLineStream << GetWordRenderString(sWords.AsStringC());
-              sWords.Clear();
-            }
-            sLineStream << GetFontSetString(pFontMap, word.nFontIndex,
-                                            word.fFontSize);
-            nCurFontIndex = word.nFontIndex;
-          }
-          sWords << GetPDFWordString(pFontMap, nCurFontIndex, word.Word,
-                                     SubWord);
-        }
-        oldplace = place;
-      } else {
-        CPVT_Word word;
-        if (pIterator->GetWord(word)) {
           ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x,
                                  word.ptWord.y + ptOffset.y);
-          if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
-            sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
-                        << " Td\n";
-            ptOld = ptNew;
-          }
-          if (word.nFontIndex != nCurFontIndex) {
-            sEditStream << GetFontSetString(pFontMap, word.nFontIndex,
-                                            word.fFontSize);
-            nCurFontIndex = word.nFontIndex;
-          }
-          sEditStream << GetWordRenderString(
-              GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord));
+        } else {
+          CPVT_Line line;
+          pIterator->GetLine(line);
+          ptNew = CFX_FloatPoint(line.ptLine.x + ptOffset.x,
+                                 line.ptLine.y + ptOffset.y);
+        }
+        if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
+          sLineStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
+                      << " Td\n";
+          ptOld = ptNew;
         }
       }
+      CPVT_Word word;
+      if (pIterator->GetWord(word)) {
+        if (word.nFontIndex != nCurFontIndex) {
+          if (sWords.GetSize() > 0) {
+            sLineStream << GetWordRenderString(sWords.AsStringC());
+            sWords.Clear();
+          }
+          sLineStream << GetFontSetString(pFontMap, word.nFontIndex,
+                                          word.fFontSize);
+          nCurFontIndex = word.nFontIndex;
+        }
+        sWords << GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord);
+      }
+      oldplace = place;
+    } else {
+      CPVT_Word word;
+      if (pIterator->GetWord(word)) {
+        ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x,
+                               word.ptWord.y + ptOffset.y);
+        if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
+          sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
+                      << " Td\n";
+          ptOld = ptNew;
+        }
+        if (word.nFontIndex != nCurFontIndex) {
+          sEditStream << GetFontSetString(pFontMap, word.nFontIndex,
+                                          word.fFontSize);
+          nCurFontIndex = word.nFontIndex;
+        }
+        sEditStream << GetWordRenderString(
+            GetPDFWordString(pFontMap, nCurFontIndex, word.Word, SubWord));
+      }
     }
-    if (sWords.GetSize() > 0) {
-      sLineStream << GetWordRenderString(sWords.AsStringC());
-      sEditStream << sLineStream;
-      sWords.Clear();
-    }
+  }
+  if (sWords.GetSize() > 0) {
+    sLineStream << GetWordRenderString(sWords.AsStringC());
+    sEditStream << sLineStream;
+    sWords.Clear();
   }
   return sEditStream.AsStringC();
 }
diff --git a/core/fpdfdoc/include/cpdf_variabletext.h b/core/fpdfdoc/include/cpdf_variabletext.h
index a14ad52..c9184bc 100644
--- a/core/fpdfdoc/include/cpdf_variabletext.h
+++ b/core/fpdfdoc/include/cpdf_variabletext.h
@@ -7,6 +7,8 @@
 #ifndef CORE_FPDFDOC_INCLUDE_CPDF_VARIABLETEXT_H_
 #define CORE_FPDFDOC_INCLUDE_CPDF_VARIABLETEXT_H_
 
+#include <memory>
+
 #include "core/fpdfdoc/cpvt_floatrect.h"
 #include "core/fpdfdoc/cpvt_lineinfo.h"
 #include "core/fpdfdoc/include/cpvt_line.h"
@@ -246,7 +248,7 @@
   FX_BOOL m_bInitial;
   FX_BOOL m_bRichText;
   CPDF_VariableText::Provider* m_pVTProvider;
-  CPDF_VariableText::Iterator* m_pVTIterator;
+  std::unique_ptr<CPDF_VariableText::Iterator> m_pVTIterator;
 };
 
 #endif  // CORE_FPDFDOC_INCLUDE_CPDF_VARIABLETEXT_H_
diff --git a/fpdfsdk/fxedit/fxet_ap.cpp b/fpdfsdk/fxedit/fxet_ap.cpp
index 1a36c80..262f1e7 100644
--- a/fpdfsdk/fxedit/fxet_ap.cpp
+++ b/fpdfsdk/fxedit/fxet_ap.cpp
@@ -70,93 +70,92 @@
   CFX_FloatPoint ptOld(0.0f, 0.0f), ptNew(0.0f, 0.0f);
   int32_t nCurFontIndex = -1;
 
-  if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
-    if (pRange)
-      pIterator->SetAt(pRange->BeginPos);
-    else
-      pIterator->SetAt(0);
+  IFX_Edit_Iterator* pIterator = pEdit->GetIterator();
+  if (pRange)
+    pIterator->SetAt(pRange->BeginPos);
+  else
+    pIterator->SetAt(0);
 
-    CPVT_WordPlace oldplace;
+  CPVT_WordPlace oldplace;
 
-    while (pIterator->NextWord()) {
-      CPVT_WordPlace place = pIterator->GetAt();
+  while (pIterator->NextWord()) {
+    CPVT_WordPlace place = pIterator->GetAt();
 
-      if (pRange && place.WordCmp(pRange->EndPos) > 0)
-        break;
+    if (pRange && place.WordCmp(pRange->EndPos) > 0)
+      break;
 
-      if (bContinuous) {
-        if (place.LineCmp(oldplace) != 0) {
-          if (sWords.GetSize() > 0) {
-            sEditStream << GetWordRenderString(sWords.AsStringC());
-            sWords.Clear();
-          }
-
-          CPVT_Word word;
-          if (pIterator->GetWord(word)) {
-            ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x,
-                                   word.ptWord.y + ptOffset.y);
-          } else {
-            CPVT_Line line;
-            pIterator->GetLine(line);
-            ptNew = CFX_FloatPoint(line.ptLine.x + ptOffset.x,
-                                   line.ptLine.y + ptOffset.y);
-          }
-
-          if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
-            sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
-                        << " Td\n";
-
-            ptOld = ptNew;
-          }
+    if (bContinuous) {
+      if (place.LineCmp(oldplace) != 0) {
+        if (sWords.GetSize() > 0) {
+          sEditStream << GetWordRenderString(sWords.AsStringC());
+          sWords.Clear();
         }
 
         CPVT_Word word;
         if (pIterator->GetWord(word)) {
-          if (word.nFontIndex != nCurFontIndex) {
-            if (sWords.GetSize() > 0) {
-              sEditStream << GetWordRenderString(sWords.AsStringC());
-              sWords.Clear();
-            }
-            sEditStream << GetFontSetString(pEdit->GetFontMap(),
-                                            word.nFontIndex, word.fFontSize);
-            nCurFontIndex = word.nFontIndex;
-          }
-
-          sWords << GetPDFWordString(pEdit->GetFontMap(), nCurFontIndex,
-                                     word.Word, SubWord);
-        }
-
-        oldplace = place;
-      } else {
-        CPVT_Word word;
-        if (pIterator->GetWord(word)) {
           ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x,
                                  word.ptWord.y + ptOffset.y);
+        } else {
+          CPVT_Line line;
+          pIterator->GetLine(line);
+          ptNew = CFX_FloatPoint(line.ptLine.x + ptOffset.x,
+                                 line.ptLine.y + ptOffset.y);
+        }
 
-          if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
-            sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
-                        << " Td\n";
-            ptOld = ptNew;
-          }
+        if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
+          sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
+                      << " Td\n";
 
-          if (word.nFontIndex != nCurFontIndex) {
-            sEditStream << GetFontSetString(pEdit->GetFontMap(),
-                                            word.nFontIndex, word.fFontSize);
-            nCurFontIndex = word.nFontIndex;
-          }
-
-          sEditStream << GetWordRenderString(GetPDFWordString(
-              pEdit->GetFontMap(), nCurFontIndex, word.Word, SubWord));
+          ptOld = ptNew;
         }
       }
-    }
 
-    if (sWords.GetSize() > 0) {
-      sEditStream << GetWordRenderString(sWords.AsStringC());
-      sWords.Clear();
+      CPVT_Word word;
+      if (pIterator->GetWord(word)) {
+        if (word.nFontIndex != nCurFontIndex) {
+          if (sWords.GetSize() > 0) {
+            sEditStream << GetWordRenderString(sWords.AsStringC());
+            sWords.Clear();
+          }
+          sEditStream << GetFontSetString(pEdit->GetFontMap(), word.nFontIndex,
+                                          word.fFontSize);
+          nCurFontIndex = word.nFontIndex;
+        }
+
+        sWords << GetPDFWordString(pEdit->GetFontMap(), nCurFontIndex,
+                                   word.Word, SubWord);
+      }
+
+      oldplace = place;
+    } else {
+      CPVT_Word word;
+      if (pIterator->GetWord(word)) {
+        ptNew = CFX_FloatPoint(word.ptWord.x + ptOffset.x,
+                               word.ptWord.y + ptOffset.y);
+
+        if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
+          sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
+                      << " Td\n";
+          ptOld = ptNew;
+        }
+
+        if (word.nFontIndex != nCurFontIndex) {
+          sEditStream << GetFontSetString(pEdit->GetFontMap(), word.nFontIndex,
+                                          word.fFontSize);
+          nCurFontIndex = word.nFontIndex;
+        }
+
+        sEditStream << GetWordRenderString(GetPDFWordString(
+            pEdit->GetFontMap(), nCurFontIndex, word.Word, SubWord));
+      }
     }
   }
 
+  if (sWords.GetSize() > 0) {
+    sEditStream << GetWordRenderString(sWords.AsStringC());
+    sWords.Clear();
+  }
+
   CFX_ByteTextBuf sAppStream;
   if (sEditStream.GetSize() > 0) {
     int32_t nHorzScale = pEdit->GetHorzScale();
@@ -182,22 +181,21 @@
   CFX_ByteTextBuf sRet;
 
   if (pRange && pRange->IsExist()) {
-    if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
-      pIterator->SetAt(pRange->BeginPos);
+    IFX_Edit_Iterator* pIterator = pEdit->GetIterator();
+    pIterator->SetAt(pRange->BeginPos);
 
-      while (pIterator->NextWord()) {
-        CPVT_WordPlace place = pIterator->GetAt();
+    while (pIterator->NextWord()) {
+      CPVT_WordPlace place = pIterator->GetAt();
 
-        if (pRange && place.WordCmp(pRange->EndPos) > 0)
-          break;
+      if (pRange && place.WordCmp(pRange->EndPos) > 0)
+        break;
 
-        CPVT_Word word;
-        CPVT_Line line;
-        if (pIterator->GetWord(word) && pIterator->GetLine(line)) {
-          sRet << word.ptWord.x + ptOffset.x << " "
-               << line.ptLine.y + line.fLineDescent << " " << word.fWidth << " "
-               << line.fLineAscent - line.fLineDescent << " re\nf\n";
-        }
+      CPVT_Word word;
+      CPVT_Line line;
+      if (pIterator->GetWord(word) && pIterator->GetLine(line)) {
+        sRet << word.ptWord.x + ptOffset.x << " "
+             << line.ptLine.y + line.fLineDescent << " " << word.fWidth << " "
+             << line.fLineAscent - line.fLineDescent << " re\nf\n";
       }
     }
   }
diff --git a/fpdfsdk/fxedit/fxet_edit.cpp b/fpdfsdk/fxedit/fxet_edit.cpp
index a02a2a0..d2abb17 100644
--- a/fpdfsdk/fxedit/fxet_edit.cpp
+++ b/fpdfsdk/fxedit/fxet_edit.cpp
@@ -748,16 +748,15 @@
 
 CFX_Edit::CFX_Edit(CPDF_VariableText* pVT)
     : m_pVT(pVT),
-      m_pNotify(NULL),
-      m_pOprNotify(NULL),
-      m_pVTProvide(NULL),
+      m_pNotify(nullptr),
+      m_pOprNotify(nullptr),
       m_wpCaret(-1, -1, -1),
       m_wpOldCaret(-1, -1, -1),
       m_SelState(),
       m_ptScrollPos(0, 0),
       m_ptRefreshScrollPos(0, 0),
       m_bEnableScroll(FALSE),
-      m_pIterator(NULL),
+      m_pIterator(nullptr),
       m_ptCaret(0.0f, 0.0f),
       m_Undo(kEditUndoMaxItems),
       m_nAlignment(0),
@@ -768,15 +767,11 @@
       m_bEnableUndo(TRUE),
       m_bNotify(TRUE),
       m_bOprNotify(FALSE),
-      m_pGroupUndoItem(NULL) {
+      m_pGroupUndoItem(nullptr) {
   ASSERT(pVT);
 }
 
 CFX_Edit::~CFX_Edit() {
-  delete m_pVTProvide;
-  m_pVTProvide = NULL;
-  delete m_pIterator;
-  m_pIterator = NULL;
   ASSERT(!m_pGroupUndoItem);
 }
 
@@ -787,8 +782,8 @@
 }
 
 void CFX_Edit::SetFontMap(IPVT_FontMap* pFontMap) {
-  delete m_pVTProvide;
-  m_pVT->SetProvider(m_pVTProvide = new CFX_Edit_Provider(pFontMap));
+  m_pVTProvider.reset(new CFX_Edit_Provider(pFontMap));
+  m_pVT->SetProvider(m_pVTProvider.get());
 }
 
 void CFX_Edit::SetNotify(IFX_Edit_Notify* pNotify) {
@@ -801,9 +796,8 @@
 
 IFX_Edit_Iterator* CFX_Edit::GetIterator() {
   if (!m_pIterator)
-    m_pIterator = new CFX_Edit_Iterator(this, m_pVT->GetIterator());
-
-  return m_pIterator;
+    m_pIterator.reset(new CFX_Edit_Iterator(this, m_pVT->GetIterator()));
+  return m_pIterator.get();
 }
 
 CPDF_VariableText* CFX_Edit::GetVariableText() {
@@ -811,10 +805,7 @@
 }
 
 IPVT_FontMap* CFX_Edit::GetFontMap() {
-  if (m_pVTProvide)
-    return m_pVTProvide->GetFontMap();
-
-  return NULL;
+  return m_pVTProvider ? m_pVTProvider->GetFontMap() : nullptr;
 }
 
 void CFX_Edit::SetPlateRect(const CFX_FloatRect& rect, FX_BOOL bPaint) {
@@ -980,33 +971,24 @@
 CFX_WideString CFX_Edit::GetText() const {
   CFX_WideString swRet;
 
-  if (m_pVT->IsValid()) {
-    if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-      FX_BOOL bRich = m_pVT->IsRichText();
+  if (!m_pVT->IsValid())
+    return swRet;
 
-      pIterator->SetAt(0);
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  pIterator->SetAt(0);
 
-      CPVT_Word wordinfo;
-      CPVT_WordPlace oldplace = pIterator->GetAt();
-      while (pIterator->NextWord()) {
-        CPVT_WordPlace place = pIterator->GetAt();
+  CPVT_Word wordinfo;
+  CPVT_WordPlace oldplace = pIterator->GetAt();
+  while (pIterator->NextWord()) {
+    CPVT_WordPlace place = pIterator->GetAt();
 
-        if (pIterator->GetWord(wordinfo)) {
-          if (bRich) {
-            swRet += wordinfo.Word;
-          } else {
-            swRet += wordinfo.Word;
-          }
-        }
+    if (pIterator->GetWord(wordinfo))
+      swRet += wordinfo.Word;
 
-        if (oldplace.SecCmp(place) != 0) {
-          swRet += 0x0D;
-          swRet += 0x0A;
-        }
+    if (oldplace.SecCmp(place) != 0)
+      swRet += L"\r\n";
 
-        oldplace = place;
-      }
-    }
+    oldplace = place;
   }
 
   return swRet;
@@ -1015,38 +997,29 @@
 CFX_WideString CFX_Edit::GetRangeText(const CPVT_WordRange& range) const {
   CFX_WideString swRet;
 
-  if (m_pVT->IsValid()) {
-    FX_BOOL bRich = m_pVT->IsRichText();
+  if (!m_pVT->IsValid())
+    return swRet;
 
-    if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-      CPVT_WordRange wrTemp = range;
-      m_pVT->UpdateWordPlace(wrTemp.BeginPos);
-      m_pVT->UpdateWordPlace(wrTemp.EndPos);
-      pIterator->SetAt(wrTemp.BeginPos);
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  CPVT_WordRange wrTemp = range;
+  m_pVT->UpdateWordPlace(wrTemp.BeginPos);
+  m_pVT->UpdateWordPlace(wrTemp.EndPos);
+  pIterator->SetAt(wrTemp.BeginPos);
 
-      CPVT_Word wordinfo;
-      CPVT_WordPlace oldplace = wrTemp.BeginPos;
-      while (pIterator->NextWord()) {
-        CPVT_WordPlace place = pIterator->GetAt();
-        if (place.WordCmp(wrTemp.EndPos) > 0)
-          break;
+  CPVT_Word wordinfo;
+  CPVT_WordPlace oldplace = wrTemp.BeginPos;
+  while (pIterator->NextWord()) {
+    CPVT_WordPlace place = pIterator->GetAt();
+    if (place.WordCmp(wrTemp.EndPos) > 0)
+      break;
 
-        if (pIterator->GetWord(wordinfo)) {
-          if (bRich) {
-            swRet += wordinfo.Word;
-          } else {
-            swRet += wordinfo.Word;
-          }
-        }
+    if (pIterator->GetWord(wordinfo))
+      swRet += wordinfo.Word;
 
-        if (oldplace.SecCmp(place) != 0) {
-          swRet += 0x0D;
-          swRet += 0x0A;
-        }
+    if (oldplace.SecCmp(place) != 0)
+      swRet += L"\r\n";
 
-        oldplace = place;
-      }
-    }
+    oldplace = place;
   }
 
   return swRet;
@@ -1061,15 +1034,14 @@
 }
 
 int32_t CFX_Edit::GetTotalLines() const {
-  int32_t nLines = 0;
+  int32_t nLines = 1;
 
-  if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-    pIterator->SetAt(0);
-    while (pIterator->NextLine())
-      nLines++;
-  }
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  pIterator->SetAt(0);
+  while (pIterator->NextLine())
+    ++nLines;
 
-  return nLines + 1;
+  return nLines;
 }
 
 CPVT_WordRange CFX_Edit::GetSelectWordRange() const {
@@ -1190,39 +1162,37 @@
 FX_BOOL CFX_Edit::SetRichTextProps(EDIT_PROPS_E eProps,
                                    const CPVT_SecProps* pSecProps,
                                    const CPVT_WordProps* pWordProps) {
-  FX_BOOL bSet = FALSE;
-  FX_BOOL bSet1, bSet2;
-  if (m_pVT->IsValid() && m_pVT->IsRichText()) {
-    if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-      CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
+  if (!m_pVT->IsValid() || !m_pVT->IsRichText())
+    return FALSE;
 
-      m_pVT->UpdateWordPlace(wrTemp.BeginPos);
-      m_pVT->UpdateWordPlace(wrTemp.EndPos);
-      pIterator->SetAt(wrTemp.BeginPos);
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
 
-      BeginGroupUndo(L"");
-      bSet = SetSecProps(eProps, wrTemp.BeginPos, pSecProps, pWordProps, wrTemp,
-                         TRUE);
+  m_pVT->UpdateWordPlace(wrTemp.BeginPos);
+  m_pVT->UpdateWordPlace(wrTemp.EndPos);
+  pIterator->SetAt(wrTemp.BeginPos);
 
-      while (pIterator->NextWord()) {
-        CPVT_WordPlace place = pIterator->GetAt();
-        if (place.WordCmp(wrTemp.EndPos) > 0)
-          break;
-        bSet1 = SetSecProps(eProps, place, pSecProps, pWordProps, wrTemp, TRUE);
-        bSet2 = SetWordProps(eProps, place, pWordProps, wrTemp, TRUE);
+  BeginGroupUndo(L"");
+  FX_BOOL bSet =
+      SetSecProps(eProps, wrTemp.BeginPos, pSecProps, pWordProps, wrTemp, TRUE);
 
-        if (!bSet)
-          bSet = (bSet1 || bSet2);
-      }
+  while (pIterator->NextWord()) {
+    CPVT_WordPlace place = pIterator->GetAt();
+    if (place.WordCmp(wrTemp.EndPos) > 0)
+      break;
+    FX_BOOL bSet1 =
+        SetSecProps(eProps, place, pSecProps, pWordProps, wrTemp, TRUE);
+    FX_BOOL bSet2 = SetWordProps(eProps, place, pWordProps, wrTemp, TRUE);
 
-      EndGroupUndo();
-
-      if (bSet) {
-        PaintSetProps(eProps, wrTemp);
-      }
-    }
+    if (!bSet)
+      bSet = (bSet1 || bSet2);
   }
 
+  EndGroupUndo();
+
+  if (bSet)
+    PaintSetProps(eProps, wrTemp);
+
   return bSet;
 }
 
@@ -1268,178 +1238,172 @@
                               const CPVT_WordProps* pWordProps,
                               const CPVT_WordRange& wr,
                               FX_BOOL bAddUndo) {
-  if (m_pVT->IsValid() && m_pVT->IsRichText()) {
-    if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-      FX_BOOL bSet = FALSE;
-      CPVT_Section secinfo;
-      CPVT_Section OldSecinfo;
+  if (!m_pVT->IsValid() || !m_pVT->IsRichText())
+    return FALSE;
 
-      CPVT_WordPlace oldplace = pIterator->GetAt();
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  FX_BOOL bSet = FALSE;
+  CPVT_Section secinfo;
+  CPVT_Section OldSecinfo;
 
-      if (eProps == EP_LINELEADING || eProps == EP_LINEINDENT ||
-          eProps == EP_ALIGNMENT) {
-        if (pSecProps) {
-          pIterator->SetAt(place);
-          if (pIterator->GetSection(secinfo)) {
-            if (bAddUndo)
-              OldSecinfo = secinfo;
+  CPVT_WordPlace oldplace = pIterator->GetAt();
 
-            switch (eProps) {
-              case EP_LINELEADING:
-                if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineLeading,
-                                          pSecProps->fLineLeading)) {
-                  secinfo.SecProps.fLineLeading = pSecProps->fLineLeading;
-                  bSet = TRUE;
-                }
-                break;
-              case EP_LINEINDENT:
-                if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineIndent,
-                                          pSecProps->fLineIndent)) {
-                  secinfo.SecProps.fLineIndent = pSecProps->fLineIndent;
-                  bSet = TRUE;
-                }
-                break;
-              case EP_ALIGNMENT:
-                if (secinfo.SecProps.nAlignment != pSecProps->nAlignment) {
-                  secinfo.SecProps.nAlignment = pSecProps->nAlignment;
-                  bSet = TRUE;
-                }
-                break;
-              default:
-                break;
+  if (eProps == EP_LINELEADING || eProps == EP_LINEINDENT ||
+      eProps == EP_ALIGNMENT) {
+    if (pSecProps) {
+      pIterator->SetAt(place);
+      if (pIterator->GetSection(secinfo)) {
+        if (bAddUndo)
+          OldSecinfo = secinfo;
+
+        switch (eProps) {
+          case EP_LINELEADING:
+            if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineLeading,
+                                      pSecProps->fLineLeading)) {
+              secinfo.SecProps.fLineLeading = pSecProps->fLineLeading;
+              bSet = TRUE;
             }
-          }
-        }
-      } else {
-        if (pWordProps && place == m_pVT->GetSectionBeginPlace(place)) {
-          pIterator->SetAt(place);
-          if (pIterator->GetSection(secinfo)) {
-            if (bAddUndo)
-              OldSecinfo = secinfo;
-
-            switch (eProps) {
-              case EP_FONTINDEX:
-                if (secinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
-                  secinfo.WordProps.nFontIndex = pWordProps->nFontIndex;
-                  bSet = TRUE;
-                }
-                break;
-              case EP_FONTSIZE:
-                if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fFontSize,
-                                          pWordProps->fFontSize)) {
-                  secinfo.WordProps.fFontSize = pWordProps->fFontSize;
-                  bSet = TRUE;
-                }
-                break;
-              case EP_WORDCOLOR:
-                if (secinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
-                  secinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
-                  bSet = TRUE;
-                }
-                break;
-              case EP_SCRIPTTYPE:
-                if (secinfo.WordProps.nScriptType != pWordProps->nScriptType) {
-                  secinfo.WordProps.nScriptType = pWordProps->nScriptType;
-                  bSet = TRUE;
-                }
-                break;
-              case EP_CHARSPACE:
-                if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fCharSpace,
-                                          pWordProps->fCharSpace)) {
-                  secinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
-                  bSet = TRUE;
-                }
-                break;
-              case EP_HORZSCALE:
-                if (secinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
-                  secinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
-                  bSet = TRUE;
-                }
-                break;
-              case EP_UNDERLINE:
-                if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
-                  if ((secinfo.WordProps.nWordStyle &
-                       PVTWORD_STYLE_UNDERLINE) == 0) {
-                    secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
-                    bSet = TRUE;
-                  }
-                } else {
-                  if ((secinfo.WordProps.nWordStyle &
-                       PVTWORD_STYLE_UNDERLINE) != 0) {
-                    secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
-                    bSet = TRUE;
-                  }
-                }
-                break;
-              case EP_CROSSOUT:
-                if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
-                  if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) ==
-                      0) {
-                    secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
-                    bSet = TRUE;
-                  }
-                } else {
-                  if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) !=
-                      0) {
-                    secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
-                    bSet = TRUE;
-                  }
-                }
-                break;
-              case EP_BOLD:
-                if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
-                  if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) ==
-                      0) {
-                    secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
-                    bSet = TRUE;
-                  }
-                } else {
-                  if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) !=
-                      0) {
-                    secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
-                    bSet = TRUE;
-                  }
-                }
-                break;
-              case EP_ITALIC:
-                if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
-                  if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) ==
-                      0) {
-                    secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
-                    bSet = TRUE;
-                  }
-                } else {
-                  if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) !=
-                      0) {
-                    secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
-                    bSet = TRUE;
-                  }
-                }
-                break;
-              default:
-                break;
+            break;
+          case EP_LINEINDENT:
+            if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineIndent,
+                                      pSecProps->fLineIndent)) {
+              secinfo.SecProps.fLineIndent = pSecProps->fLineIndent;
+              bSet = TRUE;
             }
-          }
+            break;
+          case EP_ALIGNMENT:
+            if (secinfo.SecProps.nAlignment != pSecProps->nAlignment) {
+              secinfo.SecProps.nAlignment = pSecProps->nAlignment;
+              bSet = TRUE;
+            }
+            break;
+          default:
+            break;
         }
       }
+    }
+  } else {
+    if (pWordProps && place == m_pVT->GetSectionBeginPlace(place)) {
+      pIterator->SetAt(place);
+      if (pIterator->GetSection(secinfo)) {
+        if (bAddUndo)
+          OldSecinfo = secinfo;
 
-      if (bSet) {
-        pIterator->SetSection(secinfo);
-
-        if (bAddUndo && m_bEnableUndo) {
-          AddEditUndoItem(new CFXEU_SetSecProps(
-              this, place, eProps, OldSecinfo.SecProps, OldSecinfo.WordProps,
-              secinfo.SecProps, secinfo.WordProps, wr));
+        switch (eProps) {
+          case EP_FONTINDEX:
+            if (secinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
+              secinfo.WordProps.nFontIndex = pWordProps->nFontIndex;
+              bSet = TRUE;
+            }
+            break;
+          case EP_FONTSIZE:
+            if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fFontSize,
+                                      pWordProps->fFontSize)) {
+              secinfo.WordProps.fFontSize = pWordProps->fFontSize;
+              bSet = TRUE;
+            }
+            break;
+          case EP_WORDCOLOR:
+            if (secinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
+              secinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
+              bSet = TRUE;
+            }
+            break;
+          case EP_SCRIPTTYPE:
+            if (secinfo.WordProps.nScriptType != pWordProps->nScriptType) {
+              secinfo.WordProps.nScriptType = pWordProps->nScriptType;
+              bSet = TRUE;
+            }
+            break;
+          case EP_CHARSPACE:
+            if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fCharSpace,
+                                      pWordProps->fCharSpace)) {
+              secinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
+              bSet = TRUE;
+            }
+            break;
+          case EP_HORZSCALE:
+            if (secinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
+              secinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
+              bSet = TRUE;
+            }
+            break;
+          case EP_UNDERLINE:
+            if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
+              if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) ==
+                  0) {
+                secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
+                bSet = TRUE;
+              }
+            } else {
+              if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) !=
+                  0) {
+                secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
+                bSet = TRUE;
+              }
+            }
+            break;
+          case EP_CROSSOUT:
+            if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
+              if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) ==
+                  0) {
+                secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
+                bSet = TRUE;
+              }
+            } else {
+              if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) !=
+                  0) {
+                secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
+                bSet = TRUE;
+              }
+            }
+            break;
+          case EP_BOLD:
+            if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
+              if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) {
+                secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
+                bSet = TRUE;
+              }
+            } else {
+              if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) {
+                secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
+                bSet = TRUE;
+              }
+            }
+            break;
+          case EP_ITALIC:
+            if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
+              if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0) {
+                secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
+                bSet = TRUE;
+              }
+            } else {
+              if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0) {
+                secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
+                bSet = TRUE;
+              }
+            }
+            break;
+          default:
+            break;
         }
       }
-
-      pIterator->SetAt(oldplace);
-
-      return bSet;
     }
   }
 
-  return FALSE;
+  if (bSet) {
+    pIterator->SetSection(secinfo);
+
+    if (bAddUndo && m_bEnableUndo) {
+      AddEditUndoItem(new CFXEU_SetSecProps(
+          this, place, eProps, OldSecinfo.SecProps, OldSecinfo.WordProps,
+          secinfo.SecProps, secinfo.WordProps, wr));
+    }
+  }
+
+  pIterator->SetAt(oldplace);
+
+  return bSet;
 }
 
 FX_BOOL CFX_Edit::SetWordProps(EDIT_PROPS_E eProps,
@@ -1447,142 +1411,135 @@
                                const CPVT_WordProps* pWordProps,
                                const CPVT_WordRange& wr,
                                FX_BOOL bAddUndo) {
-  if (m_pVT->IsValid() && m_pVT->IsRichText()) {
-    if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-      FX_BOOL bSet = FALSE;
-      CPVT_Word wordinfo;
-      CPVT_Word OldWordinfo;
+  if (!m_pVT->IsValid() || !m_pVT->IsRichText())
+    return FALSE;
 
-      CPVT_WordPlace oldplace = pIterator->GetAt();
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  FX_BOOL bSet = FALSE;
+  CPVT_Word wordinfo;
+  CPVT_Word OldWordinfo;
 
-      if (pWordProps) {
-        pIterator->SetAt(place);
-        if (pIterator->GetWord(wordinfo)) {
-          if (bAddUndo)
-            OldWordinfo = wordinfo;
+  CPVT_WordPlace oldplace = pIterator->GetAt();
 
-          switch (eProps) {
-            case EP_FONTINDEX:
-              if (wordinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
-                if (IPVT_FontMap* pFontMap = GetFontMap()) {
-                  wordinfo.WordProps.nFontIndex = pFontMap->GetWordFontIndex(
-                      wordinfo.Word, wordinfo.nCharset, pWordProps->nFontIndex);
-                }
-                bSet = TRUE;
-              }
-              break;
-            case EP_FONTSIZE:
-              if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fFontSize,
-                                        pWordProps->fFontSize)) {
-                wordinfo.WordProps.fFontSize = pWordProps->fFontSize;
-                bSet = TRUE;
-              }
-              break;
-            case EP_WORDCOLOR:
-              if (wordinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
-                wordinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
-                bSet = TRUE;
-              }
-              break;
-            case EP_SCRIPTTYPE:
-              if (wordinfo.WordProps.nScriptType != pWordProps->nScriptType) {
-                wordinfo.WordProps.nScriptType = pWordProps->nScriptType;
-                bSet = TRUE;
-              }
-              break;
-            case EP_CHARSPACE:
-              if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fCharSpace,
-                                        pWordProps->fCharSpace)) {
-                wordinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
-                bSet = TRUE;
-              }
-              break;
-            case EP_HORZSCALE:
-              if (wordinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
-                wordinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
-                bSet = TRUE;
-              }
-              break;
-            case EP_UNDERLINE:
-              if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
-                if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) ==
-                    0) {
-                  wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
-                  bSet = TRUE;
-                }
-              } else {
-                if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) !=
-                    0) {
-                  wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
-                  bSet = TRUE;
-                }
-              }
-              break;
-            case EP_CROSSOUT:
-              if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
-                if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) ==
-                    0) {
-                  wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
-                  bSet = TRUE;
-                }
-              } else {
-                if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) !=
-                    0) {
-                  wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
-                  bSet = TRUE;
-                }
-              }
-              break;
-            case EP_BOLD:
-              if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
-                if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) {
-                  wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
-                  bSet = TRUE;
-                }
-              } else {
-                if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) {
-                  wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
-                  bSet = TRUE;
-                }
-              }
-              break;
-            case EP_ITALIC:
-              if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
-                if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) ==
-                    0) {
-                  wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
-                  bSet = TRUE;
-                }
-              } else {
-                if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) !=
-                    0) {
-                  wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
-                  bSet = TRUE;
-                }
-              }
-              break;
-            default:
-              break;
+  if (pWordProps) {
+    pIterator->SetAt(place);
+    if (pIterator->GetWord(wordinfo)) {
+      if (bAddUndo)
+        OldWordinfo = wordinfo;
+
+      switch (eProps) {
+        case EP_FONTINDEX:
+          if (wordinfo.WordProps.nFontIndex != pWordProps->nFontIndex) {
+            if (IPVT_FontMap* pFontMap = GetFontMap()) {
+              wordinfo.WordProps.nFontIndex = pFontMap->GetWordFontIndex(
+                  wordinfo.Word, wordinfo.nCharset, pWordProps->nFontIndex);
+            }
+            bSet = TRUE;
           }
-        }
+          break;
+        case EP_FONTSIZE:
+          if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fFontSize,
+                                    pWordProps->fFontSize)) {
+            wordinfo.WordProps.fFontSize = pWordProps->fFontSize;
+            bSet = TRUE;
+          }
+          break;
+        case EP_WORDCOLOR:
+          if (wordinfo.WordProps.dwWordColor != pWordProps->dwWordColor) {
+            wordinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
+            bSet = TRUE;
+          }
+          break;
+        case EP_SCRIPTTYPE:
+          if (wordinfo.WordProps.nScriptType != pWordProps->nScriptType) {
+            wordinfo.WordProps.nScriptType = pWordProps->nScriptType;
+            bSet = TRUE;
+          }
+          break;
+        case EP_CHARSPACE:
+          if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fCharSpace,
+                                    pWordProps->fCharSpace)) {
+            wordinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
+            bSet = TRUE;
+          }
+          break;
+        case EP_HORZSCALE:
+          if (wordinfo.WordProps.nHorzScale != pWordProps->nHorzScale) {
+            wordinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
+            bSet = TRUE;
+          }
+          break;
+        case EP_UNDERLINE:
+          if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE) {
+            if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) ==
+                0) {
+              wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
+              bSet = TRUE;
+            }
+          } else {
+            if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) !=
+                0) {
+              wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
+              bSet = TRUE;
+            }
+          }
+          break;
+        case EP_CROSSOUT:
+          if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT) {
+            if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) == 0) {
+              wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
+              bSet = TRUE;
+            }
+          } else {
+            if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) != 0) {
+              wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
+              bSet = TRUE;
+            }
+          }
+          break;
+        case EP_BOLD:
+          if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD) {
+            if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0) {
+              wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
+              bSet = TRUE;
+            }
+          } else {
+            if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0) {
+              wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
+              bSet = TRUE;
+            }
+          }
+          break;
+        case EP_ITALIC:
+          if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC) {
+            if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0) {
+              wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
+              bSet = TRUE;
+            }
+          } else {
+            if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0) {
+              wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
+              bSet = TRUE;
+            }
+          }
+          break;
+        default:
+          break;
       }
-
-      if (bSet) {
-        pIterator->SetWord(wordinfo);
-
-        if (bAddUndo && m_bEnableUndo) {
-          AddEditUndoItem(new CFXEU_SetWordProps(this, place, eProps,
-                                                 OldWordinfo.WordProps,
-                                                 wordinfo.WordProps, wr));
-        }
-      }
-
-      pIterator->SetAt(oldplace);
-      return bSet;
     }
   }
 
-  return FALSE;
+  if (bSet) {
+    pIterator->SetWord(wordinfo);
+
+    if (bAddUndo && m_bEnableUndo) {
+      AddEditUndoItem(new CFXEU_SetWordProps(
+          this, place, eProps, OldWordinfo.WordProps, wordinfo.WordProps, wr));
+    }
+  }
+
+  pIterator->SetAt(oldplace);
+  return bSet;
 }
 
 void CFX_Edit::SetText(const FX_WCHAR* text,
@@ -1918,52 +1875,52 @@
 void CFX_Edit::ScrollToCaret() {
   SetScrollLimit();
 
-  if (m_pVT->IsValid()) {
-    CFX_FloatPoint ptHead(0, 0);
-    CFX_FloatPoint ptFoot(0, 0);
+  if (!m_pVT->IsValid())
+    return;
 
-    if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-      pIterator->SetAt(m_wpCaret);
+  CFX_FloatPoint ptHead(0, 0);
+  CFX_FloatPoint ptFoot(0, 0);
 
-      CPVT_Word word;
-      CPVT_Line line;
-      if (pIterator->GetWord(word)) {
-        ptHead.x = word.ptWord.x + word.fWidth;
-        ptHead.y = word.ptWord.y + word.fAscent;
-        ptFoot.x = word.ptWord.x + word.fWidth;
-        ptFoot.y = word.ptWord.y + word.fDescent;
-      } else if (pIterator->GetLine(line)) {
-        ptHead.x = line.ptLine.x;
-        ptHead.y = line.ptLine.y + line.fLineAscent;
-        ptFoot.x = line.ptLine.x;
-        ptFoot.y = line.ptLine.y + line.fLineDescent;
-      }
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  pIterator->SetAt(m_wpCaret);
+
+  CPVT_Word word;
+  CPVT_Line line;
+  if (pIterator->GetWord(word)) {
+    ptHead.x = word.ptWord.x + word.fWidth;
+    ptHead.y = word.ptWord.y + word.fAscent;
+    ptFoot.x = word.ptWord.x + word.fWidth;
+    ptFoot.y = word.ptWord.y + word.fDescent;
+  } else if (pIterator->GetLine(line)) {
+    ptHead.x = line.ptLine.x;
+    ptHead.y = line.ptLine.y + line.fLineAscent;
+    ptFoot.x = line.ptLine.x;
+    ptFoot.y = line.ptLine.y + line.fLineDescent;
+  }
+
+  CFX_FloatPoint ptHeadEdit = VTToEdit(ptHead);
+  CFX_FloatPoint ptFootEdit = VTToEdit(ptFoot);
+
+  CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
+
+  if (!FX_EDIT_IsFloatEqual(rcPlate.left, rcPlate.right)) {
+    if (FX_EDIT_IsFloatSmaller(ptHeadEdit.x, rcPlate.left) ||
+        FX_EDIT_IsFloatEqual(ptHeadEdit.x, rcPlate.left)) {
+      SetScrollPosX(ptHead.x);
+    } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.x, rcPlate.right)) {
+      SetScrollPosX(ptHead.x - rcPlate.Width());
     }
+  }
 
-    CFX_FloatPoint ptHeadEdit = VTToEdit(ptHead);
-    CFX_FloatPoint ptFootEdit = VTToEdit(ptFoot);
-
-    CFX_FloatRect rcPlate = m_pVT->GetPlateRect();
-
-    if (!FX_EDIT_IsFloatEqual(rcPlate.left, rcPlate.right)) {
-      if (FX_EDIT_IsFloatSmaller(ptHeadEdit.x, rcPlate.left) ||
-          FX_EDIT_IsFloatEqual(ptHeadEdit.x, rcPlate.left)) {
-        SetScrollPosX(ptHead.x);
-      } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.x, rcPlate.right)) {
-        SetScrollPosX(ptHead.x - rcPlate.Width());
+  if (!FX_EDIT_IsFloatEqual(rcPlate.top, rcPlate.bottom)) {
+    if (FX_EDIT_IsFloatSmaller(ptFootEdit.y, rcPlate.bottom) ||
+        FX_EDIT_IsFloatEqual(ptFootEdit.y, rcPlate.bottom)) {
+      if (FX_EDIT_IsFloatSmaller(ptHeadEdit.y, rcPlate.top)) {
+        SetScrollPosY(ptFoot.y + rcPlate.Height());
       }
-    }
-
-    if (!FX_EDIT_IsFloatEqual(rcPlate.top, rcPlate.bottom)) {
-      if (FX_EDIT_IsFloatSmaller(ptFootEdit.y, rcPlate.bottom) ||
-          FX_EDIT_IsFloatEqual(ptFootEdit.y, rcPlate.bottom)) {
-        if (FX_EDIT_IsFloatSmaller(ptHeadEdit.y, rcPlate.top)) {
-          SetScrollPosY(ptFoot.y + rcPlate.Height());
-        }
-      } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.y, rcPlate.top)) {
-        if (FX_EDIT_IsFloatBigger(ptFootEdit.y, rcPlate.bottom)) {
-          SetScrollPosY(ptHead.y);
-        }
+    } else if (FX_EDIT_IsFloatBigger(ptHeadEdit.y, rcPlate.top)) {
+      if (FX_EDIT_IsFloatBigger(ptFootEdit.y, rcPlate.bottom)) {
+        SetScrollPosY(ptHead.y);
       }
     }
   }
@@ -1995,129 +1952,128 @@
 }
 
 void CFX_Edit::RefreshPushLineRects(const CPVT_WordRange& wr) {
-  if (m_pVT->IsValid()) {
-    if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-      CPVT_WordPlace wpBegin = wr.BeginPos;
-      m_pVT->UpdateWordPlace(wpBegin);
-      CPVT_WordPlace wpEnd = wr.EndPos;
-      m_pVT->UpdateWordPlace(wpEnd);
-      pIterator->SetAt(wpBegin);
+  if (!m_pVT->IsValid())
+    return;
 
-      CPVT_Line lineinfo;
-      do {
-        if (!pIterator->GetLine(lineinfo))
-          break;
-        if (lineinfo.lineplace.LineCmp(wpEnd) > 0)
-          break;
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  CPVT_WordPlace wpBegin = wr.BeginPos;
+  m_pVT->UpdateWordPlace(wpBegin);
+  CPVT_WordPlace wpEnd = wr.EndPos;
+  m_pVT->UpdateWordPlace(wpEnd);
+  pIterator->SetAt(wpBegin);
 
-        CFX_FloatRect rcLine(lineinfo.ptLine.x,
-                             lineinfo.ptLine.y + lineinfo.fLineDescent,
-                             lineinfo.ptLine.x + lineinfo.fLineWidth,
-                             lineinfo.ptLine.y + lineinfo.fLineAscent);
+  CPVT_Line lineinfo;
+  do {
+    if (!pIterator->GetLine(lineinfo))
+      break;
+    if (lineinfo.lineplace.LineCmp(wpEnd) > 0)
+      break;
 
-        m_Refresh.Push(CPVT_WordRange(lineinfo.lineplace, lineinfo.lineEnd),
-                       VTToEdit(rcLine));
-      } while (pIterator->NextLine());
-    }
-  }
+    CFX_FloatRect rcLine(lineinfo.ptLine.x,
+                         lineinfo.ptLine.y + lineinfo.fLineDescent,
+                         lineinfo.ptLine.x + lineinfo.fLineWidth,
+                         lineinfo.ptLine.y + lineinfo.fLineAscent);
+
+    m_Refresh.Push(CPVT_WordRange(lineinfo.lineplace, lineinfo.lineEnd),
+                   VTToEdit(rcLine));
+  } while (pIterator->NextLine());
 }
 
 void CFX_Edit::RefreshPushRandomRects(const CPVT_WordRange& wr) {
-  if (m_pVT->IsValid()) {
-    if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-      CPVT_WordRange wrTemp = wr;
+  if (!m_pVT->IsValid())
+    return;
 
-      m_pVT->UpdateWordPlace(wrTemp.BeginPos);
-      m_pVT->UpdateWordPlace(wrTemp.EndPos);
-      pIterator->SetAt(wrTemp.BeginPos);
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  CPVT_WordRange wrTemp = wr;
 
-      CPVT_Word wordinfo;
-      CPVT_Line lineinfo;
-      CPVT_WordPlace place;
+  m_pVT->UpdateWordPlace(wrTemp.BeginPos);
+  m_pVT->UpdateWordPlace(wrTemp.EndPos);
+  pIterator->SetAt(wrTemp.BeginPos);
 
-      while (pIterator->NextWord()) {
-        place = pIterator->GetAt();
-        if (place.WordCmp(wrTemp.EndPos) > 0)
-          break;
+  CPVT_Word wordinfo;
+  CPVT_Line lineinfo;
+  CPVT_WordPlace place;
 
-        pIterator->GetWord(wordinfo);
-        pIterator->GetLine(lineinfo);
+  while (pIterator->NextWord()) {
+    place = pIterator->GetAt();
+    if (place.WordCmp(wrTemp.EndPos) > 0)
+      break;
 
-        if (place.LineCmp(wrTemp.BeginPos) == 0 ||
-            place.LineCmp(wrTemp.EndPos) == 0) {
-          CFX_FloatRect rcWord(wordinfo.ptWord.x,
-                               lineinfo.ptLine.y + lineinfo.fLineDescent,
-                               wordinfo.ptWord.x + wordinfo.fWidth,
-                               lineinfo.ptLine.y + lineinfo.fLineAscent);
+    pIterator->GetWord(wordinfo);
+    pIterator->GetLine(lineinfo);
 
-          m_Refresh.AddRefresh(VTToEdit(rcWord));
-        } else {
-          CFX_FloatRect rcLine(lineinfo.ptLine.x,
-                               lineinfo.ptLine.y + lineinfo.fLineDescent,
-                               lineinfo.ptLine.x + lineinfo.fLineWidth,
-                               lineinfo.ptLine.y + lineinfo.fLineAscent);
+    if (place.LineCmp(wrTemp.BeginPos) == 0 ||
+        place.LineCmp(wrTemp.EndPos) == 0) {
+      CFX_FloatRect rcWord(wordinfo.ptWord.x,
+                           lineinfo.ptLine.y + lineinfo.fLineDescent,
+                           wordinfo.ptWord.x + wordinfo.fWidth,
+                           lineinfo.ptLine.y + lineinfo.fLineAscent);
 
-          m_Refresh.AddRefresh(VTToEdit(rcLine));
+      m_Refresh.AddRefresh(VTToEdit(rcWord));
+    } else {
+      CFX_FloatRect rcLine(lineinfo.ptLine.x,
+                           lineinfo.ptLine.y + lineinfo.fLineDescent,
+                           lineinfo.ptLine.x + lineinfo.fLineWidth,
+                           lineinfo.ptLine.y + lineinfo.fLineAscent);
 
-          pIterator->NextLine();
-        }
-      }
+      m_Refresh.AddRefresh(VTToEdit(rcLine));
+
+      pIterator->NextLine();
     }
   }
 }
 
 void CFX_Edit::RefreshWordRange(const CPVT_WordRange& wr) {
-  if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-    CPVT_WordRange wrTemp = wr;
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  CPVT_WordRange wrTemp = wr;
 
-    m_pVT->UpdateWordPlace(wrTemp.BeginPos);
-    m_pVT->UpdateWordPlace(wrTemp.EndPos);
-    pIterator->SetAt(wrTemp.BeginPos);
+  m_pVT->UpdateWordPlace(wrTemp.BeginPos);
+  m_pVT->UpdateWordPlace(wrTemp.EndPos);
+  pIterator->SetAt(wrTemp.BeginPos);
 
-    CPVT_Word wordinfo;
-    CPVT_Line lineinfo;
-    CPVT_WordPlace place;
+  CPVT_Word wordinfo;
+  CPVT_Line lineinfo;
+  CPVT_WordPlace place;
 
-    while (pIterator->NextWord()) {
-      place = pIterator->GetAt();
-      if (place.WordCmp(wrTemp.EndPos) > 0)
-        break;
+  while (pIterator->NextWord()) {
+    place = pIterator->GetAt();
+    if (place.WordCmp(wrTemp.EndPos) > 0)
+      break;
 
-      pIterator->GetWord(wordinfo);
-      pIterator->GetLine(lineinfo);
+    pIterator->GetWord(wordinfo);
+    pIterator->GetLine(lineinfo);
 
-      if (place.LineCmp(wrTemp.BeginPos) == 0 ||
-          place.LineCmp(wrTemp.EndPos) == 0) {
-        CFX_FloatRect rcWord(wordinfo.ptWord.x,
-                             lineinfo.ptLine.y + lineinfo.fLineDescent,
-                             wordinfo.ptWord.x + wordinfo.fWidth,
-                             lineinfo.ptLine.y + lineinfo.fLineAscent);
+    if (place.LineCmp(wrTemp.BeginPos) == 0 ||
+        place.LineCmp(wrTemp.EndPos) == 0) {
+      CFX_FloatRect rcWord(wordinfo.ptWord.x,
+                           lineinfo.ptLine.y + lineinfo.fLineDescent,
+                           wordinfo.ptWord.x + wordinfo.fWidth,
+                           lineinfo.ptLine.y + lineinfo.fLineAscent);
 
-        if (m_bNotify && m_pNotify) {
-          if (!m_bNotifyFlag) {
-            m_bNotifyFlag = TRUE;
-            CFX_FloatRect rcRefresh = VTToEdit(rcWord);
-            m_pNotify->IOnInvalidateRect(&rcRefresh);
-            m_bNotifyFlag = FALSE;
-          }
+      if (m_bNotify && m_pNotify) {
+        if (!m_bNotifyFlag) {
+          m_bNotifyFlag = TRUE;
+          CFX_FloatRect rcRefresh = VTToEdit(rcWord);
+          m_pNotify->IOnInvalidateRect(&rcRefresh);
+          m_bNotifyFlag = FALSE;
         }
-      } else {
-        CFX_FloatRect rcLine(lineinfo.ptLine.x,
-                             lineinfo.ptLine.y + lineinfo.fLineDescent,
-                             lineinfo.ptLine.x + lineinfo.fLineWidth,
-                             lineinfo.ptLine.y + lineinfo.fLineAscent);
-
-        if (m_bNotify && m_pNotify) {
-          if (!m_bNotifyFlag) {
-            m_bNotifyFlag = TRUE;
-            CFX_FloatRect rcRefresh = VTToEdit(rcLine);
-            m_pNotify->IOnInvalidateRect(&rcRefresh);
-            m_bNotifyFlag = FALSE;
-          }
-        }
-
-        pIterator->NextLine();
       }
+    } else {
+      CFX_FloatRect rcLine(lineinfo.ptLine.x,
+                           lineinfo.ptLine.y + lineinfo.fLineDescent,
+                           lineinfo.ptLine.x + lineinfo.fLineWidth,
+                           lineinfo.ptLine.y + lineinfo.fLineAscent);
+
+      if (m_bNotify && m_pNotify) {
+        if (!m_bNotifyFlag) {
+          m_bNotifyFlag = TRUE;
+          CFX_FloatRect rcRefresh = VTToEdit(rcLine);
+          m_pNotify->IOnInvalidateRect(&rcRefresh);
+          m_bNotifyFlag = FALSE;
+        }
+      }
+
+      pIterator->NextLine();
     }
   }
 }
@@ -2132,21 +2088,20 @@
     if (!m_bNotifyFlag) {
       CFX_FloatPoint ptHead(0.0f, 0.0f), ptFoot(0.0f, 0.0f);
 
-      if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-        pIterator->SetAt(m_wpCaret);
-        CPVT_Word word;
-        CPVT_Line line;
-        if (pIterator->GetWord(word)) {
-          ptHead.x = word.ptWord.x + word.fWidth;
-          ptHead.y = word.ptWord.y + word.fAscent;
-          ptFoot.x = word.ptWord.x + word.fWidth;
-          ptFoot.y = word.ptWord.y + word.fDescent;
-        } else if (pIterator->GetLine(line)) {
-          ptHead.x = line.ptLine.x;
-          ptHead.y = line.ptLine.y + line.fLineAscent;
-          ptFoot.x = line.ptLine.x;
-          ptFoot.y = line.ptLine.y + line.fLineDescent;
-        }
+      CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+      pIterator->SetAt(m_wpCaret);
+      CPVT_Word word;
+      CPVT_Line line;
+      if (pIterator->GetWord(word)) {
+        ptHead.x = word.ptWord.x + word.fWidth;
+        ptHead.y = word.ptWord.y + word.fAscent;
+        ptFoot.x = word.ptWord.x + word.fWidth;
+        ptFoot.y = word.ptWord.y + word.fDescent;
+      } else if (pIterator->GetLine(line)) {
+        ptHead.x = line.ptLine.x;
+        ptHead.y = line.ptLine.y + line.fLineAscent;
+        ptFoot.x = line.ptLine.x;
+        ptFoot.y = line.ptLine.y + line.fLineDescent;
       }
 
       m_bNotifyFlag = TRUE;
@@ -2163,30 +2118,29 @@
   if (m_wpCaret == m_wpOldCaret)
     return;
 
-  if (m_bNotify && m_pVT->IsRichText() && m_pNotify) {
-    CPVT_SecProps SecProps;
-    CPVT_WordProps WordProps;
+  if (!m_bNotify || !m_pVT->IsRichText() || !m_pNotify)
+    return;
 
-    if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-      pIterator->SetAt(m_wpCaret);
-      CPVT_Word word;
-      CPVT_Section section;
+  CPVT_SecProps SecProps;
+  CPVT_WordProps WordProps;
 
-      if (pIterator->GetSection(section)) {
-        SecProps = section.SecProps;
-        WordProps = section.WordProps;
-      }
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  pIterator->SetAt(m_wpCaret);
+  CPVT_Word word;
+  CPVT_Section section;
 
-      if (pIterator->GetWord(word)) {
-        WordProps = word.WordProps;
-      }
-    }
+  if (pIterator->GetSection(section)) {
+    SecProps = section.SecProps;
+    WordProps = section.WordProps;
+  }
 
-    if (!m_bNotifyFlag) {
-      m_bNotifyFlag = TRUE;
-      m_pNotify->IOnCaretChange(SecProps, WordProps);
-      m_bNotifyFlag = FALSE;
-    }
+  if (pIterator->GetWord(word))
+    WordProps = word.WordProps;
+
+  if (!m_bNotifyFlag) {
+    m_bNotifyFlag = TRUE;
+    m_pNotify->IOnCaretChange(SecProps, WordProps);
+    m_bNotifyFlag = FALSE;
   }
 }
 
@@ -2550,11 +2504,10 @@
     CPVT_Word word;
 
     if (bAddUndo) {
-      if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-        pIterator->SetAt(m_wpCaret);
-        pIterator->GetSection(section);
-        pIterator->GetWord(word);
-      }
+      CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+      pIterator->SetAt(m_wpCaret);
+      pIterator->GetSection(section);
+      pIterator->GetWord(word);
     }
 
     m_pVT->UpdateWordPlace(m_wpCaret);
@@ -2613,11 +2566,10 @@
     CPVT_Word word;
 
     if (bAddUndo) {
-      if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-        pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret));
-        pIterator->GetSection(section);
-        pIterator->GetWord(word);
-      }
+      CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+      pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret));
+      pIterator->GetSection(section);
+      pIterator->GetWord(word);
     }
 
     m_pVT->UpdateWordPlace(m_wpCaret);
@@ -2679,73 +2631,72 @@
 }
 
 FX_BOOL CFX_Edit::Clear(FX_BOOL bAddUndo, FX_BOOL bPaint) {
-  if (m_pVT->IsValid()) {
-    if (m_SelState.IsExist()) {
-      CPVT_WordRange range = m_SelState.ConvertToWordRange();
+  if (!m_pVT->IsValid())
+    return FALSE;
 
-      if (bAddUndo && m_bEnableUndo) {
-        if (m_pVT->IsRichText()) {
-          BeginGroupUndo(L"");
+  if (!m_SelState.IsExist())
+    return FALSE;
 
-          if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-            pIterator->SetAt(range.EndPos);
+  CPVT_WordRange range = m_SelState.ConvertToWordRange();
 
-            CPVT_Word wordinfo;
-            CPVT_Section secinfo;
-            do {
-              CPVT_WordPlace place = pIterator->GetAt();
-              if (place.WordCmp(range.BeginPos) <= 0)
-                break;
+  if (bAddUndo && m_bEnableUndo) {
+    if (m_pVT->IsRichText()) {
+      BeginGroupUndo(L"");
 
-              CPVT_WordPlace oldplace = m_pVT->GetPrevWordPlace(place);
+      CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+      pIterator->SetAt(range.EndPos);
 
-              if (oldplace.SecCmp(place) != 0) {
-                if (pIterator->GetSection(secinfo)) {
-                  AddEditUndoItem(new CFXEU_ClearRich(
-                      this, oldplace, place, range, wordinfo.Word,
-                      wordinfo.nCharset, secinfo.SecProps, secinfo.WordProps));
-                }
-              } else {
-                if (pIterator->GetWord(wordinfo)) {
-                  oldplace = m_pVT->AdjustLineHeader(oldplace, TRUE);
-                  place = m_pVT->AdjustLineHeader(place, TRUE);
+      CPVT_Word wordinfo;
+      CPVT_Section secinfo;
+      do {
+        CPVT_WordPlace place = pIterator->GetAt();
+        if (place.WordCmp(range.BeginPos) <= 0)
+          break;
 
-                  AddEditUndoItem(new CFXEU_ClearRich(
-                      this, oldplace, place, range, wordinfo.Word,
-                      wordinfo.nCharset, secinfo.SecProps, wordinfo.WordProps));
-                }
-              }
-            } while (pIterator->PrevWord());
+        CPVT_WordPlace oldplace = m_pVT->GetPrevWordPlace(place);
+
+        if (oldplace.SecCmp(place) != 0) {
+          if (pIterator->GetSection(secinfo)) {
+            AddEditUndoItem(new CFXEU_ClearRich(
+                this, oldplace, place, range, wordinfo.Word, wordinfo.nCharset,
+                secinfo.SecProps, secinfo.WordProps));
           }
-          EndGroupUndo();
         } else {
-          AddEditUndoItem(new CFXEU_Clear(this, range, GetSelText()));
+          if (pIterator->GetWord(wordinfo)) {
+            oldplace = m_pVT->AdjustLineHeader(oldplace, TRUE);
+            place = m_pVT->AdjustLineHeader(place, TRUE);
+
+            AddEditUndoItem(new CFXEU_ClearRich(
+                this, oldplace, place, range, wordinfo.Word, wordinfo.nCharset,
+                secinfo.SecProps, wordinfo.WordProps));
+          }
         }
-      }
-
-      SelectNone();
-      SetCaret(m_pVT->DeleteWords(range));
-      m_SelState.Set(m_wpCaret, m_wpCaret);
-
-      if (bPaint) {
-        RearrangePart(range);
-        ScrollToCaret();
-
-        CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
-        Refresh(RP_ANALYSE, &wr);
-
-        SetCaretOrigin();
-        SetCaretInfo();
-      }
-
-      if (m_bOprNotify && m_pOprNotify)
-        m_pOprNotify->OnClear(m_wpCaret, m_wpOldCaret);
-
-      return TRUE;
+      } while (pIterator->PrevWord());
+      EndGroupUndo();
+    } else {
+      AddEditUndoItem(new CFXEU_Clear(this, range, GetSelText()));
     }
   }
 
-  return FALSE;
+  SelectNone();
+  SetCaret(m_pVT->DeleteWords(range));
+  m_SelState.Set(m_wpCaret, m_wpCaret);
+
+  if (bPaint) {
+    RearrangePart(range);
+    ScrollToCaret();
+
+    CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
+    Refresh(RP_ANALYSE, &wr);
+
+    SetCaretOrigin();
+    SetCaretInfo();
+  }
+
+  if (m_bOprNotify && m_pOprNotify)
+    m_pOprNotify->OnClear(m_wpCaret, m_wpOldCaret);
+
+  return TRUE;
 }
 
 FX_BOOL CFX_Edit::InsertText(const FX_WCHAR* text,
@@ -2819,19 +2770,19 @@
 }
 
 void CFX_Edit::SetCaretOrigin() {
-  if (m_pVT->IsValid()) {
-    if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-      pIterator->SetAt(m_wpCaret);
-      CPVT_Word word;
-      CPVT_Line line;
-      if (pIterator->GetWord(word)) {
-        m_ptCaret.x = word.ptWord.x + word.fWidth;
-        m_ptCaret.y = word.ptWord.y;
-      } else if (pIterator->GetLine(line)) {
-        m_ptCaret.x = line.ptLine.x;
-        m_ptCaret.y = line.ptLine.y;
-      }
-    }
+  if (!m_pVT->IsValid())
+    return;
+
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  pIterator->SetAt(m_wpCaret);
+  CPVT_Word word;
+  CPVT_Line line;
+  if (pIterator->GetWord(word)) {
+    m_ptCaret.x = word.ptWord.x + word.fWidth;
+    m_ptCaret.y = word.ptWord.y;
+  } else if (pIterator->GetLine(line)) {
+    m_ptCaret.x = line.ptLine.x;
+    m_ptCaret.y = line.ptLine.y;
   }
 }
 
@@ -2933,35 +2884,29 @@
 }
 
 FX_FLOAT CFX_Edit::GetLineTop(const CPVT_WordPlace& place) const {
-  if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-    CPVT_WordPlace wpOld = pIterator->GetAt();
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  CPVT_WordPlace wpOld = pIterator->GetAt();
 
-    pIterator->SetAt(place);
-    CPVT_Line line;
-    pIterator->GetLine(line);
+  pIterator->SetAt(place);
+  CPVT_Line line;
+  pIterator->GetLine(line);
 
-    pIterator->SetAt(wpOld);
+  pIterator->SetAt(wpOld);
 
-    return line.ptLine.y + line.fLineAscent;
-  }
-
-  return 0.0f;
+  return line.ptLine.y + line.fLineAscent;
 }
 
 FX_FLOAT CFX_Edit::GetLineBottom(const CPVT_WordPlace& place) const {
-  if (CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator()) {
-    CPVT_WordPlace wpOld = pIterator->GetAt();
+  CPDF_VariableText::Iterator* pIterator = m_pVT->GetIterator();
+  CPVT_WordPlace wpOld = pIterator->GetAt();
 
-    pIterator->SetAt(place);
-    CPVT_Line line;
-    pIterator->GetLine(line);
+  pIterator->SetAt(place);
+  CPVT_Line line;
+  pIterator->GetLine(line);
 
-    pIterator->SetAt(wpOld);
+  pIterator->SetAt(wpOld);
 
-    return line.ptLine.y + line.fLineDescent;
-  }
-
-  return 0.0f;
+  return line.ptLine.y + line.fLineDescent;
 }
 
 CPVT_WordPlace CFX_Edit::DoInsertText(const CPVT_WordPlace& place,
diff --git a/fpdfsdk/fxedit/fxet_pageobjs.cpp b/fpdfsdk/fxedit/fxet_pageobjs.cpp
index b862e73..6e7deed 100644
--- a/fpdfsdk/fxedit/fxet_pageobjs.cpp
+++ b/fpdfsdk/fxedit/fxet_pageobjs.cpp
@@ -107,32 +107,31 @@
     pDevice->SetClip_Rect(rcTemp.ToFxRect());
   }
 
-  if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
-    if (pEdit->GetFontMap()) {
-      if (pRange)
-        pIterator->SetAt(pRange->BeginPos);
-      else
-        pIterator->SetAt(0);
+  IFX_Edit_Iterator* pIterator = pEdit->GetIterator();
+  if (pEdit->GetFontMap()) {
+    if (pRange)
+      pIterator->SetAt(pRange->BeginPos);
+    else
+      pIterator->SetAt(0);
 
-      while (pIterator->NextWord()) {
-        CPVT_WordPlace place = pIterator->GetAt();
-        if (pRange && place.WordCmp(pRange->EndPos) > 0)
-          break;
+    while (pIterator->NextWord()) {
+      CPVT_WordPlace place = pIterator->GetAt();
+      if (pRange && place.WordCmp(pRange->EndPos) > 0)
+        break;
 
-        CPVT_Word word;
-        if (pIterator->GetWord(word)) {
-          CFX_PathData pathUnderline;
-          CFX_FloatRect rcUnderline = GetUnderLineRect(word);
-          rcUnderline.left += ptOffset.x;
-          rcUnderline.right += ptOffset.x;
-          rcUnderline.top += ptOffset.y;
-          rcUnderline.bottom += ptOffset.y;
-          pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom,
-                                   rcUnderline.right, rcUnderline.top);
+      CPVT_Word word;
+      if (pIterator->GetWord(word)) {
+        CFX_PathData pathUnderline;
+        CFX_FloatRect rcUnderline = GetUnderLineRect(word);
+        rcUnderline.left += ptOffset.x;
+        rcUnderline.right += ptOffset.x;
+        rcUnderline.top += ptOffset.y;
+        rcUnderline.bottom += ptOffset.y;
+        pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom,
+                                 rcUnderline.right, rcUnderline.top);
 
-          pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, color, 0,
-                            FXFILL_WINDING);
-        }
+        pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, color, 0,
+                          FXFILL_WINDING);
       }
     }
   }
@@ -176,96 +175,94 @@
     pDevice->SetClip_Rect(rcTemp.ToFxRect());
   }
 
-  if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
-    if (IPVT_FontMap* pFontMap = pEdit->GetFontMap()) {
-      if (pRange)
-        pIterator->SetAt(pRange->BeginPos);
-      else
-        pIterator->SetAt(0);
+  IFX_Edit_Iterator* pIterator = pEdit->GetIterator();
+  if (IPVT_FontMap* pFontMap = pEdit->GetFontMap()) {
+    if (pRange)
+      pIterator->SetAt(pRange->BeginPos);
+    else
+      pIterator->SetAt(0);
 
-      CPVT_WordPlace oldplace;
+    CPVT_WordPlace oldplace;
 
-      while (pIterator->NextWord()) {
-        CPVT_WordPlace place = pIterator->GetAt();
-        if (pRange && place.WordCmp(pRange->EndPos) > 0)
-          break;
+    while (pIterator->NextWord()) {
+      CPVT_WordPlace place = pIterator->GetAt();
+      if (pRange && place.WordCmp(pRange->EndPos) > 0)
+        break;
 
-        if (wrSelect.IsExist()) {
-          bSelect = place.WordCmp(wrSelect.BeginPos) > 0 &&
-                    place.WordCmp(wrSelect.EndPos) <= 0;
-          if (bSelect) {
-            crCurFill = crWhite;
-          } else {
-            crCurFill = crTextFill;
-          }
-        }
-        if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) {
+      if (wrSelect.IsExist()) {
+        bSelect = place.WordCmp(wrSelect.BeginPos) > 0 &&
+                  place.WordCmp(wrSelect.EndPos) <= 0;
+        if (bSelect) {
+          crCurFill = crWhite;
+        } else {
           crCurFill = crTextFill;
-          crOldFill = crCurFill;
         }
-        CPVT_Word word;
-        if (pIterator->GetWord(word)) {
-          if (bSelect) {
-            CPVT_Line line;
-            pIterator->GetLine(line);
+      }
+      if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) {
+        crCurFill = crTextFill;
+        crOldFill = crCurFill;
+      }
+      CPVT_Word word;
+      if (pIterator->GetWord(word)) {
+        if (bSelect) {
+          CPVT_Line line;
+          pIterator->GetLine(line);
 
-            if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) {
-              CFX_FloatRect rc(word.ptWord.x, line.ptLine.y + line.fLineDescent,
-                               word.ptWord.x + word.fWidth,
-                               line.ptLine.y + line.fLineAscent);
-              rc.Intersect(rcClip);
-              pSystemHandler->OutputSelectedRect(pFFLData, rc);
-            } else {
-              CFX_PathData pathSelBK;
-              pathSelBK.AppendRect(word.ptWord.x,
-                                   line.ptLine.y + line.fLineDescent,
-                                   word.ptWord.x + word.fWidth,
-                                   line.ptLine.y + line.fLineAscent);
-
-              pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0,
-                                FXFILL_WINDING);
-            }
-          }
-
-          if (bContinuous) {
-            if (place.LineCmp(oldplace) != 0 || word.nFontIndex != nFontIndex ||
-                crOldFill != crCurFill) {
-              if (sTextBuf.GetLength() > 0) {
-                DrawTextString(
-                    pDevice,
-                    CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
-                    pFontMap->GetPDFFont(nFontIndex), fFontSize, pUser2Device,
-                    sTextBuf.AsStringC(), crOldFill, crTextStroke, nHorzScale);
-
-                sTextBuf.Clear();
-              }
-              nFontIndex = word.nFontIndex;
-              ptBT = word.ptWord;
-              crOldFill = crCurFill;
-            }
-
-            sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word,
-                                         SubWord)
-                            .AsStringC();
+          if (pSystemHandler && pSystemHandler->IsSelectionImplemented()) {
+            CFX_FloatRect rc(word.ptWord.x, line.ptLine.y + line.fLineDescent,
+                             word.ptWord.x + word.fWidth,
+                             line.ptLine.y + line.fLineAscent);
+            rc.Intersect(rcClip);
+            pSystemHandler->OutputSelectedRect(pFFLData, rc);
           } else {
-            DrawTextString(
-                pDevice, CFX_FloatPoint(word.ptWord.x + ptOffset.x,
-                                        word.ptWord.y + ptOffset.y),
-                pFontMap->GetPDFFont(word.nFontIndex), fFontSize, pUser2Device,
-                GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord),
-                crCurFill, crTextStroke, nHorzScale);
-          }
-          oldplace = place;
-        }
-      }
+            CFX_PathData pathSelBK;
+            pathSelBK.AppendRect(
+                word.ptWord.x, line.ptLine.y + line.fLineDescent,
+                word.ptWord.x + word.fWidth, line.ptLine.y + line.fLineAscent);
 
-      if (sTextBuf.GetLength() > 0) {
-        DrawTextString(
-            pDevice, CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
-            pFontMap->GetPDFFont(nFontIndex), fFontSize, pUser2Device,
-            sTextBuf.AsStringC(), crOldFill, crTextStroke, nHorzScale);
+            pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0,
+                              FXFILL_WINDING);
+          }
+        }
+
+        if (bContinuous) {
+          if (place.LineCmp(oldplace) != 0 || word.nFontIndex != nFontIndex ||
+              crOldFill != crCurFill) {
+            if (sTextBuf.GetLength() > 0) {
+              DrawTextString(
+                  pDevice,
+                  CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+                  pFontMap->GetPDFFont(nFontIndex), fFontSize, pUser2Device,
+                  sTextBuf.AsStringC(), crOldFill, crTextStroke, nHorzScale);
+
+              sTextBuf.Clear();
+            }
+            nFontIndex = word.nFontIndex;
+            ptBT = word.ptWord;
+            crOldFill = crCurFill;
+          }
+
+          sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word,
+                                       SubWord)
+                          .AsStringC();
+        } else {
+          DrawTextString(
+              pDevice, CFX_FloatPoint(word.ptWord.x + ptOffset.x,
+                                      word.ptWord.y + ptOffset.y),
+              pFontMap->GetPDFFont(word.nFontIndex), fFontSize, pUser2Device,
+              GetPDFWordString(pFontMap, word.nFontIndex, word.Word, SubWord),
+              crCurFill, crTextStroke, nHorzScale);
+        }
+        oldplace = place;
       }
     }
+
+    if (sTextBuf.GetLength() > 0) {
+      DrawTextString(pDevice,
+                     CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+                     pFontMap->GetPDFFont(nFontIndex), fFontSize, pUser2Device,
+                     sTextBuf.AsStringC(), crOldFill, crTextStroke, nHorzScale);
+    }
   }
 
   pDevice->RestoreState();
@@ -297,102 +294,100 @@
     pDevice->SetClip_Rect(rcTemp.ToFxRect());
   }
 
-  if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
-    if (IPVT_FontMap* pFontMap = pEdit->GetFontMap()) {
-      if (pRange)
-        pIterator->SetAt(pRange->BeginPos);
-      else
-        pIterator->SetAt(0);
+  IFX_Edit_Iterator* pIterator = pEdit->GetIterator();
+  if (IPVT_FontMap* pFontMap = pEdit->GetFontMap()) {
+    if (pRange)
+      pIterator->SetAt(pRange->BeginPos);
+    else
+      pIterator->SetAt(0);
 
-      CPVT_WordPlace oldplace;
+    CPVT_WordPlace oldplace;
 
-      while (pIterator->NextWord()) {
-        CPVT_WordPlace place = pIterator->GetAt();
-        if (pRange && place.WordCmp(pRange->EndPos) > 0)
-          break;
+    while (pIterator->NextWord()) {
+      CPVT_WordPlace place = pIterator->GetAt();
+      if (pRange && place.WordCmp(pRange->EndPos) > 0)
+        break;
 
-        CPVT_Word word;
-        if (pIterator->GetWord(word)) {
-          word.WordProps.fFontSize = word.fFontSize;
+      CPVT_Word word;
+      if (pIterator->GetWord(word)) {
+        word.WordProps.fFontSize = word.fFontSize;
 
-          crCurText = ArgbEncode(255, word.WordProps.dwWordColor);
+        crCurText = ArgbEncode(255, word.WordProps.dwWordColor);
 
-          if (wrSelect.IsExist()) {
-            bSelect = place.WordCmp(wrSelect.BeginPos) > 0 &&
-                      place.WordCmp(wrSelect.EndPos) <= 0;
-            if (bSelect) {
-              crCurText = crWhite;
-            }
-          }
-
+        if (wrSelect.IsExist()) {
+          bSelect = place.WordCmp(wrSelect.BeginPos) > 0 &&
+                    place.WordCmp(wrSelect.EndPos) <= 0;
           if (bSelect) {
-            CPVT_Line line;
-            pIterator->GetLine(line);
-
-            CFX_PathData pathSelBK;
-            pathSelBK.AppendRect(word.ptWord.x + ptOffset.x,
-                                 line.ptLine.y + line.fLineDescent + ptOffset.y,
-                                 word.ptWord.x + word.fWidth + ptOffset.x,
-                                 line.ptLine.y + line.fLineAscent + ptOffset.y);
-
-            pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0,
-                              FXFILL_WINDING);
+            crCurText = crWhite;
           }
-
-          if (place.LineCmp(oldplace) != 0 ||
-              word.WordProps.fCharSpace > 0.0f ||
-              word.WordProps.nHorzScale != 100 ||
-              FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 ||
-              crOld != crCurText) {
-            if (sTextBuf.GetLength() > 0) {
-              DrawTextString(
-                  pDevice,
-                  CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
-                  pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize,
-                  pUser2Device, sTextBuf.AsStringC(), crOld, 0, wp.nHorzScale);
-
-              sTextBuf.Clear();
-            }
-            wp = word.WordProps;
-            ptBT = word.ptWord;
-            crOld = crCurText;
-          }
-
-          sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex,
-                                       word.Word, 0)
-                          .AsStringC();
-
-          if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) {
-            CFX_PathData pathUnderline;
-            CFX_FloatRect rcUnderline = GetUnderLineRect(word);
-            pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom,
-                                     rcUnderline.right, rcUnderline.top);
-
-            pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, crCurText, 0,
-                              FXFILL_WINDING);
-          }
-
-          if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) {
-            CFX_PathData pathCrossout;
-            CFX_FloatRect rcCrossout = GetCrossoutRect(word);
-            pathCrossout.AppendRect(rcCrossout.left, rcCrossout.bottom,
-                                    rcCrossout.right, rcCrossout.top);
-
-            pDevice->DrawPath(&pathCrossout, pUser2Device, NULL, crCurText, 0,
-                              FXFILL_WINDING);
-          }
-
-          oldplace = place;
         }
-      }
 
-      if (sTextBuf.GetLength() > 0) {
-        DrawTextString(
-            pDevice, CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
-            pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, pUser2Device,
-            sTextBuf.AsStringC(), crOld, 0, wp.nHorzScale);
+        if (bSelect) {
+          CPVT_Line line;
+          pIterator->GetLine(line);
+
+          CFX_PathData pathSelBK;
+          pathSelBK.AppendRect(word.ptWord.x + ptOffset.x,
+                               line.ptLine.y + line.fLineDescent + ptOffset.y,
+                               word.ptWord.x + word.fWidth + ptOffset.x,
+                               line.ptLine.y + line.fLineAscent + ptOffset.y);
+
+          pDevice->DrawPath(&pathSelBK, pUser2Device, NULL, crSelBK, 0,
+                            FXFILL_WINDING);
+        }
+
+        if (place.LineCmp(oldplace) != 0 || word.WordProps.fCharSpace > 0.0f ||
+            word.WordProps.nHorzScale != 100 ||
+            FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 ||
+            crOld != crCurText) {
+          if (sTextBuf.GetLength() > 0) {
+            DrawTextString(
+                pDevice,
+                CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+                pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, pUser2Device,
+                sTextBuf.AsStringC(), crOld, 0, wp.nHorzScale);
+
+            sTextBuf.Clear();
+          }
+          wp = word.WordProps;
+          ptBT = word.ptWord;
+          crOld = crCurText;
+        }
+
+        sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex,
+                                     word.Word, 0)
+                        .AsStringC();
+
+        if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) {
+          CFX_PathData pathUnderline;
+          CFX_FloatRect rcUnderline = GetUnderLineRect(word);
+          pathUnderline.AppendRect(rcUnderline.left, rcUnderline.bottom,
+                                   rcUnderline.right, rcUnderline.top);
+
+          pDevice->DrawPath(&pathUnderline, pUser2Device, NULL, crCurText, 0,
+                            FXFILL_WINDING);
+        }
+
+        if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) {
+          CFX_PathData pathCrossout;
+          CFX_FloatRect rcCrossout = GetCrossoutRect(word);
+          pathCrossout.AppendRect(rcCrossout.left, rcCrossout.bottom,
+                                  rcCrossout.right, rcCrossout.top);
+
+          pDevice->DrawPath(&pathCrossout, pUser2Device, NULL, crCurText, 0,
+                            FXFILL_WINDING);
+        }
+
+        oldplace = place;
       }
     }
+
+    if (sTextBuf.GetLength() > 0) {
+      DrawTextString(
+          pDevice, CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+          pFontMap->GetPDFFont(wp.nFontIndex), wp.fFontSize, pUser2Device,
+          sTextBuf.AsStringC(), crOld, 0, wp.nHorzScale);
+    }
   }
 
   pDevice->RestoreState();
@@ -471,52 +466,49 @@
 
   ObjArray.RemoveAll();
 
-  if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
-    if (IPVT_FontMap* pFontMap = pEdit->GetFontMap()) {
-      if (pRange)
-        pIterator->SetAt(pRange->BeginPos);
-      else
-        pIterator->SetAt(0);
+  IFX_Edit_Iterator* pIterator = pEdit->GetIterator();
+  if (IPVT_FontMap* pFontMap = pEdit->GetFontMap()) {
+    if (pRange)
+      pIterator->SetAt(pRange->BeginPos);
+    else
+      pIterator->SetAt(0);
 
-      CPVT_WordPlace oldplace;
+    CPVT_WordPlace oldplace;
 
-      while (pIterator->NextWord()) {
-        CPVT_WordPlace place = pIterator->GetAt();
-        if (pRange && place.WordCmp(pRange->EndPos) > 0)
-          break;
+    while (pIterator->NextWord()) {
+      CPVT_WordPlace place = pIterator->GetAt();
+      if (pRange && place.WordCmp(pRange->EndPos) > 0)
+        break;
 
-        CPVT_Word word;
-        if (pIterator->GetWord(word)) {
-          if (place.LineCmp(oldplace) != 0 ||
-              nOldFontIndex != word.nFontIndex) {
-            if (sTextBuf.GetLength() > 0) {
-              ObjArray.Add(AddTextObjToPageObjects(
-                  pObjectHolder, crText, pFontMap->GetPDFFont(nOldFontIndex),
-                  fFontSize, 0.0f, 100,
-                  CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
-                  sTextBuf.AsStringC()));
+      CPVT_Word word;
+      if (pIterator->GetWord(word)) {
+        if (place.LineCmp(oldplace) != 0 || nOldFontIndex != word.nFontIndex) {
+          if (sTextBuf.GetLength() > 0) {
+            ObjArray.Add(AddTextObjToPageObjects(
+                pObjectHolder, crText, pFontMap->GetPDFFont(nOldFontIndex),
+                fFontSize, 0.0f, 100,
+                CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+                sTextBuf.AsStringC()));
 
-              sTextBuf.Clear();
-            }
-
-            ptBT = word.ptWord;
-            nOldFontIndex = word.nFontIndex;
+            sTextBuf.Clear();
           }
 
-          sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, 0)
-                          .AsStringC();
-          oldplace = place;
+          ptBT = word.ptWord;
+          nOldFontIndex = word.nFontIndex;
         }
-      }
 
-      if (sTextBuf.GetLength() > 0) {
-        ObjArray.Add(AddTextObjToPageObjects(
-            pObjectHolder, crText, pFontMap->GetPDFFont(nOldFontIndex),
-            fFontSize, 0.0f, 100,
-            CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
-            sTextBuf.AsStringC()));
+        sTextBuf << GetPDFWordString(pFontMap, word.nFontIndex, word.Word, 0)
+                        .AsStringC();
+        oldplace = place;
       }
     }
+
+    if (sTextBuf.GetLength() > 0) {
+      ObjArray.Add(AddTextObjToPageObjects(
+          pObjectHolder, crText, pFontMap->GetPDFFont(nOldFontIndex), fFontSize,
+          0.0f, 100, CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+          sTextBuf.AsStringC()));
+    }
   }
 }
 
@@ -535,82 +527,80 @@
 
   ObjArray.RemoveAll();
 
-  if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
-    if (IPVT_FontMap* pFontMap = pEdit->GetFontMap()) {
-      if (pRange)
-        pIterator->SetAt(pRange->BeginPos);
-      else
-        pIterator->SetAt(0);
+  IFX_Edit_Iterator* pIterator = pEdit->GetIterator();
+  if (IPVT_FontMap* pFontMap = pEdit->GetFontMap()) {
+    if (pRange)
+      pIterator->SetAt(pRange->BeginPos);
+    else
+      pIterator->SetAt(0);
 
-      CPVT_WordPlace oldplace;
+    CPVT_WordPlace oldplace;
 
-      while (pIterator->NextWord()) {
-        CPVT_WordPlace place = pIterator->GetAt();
-        if (pRange && place.WordCmp(pRange->EndPos) > 0)
-          break;
+    while (pIterator->NextWord()) {
+      CPVT_WordPlace place = pIterator->GetAt();
+      if (pRange && place.WordCmp(pRange->EndPos) > 0)
+        break;
 
-        CPVT_Word word;
-        if (pIterator->GetWord(word)) {
-          word.WordProps.fFontSize = word.fFontSize;
+      CPVT_Word word;
+      if (pIterator->GetWord(word)) {
+        word.WordProps.fFontSize = word.fFontSize;
 
-          crCurText = ArgbEncode(255, word.WordProps.dwWordColor);
+        crCurText = ArgbEncode(255, word.WordProps.dwWordColor);
 
-          if (place.LineCmp(oldplace) != 0 ||
-              word.WordProps.fCharSpace > 0.0f ||
-              word.WordProps.nHorzScale != 100 ||
-              FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 ||
-              crOld != crCurText) {
-            if (sTextBuf.GetLength() > 0) {
-              ObjArray.Add(AddTextObjToPageObjects(
-                  pObjectHolder, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
-                  wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
-                  CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
-                  sTextBuf.AsStringC()));
+        if (place.LineCmp(oldplace) != 0 || word.WordProps.fCharSpace > 0.0f ||
+            word.WordProps.nHorzScale != 100 ||
+            FXSYS_memcmp(&word.WordProps, &wp, sizeof(CPVT_WordProps)) != 0 ||
+            crOld != crCurText) {
+          if (sTextBuf.GetLength() > 0) {
+            ObjArray.Add(AddTextObjToPageObjects(
+                pObjectHolder, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
+                wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
+                CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+                sTextBuf.AsStringC()));
 
-              sTextBuf.Clear();
-            }
-
-            wp = word.WordProps;
-            ptBT = word.ptWord;
-            crOld = crCurText;
+            sTextBuf.Clear();
           }
 
-          sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex,
-                                       word.Word, 0)
-                          .AsStringC();
-
-          if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) {
-            CFX_FloatRect rcUnderline = GetUnderLineRect(word);
-            rcUnderline.left += ptOffset.x;
-            rcUnderline.right += ptOffset.x;
-            rcUnderline.top += ptOffset.y;
-            rcUnderline.bottom += ptOffset.y;
-
-            AddRectToPageObjects(pObjectHolder, crCurText, rcUnderline);
-          }
-
-          if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) {
-            CFX_FloatRect rcCrossout = GetCrossoutRect(word);
-            rcCrossout.left += ptOffset.x;
-            rcCrossout.right += ptOffset.x;
-            rcCrossout.top += ptOffset.y;
-            rcCrossout.bottom += ptOffset.y;
-
-            AddRectToPageObjects(pObjectHolder, crCurText, rcCrossout);
-          }
-
-          oldplace = place;
+          wp = word.WordProps;
+          ptBT = word.ptWord;
+          crOld = crCurText;
         }
-      }
 
-      if (sTextBuf.GetLength() > 0) {
-        ObjArray.Add(AddTextObjToPageObjects(
-            pObjectHolder, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
-            wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
-            CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
-            sTextBuf.AsStringC()));
+        sTextBuf << GetPDFWordString(pFontMap, word.WordProps.nFontIndex,
+                                     word.Word, 0)
+                        .AsStringC();
+
+        if (word.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) {
+          CFX_FloatRect rcUnderline = GetUnderLineRect(word);
+          rcUnderline.left += ptOffset.x;
+          rcUnderline.right += ptOffset.x;
+          rcUnderline.top += ptOffset.y;
+          rcUnderline.bottom += ptOffset.y;
+
+          AddRectToPageObjects(pObjectHolder, crCurText, rcUnderline);
+        }
+
+        if (word.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) {
+          CFX_FloatRect rcCrossout = GetCrossoutRect(word);
+          rcCrossout.left += ptOffset.x;
+          rcCrossout.right += ptOffset.x;
+          rcCrossout.top += ptOffset.y;
+          rcCrossout.bottom += ptOffset.y;
+
+          AddRectToPageObjects(pObjectHolder, crCurText, rcCrossout);
+        }
+
+        oldplace = place;
       }
     }
+
+    if (sTextBuf.GetLength() > 0) {
+      ObjArray.Add(AddTextObjToPageObjects(
+          pObjectHolder, crOld, pFontMap->GetPDFFont(wp.nFontIndex),
+          wp.fFontSize, wp.fCharSpace, wp.nHorzScale,
+          CFX_FloatPoint(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
+          sTextBuf.AsStringC()));
+    }
   }
 }
 
@@ -619,29 +609,28 @@
                                         const CFX_FloatPoint& ptOffset,
                                         const CPVT_WordRange* pRange,
                                         FX_COLORREF color) {
-  if (IFX_Edit_Iterator* pIterator = pEdit->GetIterator()) {
-    if (pEdit->GetFontMap()) {
-      if (pRange)
-        pIterator->SetAt(pRange->BeginPos);
-      else
-        pIterator->SetAt(0);
+  IFX_Edit_Iterator* pIterator = pEdit->GetIterator();
+  if (pEdit->GetFontMap()) {
+    if (pRange)
+      pIterator->SetAt(pRange->BeginPos);
+    else
+      pIterator->SetAt(0);
 
-      CPVT_WordPlace oldplace;
+    CPVT_WordPlace oldplace;
 
-      while (pIterator->NextWord()) {
-        CPVT_WordPlace place = pIterator->GetAt();
-        if (pRange && place.WordCmp(pRange->EndPos) > 0)
-          break;
+    while (pIterator->NextWord()) {
+      CPVT_WordPlace place = pIterator->GetAt();
+      if (pRange && place.WordCmp(pRange->EndPos) > 0)
+        break;
 
-        CPVT_Word word;
-        if (pIterator->GetWord(word)) {
-          CFX_FloatRect rcUnderline = GetUnderLineRect(word);
-          rcUnderline.left += ptOffset.x;
-          rcUnderline.right += ptOffset.x;
-          rcUnderline.top += ptOffset.y;
-          rcUnderline.bottom += ptOffset.y;
-          AddRectToPageObjects(pObjectHolder, color, rcUnderline);
-        }
+      CPVT_Word word;
+      if (pIterator->GetWord(word)) {
+        CFX_FloatRect rcUnderline = GetUnderLineRect(word);
+        rcUnderline.left += ptOffset.x;
+        rcUnderline.right += ptOffset.x;
+        rcUnderline.top += ptOffset.y;
+        rcUnderline.bottom += ptOffset.y;
+        AddRectToPageObjects(pObjectHolder, color, rcUnderline);
       }
     }
   }
diff --git a/fpdfsdk/fxedit/include/fxet_edit.h b/fpdfsdk/fxedit/include/fxet_edit.h
index 738210a..c7500a0 100644
--- a/fpdfsdk/fxedit/include/fxet_edit.h
+++ b/fpdfsdk/fxedit/include/fxet_edit.h
@@ -7,6 +7,8 @@
 #ifndef FPDFSDK_FXEDIT_INCLUDE_FXET_EDIT_H_
 #define FPDFSDK_FXEDIT_INCLUDE_FXET_EDIT_H_
 
+#include <memory>
+
 #include "core/fpdfdoc/include/cpvt_secprops.h"
 #include "core/fpdfdoc/include/cpvt_wordprops.h"
 #include "fpdfsdk/fxedit/include/fx_edit.h"
@@ -727,7 +729,7 @@
   CPDF_VariableText* m_pVT;
   IFX_Edit_Notify* m_pNotify;
   IFX_Edit_OprNotify* m_pOprNotify;
-  CFX_Edit_Provider* m_pVTProvide;
+  std::unique_ptr<CFX_Edit_Provider> m_pVTProvider;
 
   CPVT_WordPlace m_wpCaret;
   CPVT_WordPlace m_wpOldCaret;
@@ -736,7 +738,7 @@
   CFX_FloatPoint m_ptScrollPos;
   CFX_FloatPoint m_ptRefreshScrollPos;
   FX_BOOL m_bEnableScroll;
-  IFX_Edit_Iterator* m_pIterator;
+  std::unique_ptr<IFX_Edit_Iterator> m_pIterator;
   CFX_Edit_Refresh m_Refresh;
   CFX_FloatPoint m_ptCaret;
   CFX_Edit_Undo m_Undo;
diff --git a/fpdfsdk/pdfwindow/PWL_Edit.cpp b/fpdfsdk/pdfwindow/PWL_Edit.cpp
index dffc62a..80aa629 100644
--- a/fpdfsdk/pdfwindow/PWL_Edit.cpp
+++ b/fpdfsdk/pdfwindow/PWL_Edit.cpp
@@ -524,18 +524,17 @@
     const CPVT_WordPlace& wpWord) {
   CFX_FloatPoint pt(0.0f, 0.0f);
 
-  if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
-    CPVT_WordPlace wpOld = pIterator->GetAt();
-    pIterator->SetAt(wpWord);
-    CPVT_Word word;
-    if (pIterator->GetWord(word)) {
-      pt = CFX_FloatPoint(word.ptWord.x + word.fWidth,
-                          word.ptWord.y + word.fDescent);
-    }
-
-    pIterator->SetAt(wpOld);
+  IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator();
+  CPVT_WordPlace wpOld = pIterator->GetAt();
+  pIterator->SetAt(wpWord);
+  CPVT_Word word;
+  if (pIterator->GetWord(word)) {
+    pt = CFX_FloatPoint(word.ptWord.x + word.fWidth,
+                        word.ptWord.y + word.fDescent);
   }
 
+  pIterator->SetAt(wpOld);
+
   return pt;
 }
 
@@ -879,52 +878,50 @@
                                             FX_BOOL bArabic) const {
   CPVT_WordRange range;
 
-  if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
-    CPVT_Word wordinfo;
-    CPVT_WordPlace wpStart(place), wpEnd(place);
-    pIterator->SetAt(place);
+  IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator();
+  CPVT_Word wordinfo;
+  CPVT_WordPlace wpStart(place), wpEnd(place);
+  pIterator->SetAt(place);
 
-    if (bLatin) {
-      while (pIterator->NextWord()) {
-        if (!pIterator->GetWord(wordinfo) ||
-            !FX_EDIT_ISLATINWORD(wordinfo.Word)) {
-          break;
-        }
-
-        wpEnd = pIterator->GetAt();
+  if (bLatin) {
+    while (pIterator->NextWord()) {
+      if (!pIterator->GetWord(wordinfo) ||
+          !FX_EDIT_ISLATINWORD(wordinfo.Word)) {
+        break;
       }
-    } else if (bArabic) {
-      while (pIterator->NextWord()) {
-        if (!pIterator->GetWord(wordinfo) || !PWL_ISARABICWORD(wordinfo.Word))
-          break;
 
-        wpEnd = pIterator->GetAt();
-      }
+      wpEnd = pIterator->GetAt();
     }
+  } else if (bArabic) {
+    while (pIterator->NextWord()) {
+      if (!pIterator->GetWord(wordinfo) || !PWL_ISARABICWORD(wordinfo.Word))
+        break;
 
-    pIterator->SetAt(place);
-
-    if (bLatin) {
-      do {
-        if (!pIterator->GetWord(wordinfo) ||
-            !FX_EDIT_ISLATINWORD(wordinfo.Word)) {
-          break;
-        }
-
-        wpStart = pIterator->GetAt();
-      } while (pIterator->PrevWord());
-    } else if (bArabic) {
-      do {
-        if (!pIterator->GetWord(wordinfo) || !PWL_ISARABICWORD(wordinfo.Word))
-          break;
-
-        wpStart = pIterator->GetAt();
-      } while (pIterator->PrevWord());
+      wpEnd = pIterator->GetAt();
     }
-
-    range.Set(wpStart, wpEnd);
   }
 
+  pIterator->SetAt(place);
+
+  if (bLatin) {
+    do {
+      if (!pIterator->GetWord(wordinfo) ||
+          !FX_EDIT_ISLATINWORD(wordinfo.Word)) {
+        break;
+      }
+
+      wpStart = pIterator->GetAt();
+    } while (pIterator->PrevWord());
+  } else if (bArabic) {
+    do {
+      if (!pIterator->GetWord(wordinfo) || !PWL_ISARABICWORD(wordinfo.Word))
+        break;
+
+      wpStart = pIterator->GetAt();
+    } while (pIterator->PrevWord());
+  }
+
+  range.Set(wpStart, wpEnd);
   return range;
 }
 
diff --git a/fpdfsdk/pdfwindow/PWL_EditCtrl.cpp b/fpdfsdk/pdfwindow/PWL_EditCtrl.cpp
index 23349b4..07ac4af 100644
--- a/fpdfsdk/pdfwindow/PWL_EditCtrl.cpp
+++ b/fpdfsdk/pdfwindow/PWL_EditCtrl.cpp
@@ -351,21 +351,20 @@
 
 void CPWL_EditCtrl::GetCaretInfo(CFX_FloatPoint& ptHead,
                                  CFX_FloatPoint& ptFoot) const {
-  if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
-    pIterator->SetAt(m_pEdit->GetCaret());
-    CPVT_Word word;
-    CPVT_Line line;
-    if (pIterator->GetWord(word)) {
-      ptHead.x = word.ptWord.x + word.fWidth;
-      ptHead.y = word.ptWord.y + word.fAscent;
-      ptFoot.x = word.ptWord.x + word.fWidth;
-      ptFoot.y = word.ptWord.y + word.fDescent;
-    } else if (pIterator->GetLine(line)) {
-      ptHead.x = line.ptLine.x;
-      ptHead.y = line.ptLine.y + line.fLineAscent;
-      ptFoot.x = line.ptLine.x;
-      ptFoot.y = line.ptLine.y + line.fLineDescent;
-    }
+  IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator();
+  pIterator->SetAt(m_pEdit->GetCaret());
+  CPVT_Word word;
+  CPVT_Line line;
+  if (pIterator->GetWord(word)) {
+    ptHead.x = word.ptWord.x + word.fWidth;
+    ptHead.y = word.ptWord.y + word.fAscent;
+    ptFoot.x = word.ptWord.x + word.fWidth;
+    ptFoot.y = word.ptWord.y + word.fDescent;
+  } else if (pIterator->GetLine(line)) {
+    ptHead.x = line.ptLine.x;
+    ptHead.y = line.ptLine.y + line.fLineAscent;
+    ptFoot.x = line.ptLine.x;
+    ptFoot.y = line.ptLine.y + line.fLineDescent;
   }
 }
 
@@ -453,16 +452,15 @@
 CPDF_Font* CPWL_EditCtrl::GetCaretFont() const {
   int32_t nFontIndex = 0;
 
-  if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
-    pIterator->SetAt(m_pEdit->GetCaret());
-    CPVT_Word word;
-    CPVT_Section section;
-    if (pIterator->GetWord(word)) {
-      nFontIndex = word.nFontIndex;
-    } else if (HasFlag(PES_RICH)) {
-      if (pIterator->GetSection(section)) {
-        nFontIndex = section.WordProps.nFontIndex;
-      }
+  IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator();
+  pIterator->SetAt(m_pEdit->GetCaret());
+  CPVT_Word word;
+  CPVT_Section section;
+  if (pIterator->GetWord(word)) {
+    nFontIndex = word.nFontIndex;
+  } else if (HasFlag(PES_RICH)) {
+    if (pIterator->GetSection(section)) {
+      nFontIndex = section.WordProps.nFontIndex;
     }
   }
 
@@ -475,16 +473,15 @@
 FX_FLOAT CPWL_EditCtrl::GetCaretFontSize() const {
   FX_FLOAT fFontSize = GetFontSize();
 
-  if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator()) {
-    pIterator->SetAt(m_pEdit->GetCaret());
-    CPVT_Word word;
-    CPVT_Section section;
-    if (pIterator->GetWord(word)) {
-      fFontSize = word.fFontSize;
-    } else if (HasFlag(PES_RICH)) {
-      if (pIterator->GetSection(section)) {
-        fFontSize = section.WordProps.fFontSize;
-      }
+  IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator();
+  pIterator->SetAt(m_pEdit->GetCaret());
+  CPVT_Word word;
+  CPVT_Section section;
+  if (pIterator->GetWord(word)) {
+    fFontSize = word.fFontSize;
+  } else if (HasFlag(PES_RICH)) {
+    if (pIterator->GetSection(section)) {
+      fFontSize = section.WordProps.fFontSize;
     }
   }