From 1d9277a80a3095e99bd9f61b1af187af5ca7deea Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Mon, 31 Aug 2026 09:57:32 +0100 Subject: [PATCH] feat(templates): link SerifHeadline titles and keep its band columns off the rule --- CHANGELOG.md | 20 ++++++++ .../readme/examples/cv-serif-headline-v2.pdf | Bin 86574 -> 83081 bytes .../support/SerifHeadlineSampleData.java | 11 ++-- .../cv/data/CvEntryPlaceAndIconTest.java | 34 +++++++++---- .../cv/presets/SerifHeadlineSmokeTest.java | 37 ++++++++++++++ .../cv-v2/serif_headline_layout.json | 44 ++++++++-------- .../cv-v2-layered/serif_headline-page-0.png | Bin 121182 -> 121183 bytes .../document/templates/cv/data/CvEntry.java | 48 +++++++++++++++--- .../templates/cv/presets/SerifHeadline.java | 16 ++++++ .../cv/presets/SerifHeadlineAside.java | 16 +++--- .../cv/presets/SerifHeadlineClosing.java | 14 ++--- .../cv/presets/SerifHeadlineMain.java | 24 +++++---- .../cv/presets/SerifHeadlineStyles.java | 31 ++++++++++- .../cv/presets/SerifHeadlineText.java | 26 +++++++++- .../cv/presets/SerifHeadlineWidgets.java | 7 ++- 15 files changed, 260 insertions(+), 68 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29d33a281..e3bdd4ebf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,15 @@ follow semantic versioning; release dates are ISO 8601. ### Public API +- **`CvEntry` carries a link.** An entry that points somewhere — a repository, a case + study, a company — had no way to say so, and a preset had no way to make its title + reachable. `CvEntry` now carries `link`, a plain string blank when absent like the + fields beside it, set through `CvEntry.Builder.link(...)`. It costs the layout + nothing: a link is an annotation rather than ink, so a linked title and a plain one + are the same sheet, which is also why the parity gates cannot see it and a test + asserts the targets directly. The six-argument constructor is kept explicitly, so + existing calls compile and link unchanged. + - **`CvEntry` carries a location and a mark, and gains a builder.** The record held a title, a subtitle, a date and a body, which is enough for a dated block and not enough for the designs that set the city beside the employer in its own colour, or @@ -59,6 +68,17 @@ follow semantic versioning; release dates are ISO 8601. ### Templates +- **`SerifHeadline` links its titles and lets its bands breathe.** Every title the + preset draws — a role, a project, a degree, an achievement — is now a link when its + entry carries one. And a band column keeps a gutter at its right edge, so its text + stops short of the hairline between columns instead of running into it: **the first + place a promoted preset deliberately departs from the sheet it ports**, where a line + that happens to fill its column touches the rule. The departure is exactly measured — + six of 235 nodes narrow, 8 191 of 2 173 720 pixels change, and nothing else moves — + and both baselines were re-recorded with it. The class documentation names the two + colours the packaged marks come in, so a document chooses one deliberately rather + than mixing navy and gold in a row by accident. + - **A two-column editorial CV preset: `SerifHeadline`.** A one-page A4 sheet under a Volkhov masthead — the name in the display serif over its role and a short gold rule, the contact channels stacked opposite — then a two-column body: the roles held on a diff --git a/assets/readme/examples/cv-serif-headline-v2.pdf b/assets/readme/examples/cv-serif-headline-v2.pdf index 7d7ba39377f2da8aedea912c0d7e899bb3808fa1..044840db1956b3f605e0bc91f21294eaf8cfc70b 100644 GIT binary patch delta 10611 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 O7Y`yewYY)=;(r74Um_F$ diff --git a/examples/src/main/java/com/demcha/examples/support/SerifHeadlineSampleData.java b/examples/src/main/java/com/demcha/examples/support/SerifHeadlineSampleData.java index 309d6afde..5c636db27 100644 --- a/examples/src/main/java/com/demcha/examples/support/SerifHeadlineSampleData.java +++ b/examples/src/main/java/com/demcha/examples/support/SerifHeadlineSampleData.java @@ -23,7 +23,10 @@ * *

The project and achievement marks are this preset's own vocabulary — * {@code cart}, {@code api}, {@code trophy}, {@code chart}, {@code rocket} — - * and each entry names the one it wants.

+ * and each entry names the one it wants. The marks come in two colours: + * {@code cart} and {@code api} are drawn in the navy of the design's ink, + * the other three in its gold. This sample keeps a band to one colour, since + * mixing them inside one row reads as a mistake rather than a choice.

*/ public final class SerifHeadlineSampleData { @@ -98,13 +101,15 @@ public static CvDocument sample() { .subtitle("Java, PostgreSQL, Testcontainers") .body("Open-source double-entry ledger for JVM services, with a" + " property-based suite over the posting rules.") - .icon("api") + .icon("chart") + .link("https://github.com/thalvorsen/ledgerkit") .build()) .entry(CvEntry.builder("Runbook Digest") .subtitle("Kotlin, Kafka, OpenSearch") .body("Reads alert history and drafts the retrospective agenda" + " before the meeting starts.") - .icon("chart") + .icon("rocket") + .link("https://github.com/thalvorsen/runbook-digest") .build()) .build()) .section(EntriesSection.builder("Education") diff --git a/qa/src/test/java/com/demcha/compose/document/templates/cv/data/CvEntryPlaceAndIconTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/data/CvEntryPlaceAndIconTest.java index 8b3b933bc..dff48fb20 100644 --- a/qa/src/test/java/com/demcha/compose/document/templates/cv/data/CvEntryPlaceAndIconTest.java +++ b/qa/src/test/java/com/demcha/compose/document/templates/cv/data/CvEntryPlaceAndIconTest.java @@ -8,38 +8,49 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Pins the compatibility promise made when {@link CvEntry} grew a location - * and a mark: the four-argument constructor that predates them is still - * there and still means what it meant, so a caller written against it keeps - * compiling and linking. + * Pins the compatibility promise made each time {@link CvEntry} grew: the + * constructors that predate the location, the mark and the link are still + * there and still mean what they meant, so a caller written against any of + * them keeps compiling and linking. */ class CvEntryPlaceAndIconTest { @Test - void theConstructorThatPredatesThemLeavesBothBlank() { + void theConstructorThatPredatesThemLeavesThemAllBlank() { CvEntry entry = new CvEntry("Engineer", "Acme", "2021", "Did the work."); assertThat(entry.place()).isEmpty(); assertThat(entry.icon()).isEmpty(); + assertThat(entry.link()).isEmpty(); assertThat(entry.subtitle()).isEqualTo("Acme"); } + @Test + void theConstructorThatPredatesTheLinkLeavesItBlank() { + CvEntry entry = new CvEntry("Engineer", "Acme", "2021", "Body", "Berlin", "cart"); + assertThat(entry.link()).isEmpty(); + assertThat(entry.place()).isEqualTo("Berlin"); + assertThat(entry.icon()).isEqualTo("cart"); + } + @Test void nullsNormalizeToBlank() { - CvEntry entry = new CvEntry("Engineer", "Acme", "2021", "Body", null, null); + CvEntry entry = new CvEntry("Engineer", "Acme", "2021", "Body", null, null, null); assertThat(entry.place()).isEmpty(); assertThat(entry.icon()).isEmpty(); + assertThat(entry.link()).isEmpty(); } @Test void theOriginalFieldsStillRejectNull() { - assertThatThrownBy(() -> new CvEntry("Engineer", null, "2021", "Body", "Berlin", "cart")) + assertThatThrownBy(() -> + new CvEntry("Engineer", null, "2021", "Body", "Berlin", "cart", "")) .isInstanceOf(NullPointerException.class) .hasMessageContaining("subtitle"); } @Test void aBlankTitleIsStillRejected() { - assertThatThrownBy(() -> new CvEntry(" ", "Acme", "2021", "Body", "", "")) + assertThatThrownBy(() -> new CvEntry(" ", "Acme", "2021", "Body", "", "", "")) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("title"); } @@ -52,9 +63,11 @@ void theBuilderCarriesEveryFieldThrough() { .body("An open-source ledger.") .place("Remote") .icon("cart") + .link("https://example.com/ledgerkit") .build(); assertThat(entry).isEqualTo(new CvEntry("Ledgerkit", "Java, PostgreSQL", "2024", - "An open-source ledger.", "Remote", "cart")); + "An open-source ledger.", "Remote", "cart", + "https://example.com/ledgerkit")); } @Test @@ -65,6 +78,7 @@ void theBuilderLeavesWhatItIsNotToldBlank() { assertThat(entry.body()).isEmpty(); assertThat(entry.place()).isEmpty(); assertThat(entry.icon()).isEmpty(); + assertThat(entry.link()).isEmpty(); } @Test @@ -85,9 +99,11 @@ void theBuilderTreatsNullsAsBlank() { .body((String) null) .place(null) .icon(null) + .link(null) .build(); assertThat(entry.subtitle()).isEmpty(); assertThat(entry.body()).isEmpty(); assertThat(entry.place()).isEmpty(); + assertThat(entry.link()).isEmpty(); } } diff --git a/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineSmokeTest.java b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineSmokeTest.java index a90b665b4..e6b51769b 100644 --- a/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineSmokeTest.java +++ b/qa/src/test/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineSmokeTest.java @@ -139,6 +139,43 @@ void rejectsAnUnknownEntryMarkByName() { } } + @Test + void anEntryWithALinkReachesThePdfAsOne() throws Exception { + // Every title this preset draws is a link when its entry carries + // one. It is an annotation, so it moves no pixel and no layout node + // — which is why neither parity gate can see it. + byte[] pdf = render(CvDocument.builder() + .identity(identity()) + .section(EntriesSection.builder("Projects") + .entry(CvEntry.builder("Ledgerkit") + .subtitle("Java") + .body("A ledger.") + .icon("api") + .link("https://example.com/ledgerkit") + .build()) + .build()) + .section(EntriesSection.builder("Experience") + .entry(CvEntry.builder("Engineer") + .subtitle("Acme") + .date("2024") + .body("Shipped a thing.") + .link("https://acme.example.com") + .build()) + .build()) + .section(EntriesSection.builder("Achievements") + .entry(CvEntry.builder("Engineer of the Year") + .body("For the platform work.") + .icon("trophy") + .link("https://example.com/award") + .build()) + .build()) + .build()); + assertThat(linkUris(pdf)) + .contains("https://example.com/ledgerkit", + "https://acme.example.com", + "https://example.com/award"); + } + @Test void drawsAnEntryWithoutAMark() throws Exception { // No token, no plate — the card is drawn, just unmarked. diff --git a/qa/src/test/resources/layout-snapshots/canonical-templates/cv-v2/serif_headline_layout.json b/qa/src/test/resources/layout-snapshots/canonical-templates/cv-v2/serif_headline_layout.json index c427e8259..e124848d1 100644 --- a/qa/src/test/resources/layout-snapshots/canonical-templates/cv-v2/serif_headline_layout.json +++ b/qa/src/test/resources/layout-snapshots/canonical-templates/cv-v2/serif_headline_layout.json @@ -1705,15 +1705,15 @@ "computedY" : 218.426, "placementX" : 31.682, "placementY" : 218.426, - "placementWidth" : 168.307, + "placementWidth" : 161.798, "placementHeight" : 52.675, "startPage" : 0, "endPage" : 0, - "contentWidth" : 168.307, + "contentWidth" : 161.798, "contentHeight" : 52.675, "margin" : { "top" : 0.0, - "right" : 171.488, + "right" : 177.301, "bottom" : 0.0, "left" : 0.0 }, @@ -1795,11 +1795,11 @@ "computedY" : 218.426, "placementX" : 64.818, "placementY" : 218.426, - "placementWidth" : 135.172, + "placementWidth" : 128.662, "placementHeight" : 27.484, "startPage" : 0, "endPage" : 0, - "contentWidth" : 135.172, + "contentWidth" : 128.662, "contentHeight" : 27.484, "margin" : { "top" : 0.0, @@ -1825,15 +1825,15 @@ "computedY" : 218.426, "placementX" : 203.17, "placementY" : 218.426, - "placementWidth" : 167.99, + "placementWidth" : 164.738, "placementHeight" : 52.675, "startPage" : 0, "endPage" : 0, - "contentWidth" : 167.99, + "contentWidth" : 164.738, "contentHeight" : 52.675, "margin" : { "top" : 0.0, - "right" : 0.0, + "right" : 5.813, "bottom" : 0.0, "left" : 171.488 }, @@ -1915,11 +1915,11 @@ "computedY" : 218.426, "placementX" : 244.444, "placementY" : 218.426, - "placementWidth" : 126.716, + "placementWidth" : 123.464, "placementHeight" : 27.484, "startPage" : 0, "endPage" : 0, - "contentWidth" : 126.716, + "contentWidth" : 123.464, "contentHeight" : 27.484, "margin" : { "top" : 0.0, @@ -5193,7 +5193,7 @@ "contentHeight" : 26.204, "margin" : { "top" : 0.0, - "right" : 425.529, + "right" : 431.342, "bottom" : 0.0, "left" : 0.0 }, @@ -5283,7 +5283,7 @@ "contentHeight" : 26.204, "margin" : { "top" : 0.0, - "right" : 319.147, + "right" : 324.96, "bottom" : 0.0, "left" : 106.382 }, @@ -5373,7 +5373,7 @@ "contentHeight" : 26.204, "margin" : { "top" : 0.0, - "right" : 212.765, + "right" : 218.578, "bottom" : 0.0, "left" : 212.765 }, @@ -5463,7 +5463,7 @@ "contentHeight" : 26.204, "margin" : { "top" : 0.0, - "right" : 106.382, + "right" : 112.196, "bottom" : 0.0, "left" : 319.147 }, @@ -5553,7 +5553,7 @@ "contentHeight" : 26.204, "margin" : { "top" : 0.0, - "right" : 0.0, + "right" : 5.813, "bottom" : 0.0, "left" : 425.529 }, @@ -6513,7 +6513,7 @@ "contentHeight" : 36.181, "margin" : { "top" : 0.0, - "right" : 354.608, + "right" : 360.421, "bottom" : 0.0, "left" : 0.0 }, @@ -6595,15 +6595,15 @@ "computedY" : 43.938, "placementX" : 208.986, "placementY" : 43.938, - "placementWidth" : 173.765, + "placementWidth" : 166.571, "placementHeight" : 36.181, "startPage" : 0, "endPage" : 0, - "contentWidth" : 173.765, + "contentWidth" : 166.571, "contentHeight" : 36.181, "margin" : { "top" : 0.0, - "right" : 177.304, + "right" : 183.117, "bottom" : 0.0, "left" : 177.304 }, @@ -6655,11 +6655,11 @@ "computedY" : 43.938, "placementX" : 249.097, "placementY" : 43.938, - "placementWidth" : 133.653, + "placementWidth" : 126.46, "placementHeight" : 17.849, "startPage" : 0, "endPage" : 0, - "contentWidth" : 133.653, + "contentWidth" : 126.46, "contentHeight" : 17.849, "margin" : { "top" : 0.0, @@ -6693,7 +6693,7 @@ "contentHeight" : 36.181, "margin" : { "top" : 0.0, - "right" : 0.0, + "right" : 5.813, "bottom" : 0.0, "left" : 354.608 }, diff --git a/qa/src/test/resources/visual-baselines/cv-v2-layered/serif_headline-page-0.png b/qa/src/test/resources/visual-baselines/cv-v2-layered/serif_headline-page-0.png index efab7573da107a0758fc52cb02dc06587b7740bd..b9dab2b906878eddcb1b4b44e96ccfbafa82c8f0 100644 GIT binary patch delta 47426 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 OA0;_8*-B}np#KMcWSY|e delta 47425 zcmYIvby!r<*0(63f*_!Tbc=LK$k1H^N_TfR14lx-yHOe`>F)0C?yez+{EqkD_xb*v zXU?26`|Q2euhvRA%5pi%k4gj|BB0A|>#q5!$J3>$X4(BZ-Ql>2W^gcxJEjMlkL@bd zv9*9i zeh%`<$)Bl0_v@0hgX_7L{Xbfp(oVK+VKt|kaxyvPmDLkvF)~QiM_**lOj&@BK02aW zo7^sL&*Y}H5kA>kn7aB2|CLq6xs_9tZb*Oso=Dzc++PGaGFz-ePEO8h$?l~E(v8v9 zyP{~rPblaZ5k(KK6l}iR+tVBAc^sZp7Ff8jBUT0~9t~{;Sqw#;-kPfz*;6#X9&IUd zabpG{hifriIwUTjXI(?{r*JAKDUu4Gm z`QV4AMPk@X_->f>O|-oPu0Pa-W}jw|W_)24P5$-VB)R%0`SfPY^qu8{Gp#?1Z?|~t z_uRMCVvMLUNR4?zRd*`91xzfLGACN;KcV7ja;CRm(#ECAS0_j_`eYlUrJ!m_>Lt#s zubxGsM#)dqr91NtK(BsXI95Vo2n@rd^@;dozTRG&je%he?e};tfR0Xn#qv-G?#$bU zHkoi!8613MnSmR_Kz$ajDtv}P>ac~Ei8*%j^EB|~N87?ntWP6QjTX`3HJG2@`;frU za||>NoxaFc49KmN4B7GI0N^Pfnji=X{U974l%gu^=7O+IjEj;vIrVvXQD+xbShBws z7d0vZ+yBK@DU)*};5lM{h)dw25s8r(R*=(21UHPyrVp~fh?bv@Xyt4Fyme0*l{}AJ z#F?9ct;(n(1#Q-rlE|G+sXm^$;7FeP42Aqgf7FaSK39v0_{5fx!=Z~YBpP?--D|4q z(z1%P_cc`RfvN;OyeDkC>q4p5+gmW$kL;IVv?H;_t^V{oAZYUA4En2j?%H0_@4o`9)DsogboWxEE1>!&45JZ9zzi!_bCGJsD5+hs3 ztJtm4K$}R6N(cIB+l_e7>=x?|If(2Vuc1vN^~eZTiRoY0S@NF;o_(Y%WNrCWXsE;x z0}W+=>y+2T2JC8PHyZjX^z6M@{!?f%&|hdc^rhLp+b)+a(>m_EJ&)yzQ({IUhS@EZ zBQmAQXAN=j1j_I^Gjr=Id6-t9Y_&G$d6LbU%6PHLwk9-1eg3YJM1w94ib~5iaDmJ< z7r;|->pnfWvFYOve}X1IW`4`}b?VsHD^1$PXGC8m12&DdqwYs&w%;S_-)xd(&GSqg zm{Agi>%R_qBRevvm!Tv&kzgN>yQ7Opgu9_ft`4~+adp{!zL&8`9`JORm) z4Zp{O?U9AU%~;aRzRYpE?FlYr^F8u8ANl8=4@v#r-}+sH7#SjJWDhW9)l=kolG{6J z664z%3tNtQN1g~7`kG_obK~Q)qi87~1_lKt5`Yg0KLxm_7sph}3*sf4Q}418&SWCk z8olv%Fn#-{mI8=-p0YGB2%V{(o6vPgT0b*>-K(m<-t{u}atog(6mk3eprEwWz!rx# zVQ;70wzCwSTwxfrP_h-{=>_$g%lwm2TH$xq!7iJ?@8wbP!p;8O#^={OEH4^jBhhw# z%)x=c#A;q5Ha4~>Tt>TKma6rMu{rGOAdA_tIU>yWC~JWongK72ko(ZMzOcq;B<7pl z8rjxmT5o1n`egU!WoH{ksH4N<^9u_0@^__i4X{bf+U$OrYQn#%|5n^oQdBG#=R<X_sigCIvWvxeo9oV4_k3cR)uqGd6ZMb?y9OXlc3VE?P!q zZf-uWDrxBKJnhQt9Q1*Rh~j7X@No|Pr!zwi@R{#*dB6CZ_HDIz#EWI^C2PzRpJ=Cp z|8U?}&v<9®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 fields are honoured: a blank {@code date} omits the date * column, a blank {@code subtitle} drops the italic line, a blank * {@code body} drops the description paragraph, a blank {@code place} - * drops the location, and a blank {@code icon} leaves the entry unmarked. - * A preset draws only what it has somewhere to put.

+ * drops the location, a blank {@code icon} leaves the entry unmarked, and a + * blank {@code link} leaves its title plain. A preset draws only what it has + * somewhere to put.

* * @param title bold heading on the left (job title, degree) * @param subtitle italic subtitle on the line below (employer, @@ -32,14 +33,18 @@ * set — so a token means something only to the preset that * declares it, and the presets that draw no marks ignore it; * blank when absent + * @param link where this entry points — a repository, a case study, a + * company. The presets that honour it make the title a link + * in the rendered PDF, which costs the layout nothing: a + * link is an annotation, not ink. Blank when absent */ public record CvEntry(String title, String subtitle, String date, String body, - String place, String icon) { + String place, String icon, String link) { /** * Validates that the four original fields are non-null and that - * {@code title} is non-blank, treating a null {@code place} or - * {@code icon} as absent. + * {@code title} is non-blank, treating a null {@code place}, + * {@code icon} or {@code link} as absent. */ public CvEntry { Objects.requireNonNull(title, "title"); @@ -48,11 +53,27 @@ public record CvEntry(String title, String subtitle, String date, String body, Objects.requireNonNull(body, "body"); place = place == null ? "" : place; icon = icon == null ? "" : icon; + link = link == null ? "" : link; if (title.isBlank()) { throw new IllegalArgumentException("title must not be blank"); } } + /** + * Backward-compatible constructor for callers that predate the link. + * + * @param title bold heading on the left + * @param subtitle subtitle on the line below; blank collapses it + * @param date date column next to the title; blank removes it + * @param body prose paragraph beneath the subtitle + * @param place where this happened; blank when absent + * @param icon the mark a preset draws for this entry; blank when absent + */ + public CvEntry(String title, String subtitle, String date, String body, + String place, String icon) { + this(title, subtitle, date, body, place, icon, ""); + } + /** * Backward-compatible constructor for callers that predate the location * and the mark. The entry simply carries neither. @@ -63,7 +84,7 @@ public record CvEntry(String title, String subtitle, String date, String body, * @param body prose paragraph beneath the subtitle */ public CvEntry(String title, String subtitle, String date, String body) { - this(title, subtitle, date, body, "", ""); + this(title, subtitle, date, body, "", "", ""); } /** @@ -91,6 +112,7 @@ public static final class Builder { private String body = ""; private String place = ""; private String icon = ""; + private String link = ""; private Builder(String title) { this.title = title; @@ -164,13 +186,25 @@ public Builder icon(String value) { return this; } + /** + * Sets where this entry points. The presets that honour it make the + * title a link. + * + * @param value the target URL; null becomes blank + * @return this builder for chaining + */ + public Builder link(String value) { + this.link = value == null ? "" : value; + return this; + } + /** * Builds the immutable {@link CvEntry}. * * @return the assembled entry */ public CvEntry build() { - return new CvEntry(title, subtitle, date, body, place, icon); + return new CvEntry(title, subtitle, date, body, place, icon, link); } } } diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadline.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadline.java index 9db112b75..b4c37d4d3 100644 --- a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadline.java +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadline.java @@ -39,6 +39,11 @@ * type subtracted; setting the pixel numbers directly would push every block * a few points too far apart.

* + *

One measure is deliberately not the drawing's: a band column keeps a + * gutter at its right edge, so its text stops short of the hairline instead + * of running into it. In the published sheet a line that happens to fill its + * column touches the rule.

+ * *

One page, and what happens past it

* *

This sheet holds one page of content. The body is a single row, and a @@ -84,6 +89,17 @@ * with no token is drawn without a mark. The certification medal is chrome * rather than data: every plate takes the same one.

* + *

The marks come in two colours, which is worth knowing before choosing + * one: {@code cart} and {@code api} are drawn in the design's navy ink, and + * {@code trophy}, {@code chart} and {@code rocket} in its gold. Nothing + * stops a document mixing them, but a band that does reads as a mistake + * rather than a choice.

+ * + *

Every title this preset draws — a role, a project, a degree, an + * achievement — becomes a link when its entry carries {@code CvEntry.link()}. + * A link is an annotation rather than ink, so a linked title and a plain one + * are the same sheet.

+ * *

The employer's city and the campus come from {@code CvEntry.place()}, * because this design sets them beside the employer and the years in their * own colour rather than inside them.

diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineAside.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineAside.java index 76d1c2710..a5dddadf7 100644 --- a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineAside.java +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineAside.java @@ -105,13 +105,15 @@ private static void renderEducation(SectionBuilder section, EntriesSection educa for (int i = 0; i < entries.size(); i++) { CvEntry entry = entries.get(i); boolean first = i == 0; - section.addParagraph(p -> p - .name("Degree_" + compact(entry.title())) - .text(entry.title()) - .textStyle(style(ITEM_TITLE_SIZE, INK, DocumentTextDecoration.BOLD)) - .lineSpacing(TIGHT_LEADING) - .margin(new DocumentInsets( - first ? HEADING_TO_EDUCATION : 0, 0, DEGREE_TO_INSTITUTION, 0))); + section.addParagraph(p -> { + p.name("Degree_" + compact(entry.title())) + .textStyle(style(ITEM_TITLE_SIZE, INK, DocumentTextDecoration.BOLD)) + .lineSpacing(TIGHT_LEADING); + SerifHeadlineText.title(p, entry, + style(ITEM_TITLE_SIZE, INK, DocumentTextDecoration.BOLD)); + p.margin(new DocumentInsets( + first ? HEADING_TO_EDUCATION : 0, 0, DEGREE_TO_INSTITUTION, 0)); + }); section.addParagraph(p -> p .name("Institution_" + compact(entry.title())) .text(entry.subtitle()) diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineClosing.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineClosing.java index cd9aed9f1..5a7e5f024 100644 --- a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineClosing.java +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineClosing.java @@ -120,12 +120,14 @@ private static BandColumn achievementColumn(CvEntry achievement, int index) { // title it stands beside and the two centre on each other. .padding(new DocumentInsets( ACHIEVEMENT_TEXT_DROP, 0, 0, lead + ACHIEVEMENT_GLYPH_TO_TEXT)); - column.addParagraph(p -> p - .name("AchievementTitle_" + compact(achievement.title())) - .text(achievement.title()) - .textStyle(style(ITEM_TITLE_SIZE, INK, DocumentTextDecoration.BOLD)) - .lineSpacing(TIGHT_LEADING) - .margin(new DocumentInsets(0, 0, ACHIEVEMENT_TITLE_TO_BODY, 0))); + column.addParagraph(p -> { + p.name("AchievementTitle_" + compact(achievement.title())) + .textStyle(style(ITEM_TITLE_SIZE, INK, DocumentTextDecoration.BOLD)) + .lineSpacing(TIGHT_LEADING); + SerifHeadlineText.title(p, achievement, + style(ITEM_TITLE_SIZE, INK, DocumentTextDecoration.BOLD)); + p.margin(new DocumentInsets(0, 0, ACHIEVEMENT_TITLE_TO_BODY, 0)); + }); column.addParagraph(p -> p .name("AchievementBody_" + compact(achievement.title())) .text(achievement.body()) diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineMain.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineMain.java index 17bf94e21..f030d47a2 100644 --- a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineMain.java +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineMain.java @@ -132,13 +132,13 @@ private static void renderEntryHead(SectionBuilder rail, CvEntry entry) { .fillColor(INK) .margin(DocumentInsets.zero()) .build(); - DocumentNode title = new ParagraphBuilder() + ParagraphBuilder titleText = new ParagraphBuilder() .name("JobTitle_" + compact(entry.title())) - .text(entry.title()) .textStyle(style(JOB_TITLE_SIZE, INK, DocumentTextDecoration.BOLD)) - .lineSpacing(TIGHT_LEADING) - .margin(DocumentInsets.zero()) - .build(); + .lineSpacing(TIGHT_LEADING); + SerifHeadlineText.title(titleText, entry, + style(JOB_TITLE_SIZE, INK, DocumentTextDecoration.BOLD)); + DocumentNode title = titleText.margin(DocumentInsets.zero()).build(); DocumentNode dates = new ParagraphBuilder() .name("JobDates_" + compact(entry.title())) .text(entry.date()) @@ -226,12 +226,14 @@ private static BandColumn projectColumn(CvEntry project, int index) { column.name("ProjectCard_" + compact(project.title())) .spacing(0) .padding(new DocumentInsets(0, 0, 0, lead + PROJECT_GLYPH_TO_TEXT)); - column.addParagraph(p -> p - .name("ProjectTitle_" + compact(project.title())) - .text(project.title()) - .textStyle(style(ITEM_TITLE_SIZE, INK, DocumentTextDecoration.BOLD)) - .lineSpacing(TIGHT_LEADING) - .margin(new DocumentInsets(0, 0, CARD_TITLE_TO_TECH, 0))); + column.addParagraph(p -> { + p.name("ProjectTitle_" + compact(project.title())) + .textStyle(style(ITEM_TITLE_SIZE, INK, DocumentTextDecoration.BOLD)) + .lineSpacing(TIGHT_LEADING); + SerifHeadlineText.title(p, project, + style(ITEM_TITLE_SIZE, INK, DocumentTextDecoration.BOLD)); + p.margin(new DocumentInsets(0, 0, CARD_TITLE_TO_TECH, 0)); + }); column.addParagraph(p -> p .name("ProjectStack_" + compact(project.title())) .text(project.subtitle()) diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineStyles.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineStyles.java index e24543155..c5246072f 100644 --- a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineStyles.java +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineStyles.java @@ -245,6 +245,18 @@ static double titleOffset(double leftSurfaceDistance) { /** The plate hangs a little left of its column, into the gutter. */ static final double PLATE_HANG = h(-4); static final double GLYPH_CLEARANCE = h(10); + + /** + * The space a band column leaves at its right edge, so its text stops + * short of the hairline rather than running into it. + * + *

This is the one measure on the sheet that is not the published + * design's: there, a column's text runs to the separator, and a line + * that happens to fill the column touches it. The gutter matches + * {@link #GLYPH_CLEARANCE}, the space the next column's mark already + * keeps on the other side, so the rule sits centred in white.

+ */ + static final double COLUMN_TAIL_GUTTER = GLYPH_CLEARANCE; static final double CARD_TITLE_TO_TECH = gap(15, BLANK_TITLE, BLANK_SMALL); static final double CARD_TECH_TO_BODY = gap(12, BLANK_SMALL, BLANK_SMALL); static final double CARD_BODY_LEADING = v(18.5) / SMALL_SIZE; @@ -379,10 +391,27 @@ private static double capAdvanceEm(char glyph) { */ static DocumentInsets columnInsets(double bandWidth, double columnWidth, int index, double dx, double naturalWidth) { + return columnInsets(bandWidth, columnWidth, index, dx, naturalWidth, 0.0); + } + + /** + * The same, with a gutter kept at the column's right edge. + * + * @param bandWidth the band's full width + * @param columnWidth one column's share of it + * @param index which column, from zero + * @param dx an extra offset for a mark that hangs left + * @param naturalWidth the child's own width when it has one, else zero + * @param tailGutter space to leave at the right edge + * @return the insets to set on that layer + */ + static DocumentInsets columnInsets(double bandWidth, double columnWidth, + int index, double dx, double naturalWidth, + double tailGutter) { double left = index * columnWidth + dx; double right = naturalWidth > 0.0 ? Math.max(0.0, bandWidth - left - naturalWidth) - : Math.max(0.0, bandWidth - left - (columnWidth - dx)); + : Math.max(0.0, bandWidth - left - (columnWidth - dx) + tailGutter); return new DocumentInsets(0, right, 0, left); } diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineText.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineText.java index 89f46eab2..a30914a0c 100644 --- a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineText.java +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineText.java @@ -1,11 +1,15 @@ package com.demcha.compose.document.templates.cv.presets; +import com.demcha.compose.document.dsl.ParagraphBuilder; +import com.demcha.compose.document.node.DocumentLinkOptions; +import com.demcha.compose.document.style.DocumentTextStyle; import com.demcha.compose.document.templates.core.text.MarkdownInline; +import com.demcha.compose.document.templates.cv.data.CvEntry; import java.util.ArrayList; import java.util.List; -/** Turning a model field into the lines this sheet draws. */ +/** Turning model fields into the runs and lines this sheet draws. */ final class SerifHeadlineText { private SerifHeadlineText() { @@ -28,4 +32,24 @@ static List lines(String body) { } return out; } + + /** + * Writes an entry's title into a paragraph, as a link when the entry + * carries one. + * + *

The link is the same ink either way — an annotation draws nothing + * and lays out nothing — so a linked title and a plain one are the same + * sheet.

+ * + * @param paragraph the paragraph being built + * @param entry the entry whose title and link to write + * @param style the style of the title + */ + static void title(ParagraphBuilder paragraph, CvEntry entry, DocumentTextStyle style) { + if (entry.link().isBlank()) { + paragraph.inlineText(entry.title(), style); + } else { + paragraph.inlineText(entry.title(), style, new DocumentLinkOptions(entry.link())); + } + } } diff --git a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineWidgets.java b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineWidgets.java index 14e4827ff..8dd32fb0e 100644 --- a/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineWidgets.java +++ b/templates/src/main/java/com/demcha/compose/document/templates/cv/presets/SerifHeadlineWidgets.java @@ -25,6 +25,7 @@ import static com.demcha.compose.document.templates.cv.presets.SerifHeadlineStyles.RULE; import static com.demcha.compose.document.templates.cv.presets.SerifHeadlineStyles.TAIL_GAP; import static com.demcha.compose.document.templates.cv.presets.SerifHeadlineStyles.TIGHT_LEADING; +import static com.demcha.compose.document.templates.cv.presets.SerifHeadlineStyles.COLUMN_TAIL_GUTTER; import static com.demcha.compose.document.templates.cv.presets.SerifHeadlineStyles.columnInsets; import static com.demcha.compose.document.templates.cv.presets.SerifHeadlineStyles.compact; import static com.demcha.compose.document.templates.cv.presets.SerifHeadlineStyles.dashOffset; @@ -184,8 +185,12 @@ static void columnBand(SectionBuilder section, String name, double bandWidth, .padding(DocumentInsets.zero()) .margin(new DocumentInsets(gapAbove, 0, 0, 0)); for (int i = 0; i < columns; i++) { + // The text keeps a gutter at its right edge; the marks and + // the separators do not, since they are placed on the column + // boundary rather than filling to it. stack.layer(parts.get(i).text() - .margin(columnInsets(bandWidth, columnWidth, i, 0.0, 0.0)) + .margin(columnInsets(bandWidth, columnWidth, i, 0.0, 0.0, + COLUMN_TAIL_GUTTER)) .build(), LayerAlign.TOP_LEFT); } for (int i = 0; i < columns; i++) {