Skip to content

Commit 47e59e6

Browse files
committed
clean pdf
1 parent 745c56a commit 47e59e6

26 files changed

Lines changed: 240 additions & 241 deletions

CMakeLists.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,13 +161,10 @@ set(ODR_SOURCE_FILES
161161

162162
"src/odr/internal/pdf/pdf_cmap.cpp"
163163
"src/odr/internal/pdf/pdf_cmap_parser.cpp"
164-
"src/odr/internal/pdf/pdf_document.cpp"
165-
"src/odr/internal/pdf/pdf_document_element.cpp"
166164
"src/odr/internal/pdf/pdf_document_parser.cpp"
167165
"src/odr/internal/pdf/pdf_file.cpp"
168166
"src/odr/internal/pdf/pdf_file_object.cpp"
169167
"src/odr/internal/pdf/pdf_file_parser.cpp"
170-
"src/odr/internal/pdf/pdf_graphics_operator.cpp"
171168
"src/odr/internal/pdf/pdf_graphics_operator_parser.cpp"
172169
"src/odr/internal/pdf/pdf_graphics_state.cpp"
173170
"src/odr/internal/pdf/pdf_object.cpp"

src/odr/internal/pdf/pdf_cmap.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,11 @@
55

66
namespace odr::internal::pdf {
77

8-
CMap::CMap() = default;
9-
10-
void CMap::map_bfchar(char glyph, char16_t unicode) {
8+
void CMap::map_bfchar(const char glyph, const char16_t unicode) {
119
m_bfchar[glyph] = unicode;
1210
}
1311

14-
char16_t CMap::translate_glyph(char glyph) const {
12+
char16_t CMap::translate_glyph(const char glyph) const {
1513
return util::map::lookup_default(m_bfchar, glyph, glyph);
1614
}
1715

src/odr/internal/pdf/pdf_cmap.hpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@ namespace odr::internal::pdf {
77

88
class CMap {
99
public:
10-
CMap();
11-
1210
void map_bfchar(char glyph, char16_t unicode);
1311

14-
char16_t translate_glyph(char glyph) const;
15-
std::string translate_string(const std::string &glyphs) const;
12+
[[nodiscard]] char16_t translate_glyph(char glyph) const;
13+
[[nodiscard]] std::string translate_string(const std::string &glyphs) const;
1614

1715
private:
1816
std::unordered_map<char, char16_t> m_bfchar;

src/odr/internal/pdf/pdf_cmap_parser.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,21 @@ std::variant<Object, std::string> CMapParser::read_token() const {
3737

3838
std::string token;
3939
while (true) {
40-
int_type i = m_parser.geti();
40+
const int_type i = m_parser.geti();
4141
if (i == eof) {
4242
return token;
4343
}
44-
auto c = static_cast<char_type>(i);
44+
const auto c = static_cast<char_type>(i);
4545
if (ObjectParser::is_whitespace(c)) {
4646
return token;
4747
}
4848
m_parser.bumpc();
49-
token += (char_type)c;
49+
token += c;
5050
}
5151
}
5252

53-
void CMapParser::read_codespacerange(std::uint32_t n, CMap &cmap) const {
53+
void CMapParser::read_codespacerange(const std::uint32_t n,
54+
const CMap &cmap) const {
5455
(void)cmap;
5556

5657
m_parser.skip_whitespace();
@@ -64,7 +65,7 @@ void CMapParser::read_codespacerange(std::uint32_t n, CMap &cmap) const {
6465
}
6566
}
6667

67-
void CMapParser::read_bfchar(std::uint32_t n, CMap &cmap) const {
68+
void CMapParser::read_bfchar(const std::uint32_t n, CMap &cmap) const {
6869
m_parser.skip_whitespace();
6970
for (std::uint32_t i = 0; i < n; ++i) {
7071
std::string glyph = m_parser.read_object().as_string();
@@ -73,7 +74,7 @@ void CMapParser::read_bfchar(std::uint32_t n, CMap &cmap) const {
7374
m_parser.skip_whitespace();
7475

7576
util::reverse_bytes(reinterpret_cast<char16_t *>(unicode.data()),
76-
(std::size_t)unicode.size() / 2);
77+
unicode.size() / 2);
7778
std::u16string_view unicode16(
7879
reinterpret_cast<const char16_t *>(unicode.data()), unicode.size() / 2);
7980

@@ -88,7 +89,7 @@ void CMapParser::read_bfchar(std::uint32_t n, CMap &cmap) const {
8889
}
8990
}
9091

91-
void CMapParser::read_bfrange(std::uint32_t n, CMap &cmap) const {
92+
void CMapParser::read_bfrange(const std::uint32_t n, const CMap &cmap) const {
9293
(void)cmap;
9394

9495
m_parser.skip_whitespace();
@@ -118,13 +119,12 @@ CMap CMapParser::parse_cmap() const {
118119
m_parser.skip_whitespace();
119120

120121
if (std::holds_alternative<Object>(token)) {
121-
const Object &object = std::get<Object>(token);
122-
if (object.is_integer()) {
122+
if (const Object &object = std::get<Object>(token); object.is_integer()) {
123123
last_int = object.as_integer();
124124
}
125125
} else if (std::holds_alternative<std::string>(token)) {
126-
const std::string &command = std::get<std::string>(token);
127-
if (command == "begincodespacerange") {
126+
if (const std::string &command = std::get<std::string>(token);
127+
command == "begincodespacerange") {
128128
read_codespacerange(last_int, cmap);
129129
} else if (command == "beginbfchar") {
130130
read_bfchar(last_int, cmap);

src/odr/internal/pdf/pdf_cmap_parser.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ class CMapParser {
2727

2828
Token read_token() const;
2929

30-
void read_codespacerange(std::uint32_t n, CMap &) const;
30+
void read_codespacerange(std::uint32_t n, const CMap &) const;
3131
void read_bfchar(std::uint32_t n, CMap &) const;
32-
void read_bfrange(std::uint32_t n, CMap &) const;
32+
void read_bfrange(std::uint32_t n, const CMap &) const;
3333
};
3434

3535
} // namespace odr::internal::pdf

src/odr/internal/pdf/pdf_document.cpp

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/odr/internal/pdf/pdf_document_element.cpp

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/odr/internal/pdf/pdf_document_element.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@ struct Element {
3232
Object object;
3333
};
3434

35-
struct Catalog : Element {
35+
struct Catalog final : Element {
3636
Pages *pages{nullptr};
3737
};
3838

39-
struct Pages : Element {
39+
struct Pages final : Element {
4040
std::vector<Element *> kids;
4141
std::uint32_t count{0};
4242
};
4343

44-
struct Page : Element {
44+
struct Page final : Element {
4545
Pages *parent{nullptr};
4646

4747
Resources *resources;
@@ -51,13 +51,13 @@ struct Page : Element {
5151
std::vector<ObjectReference> contents_reference;
5252
};
5353

54-
struct Annotation : Element {};
54+
struct Annotation final : Element {};
5555

56-
struct Resources : Element {
56+
struct Resources final : Element {
5757
std::unordered_map<std::string, Font *> font;
5858
};
5959

60-
struct Font : Element {
60+
struct Font final : Element {
6161
CMap cmap;
6262
};
6363

src/odr/internal/pdf/pdf_document_parser.cpp

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@
66
#include <odr/internal/pdf/pdf_document_element.hpp>
77
#include <odr/internal/pdf/pdf_file_parser.hpp>
88

9-
#include <functional>
109
#include <iostream>
10+
#include <ranges>
1111
#include <sstream>
1212

1313
namespace odr::internal::pdf {
1414
namespace {
1515

16-
pdf::Element *parse_page_or_pages(DocumentParser &parser,
17-
const ObjectReference &reference,
18-
Document &document, Element *parent);
16+
Element *parse_page_or_pages(DocumentParser &parser,
17+
const ObjectReference &reference,
18+
Document &document, Element *parent);
1919

20-
pdf::Font *parse_font(DocumentParser &parser, const ObjectReference &reference,
21-
Document &document) {
20+
Font *parse_font(DocumentParser &parser, const ObjectReference &reference,
21+
Document &document) {
2222
Font *font = document.create_element<Font>();
2323

2424
IndirectObject object = parser.read_object(reference);
@@ -41,8 +41,8 @@ pdf::Font *parse_font(DocumentParser &parser, const ObjectReference &reference,
4141
return font;
4242
}
4343

44-
pdf::Resources *parse_resources(DocumentParser &parser, const Object &object,
45-
Document &document) {
44+
Resources *parse_resources(DocumentParser &parser, const Object &object,
45+
Document &document) {
4646
auto *resources = document.create_element<Resources>();
4747

4848
Dictionary dictionary = parser.resolve_object_copy(object).as_dictionary();
@@ -61,9 +61,9 @@ pdf::Resources *parse_resources(DocumentParser &parser, const Object &object,
6161
return resources;
6262
}
6363

64-
pdf::Annotation *parse_annotation(DocumentParser &parser,
65-
const ObjectReference &reference,
66-
Document &document) {
64+
Annotation *parse_annotation(DocumentParser &parser,
65+
const ObjectReference &reference,
66+
Document &document) {
6767
auto *annotation = document.create_element<Annotation>();
6868

6969
IndirectObject object = parser.read_object(reference);
@@ -76,8 +76,8 @@ pdf::Annotation *parse_annotation(DocumentParser &parser,
7676
return annotation;
7777
}
7878

79-
pdf::Page *parse_page(DocumentParser &parser, const ObjectReference &reference,
80-
Document &document, Element *parent) {
79+
Page *parse_page(DocumentParser &parser, const ObjectReference &reference,
80+
Document &document, Element *parent) {
8181
Page *page = document.create_element<Page>();
8282

8383
IndirectObject object = parser.read_object(reference);
@@ -110,8 +110,8 @@ pdf::Page *parse_page(DocumentParser &parser, const ObjectReference &reference,
110110
return page;
111111
}
112112

113-
pdf::Pages *parse_pages(DocumentParser &parser,
114-
const ObjectReference &reference, Document &document) {
113+
Pages *parse_pages(DocumentParser &parser, const ObjectReference &reference,
114+
Document &document) {
115115
auto *pages = document.create_element<Pages>();
116116

117117
IndirectObject object = parser.read_object(reference);
@@ -130,9 +130,9 @@ pdf::Pages *parse_pages(DocumentParser &parser,
130130
return pages;
131131
}
132132

133-
pdf::Element *parse_page_or_pages(DocumentParser &parser,
134-
const ObjectReference &reference,
135-
Document &document, Element *parent) {
133+
Element *parse_page_or_pages(DocumentParser &parser,
134+
const ObjectReference &reference,
135+
Document &document, Element *parent) {
136136
// TODO we are parsing twice
137137
IndirectObject object = parser.read_object(reference);
138138
const Dictionary &dictionary = object.object.as_dictionary();
@@ -148,9 +148,8 @@ pdf::Element *parse_page_or_pages(DocumentParser &parser,
148148
throw std::runtime_error("unknown element");
149149
}
150150

151-
pdf::Catalog *parse_catalog(DocumentParser &parser,
152-
const ObjectReference &reference,
153-
Document &document) {
151+
Catalog *parse_catalog(DocumentParser &parser, const ObjectReference &reference,
152+
Document &document) {
154153
auto *catalog = document.create_element<Catalog>();
155154

156155
IndirectObject object = parser.read_object(reference);
@@ -177,11 +176,11 @@ const Xref &DocumentParser::xref() const { return m_xref; }
177176

178177
const IndirectObject &
179178
DocumentParser::read_object(const ObjectReference &reference) {
180-
if (auto it = m_objects.find(reference); it != std::end(m_objects)) {
179+
if (const auto it = m_objects.find(reference); it != std::end(m_objects)) {
181180
return it->second;
182181
}
183182

184-
std::uint32_t position = m_xref.table.at(reference).position;
183+
const std::uint32_t position = m_xref.table.at(reference).position;
185184
in().seekg(position);
186185
IndirectObject object = parser().read_indirect_object();
187186

@@ -194,8 +193,8 @@ DocumentParser::read_object_stream(const ObjectReference &reference) {
194193
}
195194

196195
std::string DocumentParser::read_object_stream(const IndirectObject &object) {
197-
Object length = object.object.as_dictionary()["Length"];
198-
std::uint32_t size;
196+
const Object length = object.object.as_dictionary()["Length"];
197+
std::uint32_t size = 0;
199198
if (length.is_integer()) {
200199
size = length.as_integer();
201200
} else if (length.is_reference()) {
@@ -205,12 +204,12 @@ std::string DocumentParser::read_object_stream(const IndirectObject &object) {
205204
}
206205

207206
in().seekg(object.stream_position.value());
208-
return m_parser.read_stream(size);
207+
return m_parser.read_stream(static_cast<std::int32_t>(size));
209208
}
210209

211210
std::unique_ptr<Document> DocumentParser::parse_document() {
212211
parser().seek_start_xref();
213-
StartXref start_xref = parser().read_start_xref();
212+
const StartXref start_xref = parser().read_start_xref();
214213

215214
std::uint32_t xref_position = start_xref.start;
216215
std::optional<Trailer> trailer;
@@ -253,7 +252,7 @@ void DocumentParser::deep_resolve_object(Object &object) {
253252
deep_resolve_object(e);
254253
}
255254
} else if (object.is_dictionary()) {
256-
for (auto &[k, v] : object.as_dictionary()) {
255+
for (Object &v : object.as_dictionary() | std::views::values) {
257256
deep_resolve_object(v);
258257
}
259258
}

src/odr/internal/pdf/pdf_document_parser.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ struct Document;
1313

1414
class DocumentParser {
1515
public:
16-
DocumentParser(std::istream &);
16+
explicit DocumentParser(std::istream &);
1717

18-
std::istream &in() const;
19-
const FileParser &parser() const;
20-
const Xref &xref() const;
18+
[[nodiscard]] std::istream &in() const;
19+
[[nodiscard]] const FileParser &parser() const;
20+
[[nodiscard]] const Xref &xref() const;
2121

2222
const IndirectObject &read_object(const ObjectReference &reference);
2323
std::string read_object_stream(const ObjectReference &reference);

0 commit comments

Comments
 (0)