diff --git a/fpdfsdk/pwl/cpwl_edit.cpp b/fpdfsdk/pwl/cpwl_edit.cpp
index eefb21d..51c3b9f 100644
--- a/fpdfsdk/pwl/cpwl_edit.cpp
+++ b/fpdfsdk/pwl/cpwl_edit.cpp
@@ -310,19 +310,6 @@
   return CPVT_WordRange(wpStart, wpEnd);
 }
 
-CFX_PointF CPWL_Edit::GetWordRightBottomPoint(const CPVT_WordPlace& wpWord) {
-  CPWL_EditImpl_Iterator* pIterator = m_pEdit->GetIterator();
-  CPVT_WordPlace wpOld = pIterator->GetAt();
-  pIterator->SetAt(wpWord);
-
-  CFX_PointF pt;
-  CPVT_Word word;
-  if (pIterator->GetWord(word))
-    pt = CFX_PointF(word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent);
-  pIterator->SetAt(wpOld);
-  return pt;
-}
-
 bool CPWL_Edit::IsTextFull() const {
   return m_pEdit->IsTextFull();
 }
@@ -520,40 +507,3 @@
   SetScrollPos(ptScroll);
   return true;
 }
-
-CPVT_WordRange CPWL_Edit::CombineWordRange(const CPVT_WordRange& wr1,
-                                           const CPVT_WordRange& wr2) {
-  return CPVT_WordRange(std::min(wr1.BeginPos, wr2.BeginPos),
-                        std::max(wr1.EndPos, wr2.EndPos));
-}
-
-#define PWL_ISLATINWORD(u)                      \
-  (u == 0x2D || (u >= 0x0041 && u <= 0x005A) || \
-   (u >= 0x0061 && u <= 0x007A) || (u >= 0x00C0 && u <= 0x02AF))
-
-CPVT_WordRange CPWL_Edit::GetLatinWordsRange(
-    const CPVT_WordPlace& place) const {
-  CPWL_EditImpl_Iterator* pIterator = m_pEdit->GetIterator();
-  CPVT_Word wordinfo;
-  CPVT_WordPlace wpStart(place);
-  CPVT_WordPlace wpEnd(place);
-  pIterator->SetAt(place);
-
-  while (pIterator->NextWord()) {
-    if (!pIterator->GetWord(wordinfo) || !PWL_ISLATINWORD(wordinfo.Word))
-      break;
-
-    wpEnd = pIterator->GetAt();
-  }
-
-  pIterator->SetAt(place);
-
-  do {
-    if (!pIterator->GetWord(wordinfo) || !PWL_ISLATINWORD(wordinfo.Word))
-      break;
-
-    wpStart = pIterator->GetAt();
-  } while (pIterator->PrevWord());
-
-  return CPVT_WordRange(wpStart, wpEnd);
-}
diff --git a/fpdfsdk/pwl/cpwl_edit.h b/fpdfsdk/pwl/cpwl_edit.h
index 2f21443..6e4f28d 100644
--- a/fpdfsdk/pwl/cpwl_edit.h
+++ b/fpdfsdk/pwl/cpwl_edit.h
@@ -77,12 +77,6 @@
   bool IsVScrollBarVisible() const;
   void SetParamByFlag();
 
-  CFX_PointF GetWordRightBottomPoint(const CPVT_WordPlace& wpWord);
-
-  CPVT_WordRange CombineWordRange(const CPVT_WordRange& wr1,
-                                  const CPVT_WordRange& wr2);
-  CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace& place) const;
-
   bool m_bFocus = false;
   CFX_FloatRect m_rcOldWindow;
   UnownedPtr<IPWL_FillerNotify> m_pFillerNotify;
