Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cpdf_string.cpp
Go to the documentation of this file.
1// Copyright 2016 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "core/fpdfapi/parser/cpdf_string.h"
8
9#include <stdint.h>
10
11#include <utility>
12
13#include "core/fpdfapi/parser/cpdf_encryptor.h"
14#include "core/fpdfapi/parser/fpdf_parser_decode.h"
15#include "core/fxcrt/data_vector.h"
16#include "core/fxcrt/fx_stream.h"
17
18CPDF_String::CPDF_String() = default;
19
20CPDF_String::CPDF_String(WeakPtr<ByteStringPool> pool,
21 pdfium::span<const uint8_t> data,
22 DataType is_hex)
23 : data_(ByteStringView(data)), output_is_hex_(true) {
24 if (pool) {
25 data_ = pool->Intern(data_);
26 }
27}
28
29CPDF_String::CPDF_String(WeakPtr<ByteStringPool> pool, const ByteString& str)
30 : data_(str) {
31 if (pool) {
32 data_ = pool->Intern(data_);
33 }
34}
35
36CPDF_String::CPDF_String(WeakPtr<ByteStringPool> pool, WideStringView str)
37 : CPDF_String(pool, PDF_EncodeText(str)) {
38 // Delegates to ctor above.
39}
40
41CPDF_String::~CPDF_String() = default;
42
43CPDF_Object::Type CPDF_String::GetType() const {
44 return kString;
45}
46
47RetainPtr<CPDF_Object> CPDF_String::Clone() const {
48 auto clone = pdfium::MakeRetain<CPDF_String>();
49 clone->data_ = data_;
50 clone->output_is_hex_ = output_is_hex_;
51 return clone;
52}
53
54ByteString CPDF_String::GetString() const {
55 return data_;
56}
57
58void CPDF_String::SetString(const ByteString& str) {
59 data_ = str;
60}
61
62CPDF_String* CPDF_String::AsMutableString() {
63 return this;
64}
65
66WideString CPDF_String::GetUnicodeText() const {
67 return PDF_DecodeText(data_.unsigned_span());
68}
69
70bool CPDF_String::WriteTo(IFX_ArchiveStream* archive,
71 const CPDF_Encryptor* encryptor) const {
72 DataVector<uint8_t> encrypted_data;
73 pdfium::span<const uint8_t> data = data_.unsigned_span();
74 if (encryptor) {
75 encrypted_data = encryptor->Encrypt(data);
76 data = encrypted_data;
77 }
78 ByteStringView raw(data);
79 ByteString content =
80 output_is_hex_ ? PDF_HexEncodeString(raw) : PDF_EncodeString(raw);
81 return archive->WriteString(content.AsStringView());
82}
83
84ByteString CPDF_String::EncodeString() const {
85 return output_is_hex_ ? PDF_HexEncodeString(data_.AsStringView())
86 : PDF_EncodeString(data_.AsStringView());
87}
fxcrt::ByteString ByteString
Definition bytestring.h:180
void SetString(const ByteString &str) override
~CPDF_String() override
CPDF_String * AsMutableString() override
Type GetType() const override
bool WriteTo(IFX_ArchiveStream *archive, const CPDF_Encryptor *encryptor) const override
ByteString EncodeString() const
RetainPtr< CPDF_Object > Clone() const override
WideString GetUnicodeText() const override
ByteString GetString() const override
bool WriteString(ByteStringView str)
Definition fx_stream.cpp:46
fxcrt::ByteStringView ByteStringView
fxcrt::WideStringView WideStringView
fxcrt::WideString WideString
Definition widestring.h:207