Skip to content

Commit 85fbfe9

Browse files
committed
format etc
1 parent 3f92b8d commit 85fbfe9

2 files changed

Lines changed: 86 additions & 26 deletions

File tree

src/bin/cover_letter.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,8 @@
1111
1212
use anyhow::{Context, Result};
1313
use cv_generator::{
14-
cover_letter::CoverLetter,
15-
cv_data::Cv,
16-
site_config::SiteConfig,
17-
typst_generator::generate_cover_letter_pdf,
18-
unified_config::AppConfig,
14+
cover_letter::CoverLetter, cv_data::Cv, site_config::SiteConfig,
15+
typst_generator::generate_cover_letter_pdf, unified_config::AppConfig,
1916
};
2017
use std::env;
2118
use std::path::PathBuf;

src/typst_generator/cover_letter.rs

Lines changed: 84 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,11 @@ fn generate_imports(markup: String, typst_config: &TypstConfig) -> String {
101101
}
102102

103103
/// Generate meta variable (matching grotesk-cv expected structure)
104-
fn generate_meta(markup: String, personal_info: &PersonalInfo, typst_config: &TypstConfig) -> String {
104+
fn generate_meta(
105+
markup: String,
106+
personal_info: &PersonalInfo,
107+
typst_config: &TypstConfig,
108+
) -> String {
105109
let (first_name, last_name) = split_name(&personal_info.name);
106110
let address = personal_info.location.as_deref().unwrap_or("");
107111
let phone = personal_info.phone.as_deref().unwrap_or("");
@@ -110,17 +114,73 @@ fn generate_meta(markup: String, personal_info: &PersonalInfo, typst_config: &Ty
110114
.pipe(|s| append_line(s, "#let meta = ("))
111115
// Layout section
112116
.pipe(|s| append_line(s, " layout: ("))
113-
.pipe(|s| append_line(s, &format!(" fill_color: \"{}\",", typst_config.customization.colors.fill)))
114-
.pipe(|s| append_line(s, &format!(" paper_size: \"{}\",", typst_config.customization.layout.paper_size)))
115-
.pipe(|s| append_line(s, &format!(" accent_color: \"{}\",", typst_config.customization.colors.accent)))
117+
.pipe(|s| {
118+
append_line(
119+
s,
120+
&format!(
121+
" fill_color: \"{}\",",
122+
typst_config.customization.colors.fill
123+
),
124+
)
125+
})
126+
.pipe(|s| {
127+
append_line(
128+
s,
129+
&format!(
130+
" paper_size: \"{}\",",
131+
typst_config.customization.layout.paper_size
132+
),
133+
)
134+
})
135+
.pipe(|s| {
136+
append_line(
137+
s,
138+
&format!(
139+
" accent_color: \"{}\",",
140+
typst_config.customization.colors.accent
141+
),
142+
)
143+
})
116144
.pipe(|s| append_line(s, " text: ("))
117-
.pipe(|s| append_line(s, &format!(" font: \"{}\",", typst_config.customization.layout.font)))
145+
.pipe(|s| {
146+
append_line(
147+
s,
148+
&format!(
149+
" font: \"{}\",",
150+
typst_config.customization.layout.font
151+
),
152+
)
153+
})
118154
.pipe(|s| append_line(s, " size: \"11pt\","))
119155
.pipe(|s| append_line(s, " cover_letter_size: \"11pt\","))
120156
.pipe(|s| append_line(s, " color: ("))
121-
.pipe(|s| append_line(s, &format!(" light: \"{}\",", typst_config.customization.colors.text_light)))
122-
.pipe(|s| append_line(s, &format!(" medium: \"{}\",", typst_config.customization.colors.text_medium)))
123-
.pipe(|s| append_line(s, &format!(" dark: \"{}\"", typst_config.customization.colors.text_dark)))
157+
.pipe(|s| {
158+
append_line(
159+
s,
160+
&format!(
161+
" light: \"{}\",",
162+
typst_config.customization.colors.text_light
163+
),
164+
)
165+
})
166+
.pipe(|s| {
167+
append_line(
168+
s,
169+
&format!(
170+
" medium: \"{}\",",
171+
typst_config.customization.colors.text_medium
172+
),
173+
)
174+
})
175+
.pipe(|s| {
176+
append_line(
177+
s,
178+
&format!(
179+
" dark: \"{}\"",
180+
typst_config.customization.colors.text_dark
181+
),
182+
)
183+
})
124184
.pipe(|s| append_line(s, " )"))
125185
.pipe(|s| append_line(s, " )"))
126186
.pipe(|s| append_line(s, " ),"))
@@ -141,7 +201,12 @@ fn generate_meta(markup: String, personal_info: &PersonalInfo, typst_config: &Ty
141201
.pipe(|s| append_line(s, &format!(" address: \"{}\",", address)))
142202
.pipe(|s| append_line(s, &format!(" telephone: \"{}\",", phone)))
143203
.pipe(|s| append_line(s, " email: ("))
144-
.pipe(|s| append_line(s, &format!(" link: \"mailto:{}\",", personal_info.email)))
204+
.pipe(|s| {
205+
append_line(
206+
s,
207+
&format!(" link: \"mailto:{}\",", personal_info.email),
208+
)
209+
})
145210
.pipe(|s| append_line(s, &format!(" label: \"{}\"", personal_info.email)))
146211
.pipe(|s| append_line(s, " ),"))
147212
.pipe(|s| {
@@ -171,9 +236,9 @@ fn generate_meta(markup: String, personal_info: &PersonalInfo, typst_config: &Ty
171236
append_line(s, " email: \"envelope\"")
172237
}
173238
})
174-
.pipe(|s| append_line(s, " )")) // close icon
175-
.pipe(|s| append_line(s, " )")) // close personal
176-
.pipe(|s| append_lines(s, ")")) // close meta
239+
.pipe(|s| append_line(s, " )")) // close icon
240+
.pipe(|s| append_line(s, " )")) // close personal
241+
.pipe(|s| append_lines(s, ")")) // close meta
177242
}
178243

179244
/// Generate document setup and apply cover-letter template
@@ -221,12 +286,8 @@ fn generate_body(markup: String, letter: &CoverLetter) -> String {
221286
};
222287

223288
// Add date
224-
let markup = markup.pipe(|s| {
225-
append_lines(
226-
s,
227-
"#datetime.today().display(\"[day]/[month]/[year]\")",
228-
)
229-
});
289+
let markup =
290+
markup.pipe(|s| append_lines(s, "#datetime.today().display(\"[day]/[month]/[year]\")"));
230291

231292
// Add spacing before body
232293
let markup = markup.pipe(|s| append_lines(s, "#v(1em)"));
@@ -255,8 +316,8 @@ fn generate_body(markup: String, letter: &CoverLetter) -> String {
255316
}
256317

257318
// Check if this is a bullet point (starts with "- ")
258-
if para.starts_with("- ") {
259-
let item_text = &para[2..]; // Remove "- " prefix
319+
if let Some(item_text) = para.strip_prefix("- ") {
320+
// Remove "- " prefix
260321
let escaped = escape_typst(item_text);
261322
let normalized = escaped.replace('\n', " ");
262323

@@ -378,7 +439,9 @@ mod tests {
378439

379440
let markup = generate_cover_letter_markup(&letter, &personal_info, &typst_config);
380441

381-
assert!(markup.contains("#import \"@preview/grotesk-cv:1.0.5\": cover-letter, recipient-entry"));
442+
assert!(
443+
markup.contains("#import \"@preview/grotesk-cv:1.0.5\": cover-letter, recipient-entry")
444+
);
382445
assert!(markup.contains("#show: cover-letter.with(meta)"));
383446
assert!(markup.contains("first_name: \"John\""));
384447
assert!(markup.contains("last_name: \"Doe\""));

0 commit comments

Comments
 (0)