summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
Diffstat (limited to 'Userland')
-rw-r--r--Userland/Libraries/LibPDF/Document.cpp12
-rw-r--r--Userland/Libraries/LibPDF/Document.h14
2 files changed, 19 insertions, 7 deletions
diff --git a/Userland/Libraries/LibPDF/Document.cpp b/Userland/Libraries/LibPDF/Document.cpp
index 54b67d3c0d..a8f85e8a23 100644
--- a/Userland/Libraries/LibPDF/Document.cpp
+++ b/Userland/Libraries/LibPDF/Document.cpp
@@ -232,9 +232,15 @@ PDFErrorOr<Destination> Document::create_destination_from_parameters(NonnullRefP
auto page_ref = array->at(0);
auto type_name = TRY(array->get_name_at(this, 1))->name();
- Vector<float> parameters;
- for (size_t i = 2; i < array->size(); i++)
- parameters.append(array->at(i).to_float());
+ Vector<Optional<float>> parameters;
+ TRY(parameters.try_ensure_capacity(array->size() - 2));
+ for (size_t i = 2; i < array->size(); i++) {
+ auto& param = array->at(i);
+ if (param.has<nullptr_t>())
+ parameters.unchecked_append({});
+ else
+ parameters.append(param.to_float());
+ }
Destination::Type type;
if (type_name == CommonNames::XYZ) {
diff --git a/Userland/Libraries/LibPDF/Document.h b/Userland/Libraries/LibPDF/Document.h
index d58598e2b3..15305bb0c1 100644
--- a/Userland/Libraries/LibPDF/Document.h
+++ b/Userland/Libraries/LibPDF/Document.h
@@ -51,7 +51,7 @@ struct Destination {
Type type;
Optional<u32> page;
- Vector<float> parameters;
+ Vector<Optional<float>> parameters;
};
struct OutlineItem final : public RefCounted<OutlineItem> {
@@ -232,9 +232,15 @@ struct Formatter<PDF::Destination> : Formatter<FormatString> {
TRY(builder.put_literal("{{}}"sv));
else
TRY(builder.put_u64(destination.page.value()));
- for (auto& param : destination.parameters) {
- TRY(builder.put_f64(double(param)));
- TRY(builder.put_literal(" "sv));
+ if (!destination.parameters.is_empty()) {
+ TRY(builder.put_literal(" parameters="sv));
+ for (auto const& param : destination.parameters) {
+ if (param.has_value())
+ TRY(builder.put_f64(double(param.value())));
+ else
+ TRY(builder.put_literal("{{}}"sv));
+ TRY(builder.put_literal(" "sv));
+ }
}
return builder.put_literal(" }}"sv);
}