diff --git a/core/fpdfdoc/cpdf_variabletext.cpp b/core/fpdfdoc/cpdf_variabletext.cpp
index 4527fd0..8356c16 100644
--- a/core/fpdfdoc/cpdf_variabletext.cpp
+++ b/core/fpdfdoc/cpdf_variabletext.cpp
@@ -34,8 +34,7 @@
 CPDF_VariableText::Provider::~Provider() {}
 
 int32_t CPDF_VariableText::Provider::GetCharWidth(int32_t nFontIndex,
-                                                  uint16_t word,
-                                                  int32_t nWordStyle) {
+                                                  uint16_t word) {
   if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) {
     uint32_t charcode = pPDFFont->CharCodeFromUnicode(word);
     if (charcode != CPDF_Font::kInvalidCharCode)
@@ -785,21 +784,17 @@
                                          FX_FLOAT fCharSpace,
                                          int32_t nHorzScale,
                                          FX_FLOAT fFontSize,
-                                         FX_FLOAT fWordTail,
-                                         int32_t nWordStyle) {
-  return (GetCharWidth(nFontIndex, Word, SubWord, nWordStyle) * fFontSize *
-              kFontScale +
+                                         FX_FLOAT fWordTail) {
+  return (GetCharWidth(nFontIndex, Word, SubWord) * fFontSize * kFontScale +
           fCharSpace) *
              nHorzScale * kScalePercent +
          fWordTail;
 }
 
 FX_FLOAT CPDF_VariableText::GetWordWidth(const CPVT_WordInfo& WordInfo) {
-  return GetWordWidth(
-      GetWordFontIndex(WordInfo), WordInfo.Word, GetSubWord(),
-      GetCharSpace(WordInfo), GetHorzScale(WordInfo), GetWordFontSize(WordInfo),
-      WordInfo.fWordTail,
-      WordInfo.pWordProps ? WordInfo.pWordProps->nWordStyle : 0);
+  return GetWordWidth(GetWordFontIndex(WordInfo), WordInfo.Word, GetSubWord(),
+                      GetCharSpace(WordInfo), GetHorzScale(WordInfo),
+                      GetWordFontSize(WordInfo), WordInfo.fWordTail);
 }
 
 FX_FLOAT CPDF_VariableText::GetLineAscent(const CPVT_SectionInfo& SecInfo) {
@@ -1066,12 +1061,11 @@
 
 int32_t CPDF_VariableText::GetCharWidth(int32_t nFontIndex,
                                         uint16_t Word,
-                                        uint16_t SubWord,
-                                        int32_t nWordStyle) {
+                                        uint16_t SubWord) {
   if (!m_pVTProvider)
     return 0;
   uint16_t word = SubWord ? SubWord : Word;
-  return m_pVTProvider->GetCharWidth(nFontIndex, word, nWordStyle);
+  return m_pVTProvider->GetCharWidth(nFontIndex, word);
 }
 
 int32_t CPDF_VariableText::GetTypeAscent(int32_t nFontIndex) {
diff --git a/core/fpdfdoc/ctypeset.cpp b/core/fpdfdoc/ctypeset.cpp
index 0e5ef2d..cfaeb4c 100644
--- a/core/fpdfdoc/ctypeset.cpp
+++ b/core/fpdfdoc/ctypeset.cpp
@@ -312,7 +312,7 @@
           fWordWidth = m_pVT->GetWordWidth(
               pWord->nFontIndex, pWord->Word, m_pVT->m_wSubWord,
               m_pVT->m_fCharSpace, m_pVT->m_nHorzScale, fFontSize,
-              pWord->fWordTail, 0);
+              pWord->fWordTail);
         }
         if (!bOpened) {
           if (IsOpenStylePunctuation(pWord->Word)) {
diff --git a/core/fpdfdoc/include/cpdf_variabletext.h b/core/fpdfdoc/include/cpdf_variabletext.h
index 83e74b8..31cf75f 100644
--- a/core/fpdfdoc/include/cpdf_variabletext.h
+++ b/core/fpdfdoc/include/cpdf_variabletext.h
@@ -66,9 +66,7 @@
     explicit Provider(IPVT_FontMap* pFontMap);
     virtual ~Provider();
 
-    virtual int32_t GetCharWidth(int32_t nFontIndex,
-                                 uint16_t word,
-                                 int32_t nWordStyle);
+    virtual int32_t GetCharWidth(int32_t nFontIndex, uint16_t word);
     virtual int32_t GetTypeAscent(int32_t nFontIndex);
     virtual int32_t GetTypeDescent(int32_t nFontIndex);
     virtual int32_t GetWordFontIndex(uint16_t word,
@@ -166,10 +164,7 @@
   friend class CTypeset;
   friend class CSection;
 
-  int32_t GetCharWidth(int32_t nFontIndex,
-                       uint16_t Word,
-                       uint16_t SubWord,
-                       int32_t nWordStyle);
+  int32_t GetCharWidth(int32_t nFontIndex, uint16_t Word, uint16_t SubWord);
   int32_t GetTypeAscent(int32_t nFontIndex);
   int32_t GetTypeDescent(int32_t nFontIndex);
   int32_t GetWordFontIndex(uint16_t word, int32_t charset, int32_t nFontIndex);
@@ -195,8 +190,7 @@
                         FX_FLOAT fCharSpace,
                         int32_t nHorzScale,
                         FX_FLOAT fFontSize,
-                        FX_FLOAT fWordTail,
-                        int32_t nWordStyle);
+                        FX_FLOAT fWordTail);
   FX_FLOAT GetWordWidth(const CPVT_WordInfo& WordInfo);
   FX_FLOAT GetWordAscent(const CPVT_WordInfo& WordInfo, FX_FLOAT fFontSize);
   FX_FLOAT GetWordDescent(const CPVT_WordInfo& WordInfo, FX_FLOAT fFontSize);
diff --git a/fpdfsdk/fxedit/fxet_edit.cpp b/fpdfsdk/fxedit/fxet_edit.cpp
index df8d9ca..f4350f3 100644
--- a/fpdfsdk/fxedit/fxet_edit.cpp
+++ b/fpdfsdk/fxedit/fxet_edit.cpp
@@ -223,9 +223,7 @@
   return m_pFontMap;
 }
 
-int32_t CFX_Edit_Provider::GetCharWidth(int32_t nFontIndex,
-                                        uint16_t word,
-                                        int32_t nWordStyle) {
+int32_t CFX_Edit_Provider::GetCharWidth(int32_t nFontIndex, uint16_t word) {
   if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex)) {
     uint32_t charcode = word;
 
diff --git a/fpdfsdk/fxedit/include/fxet_edit.h b/fpdfsdk/fxedit/include/fxet_edit.h
index 9ef2e64..c1b0000 100644
--- a/fpdfsdk/fxedit/include/fxet_edit.h
+++ b/fpdfsdk/fxedit/include/fxet_edit.h
@@ -542,9 +542,7 @@
   IPVT_FontMap* GetFontMap();
 
   // CPDF_VariableText::Provider:
-  int32_t GetCharWidth(int32_t nFontIndex,
-                       uint16_t word,
-                       int32_t nWordStyle) override;
+  int32_t GetCharWidth(int32_t nFontIndex, uint16_t word) override;
   int32_t GetTypeAscent(int32_t nFontIndex) override;
   int32_t GetTypeDescent(int32_t nFontIndex) override;
   int32_t GetWordFontIndex(uint16_t word,
