1 files changed,
29 insertions(+),
10 deletions(-)
Author:
Oleksandr Smirnov
olexsmir@gmail.com
Committed at:
2026-07-05 22:28:00 +0300
Authored at:
2026-07-04 16:37:27 +0300
Change ID:
xvwpxpynqvmzuwoznqssxtmxltrrmszv
Parent:
8691552
M
game.typ
··· 167 167 #let render(state) = { 168 168 let banner(body) = text(fill: rgb("#0a7e8c"), weight: "bold", size: 1.2em, body) 169 169 170 - let out = () 171 - if state.at("checkmate", default: false) { out.push(banner[Checkmate!]) } 172 - else if state.at("stalemate", default: false) { out.push(banner[Stalemate!]) } 173 - else { 170 + let label = none 171 + let label-fill = none 172 + if state.at("checkmate", default: false) { 173 + label = banner[Checkmate!] 174 + label-fill = rgb("#0a7e8c").transparentize(75%) 175 + } else if state.at("stalemate", default: false) { 176 + label = banner[Stalemate!] 177 + label-fill = rgb("#0a7e8c").transparentize(75%) 178 + } else { 174 179 let err = state.at("error", default: none) 175 - if err != none { out.push(text(fill: red, weight: "bold", err)) } 176 - else if is-in-check(state.grid, state.turn) { out.push(text(fill: yellow, weight: "bold")[Check!]) } 180 + if err != none { 181 + label = text(fill: red, weight: "bold", err) 182 + label-fill = red.transparentize(75%) 183 + } else if is-in-check(state.grid, state.turn) { 184 + label = text(fill: yellow, weight: "bold")[Check!] 185 + label-fill = yellow.transparentize(75%) 186 + } 177 187 } 178 - out.push(v(0.3em)) 179 - out.push(render-board(state.grid)) 180 - out.join() 188 + 189 + block(height: 1.8em, width: 100%, inset: 0pt, above: 0pt, below: 0pt, 190 + align(center, { 191 + if label != none { box(fill: label-fill, inset: 0.3em, label) } 192 + })) 193 + v(0.15em) 194 + render-board(state.grid) 181 195 } 182 196 183 197 // Usage: ··· 185 199 // g4 d5 Bg5 Bxg4 c4 c6 cxd5 cxd5 Qb3 186 200 // 187 201 #let chess(body) = { 188 - set page(height: auto, width: auto, margin: (top: 0.5in, bottom: 0.5in, rest: 0.5in)) 202 + // Fixed page size: board (8 × 2.8em) + label area (1.8em) + spacing (0.15em) + margins 203 + set page( 204 + width: 22.4em + 1in, 205 + height: 24.65em + 1in, 206 + margin: 0.5in, 207 + ) 189 208 let moves = parse-moves(body) 190 209 let states = apply-moves(moves) 191 210 render(states.last())