mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 19:52:29 +00:00
159 lines
4.5 KiB
Bash
Executable File
159 lines
4.5 KiB
Bash
Executable File
#!/bin/zsh
|
|
|
|
setopt ERR_EXIT
|
|
setopt PIPE_FAIL
|
|
setopt NO_UNSET
|
|
|
|
if [[ -z "${DISCORD_ACTIVITY_CLIENT_ID}" ]]; then
|
|
print "Error: DISCORD_ACTIVITY_CLIENT_ID environment variable is required" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Process arguments
|
|
test_mode=0
|
|
no_prompt=0
|
|
output_dir="/tmp/discord-fonts"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--test)
|
|
test_mode=1
|
|
shift
|
|
;;
|
|
--no-prompt)
|
|
no_prompt=1
|
|
shift
|
|
;;
|
|
--output-dir)
|
|
output_dir="$2"
|
|
shift 2
|
|
;;
|
|
*)
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Clean/create output directory
|
|
if [[ -d "$output_dir" ]]; then
|
|
rm -rf "$output_dir"
|
|
fi
|
|
mkdir -p "$output_dir"
|
|
|
|
print "Starting directory search..." >&2
|
|
|
|
# Get directories
|
|
dirs=(*(/))
|
|
dirs=(${dirs:#contrib}) # Exclude contrib
|
|
dirs=(${dirs:#.git}) # Exclude .git
|
|
dirs=(${dirs:#node_modules}) # Exclude node_modules
|
|
|
|
if [[ ${#dirs} -eq 0 ]]; then
|
|
print "No directories found!" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $test_mode -eq 1 ]]; then
|
|
print "Test mode: processing first 5 directories" >&2
|
|
dirs=(${dirs[1,5]})
|
|
fi
|
|
|
|
print "\nFound directories:" >&2
|
|
print -l " ${dirs[@]}" >&2
|
|
|
|
# Extract URLs function
|
|
extract_font_urls() {
|
|
perl -ne '
|
|
next if /^\s*\/\*/; # Skip comment lines
|
|
while (/url\(['"'"'"]?(https:\/\/fonts\.googleapis\.com[^'"'"'"\s\)]+)['"'"'"]?\)/g) {
|
|
print "$1\n";
|
|
}
|
|
' "$1"
|
|
}
|
|
|
|
# Process each directory
|
|
for dir in ${dirs[@]}; do
|
|
print "Checking directory: $dir" >&2
|
|
mkdir -p "$output_dir/$dir"
|
|
|
|
# Find CSS files directly in this directory
|
|
css_files=($dir/*.css(.N))
|
|
|
|
if [[ ${#css_files} -gt 0 ]]; then
|
|
print "Found CSS files in $dir:" >&2
|
|
print -l " ${css_files[@]}" >&2
|
|
|
|
# Collect URLs for this directory
|
|
urls_file=$(mktemp)
|
|
trap "rm -f '$urls_file'" EXIT
|
|
|
|
for css_file in ${css_files[@]}; do
|
|
print "Processing: $css_file" >&2
|
|
|
|
found_urls=$(extract_font_urls "$css_file")
|
|
|
|
if [[ -n "$found_urls" ]]; then
|
|
print "Found font URLs in $css_file:" >&2
|
|
print -l " $found_urls" >&2
|
|
print "$found_urls" >> "$urls_file"
|
|
fi
|
|
done
|
|
|
|
# If we found URLs in this directory
|
|
unique_urls=($(sort -u "$urls_file"))
|
|
if [[ ${#unique_urls} -gt 0 ]]; then
|
|
print "\nFound ${#unique_urls} unique font URLs in $dir" >&2
|
|
|
|
if [[ $no_prompt -eq 0 ]]; then
|
|
print "Proceed with fetching and transforming URLs for $dir? [y/N] " >&2
|
|
read -q response || true
|
|
print >&2
|
|
|
|
if [[ "$response" != "y" ]]; then
|
|
print "Skipping $dir" >&2
|
|
touch "$output_dir/$dir/fonts.css"
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
raw_file=$(mktemp)
|
|
trap "rm -f '$raw_file'" EXIT
|
|
|
|
# Process URLs for this directory
|
|
for font_url in $unique_urls; do
|
|
response=$(curl -sS -w "\n%{http_code}" -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" \
|
|
"$font_url")
|
|
|
|
if [[ $? -eq 0 ]]; then
|
|
http_code=$(print "$response" | tail -n1)
|
|
content=$(print "$response" | sed '$d')
|
|
|
|
if [[ "$http_code" = "200" ]]; then
|
|
print "$content" | \
|
|
sed "s/fonts\.gstatic\.com/${DISCORD_ACTIVITY_CLIENT_ID}.discordsays.com\/.proxy\/gstatic\/fonts/g" \
|
|
>> "$raw_file"
|
|
print >> "$raw_file"
|
|
else
|
|
print "Error: HTTP $http_code for $font_url" >&2
|
|
fi
|
|
else
|
|
print "Error: Failed to fetch $font_url" >&2
|
|
fi
|
|
done
|
|
|
|
if [[ -s "$raw_file" ]]; then
|
|
mv "$raw_file" "$output_dir/$dir/fonts.css"
|
|
print "Generated fonts.css for $dir" >&2
|
|
else
|
|
touch "$output_dir/$dir/fonts.css"
|
|
print "Generated empty fonts.css for $dir (no valid content)" >&2
|
|
fi
|
|
else
|
|
touch "$output_dir/$dir/fonts.css"
|
|
print "Generated empty fonts.css for $dir (no URLs found)" >&2
|
|
fi
|
|
else
|
|
touch "$output_dir/$dir/fonts.css"
|
|
print "Generated empty fonts.css for $dir (no CSS files)" >&2
|
|
fi
|
|
done |