generate.sh: add initial solutions/spoiler page - chess-puzzles - chess puzzle book generator
(HTM) git clone git://git.codemadness.org/chess-puzzles
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 5df80ee4eebb2000bcac5530f58e6c84e9b92818
(DIR) parent 098952703cf713b7569ae0cb826a08a239e3b46a
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Mon, 18 Dec 2023 22:16:22 +0100
generate.sh: add initial solutions/spoiler page
Diffstat:
M generate.sh | 68 +++++++++++++++++++++++++++----
1 file changed, 60 insertions(+), 8 deletions(-)
---
(DIR) diff --git a/generate.sh b/generate.sh
@@ -1,7 +1,10 @@
#!/bin/sh
index="puzzles/index.html"
-mkdir -p puzzles
+rm -rf puzzles
+mkdir -p puzzles/solutions
+
+solutions="$(mktemp)"
cat > "$index" <<!
<!DOCTYPE html>
@@ -20,6 +23,9 @@ body {
float: left;
margin-right: 25px;
}
+footer {
+ clear: both;
+}
</style>
</head>
<body>
@@ -69,8 +75,10 @@ LC_ALL=C awk -F ',' '
while read -r line; do
i="$count"
fen=$(printf '%s' "$line" | cut -f 2 -d ',')
+
tomove=$(printf '%s' "$line" | cut -f 2 -d ',' | cut -f 2 -d ' ')
- moves=$(printf '%s' "$line" | cut -f 3 -d ',' | cut -b 1-4 ) # first move only.
+ allmoves="$(printf '%s' "$line" | cut -f 3 -d ',')"
+ firstmove=$(printf '%s' "$line" | cut -f 3 -d ',' | cut -f 1 -d ' ' ) # first move only.
rating=$(printf '%s' "$line" | cut -f 4 -d ',')
ratingdev=$(printf '%s' "$line" | cut -f 5 -d ',')
lichess=$(printf '%s' "$line" | cut -f 9 -d ',')
@@ -85,11 +93,11 @@ while read -r line; do
desttxt="puzzles/$txt"
destvt="puzzles/$vt"
- ./fen_to_svg "$fen" "$moves" > "$destsvg"
- ./fen_to_ascii "$fen" "$moves" > "$desttxt"
- ./fen_to_tty "$fen" "$moves" > "$destvt"
+ ./fen_to_svg "$fen" "$firstmove" > "$destsvg"
+ ./fen_to_ascii "$fen" "$firstmove" > "$desttxt"
+ ./fen_to_tty "$fen" "$firstmove" > "$destvt"
- printf '<div class="puzzle">' >> "$index"
+ printf '<div class="puzzle">\n' >> "$index"
printf '<h2>Puzzle %s</h2>\n' "$i" >> "$index"
test "$lichess" != "" && printf '<a href="%s">' "$lichess" >> "$index"
@@ -109,7 +117,7 @@ while read -r line; do
movetext=""
# if there is a first move, inverse to move.
- if test "moves" != ""; then
+ if test "$firstmove" != ""; then
case "$tomove" in
"w") movetext=", black to move";;
"b") movetext=", white to move";;
@@ -125,16 +133,60 @@ while read -r line; do
printf '%s%s\n' "$points" "$movetext" >> "$desttxt"
printf '\n%s%s\n' "$points" "$movetext" >> "$destvt"
+ # solutions per puzzle.
+ printf '<div class="puzzle-solution">\n' >> "$solutions"
+ printf '<h2>Puzzle %s</h2>\n' "$i" >> "$solutions"
+
+ m="${allmoves}"
+ movecount=0
+ # create a move list, removing one move each step, for generating
+ # the solution images.
+ while [ "$m" != "" ]; do
+ prevmoves="$m"
+
+ echo "$m"
+
+ m="${m% }"
+ m="${m%[a-h][0-9][a-h][0-9]}"
+ m="${m%[qnb]}" # possible promotion
+ m="${m% }"
+
+ test "$prevmoves" = "$m" && break # same, break also
+ done | sort | while read -r movelist; do
+ # first move is already shown, skip it.
+ if test "$movecount" = "0"; then
+ movecount=$((movecount + 1))
+ continue
+ fi
+
+ # process move list in sequence.
+ destsolsvg="puzzles/solutions/${i}_${movecount}.svg"
+ ./fen_to_svg "$fen" "$movelist" > "$destsolsvg"
+
+ printf '<img src="%s" width="180" height="180" loading="lazy" />\n' \
+ "solutions/${i}_${movecount}.svg" >> "$solutions"
+
+ movecount=$((movecount + 1))
+ done
+ printf '</div>\n' >> "$solutions"
+
printf '</div>\n' >> "$index"
# DEBUG
- #echo "$count" >&2
+ #echo "$count: $line" >&2
count=$((count + 1))
done
+# solutions / spoilers
+echo "<footer><br/><br/><details>\n<summary>Solutions</summary>\n" >> "$index"
+cat "$solutions" >> "$index"
+echo "</details>\n<br/><br/></footer>\n" >> "$index"
+
cat >> "$index" <<!
</main>
</body>
</html>
!
+
+rm -f "$solutions"