From 9204252d029aee871da23861e971ac25e488cbaf Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Fri, 3 Nov 2023 06:18:37 -0400 Subject: [PATCH] LibPDF: Add scaffolding for function objects See PDF 1.7 Spec, "3.9 Functions". --- Userland/Libraries/LibPDF/CMakeLists.txt | 1 + Userland/Libraries/LibPDF/Function.cpp | 58 ++++++++++++++++++++++++ Userland/Libraries/LibPDF/Function.h | 21 +++++++++ 3 files changed, 80 insertions(+) create mode 100644 Userland/Libraries/LibPDF/Function.cpp create mode 100644 Userland/Libraries/LibPDF/Function.h diff --git a/Userland/Libraries/LibPDF/CMakeLists.txt b/Userland/Libraries/LibPDF/CMakeLists.txt index 0f58e65b8e..e16c5a30bf 100644 --- a/Userland/Libraries/LibPDF/CMakeLists.txt +++ b/Userland/Libraries/LibPDF/CMakeLists.txt @@ -14,6 +14,7 @@ set(SOURCES Fonts/Type0Font.cpp Fonts/Type1Font.cpp Fonts/Type1FontProgram.cpp + Function.cpp Interpolation.cpp ObjectDerivatives.cpp Page.cpp diff --git a/Userland/Libraries/LibPDF/Function.cpp b/Userland/Libraries/LibPDF/Function.cpp new file mode 100644 index 0000000000..7262839eda --- /dev/null +++ b/Userland/Libraries/LibPDF/Function.cpp @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023, Nico Weber + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +// PDF 1.7 spec, 3.9 Functions + +namespace PDF { + +class SampledFunction final : public Function { +public: + virtual PDFErrorOr> evaluate(ReadonlySpan) const override; +}; + +PDFErrorOr> SampledFunction::evaluate(ReadonlySpan) const +{ + return Error(Error::Type::RenderingUnsupported, "SampledFunction not yet implemented"_string); +} + +class ExponentialInterpolationFunction final : public Function { +public: + virtual PDFErrorOr> evaluate(ReadonlySpan) const override; +}; + +PDFErrorOr> ExponentialInterpolationFunction::evaluate(ReadonlySpan) const +{ + return Error(Error::Type::RenderingUnsupported, "ExponentialInterpolationFunction not yet implemented"_string); +} + +class StitchingFunction final : public Function { +public: + virtual PDFErrorOr> evaluate(ReadonlySpan) const override; +}; + +PDFErrorOr> StitchingFunction::evaluate(ReadonlySpan) const +{ + return Error(Error::Type::RenderingUnsupported, "StitchingFunction not yet implemented"_string); +} + +class PostScriptCalculatorFunction final : public Function { +public: + virtual PDFErrorOr> evaluate(ReadonlySpan) const override; +}; + +PDFErrorOr> PostScriptCalculatorFunction::evaluate(ReadonlySpan) const +{ + return Error(Error::Type::RenderingUnsupported, "PostScriptCalculatorFunction not yet implemented"_string); +} + +PDFErrorOr> Function::create(Document*, NonnullRefPtr) +{ + return Error(Error::Type::RenderingUnsupported, "Function creation not yet implemented"_string); +} + +} diff --git a/Userland/Libraries/LibPDF/Function.h b/Userland/Libraries/LibPDF/Function.h new file mode 100644 index 0000000000..9b51ffef92 --- /dev/null +++ b/Userland/Libraries/LibPDF/Function.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023, Nico Weber + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace PDF { + +class Function : public RefCounted { +public: + static PDFErrorOr> create(Document*, NonnullRefPtr); + virtual ~Function() = default; + virtual PDFErrorOr> evaluate(ReadonlySpan) const = 0; +}; + +}