#!/usr/bin/env bash # # Refresh resources/svg/symbols from google/material-design-icons (Apache-2.0). # # Material Symbols Rounded at weight 400, grade 0 and optical size 24, outlined and # filled, for every symbol Google publishes. Maintenance only: applications never run # this, and bin/ is not part of the archive Composer installs. # # The repository is ~5 GB, so it is cloned without blobs and checked out sparsely: # git downloads only the two files per symbol that are kept. The @material-symbols # npm packages were not used because their SVGs are drawn at optical size 48, whose # strokes are thinner than the 24px design. set -euo pipefail root="$(cd "$(dirname "$0")/.." && pwd)" work="$(mktemp -d)" trap 'rm -rf "$work"' EXIT git clone --quiet --depth=1 --filter=blob:none --no-checkout \ https://github.com/google/material-design-icons.git "$work/repo" cd "$work/repo" git sparse-checkout set --no-cone \ '/symbols/web/*/materialsymbolsrounded/*_24px.svg' \ '!/symbols/web/*/materialsymbolsrounded/*_wght[0-9]*' \ '!/symbols/web/*/materialsymbolsrounded/*_grad200*' \ '!/symbols/web/*/materialsymbolsrounded/*_gradN25*' git checkout --quiet "$(git symbolic-ref --short HEAD)" out="$root/resources/svg/symbols" rm -rf "$out/outlined" "$out/filled" mkdir -p "$out/outlined" "$out/filled" # Google's files carry width="24" height="24" and no fill. Drop the size so CSS decides # it, and paint in currentColor so an icon takes the colour of the text around it. normalise() { sed -E \ -e 's/ (width|height)="[0-9]+"//g' \ -e 's/&2 missing=$((missing + 1)) continue fi normalise "$outlined" > "$out/outlined/$name.svg" normalise "$filled" > "$out/filled/$name.svg" done git rev-parse HEAD > "$out/SOURCE" echo "$(ls "$out/outlined" | wc -l | tr -d ' ') symbols from google/material-design-icons@$(cut -c1-12 "$out/SOURCE"), $missing skipped"