From cc42bfe52bbd4d3a1c447ab572d6170d88f4509e Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Sun, 5 Jul 2026 23:19:39 +0100 Subject: [PATCH 1/2] build: extract the PDF backend into graph-compose-render-pdf 2.0's lean-core goal: a consumer that does not render PDF should not pull PDFBox. Move the entire PDF backend out of the engine into a new graph-compose-render-pdf module, leaving graph-compose-core with zero org.apache.pdfbox. The graph-compose wrapper depends on render-pdf, so a bare graph-compose still renders PDF unchanged. - New graph-compose-render-pdf: the fixed-layout PDF backend (document.backend.fixed.pdf.**) and the engine.render.pdf.** render tree (the ecs system, helpers, PdfFont), plus the two ServiceLoader provider implementations and their META-INF/services files. PDFBox, zxing (barcodes), and the commons-logging->SLF4J bridge leave the root pom and live here. - graph-compose-core keeps the DocumentSession API, the ServiceLoader seam (FixedLayoutBackendProvider / FontMetricsProvider), and the PDFBox-free pdf.options value classes. It throws MissingBackendException (naming render-pdf) if asked to render, rasterize, or measure without a backend on the classpath. - FontShowcase, a DSL-based preview builder, moves to com.demcha.compose.document.showcase (it cannot live in the backend-neutral font catalog); the GraphCompose.renderAvailableFontsPreview() facade stays. - The wrapper depends on render-pdf; render-docx / render-pptx add it at test scope (their export lays out through the moved metrics provider); benchmarks add it at compile scope; examples get it transitively via the wrapper. - Test relocation: the render harness and the backend's own tests move to render-pdf/src/test (which builds a tests-classifier jar); the core-functionality render suites move to graph-compose-qa (which consumes that jar and gains javafx for the dev-preview tool). MissingBackendContractTest guards the lean-core contract in core's backend-free scope. - Wired into the aggregator, the CI build gate, publish, cut-release, and VersionConsistencyGuardTest. --- .github/workflows/ci.yml | 12 +- .github/workflows/publish.yml | 14 +- .gitignore | 1 + CHANGELOG.md | 17 +- aggregator/pom.xml | 1 + benchmarks/pom.xml | 7 + pom.xml | 35 -- qa/pom.xml | 31 ++ .../devtool/DevToolPreviewProvider.java | 0 .../compose/devtool/GraphComposeDevTool.java | 0 .../devtool/GraphComposeDevToolLauncher.java | 0 .../compose/devtool/PdfRenderBridge.java | 0 .../compose/devtool/PreviewCompilerTest.java | 0 .../com/demcha/compose/document/Test.java | 0 .../DocumentSessionAvailableHeightTest.java | 0 ...umentSessionConveniencePdfOptionsTest.java | 0 .../api/DocumentSessionLifecycleTest.java | 0 .../DocumentSessionParallelStressTest.java | 0 ...DocumentSessionRenderingExceptionTest.java | 0 .../document/api/DocumentSessionTest.java | 0 .../api/LayerStackRowCompositionTest.java | 0 .../document/api/NegativeMarginTest.java | 0 .../document/api/PageBackgroundTest.java | 0 .../compose/document/api/PageMarginTest.java | 0 .../document/api/PaginationEdgeCaseTest.java | 0 .../document/api/SessionChromeApiTest.java | 0 .../document/api/SessionLayoutApiTest.java | 0 .../api/TableSlicePaginationTest.java | 0 .../ShapeContainerInvariantsTest.java | 0 .../ShapeOutlineRenderCoverageTest.java | 0 .../backend/fixed/BackendProvidersTest.java | 0 .../pdf/FontShowcaseLayoutSnapshotTest.java | 1 + .../document/dsl/AddLinkShortcutTest.java | 0 .../compose/document/dsl/BlockAlignTest.java | 0 .../document/dsl/BlockSvgRenderTest.java | 0 .../document/dsl/DocumentBleedTest.java | 0 .../compose/document/dsl/EmojiRenderTest.java | 0 .../dsl/InlineHighlightRenderTest.java | 0 .../document/dsl/InlineShapeRenderTest.java | 0 .../document/dsl/InlineSvgRenderTest.java | 0 .../document/dsl/LayerStackBuilderTest.java | 0 .../compose/document/dsl/LineFillTest.java | 0 .../compose/document/dsl/PathBuilderTest.java | 0 .../compose/document/dsl/RichTextTest.java | 0 .../compose/document/dsl/RowBuilderTest.java | 0 .../compose/document/dsl/RowColumnsTest.java | 0 .../compose/document/dsl/RowFlexTest.java | 0 .../document/dsl/RowVerticalAlignTest.java | 0 .../document/dsl/SectionKeepTogetherTest.java | 0 .../dsl/ShapeContainerBuilderTest.java | 0 .../document/dsl/TableBuilderColSpanTest.java | 0 .../dsl/TableBuilderRepeatHeaderTest.java | 0 .../document/dsl/TableBuilderRowSpanTest.java | 0 .../dsl/TransformableLeafBuildersTest.java | 0 .../layout/LayoutCompilerInvariantsTest.java | 0 .../document/snapshot/PageIndexTest.java | 0 .../document/style/DocumentBordersTest.java | 0 .../style/DocumentTextAutoSizeTest.java | 0 .../compose/document/svg/SvgIconTest.java | 0 .../core/widgets/TableWidgetTest.java | 0 .../presets/CoverLetterV2SmokeTest.java | 0 .../cv/presets/BlueBannerSmokeTest.java | 0 .../cv/presets/BoxedSectionsSmokeTest.java | 0 .../cv/presets/ClassicSerifSmokeTest.java | 0 .../cv/presets/CompactMonoSmokeTest.java | 0 .../cv/presets/EditorialBlueSmokeTest.java | 0 .../presets/EngineeringResumeSmokeTest.java | 0 .../cv/presets/ExecutiveSmokeTest.java | 0 .../presets/MinimalUnderlinedSmokeTest.java | 0 .../cv/presets/MintEditorialSmokeTest.java | 0 .../presets/ModernProfessionalSmokeTest.java | 0 .../cv/presets/MonogramSidebarSmokeTest.java | 0 .../cv/presets/NordicCleanSmokeTest.java | 0 .../templates/cv/presets/PanelSmokeTest.java | 0 .../cv/presets/SidebarPortraitSmokeTest.java | 0 .../cv/presets/TimelineMinimalSmokeTest.java | 0 .../templates/cv/widgets/WidgetSmokeTest.java | 0 .../presets/ModernInvoiceSmokeTest.java | 0 .../presets/ModernProposalSmokeTest.java | 0 .../components/ComponentBuilderTest.java | 0 .../content/ImageDataCacheTest.java | 0 .../EngineComposerHarnessContractTest.java | 0 ...gineComposerHarnessLayoutSnapshotTest.java | 0 ...mposerHarnessMutationInvalidationTest.java | 0 .../core/NewFeaturesIntegrationTest.java | 0 .../integration/BlockTextIntegrationTest.java | 0 .../integration/CircleIntegrationTest.java | 0 .../integration/ImageIntegrationTest.java | 3 +- .../LargeContainerIntegrationTest.java | 0 .../integration/LineIntegrationTest.java | 0 .../PageBreakerIntegrationTest.java | 0 .../SingleLineTextIntegrationTest.java | 0 .../TableColSpanIntegrationTest.java | 0 .../TableLayoutIntegrationTest.java | 0 .../TableMultilineIntegrationTest.java | 0 .../TableStylingIntegrationTest.java | 0 .../TextPaginationIntegrationTest.java | 0 .../FontLibraryTextMeasurementSystemTest.java | 0 .../render/RenderHandlerRegistryTest.java | 0 .../render/guides/GuidesRendererTest.java | 0 .../font/FontLibraryIntegrationTest.java | 3 +- .../java/com/demcha/compose/qa/RepoPaths.java | 44 +++ .../DocumentationExamplesTest.java | 3 +- .../demcha/testing/visual/DevelopTest.java | 0 .../testing/visual/HttpStreamingDemoTest.java | 0 .../testing/visual/LayerStackRowDemoTest.java | 0 .../visual/PageCapacityToleranceDemoTest.java | 0 .../ShapeContainerTransformDemoTest.java | 0 .../visual/ShapeContainerZIndexDemoTest.java | 0 .../visual/TableRepeatHeaderDemoTest.java | 0 .../visual/TableZebraAndTotalsDemoTest.java | 0 .../visual/UnicodeFallbackDemoTest.java | 0 render-docx/pom.xml | 8 + render-pdf/pom.xml | 322 ++++++++++++++++++ .../fixed/pdf/PdfBookmarkOutlineWriter.java | 0 .../fixed/pdf/PdfDocumentPostProcessor.java | 0 .../fixed/pdf/PdfFixedLayoutBackend.java | 0 .../pdf/PdfFixedLayoutBackendProvider.java | 0 .../fixed/pdf/PdfFontLibraryFactory.java | 0 .../backend/fixed/pdf/PdfFontLoader.java | 0 .../fixed/pdf/PdfFontMetricsProvider.java | 0 .../fixed/pdf/PdfFragmentRenderHandler.java | 0 .../fixed/pdf/PdfGuideLinesRenderer.java | 0 .../fixed/pdf/PdfInternalLinkWriter.java | 0 .../fixed/pdf/PdfLinkAnnotationWriter.java | 0 .../fixed/pdf/PdfMeasurementResources.java | 0 .../fixed/pdf/PdfNodeLabelRenderer.java | 0 .../backend/fixed/pdf/PdfOptionsAdapter.java | 0 .../fixed/pdf/PdfOutputOptionsTranslator.java | 0 .../fixed/pdf/PdfRenderEnvironment.java | 0 .../backend/fixed/pdf/PdfRenderSession.java | 0 .../fixed/pdf/handlers/PdfAlphaSupport.java | 0 .../PdfAnchorMarkerRenderHandler.java | 0 .../PdfBarcodeFragmentRenderHandler.java | 0 .../PdfBookmarkMarkerRenderHandler.java | 0 .../PdfEllipseFragmentRenderHandler.java | 0 .../PdfImageFragmentRenderHandler.java | 0 .../PdfLineFragmentRenderHandler.java | 0 .../PdfParagraphFragmentRenderHandler.java | 0 .../PdfPathFragmentRenderHandler.java | 0 .../fixed/pdf/handlers/PdfPathPainter.java | 0 .../PdfPolygonFragmentRenderHandler.java | 0 .../fixed/pdf/handlers/PdfShadingSupport.java | 0 .../PdfShapeClipBeginRenderHandler.java | 0 .../PdfShapeClipEndRenderHandler.java | 0 .../PdfShapeFragmentRenderHandler.java | 0 .../fixed/pdf/handlers/PdfShapeGeometry.java | 0 .../PdfTableRowFragmentRenderHandler.java | 0 .../PdfTransformBeginRenderHandler.java | 0 .../PdfTransformEndRenderHandler.java | 0 .../fixed/pdf/handlers/package-info.java | 0 .../backend/fixed/pdf/package-info.java | 0 .../render/pdf/GlyphFallbackLogger.java | 0 .../compose/engine/render/pdf/PdfFont.java | 0 .../engine/render/pdf/ecs/PdfCanvas.java | 0 .../render/pdf/ecs/PdfFileManagerSystem.java | 0 .../render/pdf/ecs/PdfGuidesRenderer.java | 0 .../engine/render/pdf/ecs/PdfImageCache.java | 0 .../render/pdf/ecs/PdfRenderSession.java | 0 .../render/pdf/ecs/PdfRenderingSystemECS.java | 0 .../engine/render/pdf/ecs/PdfStream.java | 0 .../ecs/handlers/PdfBarcodeRenderHandler.java | 0 .../handlers/PdfBlockTextRenderHandler.java | 0 .../PdfChunkedBlockTextRenderHandler.java | 0 .../ecs/handlers/PdfCircleRenderHandler.java | 0 .../handlers/PdfContainerRenderHandler.java | 0 .../ecs/handlers/PdfElementRenderHandler.java | 0 .../ecs/handlers/PdfImageRenderHandler.java | 0 .../ecs/handlers/PdfLineRenderHandler.java | 0 .../ecs/handlers/PdfLinkRenderHandler.java | 0 .../handlers/PdfPageBreakRenderHandler.java | 0 .../handlers/PdfRectangleRenderHandler.java | 0 .../handlers/PdfTableRowRenderHandler.java | 0 .../ecs/handlers/PdfTextRenderHandler.java | 0 .../render/pdf/ecs/handlers/package-info.java | 0 .../pdf/ecs/helpers/PdfBookmarkBuilder.java | 0 .../render/pdf/ecs/helpers/TableCellBox.java | 0 .../render/pdf/ecs/helpers/package-info.java | 0 .../engine/render/pdf/ecs/package-info.java | 0 .../pdf/helpers/PdfHeaderFooterRenderer.java | 0 .../pdf/helpers/PdfWatermarkRenderer.java | 0 .../render/pdf/helpers/package-info.java | 0 .../engine/render/pdf/package-info.java | 0 ...t.backend.fixed.FixedLayoutBackendProvider | 0 ...document.backend.fixed.FontMetricsProvider | 0 .../fixed/pdf/ContainerBookmarkTest.java | 0 .../fixed/pdf/FontShowcaseRenderTest.java | 0 .../fixed/pdf/InternalLinkAnchorTest.java | 0 .../fixed/pdf/MeasurementFontParityTest.java | 0 .../fixed/pdf/MultiSectionDocumentTest.java | 0 .../pdf/PageIndexAnchorAgreementTest.java | 0 .../backend/fixed/pdf/PageReferenceTest.java | 0 .../pdf/ParagraphTextStateDedupTest.java | 0 .../pdf/PdfBackendExtensibilityTest.java | 0 .../fixed/pdf/PdfDebugNodeLabelsTest.java | 0 .../PdfFixedLayoutBackendFeaturesTest.java | 0 .../fixed/pdf/PdfLineStrokeStyleTest.java | 0 .../fixed/pdf/PdfPageNumberingTest.java | 0 .../fixed/pdf/PdfPathGradientTest.java | 0 .../fixed/pdf/PdfPathStrokeStyleTest.java | 0 .../backend/fixed/pdf/PdfShapeAlphaTest.java | 0 .../fixed/pdf/PdfShapeGradientTest.java | 0 .../pdf/PdfWatermarkStateIsolationTest.java | 0 .../document/backend/fixed/pdf/TocTest.java | 0 .../fixed/pdf/ViewerPreferencesTest.java | 0 .../render/pdf/PdfFontSanitizerTest.java | 0 .../pdf/PdfRenderInterfaceGuardTest.java | 0 .../render/pdf/ecs/PdfRenderSessionTest.java | 0 .../PdfRenderingSystemECSDispatchTest.java | 0 .../PdfRenderingSystemECSImageCacheTest.java | 0 .../handlers/PdfLinkRenderHandlerTest.java | 0 .../PdfTableRowRenderHandlerTest.java | 0 .../testsupport/EngineComposerHarness.java | 0 .../engine/assembly/BarcodeBuilder.java | 0 .../engine/assembly/BarcodeBuilderTest.java | 0 .../engine/assembly/BlockTextBuilder.java | 0 .../engine/assembly/BlockTextBuilderTest.java | 0 .../engine/assembly/CircleBuilder.java | 0 .../engine/assembly/ComponentBuilder.java | 0 .../assembly/DisplayUrlTextBuilder.java | 0 .../engine/assembly/DividerBuilder.java | 0 .../engine/assembly/ElementBuilder.java | 0 .../engine/assembly/HContainerBuilder.java | 0 .../engine/assembly/ImageBuilder.java | 0 .../engine/assembly/ImageBuilderTest.java | 0 .../engine/assembly/LineBuilder.java | 0 .../engine/assembly/LineBuilderTest.java | 0 .../engine/assembly/LinkBuilder.java | 0 .../engine/assembly/ModuleBuilder.java | 0 .../engine/assembly/PageBreakBuilder.java | 0 .../engine/assembly/RectangleBuilder.java | 0 .../engine/assembly/RowBuilder.java | 0 .../engine/assembly/TableBuilder.java | 0 .../engine/assembly/TableBuilderTest.java | 0 .../engine/assembly/TextBuilder.java | 0 .../engine/assembly/TextBuilderTest.java | 0 .../engine/assembly/VContainerBuilder.java | 0 .../engine/assembly/container/Box.java | 0 .../assembly/container/BuildEntity.java | 0 .../assembly/container/ContainerBuilder.java | 0 .../engine/assembly/container/EmptyBox.java | 0 .../assembly/container/EntityBuilderBase.java | 0 .../assembly/container/EntityCreator.java | 0 .../engine/assembly/container/Layout.java | 0 .../assembly/container/ShapeBuilderBase.java | 0 .../engine/assembly/container/StackAxis.java | 0 .../assembly/container/package-info.java | 0 render-pptx/pom.xml | 8 + scripts/cut-release.ps1 | 10 +- .../java/com/demcha/compose/GraphCompose.java | 16 +- .../fixed/pdf => showcase}/FontShowcase.java | 2 +- .../document/showcase/package-info.java | 8 + .../api/MissingBackendContractTest.java | 34 ++ .../PdfBackendIsolationGuardTest.java | 14 +- .../VersionConsistencyGuardTest.java | 3 + wrapper/pom.xml | 10 +- 256 files changed, 543 insertions(+), 64 deletions(-) rename {src => qa/src}/test/java/com/demcha/compose/devtool/DevToolPreviewProvider.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/devtool/GraphComposeDevTool.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/devtool/GraphComposeDevToolLauncher.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/devtool/PdfRenderBridge.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/devtool/PreviewCompilerTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/Test.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/DocumentSessionAvailableHeightTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/DocumentSessionConveniencePdfOptionsTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/DocumentSessionLifecycleTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/DocumentSessionParallelStressTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/DocumentSessionRenderingExceptionTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/DocumentSessionTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/LayerStackRowCompositionTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/NegativeMarginTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/PageBackgroundTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/PageMarginTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/PaginationEdgeCaseTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/SessionChromeApiTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/SessionLayoutApiTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/api/TableSlicePaginationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/architecture/ShapeContainerInvariantsTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/architecture/ShapeOutlineRenderCoverageTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/backend/fixed/BackendProvidersTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/AddLinkShortcutTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/BlockAlignTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/BlockSvgRenderTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/DocumentBleedTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/EmojiRenderTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/InlineHighlightRenderTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/InlineShapeRenderTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/InlineSvgRenderTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/LayerStackBuilderTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/LineFillTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/PathBuilderTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/RichTextTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/RowBuilderTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/RowColumnsTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/RowFlexTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/RowVerticalAlignTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/SectionKeepTogetherTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/ShapeContainerBuilderTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/TableBuilderColSpanTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/TableBuilderRepeatHeaderTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/TableBuilderRowSpanTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/dsl/TransformableLeafBuildersTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/layout/LayoutCompilerInvariantsTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/snapshot/PageIndexTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/style/DocumentBordersTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/style/DocumentTextAutoSizeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/svg/SvgIconTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/core/widgets/TableWidgetTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/coverletter/presets/CoverLetterV2SmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/BlueBannerSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/BoxedSectionsSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/ClassicSerifSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/CompactMonoSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/EditorialBlueSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/EngineeringResumeSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/ExecutiveSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/MinimalUnderlinedSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/MintEditorialSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/ModernProfessionalSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/MonogramSidebarSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/NordicCleanSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/PanelSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/SidebarPortraitSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/presets/TimelineMinimalSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/cv/widgets/WidgetSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/invoice/presets/ModernInvoiceSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/document/templates/proposal/presets/ModernProposalSmokeTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/components/ComponentBuilderTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/components/content/ImageDataCacheTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/core/EngineComposerHarnessContractTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/core/EngineComposerHarnessLayoutSnapshotTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/core/EngineComposerHarnessMutationInvalidationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/core/NewFeaturesIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/BlockTextIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/CircleIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/ImageIntegrationTest.java (98%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/LargeContainerIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/LineIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/PageBreakerIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/SingleLineTextIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/TableColSpanIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/TableLayoutIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/TableMultilineIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/TableStylingIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/integration/TextPaginationIntegrationTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/measurement/FontLibraryTextMeasurementSystemTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/render/RenderHandlerRegistryTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/engine/render/guides/GuidesRendererTest.java (100%) rename {src => qa/src}/test/java/com/demcha/compose/font/FontLibraryIntegrationTest.java (97%) create mode 100644 qa/src/test/java/com/demcha/compose/qa/RepoPaths.java rename {src => qa/src}/test/java/com/demcha/documentation/DocumentationExamplesTest.java (99%) rename {src => qa/src}/test/java/com/demcha/testing/visual/DevelopTest.java (100%) rename {src => qa/src}/test/java/com/demcha/testing/visual/HttpStreamingDemoTest.java (100%) rename {src => qa/src}/test/java/com/demcha/testing/visual/LayerStackRowDemoTest.java (100%) rename {src => qa/src}/test/java/com/demcha/testing/visual/PageCapacityToleranceDemoTest.java (100%) rename {src => qa/src}/test/java/com/demcha/testing/visual/ShapeContainerTransformDemoTest.java (100%) rename {src => qa/src}/test/java/com/demcha/testing/visual/ShapeContainerZIndexDemoTest.java (100%) rename {src => qa/src}/test/java/com/demcha/testing/visual/TableRepeatHeaderDemoTest.java (100%) rename {src => qa/src}/test/java/com/demcha/testing/visual/TableZebraAndTotalsDemoTest.java (100%) rename {src => qa/src}/test/java/com/demcha/testing/visual/UnicodeFallbackDemoTest.java (100%) create mode 100644 render-pdf/pom.xml rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfBookmarkOutlineWriter.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfDocumentPostProcessor.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackend.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackendProvider.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontLibraryFactory.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontLoader.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFontMetricsProvider.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfFragmentRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfGuideLinesRenderer.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfInternalLinkWriter.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfLinkAnnotationWriter.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfMeasurementResources.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfNodeLabelRenderer.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfOptionsAdapter.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfOutputOptionsTranslator.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfRenderEnvironment.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/PdfRenderSession.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfAlphaSupport.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfAnchorMarkerRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfBarcodeFragmentRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfBookmarkMarkerRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfEllipseFragmentRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfImageFragmentRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfLineFragmentRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfParagraphFragmentRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPathFragmentRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPathPainter.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfPolygonFragmentRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShadingSupport.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeClipBeginRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeClipEndRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeFragmentRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfShapeGeometry.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTableRowFragmentRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTransformBeginRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/PdfTransformEndRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/handlers/package-info.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/document/backend/fixed/pdf/package-info.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/GlyphFallbackLogger.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/PdfFont.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfCanvas.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfFileManagerSystem.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfGuidesRenderer.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfImageCache.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfStream.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBarcodeRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfBlockTextRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfChunkedBlockTextRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfCircleRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfContainerRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfElementRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfImageRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLineRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfPageBreakRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfRectangleRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTextRenderHandler.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/package-info.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/PdfBookmarkBuilder.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/TableCellBox.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/package-info.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/ecs/package-info.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfHeaderFooterRenderer.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/helpers/PdfWatermarkRenderer.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/helpers/package-info.java (100%) rename {src => render-pdf/src}/main/java/com/demcha/compose/engine/render/pdf/package-info.java (100%) rename {src => render-pdf/src}/main/resources/META-INF/services/com.demcha.compose.document.backend.fixed.FixedLayoutBackendProvider (100%) rename {src => render-pdf/src}/main/resources/META-INF/services/com.demcha.compose.document.backend.fixed.FontMetricsProvider (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/ContainerBookmarkTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/FontShowcaseRenderTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/InternalLinkAnchorTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/MeasurementFontParityTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/MultiSectionDocumentTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PageIndexAnchorAgreementTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PageReferenceTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/ParagraphTextStateDedupTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfBackendExtensibilityTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfDebugNodeLabelsTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfFixedLayoutBackendFeaturesTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfLineStrokeStyleTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPageNumberingTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPathGradientTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfPathStrokeStyleTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfShapeAlphaTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfShapeGradientTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/PdfWatermarkStateIsolationTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/TocTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/document/backend/fixed/pdf/ViewerPreferencesTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/engine/render/pdf/PdfFontSanitizerTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/engine/render/pdf/PdfRenderInterfaceGuardTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSessionTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSImageCacheTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfLinkRenderHandlerTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/engine/render/pdf/ecs/handlers/PdfTableRowRenderHandlerTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/EngineComposerHarness.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/BarcodeBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/BarcodeBuilderTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/BlockTextBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/BlockTextBuilderTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/CircleBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/ComponentBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/DisplayUrlTextBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/DividerBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/ElementBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/HContainerBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/ImageBuilderTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/LineBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/LineBuilderTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/LinkBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/ModuleBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/PageBreakBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/RectangleBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/RowBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilderTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/TextBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/TextBuilderTest.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/VContainerBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/container/Box.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/container/BuildEntity.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/container/ContainerBuilder.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/container/EmptyBox.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/container/EntityBuilderBase.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/container/EntityCreator.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/container/Layout.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/container/ShapeBuilderBase.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/container/StackAxis.java (100%) rename {src => render-pdf/src}/test/java/com/demcha/compose/testsupport/engine/assembly/container/package-info.java (100%) rename src/main/java/com/demcha/compose/document/{backend/fixed/pdf => showcase}/FontShowcase.java (99%) create mode 100644 src/main/java/com/demcha/compose/document/showcase/package-info.java create mode 100644 src/test/java/com/demcha/compose/document/api/MissingBackendContractTest.java diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 826a60611..2b8f22c59 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) 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} + From a62b333e2b232e60068b7cc55a101e345848042a Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Sun, 5 Jul 2026 23:25:13 +0100 Subject: [PATCH 2/2] ci: install graph-compose-render-pdf before the benchmarks build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The benchmarks module now depends on graph-compose-render-pdf (it calls buildPdf and references the backend types), so the two benchmark CI jobs must install it into the local repo after the core, or dependency resolution fails before compile — the same pattern as the fonts/emoji/core install steps already there. --- .github/workflows/ci.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b8f22c59..a557201a3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -232,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 @@ -300,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