14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_string.h"
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <utility>
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/fpdf_parser_decode.h"
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "third_party/base/ptr_util.h"
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDF_String::CPDF_String() : m_bHex(false) {}
154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDF_String::CPDF_String(CFX_WeakPtr<CFX_ByteStringPool> pPool,
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         const CFX_ByteString& str,
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         bool bHex)
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    : m_String(str), m_bHex(bHex) {
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pPool)
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_String = pPool->Intern(m_String);
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDF_String::CPDF_String(CFX_WeakPtr<CFX_ByteStringPool> pPool,
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                         const CFX_WideString& str)
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    : m_String(PDF_EncodeText(str)), m_bHex(false) {
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  if (pPool)
284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_String = pPool->Intern(m_String);
294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDF_String::~CPDF_String() {}
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDF_Object::Type CPDF_String::GetType() const {
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return STRING;
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstd::unique_ptr<CPDF_Object> CPDF_String::Clone() const {
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  auto pRet = pdfium::MakeUnique<CPDF_String>();
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRet->m_String = m_String;
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  pRet->m_bHex = m_bHex;
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return std::move(pRet);
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_ByteString CPDF_String::GetString() const {
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return m_String;
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPDF_String::SetString(const CFX_ByteString& str) {
494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  m_String = str;
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPDF_String::IsString() const {
534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return true;
544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPDF_String* CPDF_String::AsString() {
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return this;
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannconst CPDF_String* CPDF_String::AsString() const {
614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return this;
624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_WideString CPDF_String::GetUnicodeText() const {
654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return PDF_DecodeText(m_String);
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
67