Skip to content

Commit 587cc8c

Browse files
authored
Merge pull request #150 from DemchaAV/chore/split-legacy-ecs-pdf-render
chore(engine): deprecate the legacy ECS PDF renderer (F11 follow-up)
2 parents adb5301 + de5946a commit 587cc8c

45 files changed

Lines changed: 221 additions & 104 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,24 @@ Open cycle — bug-fix / housekeeping. Entries land here as they merge.
144144
until the baseline advances past this release. No canonical API or behaviour
145145
change.
146146

147+
- **The legacy ECS PDF render pipeline is deprecated.** Follow-up to the ECS
148+
engine deprecation above. The `Entity`-based PDFBox renderer
149+
(`PdfRenderingSystemECS` and its collaborators — `PdfRenderSession`, `PdfCanvas`,
150+
`PdfStream`, `PdfImageCache`, `PdfFileManagerSystem`, `PdfGuidesRenderer`, the
151+
render-marker handlers, and the `TableCellBox` / `PdfBookmarkBuilder` helpers) is
152+
the renderer for the removed `GraphCompose.pdf(...)` surface and now runs only
153+
under the legacy engine regression tests; canonical PDF output goes through
154+
`com.demcha.compose.document.backend.fixed.pdf`. Because `engine.render.pdf` is a
155+
*mixed* package — it also holds the canonical-shared `PdfFont`,
156+
`GlyphFallbackLogger`, and the header/footer + watermark post-processors — the
157+
legacy classes were physically moved into a new `engine.render.pdf.ecs`
158+
(with `.handlers` / `.helpers` sub-packages), which is then `@Deprecated` at
159+
package level (so no deprecation-warning cascade, same pattern as the ECS engine
160+
packages). The four genuinely shared `engine.render.pdf` types are **not**
161+
deprecated and stay put. No behaviour change. The relocated renderer has no
162+
public entry point and carries no binary-compatibility promise, so the move is
163+
excluded from the japicmp gate rather than treated as a breaking removal.
164+
147165
### Tests / tooling
148166

149167
- **Benchmark regression gate and measurement probe (benchmarks module, not part

CONTRIBUTING.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,11 @@ not need any of them.
168168
- Engine render markers implement backend-neutral `Render`. Do not
169169
add backend-specific render interfaces back into
170170
`engine/components`.
171-
- PDF rendering logic lives in
172-
`src/main/java/com/demcha/compose/engine/render/pdf/handlers/`.
171+
- PDF rendering logic for the legacy ECS renderer (deprecated; canonical PDF
172+
output goes through `com.demcha.compose.document.backend.fixed.pdf`) lives in
173+
`src/main/java/com/demcha/compose/engine/render/pdf/ecs/handlers/`.
173174
Backend-only helper objects live in
174-
`com.demcha.compose.engine.render.pdf.helpers`, not in
175+
`com.demcha.compose.engine.render.pdf.ecs.helpers`, not in
175176
`components/renderable`.
176177
- Builders and layout code get text width and line metrics from
177178
`TextMeasurementSystem`, not from
@@ -208,7 +209,7 @@ The rules above are enforced by tests:
208209
[EnginePdfBoundaryTest.java](./src/test/java/com/demcha/compose/engine/architecture/EnginePdfBoundaryTest.java),
209210
[CanonicalTemplateComposerPdfBoundaryTest.java](./src/test/java/com/demcha/compose/document/templates/architecture/CanonicalTemplateComposerPdfBoundaryTest.java),
210211
[PdfRenderInterfaceGuardTest.java](./src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderInterfaceGuardTest.java),
211-
[PdfRenderingSystemECSDispatchTest.java](./src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECSDispatchTest.java)
212+
[PdfRenderingSystemECSDispatchTest.java](./src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java)
212213

213214
## Adding a new feature
214215

@@ -325,7 +326,7 @@ Choose the smallest tests that match the change:
325326
- For low-level test harness changes:
326327
[ComponentBuilderTest.java](./src/test/java/com/demcha/compose/engine/components/ComponentBuilderTest.java)
327328
- For render-marker dispatch changes:
328-
[PdfRenderingSystemECSDispatchTest.java](./src/test/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECSDispatchTest.java)
329+
[PdfRenderingSystemECSDispatchTest.java](./src/test/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECSDispatchTest.java)
329330
- For layout/positioning behavior:
330331
[ComputedPositionTest.java](./src/test/java/com/demcha/compose/engine/components/layout/ComputedPositionTest.java)
331332
- For pagination and multi-page behavior:

docs/architecture/overview.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,8 @@ code should not need any of them.
231231
into the active renderer
232232
- render marker components identify *what* needs to be rendered;
233233
*how* it is drawn lives in renderer-owned handler packages such as
234-
`...render.pdf.handlers` (with helper objects under
235-
`...render.pdf.helpers`)
234+
`...render.pdf.ecs.handlers` (with helper objects under
235+
`...render.pdf.ecs.helpers`)
236236
- `RenderStream` acts as a session factory, not as a per-entity
237237
content-stream opener
238238
- `RenderPassSession` is the shared seam for page lifetime and

docs/architecture/package-map.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ intended.
4949
| `com.demcha.compose.engine.pagination` | Page-breaking helpers and pagination fallback systems. | Maintain child-first ordering and page-shift propagation rules. |
5050
| `com.demcha.compose.engine.measurement` | Text measurement contracts and font-backed implementations. | Builders/layout helpers depend on this seam instead of reaching into renderers. |
5151
| `com.demcha.compose.engine.render` | Backend-neutral render contracts, handler registry, render ordering, and render-pass session lifetime. | Add backend-neutral contracts here, backend-specific drawing elsewhere. |
52-
| `com.demcha.compose.engine.render.pdf` | Low-level PDF backend internals for ECS rendering. | PDFBox state stays here and in child handler/helper packages. |
52+
| `com.demcha.compose.engine.render.pdf` | Shared PDFBox primitives for the canonical fixed-layout backend: `PdfFont`, `GlyphFallbackLogger`, and the header/footer + watermark renderers under `helpers`. | Add canonical-shared PDF support here; the legacy ECS renderer lives in the deprecated `ecs` sub-package. |
53+
| `com.demcha.compose.engine.render.pdf.ecs` | **Deprecated.** Legacy `Entity`-based ECS PDF renderer (`PdfRenderingSystemECS` and collaborators, plus the `ecs.handlers` / `ecs.helpers` sub-packages). | Dead renderer kept only for legacy regression tests; do not extend or optimize. |
5354
| `com.demcha.compose.engine.render.word` | Experimental Word backend internals. | Treat as research until a supported public surface is designed. |
5455
| `com.demcha.compose.engine.text` | Internal text hot-path utilities shared by layout and render stages. | Keep helpers backend-neutral and avoid public authoring concepts here. |
5556
| `com.demcha.compose.engine.text.markdown` | Markdown token parsing used by text preparation. | Keep output backend-neutral. |

docs/contributing/implementation-guide.md

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ Relevant files:
259259

260260
- [TableBuilder.java](./../src/test/java/com/demcha/compose/testsupport/engine/assembly/TableBuilder.java)
261261
- [TableRow.java](./../src/main/java/com/demcha/compose/engine/components/renderable/TableRow.java)
262-
- [TableCellBox.java](./../src/main/java/com/demcha/compose/engine/render/pdf/helpers/TableCellBox.java)
262+
- [TableCellBox.java](./../src/main/java/com/demcha/compose/engine/render/pdf/ecs/helpers/TableCellBox.java)
263263
- [TableResolvedCell.java](./../src/main/java/com/demcha/compose/engine/components/content/table/TableResolvedCell.java)
264264

265265
Rule of thumb:
@@ -321,21 +321,29 @@ Preferred extension pattern for new backends:
321321
4. keep backend-only helper drawing in renderer-owned helper packages when the code is not an entity render marker
322322
5. keep renderer ordering policy in the rendering layer rather than in pagination utilities
323323

324+
> **Deprecated reference implementation.** The PDF renderer named below
325+
> (`PdfRenderingSystemECS` and the `engine.render.pdf.ecs` handlers/helpers) is the
326+
> legacy `Entity`-based ECS renderer, kept only for regression tests; canonical PDF
327+
> output is produced by `com.demcha.compose.document.backend.fixed.pdf`. The
328+
> backend-neutral `engine.render` *contracts* (`Render`, `RenderPassSession`,
329+
> `RenderStream`, `EntityRenderOrder`) are **not** deprecated — only the ECS PDF
330+
> implementation is. Do not extend the `ecs` renderer.
331+
324332
Important files:
325333

326334
- [Render.java](./../src/main/java/com/demcha/compose/engine/render/Render.java)
327335
- [RenderPassSession.java](./../src/main/java/com/demcha/compose/engine/render/RenderPassSession.java)
328336
- [RenderStream.java](./../src/main/java/com/demcha/compose/engine/render/RenderStream.java)
329-
- [PdfRenderingSystemECS.java](./../src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderingSystemECS.java)
330-
- [PdfRenderSession.java](./../src/main/java/com/demcha/compose/engine/render/pdf/PdfRenderSession.java)
337+
- [PdfRenderingSystemECS.java](./../src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderingSystemECS.java)
338+
- [PdfRenderSession.java](./../src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfRenderSession.java)
331339
- [EntityRenderOrder.java](./../src/main/java/com/demcha/compose/engine/render/EntityRenderOrder.java)
332340

333341
Migration rule for new engine components:
334342

335343
- implement backend-neutral `Render`, not backend-specific render interfaces
336-
- move PDF drawing into `...render.pdf.handlers`
344+
- move PDF drawing into `...render.pdf.ecs.handlers`
337345
- use `TextMeasurementSystem` for text width and line metrics instead of reaching through `LayoutSystem`
338-
- place PDF-only helper objects in `...render.pdf.helpers`
346+
- place PDF-only helper objects in `...render.pdf.ecs.helpers`
339347
- keep page-surface lifetime in a backend-specific `RenderPassSession`, not in engine builders or render markers
340348
- keep resolved draw ordering in renderer-owned or renderer-neutral rendering helpers such as `EntityRenderOrder`
341349
- register a render handler for every engine render marker because the PDF entity path no longer supports a backend-specific render fallback

pom.xml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,29 @@
692692
-->
693693
<excludes>
694694
<exclude>com.demcha.compose.document.layout.payloads</exclude>
695+
<!--
696+
Legacy ECS PDF renderer (PdfRenderingSystemECS and its
697+
collaborators), relocated to
698+
com.demcha.compose.engine.render.pdf.ecs[.handlers|.helpers]
699+
and @Deprecated at package level. This is the dead
700+
Entity-based renderer that no public entry point reaches
701+
(canonical PDF output goes through
702+
document.backend.fixed.pdf); it carries no
703+
binary-compatibility promise. Both the relocated packages
704+
and the vacated original fully-qualified names are excluded
705+
so the package split is not flagged as a breaking removal.
706+
-->
707+
<exclude>com.demcha.compose.engine.render.pdf.ecs</exclude>
708+
<exclude>com.demcha.compose.engine.render.pdf.ecs.handlers</exclude>
709+
<exclude>com.demcha.compose.engine.render.pdf.ecs.helpers</exclude>
710+
<exclude>com.demcha.compose.engine.render.pdf.handlers</exclude>
711+
<exclude>com.demcha.compose.engine.render.pdf.PdfRenderingSystemECS</exclude>
712+
<exclude>com.demcha.compose.engine.render.pdf.PdfCanvas</exclude>
713+
<exclude>com.demcha.compose.engine.render.pdf.PdfStream</exclude>
714+
<exclude>com.demcha.compose.engine.render.pdf.PdfFileManagerSystem</exclude>
715+
<exclude>com.demcha.compose.engine.render.pdf.PdfGuidesRenderer</exclude>
716+
<exclude>com.demcha.compose.engine.render.pdf.helpers.TableCellBox</exclude>
717+
<exclude>com.demcha.compose.engine.render.pdf.helpers.PdfBookmarkBuilder</exclude>
695718
<!--
696719
engine.measurement.TextMeasurementSystem dropped its vestigial
697720
SystemECS super-interface (and the no-op process(EntityManager)

src/main/java/com/demcha/compose/engine/render/pdf/PdfCanvas.java renamed to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfCanvas.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demcha.compose.engine.render.pdf;
1+
package com.demcha.compose.engine.render.pdf.ecs;
22

33
import com.demcha.compose.engine.core.Canvas;
44
import com.demcha.compose.engine.components.style.Margin;

src/main/java/com/demcha/compose/engine/render/pdf/PdfFileManagerSystem.java renamed to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfFileManagerSystem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demcha.compose.engine.render.pdf;
1+
package com.demcha.compose.engine.render.pdf.ecs;
22

33
import com.demcha.compose.engine.core.EntityManager;
44
import com.demcha.compose.engine.io.FileManagerSystem;

src/main/java/com/demcha/compose/engine/render/pdf/PdfGuidesRenderer.java renamed to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfGuidesRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demcha.compose.engine.render.pdf;
1+
package com.demcha.compose.engine.render.pdf.ecs;
22

33
import com.demcha.compose.engine.render.guides.GuidesRenderer;
44
import com.demcha.compose.engine.render.guides.impl.BoxRenderImpl;

src/main/java/com/demcha/compose/engine/render/pdf/PdfImageCache.java renamed to src/main/java/com/demcha/compose/engine/render/pdf/ecs/PdfImageCache.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.demcha.compose.engine.render.pdf;
1+
package com.demcha.compose.engine.render.pdf.ecs;
22

33
import com.demcha.compose.engine.components.content.ImageData;
44
import com.demcha.compose.engine.components.content.ImageMetadata;

0 commit comments

Comments
 (0)