diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 826a60611..a557201a3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -76,7 +76,7 @@ jobs:
# cross-module suites (which need the testing module + the engine test-jar on
# the classpath and so cannot live in the engine's own test scope). -am pulls
# the fonts / emoji upstreams; bundle / examples / benchmarks are excluded.
- run: ./mvnw -B -ntp -f aggregator/pom.xml clean verify -pl :graph-compose-core,:graph-compose-render-docx,:graph-compose-render-pptx,:graph-compose-testing,:graph-compose-qa -am
+ run: ./mvnw -B -ntp -f aggregator/pom.xml clean verify -pl :graph-compose-core,:graph-compose-render-pdf,:graph-compose-render-docx,:graph-compose-render-pptx,:graph-compose-testing,:graph-compose-qa -am
- name: Generate Javadoc
# Run only on the baseline JDK — Javadoc output is identical
@@ -119,10 +119,16 @@ jobs:
- name: Install root artifact (graph-compose-core)
run: ./mvnw -B -ntp -DskipTests install -pl .
+ - name: Install graph-compose-render-pdf (the PDF backend the wrapper brings)
+ # The graph-compose wrapper depends on render-pdf so a bare graph-compose
+ # renders PDF; install it after the core (its only dependency) and before
+ # the wrapper.
+ run: ./mvnw -B -ntp -f render-pdf/pom.xml -DskipTests install
+
- name: Install graph-compose (the compat wrapper, consumed by the examples module)
# examples depends on the graph-compose coordinate — the empty jar wrapper
- # over graph-compose-core. Install it after the core so the examples build
- # resolves it (and the engine classes transitively).
+ # over graph-compose-core + render-pdf. Install it after those so the
+ # examples build resolves it (and the engine + PDF backend transitively).
run: ./mvnw -B -ntp -f wrapper/pom.xml -DskipTests install
- name: Install graph-compose-render-docx (consumed by the examples module)
@@ -226,6 +232,12 @@ jobs:
- name: Install root artifact
run: ./mvnw -B -ntp -DskipTests install -pl .
+ - name: Install graph-compose-render-pdf (consumed by the benchmarks module)
+ # benchmarks call buildPdf and reference the PDF backend types directly, so
+ # it depends on render-pdf; install it after the core, before the benchmarks
+ # build resolves it.
+ run: ./mvnw -B -ntp -f render-pdf/pom.xml -DskipTests install
+
- name: Compile benchmarks module
run: ./mvnw -B -ntp -f benchmarks/pom.xml clean compile
@@ -294,6 +306,12 @@ jobs:
- name: Install root artifact
run: ./mvnw -B -ntp -DskipTests install -pl .
+ - name: Install graph-compose-render-pdf (consumed by the benchmarks module)
+ # benchmarks call buildPdf and reference the PDF backend types directly, so
+ # it depends on render-pdf; install it after the core, before the benchmarks
+ # build resolves it.
+ run: ./mvnw -B -ntp -f render-pdf/pom.xml -DskipTests install
+
- name: Compile benchmarks module
run: ./mvnw -B -ntp -f benchmarks/pom.xml clean compile
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 44a63e7c0..60ddc0bad 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -99,10 +99,20 @@ jobs:
CENTRAL_TOKEN: ${{ secrets.CENTRAL_TOKEN }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
+ - name: Publish render-pdf to Maven Central
+ # The PDF render backend, lockstep-versioned with the engine (ships on the
+ # same v* tag). graph-compose-core resolves from the local repo installed by
+ # the engine deploy above; the wrapper below depends on this.
+ run: ./mvnw -B -ntp -f render-pdf/pom.xml -P release -DskipTests -Dgpg.skip=false deploy
+ env:
+ CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }}
+ CENTRAL_TOKEN: ${{ secrets.CENTRAL_TOKEN }}
+ MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
+
- name: Publish graph-compose (compat wrapper) to Maven Central
# The empty jar that keeps the `graph-compose` coordinate a drop-in: it
- # depends on graph-compose-core, resolved from the local repo installed by
- # the engine (core) deploy above. Ships on the same v* tag, lockstep.
+ # depends on graph-compose-core + graph-compose-render-pdf, resolved from the
+ # local repo installed by the deploys above. Ships on the same v* tag.
run: ./mvnw -B -ntp -f wrapper/pom.xml -P release -DskipTests -Dgpg.skip=false deploy
env:
CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }}
diff --git a/.gitignore b/.gitignore
index 17c75d506..69188cc9a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,6 +39,7 @@ build/
/logs/
benchmarks/logs/
qa/logs/
+render-pdf/logs/
/CV_Generated.pdf
*.pdf
# Allow PDF previews that are committed README assets.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e0fffc682..3c2ba3162 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -36,12 +36,21 @@ for this cycle.
existing `graph-compose` dependency keeps compiling and rendering PDF unchanged.
Consumer-testing support (`graph-compose-testing`) and the semantic DOCX / PPTX
backends (`graph-compose-render-docx` / `graph-compose-render-pptx`) are already
- separate artifacts; the PDF
- render backend and the built-in templates move into their own modules over the
- rest of the 2.0 cycle, at which point `graph-compose` aggregates the PDF backend
- and `graph-compose-core` becomes the lean, bring-your-own-backend coordinate. The
+ separate artifacts; the **PDF render backend now lives in
+ `graph-compose-render-pdf`**, which the `graph-compose` wrapper aggregates so a
+ bare `graph-compose` still renders PDF, while `graph-compose-core` alone is lean
+ (it throws `MissingBackendException` if asked to render without a backend). The
+ built-in templates move into their own module over the rest of the 2.0 cycle. The
optional `graph-compose-fonts` / `graph-compose-emoji` artifacts are unchanged.
Full install guidance ships with 2.0.0.
+- `graph-compose-render-pdf` is a separate artifact: the entire PDFBox backend —
+ `document.backend.fixed.pdf.**` and the `engine.render.pdf.**` render tree — plus
+ PDFBox, zxing (barcodes), and the commons-logging→SLF4J bridge leave
+ `graph-compose-core`. The core keeps the `DocumentSession` API and the
+ `ServiceLoader` seam (`FixedLayoutBackendProvider` / `FontMetricsProvider`); the
+ PDF provider ships in render-pdf and is discovered at runtime. Depend on
+ `graph-compose` (or `graph-compose-render-pdf` directly) for PDF; a bare
+ `graph-compose-core` renders nothing until a backend is on the classpath.
- The semantic office backends are separate artifacts and Apache POI leaves the
engine: `DocxSemanticBackend` ships in `graph-compose-render-docx` (which brings
POI transitively — add it to export DOCX), and `PptxSemanticBackend` ships in its
diff --git a/aggregator/pom.xml b/aggregator/pom.xml
index ac1a74123..5fa6c1ed1 100644
--- a/aggregator/pom.xml
+++ b/aggregator/pom.xml
@@ -58,6 +58,7 @@
-->
..
+ ../render-pdf
../wrapper
../fonts
../emoji
diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
index 473ea7244..4fadf3082 100644
--- a/benchmarks/pom.xml
+++ b/benchmarks/pom.xml
@@ -53,6 +53,13 @@
graph-compose-core
${graphcompose.version}
+
+
+ io.github.demchaav
+ graph-compose-render-pdf
+ ${graphcompose.version}
+
3.27.7
@@ -119,33 +117,6 @@
slf4j-api
${slf4j.version}
-
-
- org.slf4j
- jcl-over-slf4j
- ${slf4j.version}
-
-
-
- org.apache.pdfbox
- pdfbox
- ${pdfbox.version}
-
-
- commons-logging
- commons-logging
-
-
-
@@ -76,6 +77,23 @@
${project.version}
test
+
+
+ io.github.demchaav
+ graph-compose-render-pdf
+ ${project.version}
+ test
+
+
+ io.github.demchaav
+ graph-compose-render-pdf
+ ${project.version}
+ test-jar
+ tests
+ test
+
io.github.demchaav
graph-compose-fonts
@@ -132,6 +150,19 @@
${logback.version}
test
+
+
+ org.openjfx
+ javafx-controls
+ ${javafx.version}
+ test
+
+
+ org.openjfx
+ javafx-swing
+ ${javafx.version}
+ test
+
diff --git a/src/test/java/com/demcha/compose/devtool/DevToolPreviewProvider.java b/qa/src/test/java/com/demcha/compose/devtool/DevToolPreviewProvider.java
similarity index 100%
rename from src/test/java/com/demcha/compose/devtool/DevToolPreviewProvider.java
rename to qa/src/test/java/com/demcha/compose/devtool/DevToolPreviewProvider.java
diff --git a/src/test/java/com/demcha/compose/devtool/GraphComposeDevTool.java b/qa/src/test/java/com/demcha/compose/devtool/GraphComposeDevTool.java
similarity index 100%
rename from src/test/java/com/demcha/compose/devtool/GraphComposeDevTool.java
rename to qa/src/test/java/com/demcha/compose/devtool/GraphComposeDevTool.java
diff --git a/src/test/java/com/demcha/compose/devtool/GraphComposeDevToolLauncher.java b/qa/src/test/java/com/demcha/compose/devtool/GraphComposeDevToolLauncher.java
similarity index 100%
rename from src/test/java/com/demcha/compose/devtool/GraphComposeDevToolLauncher.java
rename to qa/src/test/java/com/demcha/compose/devtool/GraphComposeDevToolLauncher.java
diff --git a/src/test/java/com/demcha/compose/devtool/PdfRenderBridge.java b/qa/src/test/java/com/demcha/compose/devtool/PdfRenderBridge.java
similarity index 100%
rename from src/test/java/com/demcha/compose/devtool/PdfRenderBridge.java
rename to qa/src/test/java/com/demcha/compose/devtool/PdfRenderBridge.java
diff --git a/src/test/java/com/demcha/compose/devtool/PreviewCompilerTest.java b/qa/src/test/java/com/demcha/compose/devtool/PreviewCompilerTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/devtool/PreviewCompilerTest.java
rename to qa/src/test/java/com/demcha/compose/devtool/PreviewCompilerTest.java
diff --git a/src/test/java/com/demcha/compose/document/Test.java b/qa/src/test/java/com/demcha/compose/document/Test.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/Test.java
rename to qa/src/test/java/com/demcha/compose/document/Test.java
diff --git a/src/test/java/com/demcha/compose/document/api/DocumentSessionAvailableHeightTest.java b/qa/src/test/java/com/demcha/compose/document/api/DocumentSessionAvailableHeightTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/DocumentSessionAvailableHeightTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/DocumentSessionAvailableHeightTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/DocumentSessionConveniencePdfOptionsTest.java b/qa/src/test/java/com/demcha/compose/document/api/DocumentSessionConveniencePdfOptionsTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/DocumentSessionConveniencePdfOptionsTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/DocumentSessionConveniencePdfOptionsTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/DocumentSessionLifecycleTest.java b/qa/src/test/java/com/demcha/compose/document/api/DocumentSessionLifecycleTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/DocumentSessionLifecycleTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/DocumentSessionLifecycleTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/DocumentSessionParallelStressTest.java b/qa/src/test/java/com/demcha/compose/document/api/DocumentSessionParallelStressTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/DocumentSessionParallelStressTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/DocumentSessionParallelStressTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/DocumentSessionRenderingExceptionTest.java b/qa/src/test/java/com/demcha/compose/document/api/DocumentSessionRenderingExceptionTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/DocumentSessionRenderingExceptionTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/DocumentSessionRenderingExceptionTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/DocumentSessionTest.java b/qa/src/test/java/com/demcha/compose/document/api/DocumentSessionTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/DocumentSessionTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/DocumentSessionTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/LayerStackRowCompositionTest.java b/qa/src/test/java/com/demcha/compose/document/api/LayerStackRowCompositionTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/LayerStackRowCompositionTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/LayerStackRowCompositionTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/NegativeMarginTest.java b/qa/src/test/java/com/demcha/compose/document/api/NegativeMarginTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/NegativeMarginTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/NegativeMarginTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/PageBackgroundTest.java b/qa/src/test/java/com/demcha/compose/document/api/PageBackgroundTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/PageBackgroundTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/PageBackgroundTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/PageMarginTest.java b/qa/src/test/java/com/demcha/compose/document/api/PageMarginTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/PageMarginTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/PageMarginTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/PaginationEdgeCaseTest.java b/qa/src/test/java/com/demcha/compose/document/api/PaginationEdgeCaseTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/PaginationEdgeCaseTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/PaginationEdgeCaseTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/SessionChromeApiTest.java b/qa/src/test/java/com/demcha/compose/document/api/SessionChromeApiTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/SessionChromeApiTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/SessionChromeApiTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/SessionLayoutApiTest.java b/qa/src/test/java/com/demcha/compose/document/api/SessionLayoutApiTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/SessionLayoutApiTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/SessionLayoutApiTest.java
diff --git a/src/test/java/com/demcha/compose/document/api/TableSlicePaginationTest.java b/qa/src/test/java/com/demcha/compose/document/api/TableSlicePaginationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/api/TableSlicePaginationTest.java
rename to qa/src/test/java/com/demcha/compose/document/api/TableSlicePaginationTest.java
diff --git a/src/test/java/com/demcha/compose/document/architecture/ShapeContainerInvariantsTest.java b/qa/src/test/java/com/demcha/compose/document/architecture/ShapeContainerInvariantsTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/architecture/ShapeContainerInvariantsTest.java
rename to qa/src/test/java/com/demcha/compose/document/architecture/ShapeContainerInvariantsTest.java
diff --git a/src/test/java/com/demcha/compose/document/architecture/ShapeOutlineRenderCoverageTest.java b/qa/src/test/java/com/demcha/compose/document/architecture/ShapeOutlineRenderCoverageTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/architecture/ShapeOutlineRenderCoverageTest.java
rename to qa/src/test/java/com/demcha/compose/document/architecture/ShapeOutlineRenderCoverageTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/BackendProvidersTest.java b/qa/src/test/java/com/demcha/compose/document/backend/fixed/BackendProvidersTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/BackendProvidersTest.java
rename to qa/src/test/java/com/demcha/compose/document/backend/fixed/BackendProvidersTest.java
diff --git a/qa/src/test/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcaseLayoutSnapshotTest.java b/qa/src/test/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcaseLayoutSnapshotTest.java
index 6cfafc037..199496804 100644
--- a/qa/src/test/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcaseLayoutSnapshotTest.java
+++ b/qa/src/test/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcaseLayoutSnapshotTest.java
@@ -3,6 +3,7 @@
import com.demcha.compose.GraphCompose;
import com.demcha.compose.document.api.DocumentPageSize;
import com.demcha.compose.document.api.DocumentSession;
+import com.demcha.compose.document.showcase.FontShowcase;
import com.demcha.compose.testing.layout.LayoutSnapshotAssertions;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/demcha/compose/document/dsl/AddLinkShortcutTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/AddLinkShortcutTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/AddLinkShortcutTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/AddLinkShortcutTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/BlockAlignTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/BlockAlignTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/BlockAlignTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/BlockAlignTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/BlockSvgRenderTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/BlockSvgRenderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/BlockSvgRenderTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/BlockSvgRenderTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/DocumentBleedTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/DocumentBleedTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/DocumentBleedTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/DocumentBleedTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/EmojiRenderTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/EmojiRenderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/EmojiRenderTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/EmojiRenderTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/InlineHighlightRenderTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/InlineHighlightRenderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/InlineHighlightRenderTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/InlineHighlightRenderTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/InlineShapeRenderTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/InlineShapeRenderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/InlineShapeRenderTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/InlineShapeRenderTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/InlineSvgRenderTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/InlineSvgRenderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/InlineSvgRenderTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/InlineSvgRenderTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/LayerStackBuilderTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/LayerStackBuilderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/LayerStackBuilderTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/LayerStackBuilderTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/LineFillTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/LineFillTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/LineFillTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/LineFillTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/PathBuilderTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/PathBuilderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/PathBuilderTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/PathBuilderTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/RichTextTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/RichTextTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/RichTextTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/RichTextTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/RowBuilderTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/RowBuilderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/RowBuilderTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/RowBuilderTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/RowColumnsTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/RowColumnsTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/RowColumnsTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/RowColumnsTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/RowFlexTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/RowFlexTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/RowFlexTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/RowFlexTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/RowVerticalAlignTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/RowVerticalAlignTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/RowVerticalAlignTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/RowVerticalAlignTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/SectionKeepTogetherTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/SectionKeepTogetherTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/SectionKeepTogetherTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/SectionKeepTogetherTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/ShapeContainerBuilderTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/ShapeContainerBuilderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/ShapeContainerBuilderTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/ShapeContainerBuilderTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/TableBuilderColSpanTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/TableBuilderColSpanTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/TableBuilderColSpanTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/TableBuilderColSpanTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/TableBuilderRepeatHeaderTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/TableBuilderRepeatHeaderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/TableBuilderRepeatHeaderTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/TableBuilderRepeatHeaderTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/TableBuilderRowSpanTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/TableBuilderRowSpanTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/TableBuilderRowSpanTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/TableBuilderRowSpanTest.java
diff --git a/src/test/java/com/demcha/compose/document/dsl/TransformableLeafBuildersTest.java b/qa/src/test/java/com/demcha/compose/document/dsl/TransformableLeafBuildersTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/dsl/TransformableLeafBuildersTest.java
rename to qa/src/test/java/com/demcha/compose/document/dsl/TransformableLeafBuildersTest.java
diff --git a/src/test/java/com/demcha/compose/document/layout/LayoutCompilerInvariantsTest.java b/qa/src/test/java/com/demcha/compose/document/layout/LayoutCompilerInvariantsTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/layout/LayoutCompilerInvariantsTest.java
rename to qa/src/test/java/com/demcha/compose/document/layout/LayoutCompilerInvariantsTest.java
diff --git a/src/test/java/com/demcha/compose/document/snapshot/PageIndexTest.java b/qa/src/test/java/com/demcha/compose/document/snapshot/PageIndexTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/snapshot/PageIndexTest.java
rename to qa/src/test/java/com/demcha/compose/document/snapshot/PageIndexTest.java
diff --git a/src/test/java/com/demcha/compose/document/style/DocumentBordersTest.java b/qa/src/test/java/com/demcha/compose/document/style/DocumentBordersTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/style/DocumentBordersTest.java
rename to qa/src/test/java/com/demcha/compose/document/style/DocumentBordersTest.java
diff --git a/src/test/java/com/demcha/compose/document/style/DocumentTextAutoSizeTest.java b/qa/src/test/java/com/demcha/compose/document/style/DocumentTextAutoSizeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/style/DocumentTextAutoSizeTest.java
rename to qa/src/test/java/com/demcha/compose/document/style/DocumentTextAutoSizeTest.java
diff --git a/src/test/java/com/demcha/compose/document/svg/SvgIconTest.java b/qa/src/test/java/com/demcha/compose/document/svg/SvgIconTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/svg/SvgIconTest.java
rename to qa/src/test/java/com/demcha/compose/document/svg/SvgIconTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/core/widgets/TableWidgetTest.java b/qa/src/test/java/com/demcha/compose/document/templates/core/widgets/TableWidgetTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/core/widgets/TableWidgetTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/core/widgets/TableWidgetTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/coverletter/presets/CoverLetterV2SmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/coverletter/presets/CoverLetterV2SmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/coverletter/presets/CoverLetterV2SmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/coverletter/presets/CoverLetterV2SmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/BlueBannerSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/BlueBannerSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/BlueBannerSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/BlueBannerSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/BoxedSectionsSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/BoxedSectionsSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/BoxedSectionsSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/BoxedSectionsSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/ClassicSerifSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/ClassicSerifSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/ClassicSerifSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/ClassicSerifSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/CompactMonoSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/CompactMonoSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/CompactMonoSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/CompactMonoSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/EditorialBlueSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/EditorialBlueSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/EditorialBlueSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/EditorialBlueSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/EngineeringResumeSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/EngineeringResumeSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/EngineeringResumeSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/EngineeringResumeSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/ExecutiveSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/ExecutiveSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/ExecutiveSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/ExecutiveSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/MinimalUnderlinedSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/MinimalUnderlinedSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/MinimalUnderlinedSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/MinimalUnderlinedSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/MintEditorialSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/MintEditorialSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/MintEditorialSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/MintEditorialSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/ModernProfessionalSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/ModernProfessionalSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/ModernProfessionalSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/ModernProfessionalSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/MonogramSidebarSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/MonogramSidebarSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/MonogramSidebarSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/MonogramSidebarSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/NordicCleanSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/NordicCleanSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/NordicCleanSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/NordicCleanSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/PanelSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/PanelSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/PanelSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/PanelSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/SidebarPortraitSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/SidebarPortraitSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/SidebarPortraitSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/SidebarPortraitSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/presets/TimelineMinimalSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TimelineMinimalSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/presets/TimelineMinimalSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/presets/TimelineMinimalSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/cv/widgets/WidgetSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/widgets/WidgetSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/cv/widgets/WidgetSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/cv/widgets/WidgetSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/invoice/presets/ModernInvoiceSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ModernInvoiceSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/invoice/presets/ModernInvoiceSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/invoice/presets/ModernInvoiceSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/document/templates/proposal/presets/ModernProposalSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/proposal/presets/ModernProposalSmokeTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/templates/proposal/presets/ModernProposalSmokeTest.java
rename to qa/src/test/java/com/demcha/compose/document/templates/proposal/presets/ModernProposalSmokeTest.java
diff --git a/src/test/java/com/demcha/compose/engine/components/ComponentBuilderTest.java b/qa/src/test/java/com/demcha/compose/engine/components/ComponentBuilderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/components/ComponentBuilderTest.java
rename to qa/src/test/java/com/demcha/compose/engine/components/ComponentBuilderTest.java
diff --git a/src/test/java/com/demcha/compose/engine/components/content/ImageDataCacheTest.java b/qa/src/test/java/com/demcha/compose/engine/components/content/ImageDataCacheTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/components/content/ImageDataCacheTest.java
rename to qa/src/test/java/com/demcha/compose/engine/components/content/ImageDataCacheTest.java
diff --git a/src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessContractTest.java b/qa/src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessContractTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessContractTest.java
rename to qa/src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessContractTest.java
diff --git a/src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessLayoutSnapshotTest.java b/qa/src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessLayoutSnapshotTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessLayoutSnapshotTest.java
rename to qa/src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessLayoutSnapshotTest.java
diff --git a/src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessMutationInvalidationTest.java b/qa/src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessMutationInvalidationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessMutationInvalidationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/core/EngineComposerHarnessMutationInvalidationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/core/NewFeaturesIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/core/NewFeaturesIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/core/NewFeaturesIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/core/NewFeaturesIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/integration/BlockTextIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/BlockTextIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/integration/BlockTextIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/BlockTextIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/integration/CircleIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/CircleIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/integration/CircleIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/CircleIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/integration/ImageIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/ImageIntegrationTest.java
similarity index 98%
rename from src/test/java/com/demcha/compose/engine/integration/ImageIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/ImageIntegrationTest.java
index ee7254ea8..469067a4f 100644
--- a/src/test/java/com/demcha/compose/engine/integration/ImageIntegrationTest.java
+++ b/qa/src/test/java/com/demcha/compose/engine/integration/ImageIntegrationTest.java
@@ -1,4 +1,5 @@
package com.demcha.compose.engine.integration;
+import com.demcha.compose.qa.RepoPaths;
import com.demcha.compose.GraphCompose;
import com.demcha.compose.testsupport.engine.assembly.ComponentBuilder;
@@ -26,7 +27,7 @@
class ImageIntegrationTest {
- private static final Path COVER_ASSET = Path.of("assets", "GraphComposeCover.png");
+ private static final Path COVER_ASSET = RepoPaths.resolve("assets", "GraphComposeCover.png");
@Test
void shouldRenderSingleImageWithGuides() throws Exception {
diff --git a/src/test/java/com/demcha/compose/engine/integration/LargeContainerIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/LargeContainerIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/integration/LargeContainerIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/LargeContainerIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/integration/LineIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/LineIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/integration/LineIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/LineIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/integration/PageBreakerIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/PageBreakerIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/integration/PageBreakerIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/PageBreakerIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/integration/SingleLineTextIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/SingleLineTextIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/integration/SingleLineTextIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/SingleLineTextIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/integration/TableColSpanIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/TableColSpanIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/integration/TableColSpanIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/TableColSpanIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/integration/TableLayoutIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/TableLayoutIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/integration/TableLayoutIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/TableLayoutIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/integration/TableMultilineIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/TableMultilineIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/integration/TableMultilineIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/TableMultilineIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/integration/TableStylingIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/TableStylingIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/integration/TableStylingIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/TableStylingIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/integration/TextPaginationIntegrationTest.java b/qa/src/test/java/com/demcha/compose/engine/integration/TextPaginationIntegrationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/integration/TextPaginationIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/engine/integration/TextPaginationIntegrationTest.java
diff --git a/src/test/java/com/demcha/compose/engine/measurement/FontLibraryTextMeasurementSystemTest.java b/qa/src/test/java/com/demcha/compose/engine/measurement/FontLibraryTextMeasurementSystemTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/measurement/FontLibraryTextMeasurementSystemTest.java
rename to qa/src/test/java/com/demcha/compose/engine/measurement/FontLibraryTextMeasurementSystemTest.java
diff --git a/src/test/java/com/demcha/compose/engine/render/RenderHandlerRegistryTest.java b/qa/src/test/java/com/demcha/compose/engine/render/RenderHandlerRegistryTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/render/RenderHandlerRegistryTest.java
rename to qa/src/test/java/com/demcha/compose/engine/render/RenderHandlerRegistryTest.java
diff --git a/src/test/java/com/demcha/compose/engine/render/guides/GuidesRendererTest.java b/qa/src/test/java/com/demcha/compose/engine/render/guides/GuidesRendererTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/render/guides/GuidesRendererTest.java
rename to qa/src/test/java/com/demcha/compose/engine/render/guides/GuidesRendererTest.java
diff --git a/src/test/java/com/demcha/compose/font/FontLibraryIntegrationTest.java b/qa/src/test/java/com/demcha/compose/font/FontLibraryIntegrationTest.java
similarity index 97%
rename from src/test/java/com/demcha/compose/font/FontLibraryIntegrationTest.java
rename to qa/src/test/java/com/demcha/compose/font/FontLibraryIntegrationTest.java
index ae13c181a..345818d2c 100644
--- a/src/test/java/com/demcha/compose/font/FontLibraryIntegrationTest.java
+++ b/qa/src/test/java/com/demcha/compose/font/FontLibraryIntegrationTest.java
@@ -1,4 +1,5 @@
package com.demcha.compose.font;
+import com.demcha.compose.qa.RepoPaths;
import com.demcha.compose.GraphCompose;
import com.demcha.compose.document.backend.fixed.pdf.PdfFontLibraryFactory;
@@ -41,7 +42,7 @@ void shouldRegisterCustomFontFamilyFromFilePaths() throws Exception {
// The bundled fonts moved to the graph-compose-fonts module in v1.8.0.
// This test exercises file-based registration, so it reads the real TTFs
// from that module's resources (engine test cwd is the repo root).
- Path fontsRoot = Path.of("fonts", "src", "main", "resources", "fonts", "google", "lato");
+ Path fontsRoot = RepoPaths.resolve("fonts", "src", "main", "resources", "fonts", "google", "lato");
try (EngineComposerHarness composer = com.demcha.compose.testsupport.EngineComposerHarness.pdf()
.registerFontFamily(
diff --git a/qa/src/test/java/com/demcha/compose/qa/RepoPaths.java b/qa/src/test/java/com/demcha/compose/qa/RepoPaths.java
new file mode 100644
index 000000000..2fa009f7b
--- /dev/null
+++ b/qa/src/test/java/com/demcha/compose/qa/RepoPaths.java
@@ -0,0 +1,44 @@
+package com.demcha.compose.qa;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+/**
+ * Resolves repository-root-relative paths independently of which module's working
+ * directory the suite runs from. Several cross-module suites moved into qa read
+ * sibling-module sources or repo-root assets (e.g. {@code fonts/src/...},
+ * {@code examples/src/...}, {@code assets/...}); those paths resolved from the
+ * engine module's basedir (the repo root) but not from qa's, so they go through
+ * here instead.
+ */
+public final class RepoPaths {
+
+ private RepoPaths() {
+ }
+
+ /**
+ * The repository root, located by walking up from the working directory until a
+ * directory that contains {@code aggregator/pom.xml} is found.
+ *
+ * @return the absolute repository-root path
+ */
+ public static Path repoRoot() {
+ for (Path dir = Path.of("").toAbsolutePath(); dir != null; dir = dir.getParent()) {
+ if (Files.exists(dir.resolve("aggregator/pom.xml"))) {
+ return dir;
+ }
+ }
+ return Path.of("").toAbsolutePath();
+ }
+
+ /**
+ * Resolves a repository-root-relative path.
+ *
+ * @param first the first path segment (may itself contain separators)
+ * @param more additional path segments
+ * @return the resolved absolute path under the repository root
+ */
+ public static Path resolve(String first, String... more) {
+ return repoRoot().resolve(Path.of(first, more));
+ }
+}
diff --git a/src/test/java/com/demcha/documentation/DocumentationExamplesTest.java b/qa/src/test/java/com/demcha/documentation/DocumentationExamplesTest.java
similarity index 99%
rename from src/test/java/com/demcha/documentation/DocumentationExamplesTest.java
rename to qa/src/test/java/com/demcha/documentation/DocumentationExamplesTest.java
index c2676a6be..e95f58878 100644
--- a/src/test/java/com/demcha/documentation/DocumentationExamplesTest.java
+++ b/qa/src/test/java/com/demcha/documentation/DocumentationExamplesTest.java
@@ -1,4 +1,5 @@
package com.demcha.documentation;
+import com.demcha.compose.qa.RepoPaths;
import com.demcha.compose.GraphCompose;
import com.demcha.compose.document.api.DocumentPageSize;
@@ -178,7 +179,7 @@ void shouldRenderComposeFirstBuiltInTemplateExampleToFile() throws Exception {
@Test
void runnableExamplesShouldUseCanonicalDocumentTemplates() throws IOException {
- Path examplesRoot = Path.of("examples/src/main/java/com/demcha/examples").toAbsolutePath().normalize();
+ Path examplesRoot = RepoPaths.resolve("examples/src/main/java/com/demcha/examples").toAbsolutePath().normalize();
try (var paths = Files.walk(examplesRoot)) {
List violations = new TreeSet<>(paths
diff --git a/src/test/java/com/demcha/testing/visual/DevelopTest.java b/qa/src/test/java/com/demcha/testing/visual/DevelopTest.java
similarity index 100%
rename from src/test/java/com/demcha/testing/visual/DevelopTest.java
rename to qa/src/test/java/com/demcha/testing/visual/DevelopTest.java
diff --git a/src/test/java/com/demcha/testing/visual/HttpStreamingDemoTest.java b/qa/src/test/java/com/demcha/testing/visual/HttpStreamingDemoTest.java
similarity index 100%
rename from src/test/java/com/demcha/testing/visual/HttpStreamingDemoTest.java
rename to qa/src/test/java/com/demcha/testing/visual/HttpStreamingDemoTest.java
diff --git a/src/test/java/com/demcha/testing/visual/LayerStackRowDemoTest.java b/qa/src/test/java/com/demcha/testing/visual/LayerStackRowDemoTest.java
similarity index 100%
rename from src/test/java/com/demcha/testing/visual/LayerStackRowDemoTest.java
rename to qa/src/test/java/com/demcha/testing/visual/LayerStackRowDemoTest.java
diff --git a/src/test/java/com/demcha/testing/visual/PageCapacityToleranceDemoTest.java b/qa/src/test/java/com/demcha/testing/visual/PageCapacityToleranceDemoTest.java
similarity index 100%
rename from src/test/java/com/demcha/testing/visual/PageCapacityToleranceDemoTest.java
rename to qa/src/test/java/com/demcha/testing/visual/PageCapacityToleranceDemoTest.java
diff --git a/src/test/java/com/demcha/testing/visual/ShapeContainerTransformDemoTest.java b/qa/src/test/java/com/demcha/testing/visual/ShapeContainerTransformDemoTest.java
similarity index 100%
rename from src/test/java/com/demcha/testing/visual/ShapeContainerTransformDemoTest.java
rename to qa/src/test/java/com/demcha/testing/visual/ShapeContainerTransformDemoTest.java
diff --git a/src/test/java/com/demcha/testing/visual/ShapeContainerZIndexDemoTest.java b/qa/src/test/java/com/demcha/testing/visual/ShapeContainerZIndexDemoTest.java
similarity index 100%
rename from src/test/java/com/demcha/testing/visual/ShapeContainerZIndexDemoTest.java
rename to qa/src/test/java/com/demcha/testing/visual/ShapeContainerZIndexDemoTest.java
diff --git a/src/test/java/com/demcha/testing/visual/TableRepeatHeaderDemoTest.java b/qa/src/test/java/com/demcha/testing/visual/TableRepeatHeaderDemoTest.java
similarity index 100%
rename from src/test/java/com/demcha/testing/visual/TableRepeatHeaderDemoTest.java
rename to qa/src/test/java/com/demcha/testing/visual/TableRepeatHeaderDemoTest.java
diff --git a/src/test/java/com/demcha/testing/visual/TableZebraAndTotalsDemoTest.java b/qa/src/test/java/com/demcha/testing/visual/TableZebraAndTotalsDemoTest.java
similarity index 100%
rename from src/test/java/com/demcha/testing/visual/TableZebraAndTotalsDemoTest.java
rename to qa/src/test/java/com/demcha/testing/visual/TableZebraAndTotalsDemoTest.java
diff --git a/src/test/java/com/demcha/testing/visual/UnicodeFallbackDemoTest.java b/qa/src/test/java/com/demcha/testing/visual/UnicodeFallbackDemoTest.java
similarity index 100%
rename from src/test/java/com/demcha/testing/visual/UnicodeFallbackDemoTest.java
rename to qa/src/test/java/com/demcha/testing/visual/UnicodeFallbackDemoTest.java
diff --git a/render-docx/pom.xml b/render-docx/pom.xml
index 729825f50..7d20759a6 100644
--- a/render-docx/pom.xml
+++ b/render-docx/pom.xml
@@ -87,6 +87,14 @@
poi-ooxml
${poi.version}
+
+
+ io.github.demchaav
+ graph-compose-render-pdf
+ ${project.version}
+ test
+
diff --git a/render-pdf/pom.xml b/render-pdf/pom.xml
new file mode 100644
index 000000000..e6a2d2f53
--- /dev/null
+++ b/render-pdf/pom.xml
@@ -0,0 +1,322 @@
+
+
+ 4.0.0
+
+
+ io.github.demchaav
+ graph-compose-render-pdf
+ 2.0.0-SNAPSHOT
+
+ GraphCompose Render — PDF
+ The PDFBox-backed PDF render backend for GraphCompose.
+ https://github.com/DemchaAV/GraphCompose
+
+
+
+ MIT License
+ https://opensource.org/licenses/MIT
+ repo
+
+
+
+
+
+ DemchaAV
+ Artem Demchyshyn
+ demchishynartem@gmail.com
+ https://github.com/DemchaAV
+
+ Lead Developer
+ Architect
+
+ UTC 0
+
+
+
+
+ scm:git:https://github.com/DemchaAV/GraphCompose.git
+ scm:git:ssh://git@github.com/DemchaAV/GraphCompose.git
+ https://github.com/DemchaAV/GraphCompose/tree/main
+
+
+
+ UTF-8
+ 17
+
+ 1.18.46
+ 3.0.7
+ 3.5.4
+ 2.0.18
+ 6.1.1
+ 3.27.7
+ 5.23.0
+ 1.5.37
+ 1.0.0
+ 1.0.0
+
+ 3.15.0
+ 3.5.0
+ 3.5.6
+ 3.4.0
+ 3.12.0
+ 3.2.8
+ 0.11.0
+
+
+ true
+
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
+
+ io.github.demchaav
+ graph-compose-core
+ ${project.version}
+
+
+
+ org.apache.pdfbox
+ pdfbox
+ ${pdfbox.version}
+
+
+ commons-logging
+ commons-logging
+
+
+
+
+ org.slf4j
+ jcl-over-slf4j
+ ${slf4j.version}
+
+
+ com.google.zxing
+ core
+ ${zxing.version}
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ ${junit.bom.version}
+ test
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+ org.mockito
+ mockito-core
+ ${mockito.version}
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ ${mockito.version}
+ test
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+ test
+
+
+ io.github.demchaav
+ graph-compose-fonts
+ ${graphcompose.fonts.version}
+ test
+
+
+ io.github.demchaav
+ graph-compose-emoji
+ ${graphcompose.emoji.version}
+ test
+
+
+
+ io.github.demchaav
+ graph-compose-core
+ ${project.version}
+ test-jar
+ tests
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven.compiler.plugin.version}
+
+ ${maven.compiler.release}
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven.surefire.plugin.version}
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ ${maven.jar.plugin.version}
+
+
+ attach-test-jar
+
+ test-jar
+
+
+
+
+
+
+
+
+
+
+ release
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ ${maven.jar.plugin.version}
+
+
+ attach-test-jar
+ none
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ ${maven.source.plugin.version}
+
+
+ attach-sources
+ package
+
+ jar-no-fork
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ ${maven.javadoc.plugin.version}
+
+
+ attach-javadocs
+ package
+
+ jar
+
+
+ none
+ false
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ ${maven.gpg.plugin.version}
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+ ${gpg.skip}
+
+ --pinentry-mode
+ loopback
+
+
+
+
+
+
+ org.sonatype.central
+ central-publishing-maven-plugin
+ ${central.publishing.plugin.version}
+ true
+
+ central
+ false
+ validated
+
+
+
+
+
+
+
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfBookmarkOutlineWriter.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfBookmarkOutlineWriter.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfBookmarkOutlineWriter.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfBookmarkOutlineWriter.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfDocumentPostProcessor.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfDocumentPostProcessor.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfDocumentPostProcessor.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfDocumentPostProcessor.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackend.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackend.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackend.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackend.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackendProvider.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackendProvider.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackendProvider.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackendProvider.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontLibraryFactory.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontLibraryFactory.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontLibraryFactory.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontLibraryFactory.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontLoader.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontLoader.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontLoader.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontLoader.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontMetricsProvider.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontMetricsProvider.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontMetricsProvider.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontMetricsProvider.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFragmentRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFragmentRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFragmentRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFragmentRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfGuideLinesRenderer.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfGuideLinesRenderer.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfGuideLinesRenderer.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfGuideLinesRenderer.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfInternalLinkWriter.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfInternalLinkWriter.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfInternalLinkWriter.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfInternalLinkWriter.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfLinkAnnotationWriter.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfLinkAnnotationWriter.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfLinkAnnotationWriter.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfLinkAnnotationWriter.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfMeasurementResources.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfMeasurementResources.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfMeasurementResources.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfMeasurementResources.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfNodeLabelRenderer.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfNodeLabelRenderer.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfNodeLabelRenderer.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfNodeLabelRenderer.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfOptionsAdapter.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfOptionsAdapter.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfOptionsAdapter.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfOptionsAdapter.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfOutputOptionsTranslator.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfOutputOptionsTranslator.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfOutputOptionsTranslator.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfOutputOptionsTranslator.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfRenderEnvironment.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfRenderEnvironment.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfRenderEnvironment.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfRenderEnvironment.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfRenderSession.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfRenderSession.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfRenderSession.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfRenderSession.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfAlphaSupport.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfAlphaSupport.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfAlphaSupport.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfAlphaSupport.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfAnchorMarkerRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfAnchorMarkerRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfAnchorMarkerRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfAnchorMarkerRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfBarcodeFragmentRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfBarcodeFragmentRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfBarcodeFragmentRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfBarcodeFragmentRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfBookmarkMarkerRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfBookmarkMarkerRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfBookmarkMarkerRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfBookmarkMarkerRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfEllipseFragmentRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfEllipseFragmentRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfEllipseFragmentRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfEllipseFragmentRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfImageFragmentRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfImageFragmentRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfImageFragmentRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfImageFragmentRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfLineFragmentRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfLineFragmentRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfLineFragmentRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfLineFragmentRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfParagraphFragmentRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfParagraphFragmentRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfParagraphFragmentRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfParagraphFragmentRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPathFragmentRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPathFragmentRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPathFragmentRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPathFragmentRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPathPainter.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPathPainter.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPathPainter.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPathPainter.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPolygonFragmentRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPolygonFragmentRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPolygonFragmentRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPolygonFragmentRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShadingSupport.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShadingSupport.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShadingSupport.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShadingSupport.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeClipBeginRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeClipBeginRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeClipBeginRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeClipBeginRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeClipEndRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeClipEndRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeClipEndRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeClipEndRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeFragmentRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeFragmentRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeFragmentRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeFragmentRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeGeometry.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeGeometry.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeGeometry.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeGeometry.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTableRowFragmentRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTableRowFragmentRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTableRowFragmentRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTableRowFragmentRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTransformBeginRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTransformBeginRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTransformBeginRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTransformBeginRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTransformEndRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTransformEndRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTransformEndRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTransformEndRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/package-info.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/package-info.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/package-info.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/package-info.java
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/package-info.java b/render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/package-info.java
similarity index 100%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/package-info.java
rename to render-pdf/src/main/java/com/demcha/compose/document/backend/fixed/pdf/package-info.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/GlyphFallbackLogger.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/GlyphFallbackLogger.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/GlyphFallbackLogger.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/GlyphFallbackLogger.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/PdfFont.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/PdfFont.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/PdfFont.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/PdfFont.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfCanvas.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfCanvas.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfCanvas.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfCanvas.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfFileManagerSystem.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfFileManagerSystem.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfFileManagerSystem.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfFileManagerSystem.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfGuidesRenderer.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfGuidesRenderer.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfGuidesRenderer.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfGuidesRenderer.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfImageCache.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfImageCache.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfImageCache.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfImageCache.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfStream.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfStream.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfStream.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfStream.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBarcodeRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBarcodeRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBarcodeRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBarcodeRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBlockTextRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBlockTextRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBlockTextRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBlockTextRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfChunkedBlockTextRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfChunkedBlockTextRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfChunkedBlockTextRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfChunkedBlockTextRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfCircleRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfCircleRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfCircleRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfCircleRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfContainerRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfContainerRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfContainerRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfContainerRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfElementRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfElementRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfElementRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfElementRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfImageRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfImageRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfImageRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfImageRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLineRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLineRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLineRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLineRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfPageBreakRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfPageBreakRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfPageBreakRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfPageBreakRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfRectangleRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfRectangleRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfRectangleRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfRectangleRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTextRenderHandler.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTextRenderHandler.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTextRenderHandler.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTextRenderHandler.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/package-info.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/package-info.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/package-info.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/package-info.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/PdfBookmarkBuilder.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/PdfBookmarkBuilder.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/PdfBookmarkBuilder.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/PdfBookmarkBuilder.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/TableCellBox.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/TableCellBox.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/TableCellBox.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/TableCellBox.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/package-info.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/package-info.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/package-info.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/package-info.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/ecs/package-info.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/package-info.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/ecs/package-info.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/ecs/package-info.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfHeaderFooterRenderer.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfHeaderFooterRenderer.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfHeaderFooterRenderer.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfHeaderFooterRenderer.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfWatermarkRenderer.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfWatermarkRenderer.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfWatermarkRenderer.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfWatermarkRenderer.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/helpers/package-info.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/helpers/package-info.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/helpers/package-info.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/helpers/package-info.java
diff --git a/src/main/java/com/demcha/compose/engine/render/pdf/package-info.java b/render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/package-info.java
similarity index 100%
rename from src/main/java/com/demcha/compose/engine/render/pdf/package-info.java
rename to render-pdf/src/main/java/com/demcha/compose/engine/render/pdf/package-info.java
diff --git a/src/main/resources/META-INF/services/com.demcha.compose.document.backend.fixed.FixedLayoutBackendProvider b/render-pdf/src/main/resources/META-INF/services/com.demcha.compose.document.backend.fixed.FixedLayoutBackendProvider
similarity index 100%
rename from src/main/resources/META-INF/services/com.demcha.compose.document.backend.fixed.FixedLayoutBackendProvider
rename to render-pdf/src/main/resources/META-INF/services/com.demcha.compose.document.backend.fixed.FixedLayoutBackendProvider
diff --git a/src/main/resources/META-INF/services/com.demcha.compose.document.backend.fixed.FontMetricsProvider b/render-pdf/src/main/resources/META-INF/services/com.demcha.compose.document.backend.fixed.FontMetricsProvider
similarity index 100%
rename from src/main/resources/META-INF/services/com.demcha.compose.document.backend.fixed.FontMetricsProvider
rename to render-pdf/src/main/resources/META-INF/services/com.demcha.compose.document.backend.fixed.FontMetricsProvider
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/ContainerBookmarkTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/ContainerBookmarkTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/ContainerBookmarkTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/ContainerBookmarkTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcaseRenderTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcaseRenderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcaseRenderTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcaseRenderTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/InternalLinkAnchorTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/InternalLinkAnchorTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/InternalLinkAnchorTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/InternalLinkAnchorTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/MeasurementFontParityTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/MeasurementFontParityTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/MeasurementFontParityTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/MeasurementFontParityTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/MultiSectionDocumentTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/MultiSectionDocumentTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/MultiSectionDocumentTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/MultiSectionDocumentTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PageIndexAnchorAgreementTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PageIndexAnchorAgreementTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PageIndexAnchorAgreementTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PageIndexAnchorAgreementTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PageReferenceTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PageReferenceTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PageReferenceTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PageReferenceTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/ParagraphTextStateDedupTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/ParagraphTextStateDedupTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/ParagraphTextStateDedupTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/ParagraphTextStateDedupTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfBackendExtensibilityTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfBackendExtensibilityTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfBackendExtensibilityTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfBackendExtensibilityTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfDebugNodeLabelsTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfDebugNodeLabelsTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfDebugNodeLabelsTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfDebugNodeLabelsTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackendFeaturesTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackendFeaturesTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackendFeaturesTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackendFeaturesTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfLineStrokeStyleTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfLineStrokeStyleTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfLineStrokeStyleTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfLineStrokeStyleTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPageNumberingTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPageNumberingTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPageNumberingTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPageNumberingTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPathGradientTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPathGradientTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPathGradientTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPathGradientTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPathStrokeStyleTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPathStrokeStyleTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPathStrokeStyleTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPathStrokeStyleTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfShapeAlphaTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfShapeAlphaTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfShapeAlphaTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfShapeAlphaTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfShapeGradientTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfShapeGradientTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfShapeGradientTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfShapeGradientTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfWatermarkStateIsolationTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfWatermarkStateIsolationTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfWatermarkStateIsolationTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfWatermarkStateIsolationTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/TocTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/TocTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/TocTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/TocTest.java
diff --git a/src/test/java/com/demcha/compose/document/backend/fixed/pdf/ViewerPreferencesTest.java b/render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/ViewerPreferencesTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/document/backend/fixed/pdf/ViewerPreferencesTest.java
rename to render-pdf/src/test/java/com/demcha/compose/document/backend/fixed/pdf/ViewerPreferencesTest.java
diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/PdfFontSanitizerTest.java b/render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/PdfFontSanitizerTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/render/pdf/PdfFontSanitizerTest.java
rename to render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/PdfFontSanitizerTest.java
diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderInterfaceGuardTest.java b/render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderInterfaceGuardTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderInterfaceGuardTest.java
rename to render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderInterfaceGuardTest.java
diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSessionTest.java b/render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSessionTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSessionTest.java
rename to render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSessionTest.java
diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java b/render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java
rename to render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java
diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSImageCacheTest.java b/render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSImageCacheTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSImageCacheTest.java
rename to render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSImageCacheTest.java
diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandlerTest.java b/render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandlerTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandlerTest.java
rename to render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandlerTest.java
diff --git a/src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandlerTest.java b/render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandlerTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandlerTest.java
rename to render-pdf/src/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandlerTest.java
diff --git a/src/test/java/com/demcha/compose/testsupport/EngineComposerHarness.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/EngineComposerHarness.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/EngineComposerHarness.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/EngineComposerHarness.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/BarcodeBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/BarcodeBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/BarcodeBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/BarcodeBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/BarcodeBuilderTest.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/BarcodeBuilderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/BarcodeBuilderTest.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/BarcodeBuilderTest.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/BlockTextBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/BlockTextBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/BlockTextBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/BlockTextBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/BlockTextBuilderTest.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/BlockTextBuilderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/BlockTextBuilderTest.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/BlockTextBuilderTest.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/CircleBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/CircleBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/CircleBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/CircleBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/ComponentBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/ComponentBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/ComponentBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/ComponentBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/DisplayUrlTextBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/DisplayUrlTextBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/DisplayUrlTextBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/DisplayUrlTextBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/DividerBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/DividerBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/DividerBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/DividerBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/ElementBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/ElementBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/ElementBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/ElementBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/HContainerBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/HContainerBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/HContainerBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/HContainerBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilderTest.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilderTest.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilderTest.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/LineBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/LineBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/LineBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/LineBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/LineBuilderTest.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/LineBuilderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/LineBuilderTest.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/LineBuilderTest.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/LinkBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/LinkBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/LinkBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/LinkBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/ModuleBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/ModuleBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/ModuleBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/ModuleBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/PageBreakBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/PageBreakBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/PageBreakBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/PageBreakBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/RectangleBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/RectangleBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/RectangleBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/RectangleBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/RowBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/RowBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/RowBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/RowBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilderTest.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilderTest.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilderTest.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/TextBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/TextBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/TextBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/TextBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/TextBuilderTest.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/TextBuilderTest.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/TextBuilderTest.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/TextBuilderTest.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/VContainerBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/VContainerBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/VContainerBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/VContainerBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/Box.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/Box.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/container/Box.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/Box.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/BuildEntity.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/BuildEntity.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/container/BuildEntity.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/BuildEntity.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/ContainerBuilder.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/ContainerBuilder.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/container/ContainerBuilder.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/ContainerBuilder.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EmptyBox.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EmptyBox.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EmptyBox.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EmptyBox.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EntityBuilderBase.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EntityBuilderBase.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EntityBuilderBase.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EntityBuilderBase.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EntityCreator.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EntityCreator.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EntityCreator.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/EntityCreator.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/Layout.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/Layout.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/container/Layout.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/Layout.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/ShapeBuilderBase.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/ShapeBuilderBase.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/container/ShapeBuilderBase.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/ShapeBuilderBase.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/StackAxis.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/StackAxis.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/container/StackAxis.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/StackAxis.java
diff --git a/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/package-info.java b/render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/package-info.java
similarity index 100%
rename from src/test/java/com/demcha/compose/testsupport/engine/assembly/container/package-info.java
rename to render-pdf/src/test/java/com/demcha/compose/testsupport/engine/assembly/container/package-info.java
diff --git a/render-pptx/pom.xml b/render-pptx/pom.xml
index f181b8d83..7c0d5af1c 100644
--- a/render-pptx/pom.xml
+++ b/render-pptx/pom.xml
@@ -82,6 +82,14 @@
+
+
+ io.github.demchaav
+ graph-compose-render-pdf
+ ${project.version}
+ test
+
org.junit.jupiter
junit-jupiter
diff --git a/scripts/cut-release.ps1 b/scripts/cut-release.ps1
index cbab1b0a0..a76154ad3 100644
--- a/scripts/cut-release.ps1
+++ b/scripts/cut-release.ps1
@@ -304,7 +304,7 @@ function Run-ShowcaseSync {
$execProp = '"-Dexec.mainClass=com.demcha.examples.support.ShowcaseSync"'
# The examples module depends on these bumped SNAPSHOT siblings (not on
# Central); each must be installed before exec:java can resolve them.
- $exampleSnapshotSiblings = @('wrapper/pom.xml', 'render-docx/pom.xml', 'testing/pom.xml')
+ $exampleSnapshotSiblings = @('render-pdf/pom.xml', 'wrapper/pom.xml', 'render-docx/pom.xml', 'testing/pom.xml')
if ($DryRun) {
Write-Host " [DRY RUN] $mvnw -B -ntp -DskipTests install -pl ." -ForegroundColor Yellow
foreach ($modulePom in $exampleSnapshotSiblings) {
@@ -496,9 +496,10 @@ try {
Update-PomVersion (Join-Path $repoRoot 'aggregator/pom.xml') $Version
Update-PomVersion (Join-Path $repoRoot 'examples/pom.xml') $Version
Update-PomVersion (Join-Path $repoRoot 'benchmarks/pom.xml') $Version
- # render-docx / render-pptx track the engine line (lockstep): each
- # bumps here and its graph-compose-core dep is ${project.version} (follows
- # automatically).
+ # render-pdf / render-docx / render-pptx track the engine line (lockstep): each
+ # bumps here and its graph-compose-core dep is ${project.version}
+ # (follows automatically).
+ Update-PomVersion (Join-Path $repoRoot 'render-pdf/pom.xml') $Version
Update-PomVersion (Join-Path $repoRoot 'render-docx/pom.xml') $Version
Update-PomVersion (Join-Path $repoRoot 'render-pptx/pom.xml') $Version
# graph-compose-testing tracks the engine line (lockstep): its
@@ -577,6 +578,7 @@ try {
'pom.xml',
'aggregator/pom.xml',
'bundle/pom.xml',
+ 'render-pdf/pom.xml',
'render-docx/pom.xml',
'render-pptx/pom.xml',
'testing/pom.xml',
diff --git a/src/main/java/com/demcha/compose/GraphCompose.java b/src/main/java/com/demcha/compose/GraphCompose.java
index d27bce5b1..ce617e477 100644
--- a/src/main/java/com/demcha/compose/GraphCompose.java
+++ b/src/main/java/com/demcha/compose/GraphCompose.java
@@ -2,7 +2,7 @@
import com.demcha.compose.font.FontFamilyDefinition;
import com.demcha.compose.font.FontName;
-import com.demcha.compose.document.backend.fixed.pdf.FontShowcase;
+import com.demcha.compose.document.showcase.FontShowcase;
import com.demcha.compose.font.DefaultFonts;
import com.demcha.compose.document.api.DocumentPageSize;
import com.demcha.compose.document.api.DocumentSession;
@@ -134,16 +134,26 @@ public static List availableFonts() {
* Renders a PDF showcase of all bundled font families to disk.
*
* This is primarily a discovery helper for developers choosing a family for
- * {@code TextStyle}, templates, or themes.
+ * {@code TextStyle}, templates, or themes. Because it renders a PDF, a render
+ * backend must be on the classpath (the {@code graph-compose-render-pdf}
+ * artifact, brought transitively by {@code graph-compose}); on a bare
+ * {@code graph-compose-core} classpath it throws {@code MissingBackendException}.
+ *
+ * @param outputFile the file to write the preview PDF to
+ * @throws Exception if rendering fails, or {@code MissingBackendException} if no
+ * render backend is on the classpath
*/
public static void renderAvailableFontsPreview(Path outputFile) throws Exception {
FontShowcase.renderAvailableFontsPreview(outputFile);
}
/**
- * Renders a PDF showcase of all bundled font families in memory.
+ * Renders a PDF showcase of all bundled font families in memory. Requires a
+ * render backend on the classpath (see {@link #renderAvailableFontsPreview(Path)}).
*
* @return the generated preview document as PDF bytes
+ * @throws Exception if rendering fails, or {@code MissingBackendException} if no
+ * render backend is on the classpath
*/
public static byte[] renderAvailableFontsPreview() throws Exception {
return FontShowcase.renderAvailableFontsPreview();
diff --git a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcase.java b/src/main/java/com/demcha/compose/document/showcase/FontShowcase.java
similarity index 99%
rename from src/main/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcase.java
rename to src/main/java/com/demcha/compose/document/showcase/FontShowcase.java
index 8164ad9ad..fb8107916 100644
--- a/src/main/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcase.java
+++ b/src/main/java/com/demcha/compose/document/showcase/FontShowcase.java
@@ -1,4 +1,4 @@
-package com.demcha.compose.document.backend.fixed.pdf;
+package com.demcha.compose.document.showcase;
import com.demcha.compose.GraphCompose;
import com.demcha.compose.document.api.DocumentPageSize;
diff --git a/src/main/java/com/demcha/compose/document/showcase/package-info.java b/src/main/java/com/demcha/compose/document/showcase/package-info.java
new file mode 100644
index 000000000..609c89b9a
--- /dev/null
+++ b/src/main/java/com/demcha/compose/document/showcase/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * Document-building discovery helpers. {@link com.demcha.compose.document.showcase.FontShowcase}
+ * renders a preview of the bundled font families by authoring a document through
+ * the canonical DSL, so it lives in the document layer (it needs a render backend
+ * to produce output) rather than the backend-neutral {@code com.demcha.compose.font}
+ * catalog. Reached through {@code GraphCompose.renderAvailableFontsPreview(...)}.
+ */
+package com.demcha.compose.document.showcase;
diff --git a/src/test/java/com/demcha/compose/document/api/MissingBackendContractTest.java b/src/test/java/com/demcha/compose/document/api/MissingBackendContractTest.java
new file mode 100644
index 000000000..824ed30e1
--- /dev/null
+++ b/src/test/java/com/demcha/compose/document/api/MissingBackendContractTest.java
@@ -0,0 +1,34 @@
+package com.demcha.compose.document.api;
+
+import com.demcha.compose.GraphCompose;
+import com.demcha.compose.document.exceptions.MissingBackendException;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+/**
+ * The lean {@code graph-compose-core} carries no render backend. Any operation that
+ * needs one — measuring text to lay out, rendering, or rasterizing a document — must
+ * fail with a {@link MissingBackendException} that names the artifact to add
+ * ({@code graph-compose-render-pdf}). This is the defining contract of the lean core.
+ *
+ * The test lives in core's own backend-free test scope on purpose: a
+ * backend on the classpath (as in the qa module) would resolve the provider and hide
+ * a regression here.
+ */
+class MissingBackendContractTest {
+
+ @Test
+ void renderingWithoutABackendThrowsMissingBackendExceptionNamingRenderPdf() {
+ assertThatThrownBy(() -> {
+ try (DocumentSession session = GraphCompose.document()
+ .pageSize(200, 200)
+ .create()) {
+ session.pageFlow(page -> page.module("m", module -> module.paragraph("hi")));
+ session.toPdfBytes();
+ }
+ })
+ .isInstanceOf(MissingBackendException.class)
+ .hasMessageContaining("graph-compose-render-pdf");
+ }
+}
diff --git a/src/test/java/com/demcha/documentation/PdfBackendIsolationGuardTest.java b/src/test/java/com/demcha/documentation/PdfBackendIsolationGuardTest.java
index fca159fb5..8c89f1681 100644
--- a/src/test/java/com/demcha/documentation/PdfBackendIsolationGuardTest.java
+++ b/src/test/java/com/demcha/documentation/PdfBackendIsolationGuardTest.java
@@ -46,9 +46,10 @@ class PdfBackendIsolationGuardTest {
PROJECT_ROOT.resolve("src/main/java/com/demcha/compose/document/templates"),
PROJECT_ROOT.resolve("src/main/java/com/demcha/compose/document/backend/fixed"),
// The public font catalog names logical fonts; it never loads them.
- // PDFBox loading lives in the pdf backend factory, so compose.font
- // must stay PDFBox-free (FontShowcase, which renders a preview PDF,
- // lives under backend/fixed/pdf and is exempted like the rest of it).
+ // PDFBox loading lives in the graph-compose-render-pdf backend, so
+ // compose.font must stay PDFBox-free. (FontShowcase, which authors a
+ // preview document, is a document-layer helper under
+ // document.showcase, not part of the font catalog.)
PROJECT_ROOT.resolve("src/main/java/com/demcha/compose/font"));
@Test
@@ -65,10 +66,9 @@ void pdfboxShouldStayOutOfCanonicalAndNonPdfBackendContracts() throws IOExceptio
}
assertThat(violations)
- .describedAs("PDFBox dependencies must stay behind document.backend.fixed.pdf.* "
- + "or under engine.render.pdf.* (shared PDFBox primitives plus the legacy "
- + "ECS renderer in engine.render.pdf.ecs.*). Canonical API and layout contracts "
- + "should use document-level value objects such as DocumentPageSize.")
+ .describedAs("PDFBox now lives entirely in the graph-compose-render-pdf module; the "
+ + "core must stay PDFBox-free. Canonical API and layout contracts should use "
+ + "document-level value objects such as DocumentPageSize, not PDFBox types.")
.isEmpty();
}
diff --git a/src/test/java/com/demcha/documentation/VersionConsistencyGuardTest.java b/src/test/java/com/demcha/documentation/VersionConsistencyGuardTest.java
index 6ae30db87..8c6e6908e 100644
--- a/src/test/java/com/demcha/documentation/VersionConsistencyGuardTest.java
+++ b/src/test/java/com/demcha/documentation/VersionConsistencyGuardTest.java
@@ -67,6 +67,9 @@ void everyModuleResolvesToTheRootProjectVersion() throws Exception {
assertThat(effectiveVersion(PROJECT_ROOT.resolve("render-pptx/pom.xml")))
.describedAs("render-pptx (graph-compose-render-pptx) tracks the engine line and must equal the root version (%s)", root)
.isEqualTo(root);
+ assertThat(effectiveVersion(PROJECT_ROOT.resolve("render-pdf/pom.xml")))
+ .describedAs("render-pdf (graph-compose-render-pdf) tracks the engine line and must equal the root version (%s)", root)
+ .isEqualTo(root);
assertThat(effectiveVersion(PROJECT_ROOT.resolve("testing/pom.xml")))
.describedAs("testing (graph-compose-testing) tracks the engine line and must equal the root version (%s)", root)
.isEqualTo(root);
diff --git a/wrapper/pom.xml b/wrapper/pom.xml
index 4002d888d..efb825510 100644
--- a/wrapper/pom.xml
+++ b/wrapper/pom.xml
@@ -72,13 +72,19 @@
-
+
io.github.demchaav
graph-compose-core
${project.version}
+
+ io.github.demchaav
+ graph-compose-render-pdf
+ ${project.version}
+