@@ -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