7#ifndef PDF_CHAR_CODE_MAP_H
8#define PDF_CHAR_CODE_MAP_H
11#include "PdfEncodingCommon.h"
37 void CopyTo(std::vector<codepoint>&
codePoints)
const;
38 codepointview view()
const;
39 unsigned GetSize()
const;
41 operator codepointview()
const;
55 std::array<codepoint, 3> Data;
61 std::unique_ptr<codepoint[]> Data;
68 using CodeUnitMap = std::unordered_map<PdfCharCode, CodePointSpan>;
70 struct PODOFO_API CodeUnitRange
final
83 struct PODOFO_API CodeUnitRangeInequality
85 using is_transparent = std::true_type;
87 bool operator()(
const CodeUnitRange& lhs,
const PdfCharCode& rhs)
const
89 return lhs.SrcCodeLo < rhs;
91 bool operator()(
const PdfCharCode& lhs,
const CodeUnitRange& rhs)
const
93 return lhs < rhs.SrcCodeLo;
95 bool operator()(
const CodeUnitRange& lhs,
const CodeUnitRange& rhs)
const
97 return lhs.SrcCodeLo < rhs.SrcCodeLo;
101 using CodeUnitRanges = std::set<CodeUnitRange, CodeUnitRangeInequality>;
116 unsigned char CodeSpaceSize;
133 PODOFO_PRIVATE_FRIEND(
class PdfCMapEncodingFactory);
176 bool TryGetNextCharCode(std::string_view::iterator&
it,
190 const PdfEncodingLimits& GetLimits()
const {
return m_Limits; }
192 bool IsEmpty()
const;
196 bool IsTrivialIdentity()
const;
198 std::vector<CodeSpaceRange> GetCodeSpaceRanges()
const;
207 const CodeUnitRanges&
GetRanges()
const {
return m_Ranges; }
214 struct CodePointMapNode
218 CodePointMapNode* Ligatures;
219 CodePointMapNode* Left;
220 CodePointMapNode* Right;
224 PdfCharCodeMap(
const PdfCharCodeMap&) =
delete;
225 PdfCharCodeMap& operator=(
const PdfCharCodeMap&) =
delete;
228 void updateLimits(
const PdfCharCode& codeUnit);
229 void reviseCodePointMap();
230 bool tryFixNextRanges(
const CodeUnitRanges::iterator& it,
unsigned prevRangeCodeUpper);
231 static bool tryFindNextCharacterId(
const CodePointMapNode* node, std::string_view::iterator &it,
232 const std::string_view::iterator& end, PdfCharCode& cid);
233 static const CodePointMapNode* findNode(
const CodePointMapNode* node, codepoint codePoint);
234 static void deleteNode(CodePointMapNode* node);
235 static CodePointMapNode* findOrAddNode(CodePointMapNode*& node, codepoint codePoint);
238 PdfEncodingLimits m_Limits;
239 CodeUnitMap m_Mappings;
240 CodeUnitRanges m_Ranges;
242 CodePointMapNode* m_codePointMapHead;
SPDX-FileCopyrightText: (C) 2005 Dominik Seichter domseichter@web.de SPDX-FileCopyrightText: (C) 2020...
A memory owning immutable block of code points, optimized for small segments as up to 3 elements can ...
Definition PdfCharCodeMap.h:29
A bidirectional map from character code units to unspecified code points.
Definition PdfCharCodeMap.h:132
const CodeUnitMap & GetMappings() const
Provides direct mappings.
Definition PdfCharCodeMap.h:203
const CodeUnitRanges & GetRanges() const
Provides range mappings.
Definition PdfCharCodeMap.h:207
Convenient type for char array storage and/or buffer with std::string compatibility.
Definition basetypes.h:38
SPDX-FileCopyrightText: (C) 2022 Francesco Pretto ceztko@gmail.com SPDX-License-Identifier: LGPL-2....
Definition basetypes.h:16
char32_t codepoint
A convenient typedef for an unspecified codepoint The underlying type is convenientely char32_t so it...
Definition PdfCharCodeMap.h:21
Represent a range in the "begincodespacerange" section.
Definition PdfCharCodeMap.h:110
A character code unit.
Definition PdfEncodingCommon.h:20