| # Extract code block from a <details> section identified by data-file attribute. | |
| # Usage: extract_code <file> <data-file> | |
| # Example: extract_code ch01.md "main.cpp" | |
| extract_code() { | |
| local file="$1" name="$2" | |
| local output | |
| output=$(awk -v name="$name" ' | |
| $0 ~ "data-file=\"" name "\"" { found=1; next } | |
| found && /^```/ && !inside { inside=1; next } | |
| inside && /^```/ { exit } | |
| inside { print } | |
| ' "$file") | |
| if [ -z "$output" ]; then | |
| echo "ERROR: extract_code: no match for data-file=\"$name\" in $file" >&2 | |
| return 1 | |
| fi | |
| printf '%s\n' "$output" | |
| } |