[Merge M63] Revert cleanup of IsHyphen and reimplement

The original version of this code was landed in
https://pdfium-review.googlesource.com/c/pdfium/+/13690/. A corner
case has been found that breaks.

In this CL I have reverted the changes in IsHyphen and implemented a
less aggressive cleanup that I have tested works as expected.

TBR=dsinclair@chromium.org
BUG=chromium:781804

Change-Id: I3b36f420834081fdd9e1ae17efc234b561b4df41
Reviewed-on: https://pdfium-review.googlesource.com/17950
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: dsinclair <dsinclair@chromium.org>
Reviewed-on: https://pdfium-review.googlesource.com/18330
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index 82778b1..0a7a39f 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -1218,25 +1218,29 @@
 }
 
 bool CPDF_TextPage::IsHyphen(wchar_t curChar) const {
-  WideStringView curText;
-  if (!m_TempTextBuf.IsEmpty())
-    curText = m_TempTextBuf.AsStringView();
-  else if (!m_TextBuf.IsEmpty())
+  WideStringView curText = m_TempTextBuf.AsStringView();
+  if (curText.IsEmpty())
     curText = m_TextBuf.AsStringView();
-  else
+
+  if (curText.IsEmpty())
     return false;
 
-  curText = curText.TrimmedRight(0x20);
-  if (curText.GetLength() < 2)
-    return false;
+  auto iter = curText.rbegin();
+  for (; iter != curText.rend() && *iter == 0x20; iter++) {
+    // Do nothing
+  }
 
-  // Extracting the last 2 characters, since they are all that matter
-  curText = curText.Right(2);
-  if (!IsHyphenCode(curText.Last()))
-    return false;
-
-  if (FXSYS_iswalpha(curText.First() && FXSYS_iswalnum(curChar)))
-    return true;
+  if (iter != curText.rend()) {
+    if (!IsHyphenCode(*iter))
+      return false;
+    iter++;
+    if (FXSYS_iswalpha(*iter) && FXSYS_iswalpha(*iter))
+      return true;
+  } else {
+    iter--;
+    if (!IsHyphenCode(*iter))
+      return false;
+  }
 
   const PAGECHAR_INFO* preInfo;
   if (!m_TempCharList.empty())