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
1313namespace odr ::internal::pdf {
1414namespace {
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
178177const IndirectObject &
179178DocumentParser::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
196195std::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
211210std::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 }
0 commit comments