| Index: core/src/fpdftext/fpdf_text.cpp
|
| diff --git a/core/src/fpdftext/fpdf_text.cpp b/core/src/fpdftext/fpdf_text.cpp
|
| index 4653fa63fa33704b5397dcce68920c5e1829f429..c052676a199af75315e53c9a4d8675a3499ceb8f 100644
|
| --- a/core/src/fpdftext/fpdf_text.cpp
|
| +++ b/core/src/fpdftext/fpdf_text.cpp
|
| @@ -7,6 +7,7 @@
|
| #include <cctype>
|
| #include <cwctype>
|
| #include <memory>
|
| +#include <vector>
|
|
|
| #include "core/include/fpdfapi/fpdf_page.h"
|
| #include "core/include/fpdfapi/fpdf_pageobj.h"
|
| @@ -16,6 +17,7 @@
|
| #include "core/include/fxcrt/fx_ucd.h"
|
| #include "core/src/fpdftext/text_int.h"
|
| #include "core/src/fpdftext/txtproc.h"
|
| +#include "third_party/base/stl_util.h"
|
|
|
| CFX_ByteString CharFromUnicodeAlt(FX_WCHAR unicode,
|
| int destcp,
|
| @@ -309,22 +311,23 @@ void NormalizeCompositeChar(FX_WCHAR wChar, CFX_WideString& sDest) {
|
| }
|
| delete[] pDst;
|
| }
|
| +
|
| void NormalizeString(CFX_WideString& str) {
|
| if (str.GetLength() <= 0) {
|
| return;
|
| }
|
| CFX_WideString sBuffer;
|
| std::unique_ptr<CFX_BidiChar> pBidiChar(new CFX_BidiChar);
|
| - CFX_WordArray order;
|
| + std::vector<FX_WORD> order;
|
| FX_BOOL bR2L = FALSE;
|
| int32_t start = 0, count = 0, i = 0;
|
| int nR2L = 0, nL2R = 0;
|
| for (i = 0; i < str.GetLength(); i++) {
|
| if (pBidiChar->AppendChar(str.GetAt(i))) {
|
| CFX_BidiChar::Direction ret = pBidiChar->GetBidiInfo(&start, &count);
|
| - order.Add(start);
|
| - order.Add(count);
|
| - order.Add(ret);
|
| + order.push_back(start);
|
| + order.push_back(count);
|
| + order.push_back(ret);
|
| if (!bR2L) {
|
| if (ret == CFX_BidiChar::RIGHT) {
|
| nR2L++;
|
| @@ -336,9 +339,9 @@ void NormalizeString(CFX_WideString& str) {
|
| }
|
| if (pBidiChar->EndChar()) {
|
| CFX_BidiChar::Direction ret = pBidiChar->GetBidiInfo(&start, &count);
|
| - order.Add(start);
|
| - order.Add(count);
|
| - order.Add(ret);
|
| + order.push_back(start);
|
| + order.push_back(count);
|
| + order.push_back(ret);
|
| if (!bR2L) {
|
| if (ret == CFX_BidiChar::RIGHT) {
|
| nR2L++;
|
| @@ -351,11 +354,11 @@ void NormalizeString(CFX_WideString& str) {
|
| bR2L = TRUE;
|
| }
|
| if (bR2L) {
|
| - int count = order.GetSize();
|
| + int count = pdfium::CollectionSize<int>(order);
|
| for (int j = count - 1; j > 0; j -= 3) {
|
| - int ret = order.GetAt(j);
|
| - int start = order.GetAt(j - 2);
|
| - int count1 = order.GetAt(j - 1);
|
| + int ret = order[j];
|
| + int count1 = order[j - 1];
|
| + int start = order[j - 2];
|
| if (ret == 2 || ret == 0) {
|
| for (int i = start + count1 - 1; i >= start; i--) {
|
| NormalizeCompositeChar(str[i], sBuffer);
|
| @@ -363,8 +366,8 @@ void NormalizeString(CFX_WideString& str) {
|
| } else {
|
| i = j;
|
| FX_BOOL bSymbol = FALSE;
|
| - while (i > 0 && order.GetAt(i) != 2) {
|
| - bSymbol = !order.GetAt(i);
|
| + while (i > 0 && order[i] != 2) {
|
| + bSymbol = !order[i];
|
| i -= 3;
|
| }
|
| int end = start + count1;
|
| @@ -382,8 +385,8 @@ void NormalizeString(CFX_WideString& str) {
|
| i = j;
|
| j = n;
|
| for (; n <= i; n += 3) {
|
| - int start = order.GetAt(n - 2);
|
| - int count1 = order.GetAt(n - 1);
|
| + int start = order[n - 2];
|
| + int count1 = order[n - 1];
|
| int end = start + count1;
|
| for (int m = start; m < end; m++) {
|
| sBuffer += str[m];
|
| @@ -393,16 +396,16 @@ void NormalizeString(CFX_WideString& str) {
|
| }
|
| }
|
| } else {
|
| - int count = order.GetSize();
|
| + int count = pdfium::CollectionSize<int>(order);
|
| FX_BOOL bL2R = FALSE;
|
| for (int j = 0; j < count; j += 3) {
|
| - int ret = order.GetAt(j + 2);
|
| - int start = order.GetAt(j);
|
| - int count1 = order.GetAt(j + 1);
|
| + int start = order[j];
|
| + int count1 = order[j + 1];
|
| + int ret = order[j + 2];
|
| if (ret == 2 || (j == 0 && ret == 0 && !bL2R)) {
|
| int i = j + 3;
|
| while (bR2L && i < count) {
|
| - if (order.GetAt(i + 2) == 1) {
|
| + if (order[i + 2] == 1) {
|
| break;
|
| } else {
|
| i += 3;
|
| @@ -415,7 +418,7 @@ void NormalizeString(CFX_WideString& str) {
|
| }
|
| int end = str.GetLength() - 1;
|
| if (i < count) {
|
| - end = order.GetAt(i) - 1;
|
| + end = order[i] - 1;
|
| }
|
| j = i - 3;
|
| for (int n = end; n >= start; n--) {
|
|
|