From 5c723d4587630f0f5463f5dcbcd8878abd3b6fb2 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Mon, 30 Apr 2018 21:26:43 +0000 Subject: Simplify Unicode_GetNormalization() and caller. Change-Id: I9a5acb59790fd8527ced745370bdfe35e4d21c36 Reviewed-on: https://pdfium-review.googlesource.com/31656 Commit-Queue: Lei Zhang Reviewed-by: Ryan Harrison --- core/fpdftext/cpdf_textpage.cpp | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp index 6e797e5c27..00ae5ad4d6 100644 --- a/core/fpdftext/cpdf_textpage.cpp +++ b/core/fpdftext/cpdf_textpage.cpp @@ -7,6 +7,7 @@ #include "core/fpdftext/cpdf_textpage.h" #include +#include #include #include @@ -83,13 +84,9 @@ size_t Unicode_GetNormalization(wchar_t wch, wchar_t* pDst) { wch = wFind & 0x0FFF; wFind >>= 12; } - const uint16_t* pMap = g_UnicodeData_Normalization_Maps[wFind]; - if (pMap == g_UnicodeData_Normalization_Map4) { - pMap = g_UnicodeData_Normalization_Map4 + wch; + const uint16_t* pMap = g_UnicodeData_Normalization_Maps[wFind] + wch; + if (wFind == 4) wFind = (wchar_t)(*pMap++); - } else { - pMap += wch; - } if (pDst) { wchar_t n = wFind; while (n--) @@ -628,18 +625,16 @@ void CPDF_TextPage::AddCharInfoByLRDirection(wchar_t wChar, info2.m_Index = m_TextBuf.GetLength(); if (wChar >= 0xFB00 && wChar <= 0xFB06) { - wchar_t* pDst = nullptr; - size_t nCount = Unicode_GetNormalization(wChar, pDst); + size_t nCount = Unicode_GetNormalization(wChar, nullptr); if (nCount >= 1) { - pDst = FX_Alloc(wchar_t, nCount); - Unicode_GetNormalization(wChar, pDst); + std::unique_ptr pDst(FX_Alloc(wchar_t, nCount)); + Unicode_GetNormalization(wChar, pDst.get()); for (size_t nIndex = 0; nIndex < nCount; nIndex++) { - info2.m_Unicode = pDst[nIndex]; + info2.m_Unicode = pDst.get()[nIndex]; info2.m_Flag = FPDFTEXT_CHAR_PIECE; m_TextBuf.AppendChar(info2.m_Unicode); m_CharList.push_back(info2); } - FX_Free(pDst); return; } } @@ -658,18 +653,16 @@ void CPDF_TextPage::AddCharInfoByRLDirection(wchar_t wChar, info2.m_Index = m_TextBuf.GetLength(); wChar = FX_GetMirrorChar(wChar); - wchar_t* pDst = nullptr; - size_t nCount = Unicode_GetNormalization(wChar, pDst); + size_t nCount = Unicode_GetNormalization(wChar, nullptr); if (nCount >= 1) { - pDst = FX_Alloc(wchar_t, nCount); - Unicode_GetNormalization(wChar, pDst); + std::unique_ptr pDst(FX_Alloc(wchar_t, nCount)); + Unicode_GetNormalization(wChar, pDst.get()); for (size_t nIndex = 0; nIndex < nCount; nIndex++) { - info2.m_Unicode = pDst[nIndex]; + info2.m_Unicode = pDst.get()[nIndex]; info2.m_Flag = FPDFTEXT_CHAR_PIECE; m_TextBuf.AppendChar(info2.m_Unicode); m_CharList.push_back(info2); } - FX_Free(pDst); return; } info2.m_Unicode = wChar; -- cgit v1.2.3