#!/bin/bash PARSED_OPTIONS=$(getopt -n "$0" -o hf: --long "file:,TextFrom:,TextTo:,BackgroundFrom:,BackgroundTo:,HighlightFrom:,HighlightTo:,ViewTextFrom:,ViewTextTo:,ViewBackgroundFrom:,ViewBackgroundTo:,ViewHoverFrom:,ViewHoverTo:,ViewFocusFrom:,ViewFocusTo:,ButtonTextFrom:,ButtonTextTo:,ButtonBackgroundFrom:,ButtonBackgroundTo:,ButtonHoverFrom:,ButtonHoverTo:,ButtonFocusFrom:,ButtonFocusTo:" -- "$@") if [ $? -ne 0 ]; then exit 1 fi eval set -- "$PARSED_OPTIONS" textFrom=\#31363b backgroundFrom=\#eff0f1 highlightFrom=\#3daee9 viewTextFrom=\#31363b viewBackgroundFrom=\#fcfcfc viewHoverFrom=\#93cee9 viewFocusFrom=\#3daee9 buttonTextFrom=\#31363b buttonBackgroundFrom=\#eff0f1 buttonHoverFrom=\#93cee9 buttonFocusFrom=\#3daee9 textTo=\#31363b backgroundTo=\#eff0f1 highlightTo=\#3daee9 viewTextTo=\#31363b viewBackgroundTo=\#fcfcfc viewHoverTo=\#93cee9 viewFocusTo=\#3daee9 buttonTextTo=\#31363b buttonBackgroundTo=\#eff0f1 buttonHoverTo=\#93cee9 buttonFocusTo=\#3daee9 file='' while true; do case "$1" in -h|--help) echo "usage $0 [-h|options] -f file.svgz" echo "Where options can be:" echo " --TextFrom=color html encoded color to replace with the ColorScheme-Text from the stylesheet" echo " --TextTo=color html encoded that the ColorScheme-Text class will have" echo echo " --BackgroundFrom=color html encoded color to replace with the ColorScheme-Background from the stylesheet" echo " --BackgroundTo=color html encoded that the ColorScheme-Background class will have" echo echo " --HighlightFrom=color html encoded color to replace with the ColorScheme-Highlight from the stylesheet" echo " --HighlightTo=color html encoded that the ColorScheme-Highlight class will have" echo echo " --ViewTextFrom=color html encoded color to replace with the ColorScheme-ViewText from the stylesheet" echo " --ViewTextTo=color html encoded that the ColorScheme-ViewText class will have" echo echo " --ViewBackgroundFrom=color html encoded color to replace with the ColorScheme-ViewBackground from the stylesheet" echo " --ViewBackgroundTo=color html encoded that the ColorScheme-ViewBackground class will have" echo echo " --ViewHoverFrom=color html encoded color to replace with the ColorScheme-ViewHover from the stylesheet" echo " --ViewHoverTo=color html encoded that the ColorScheme-ViewHover class will have" echo echo " --ViewFocusFrom=color html encoded color to replace with the ColorScheme-ViewFocus from the stylesheet" echo " --ViewFocusTo=color html encoded that the ColorScheme-ViewFocus class will have" echo echo " --ButtonTextFrom=color html encoded color to replace with the ColorScheme-ButtonText from the stylesheet" echo " --ButtonTextTo=color html encoded that the ColorScheme-ButtonText class will have" echo echo " --ButtonBackgroundFrom=color html encoded color to replace with the ColorScheme-ButtonBackground from the stylesheet" echo " --ButtonBackgroundTo=color html encoded that the ColorScheme-ButtonBackground class will have" echo echo " --ButtonHoverFrom=color html encoded color to replace with the ColorScheme-ButtonHover from the stylesheet" echo " --ButtonHoverTo=color html encoded that the ColorScheme-ButtonHover class will have" echo echo " --ButtonFocusFrom=color html encoded color to replace with the ColorScheme-ButtonFocus from the stylesheet" echo " --ButtonFocusTo=color html encoded that the ColorScheme-ButtonFocus class will have" echo echo "All the colors have default values conformant to the Breeze color palette" echo exit shift;; --TextFrom) textFrom=$2 shift 2;; --TextTo) textTo=$2 shift 2;; --BackgroundFrom) backgroundFrom=$2 shift 2;; --BackgroundTo) backgroundTo=$2 shift 2;; --HighlightFrom) highlightFrom=$2 shift 2;; --HighlightTo) highlightTo=$2 shift 2;; --ViewTextFrom) viewTextFrom=$2 shift 2;; --ViewTextTo) viewTextTo=$2 shift 2;; --ViewBackgroundFrom) viewBackgroundFrom=$2 shift 2;; --ViewBackgroundTo) viewBackgroundTo=$2 shift 2;; --ViewHoverFrom) viewHoverFrom=$2 shift 2;; --ViewHoverTo) viewHoverTo=$2 shift 2;; --ViewFocusFrom) viewFocusFrom=$2 shift 2;; --ViewFocusTo) viewFocusTo=$2 shift 2;; --ButtonTextFrom) buttonTextFrom=$2 shift 2;; --ButtonTextTo) buttonTextTo=$2 shift 2;; --ButtonBackgroundFrom) buttonBackgroundFrom=$2 shift 2;; --ButtonBackgroundTo) buttonBackgroundTo=$2 shift 2;; --ButtonHoverFrom) buttonHoverFrom=$2 shift 2;; --ButtonHoverTo) buttonHoverTo=$2 shift 2;; --ButtonFocusFrom) buttonFocusFrom=$2 shift 2;; --ButtonFocusTo) buttonFocusTo=$2 shift 2;; -f|--file) file=`echo $2 | cut -d'.' --complement -f2-` shift 2;; --) shift break;; esac done if [ -z "$file" ]; then echo missing svg file exit 1 fi isSvgz=0 if [ ! -f $file.svgz ] && [ ! -f $file.svg ]; then echo "you must specify a valid svg" exit 1 fi if [ -f $file.svgz ]; then isSvgz=1 fi if [ $isSvgz = 1 ]; then mv $file.svgz $file.svg.gz gunzip $file.svg.gz fi echo Processing $file stylesheet=" .ColorScheme-Text { color:$textTo; } .ColorScheme-Background { color:$backgroundTo; } .ColorScheme-Highlight { color:$highlightTo; } .ColorScheme-ViewText { color:$viewTextTo; } .ColorScheme-ViewBackground { color:$viewBackgroundTo; } .ColorScheme-ViewHover { color:$viewHoverTo; } .ColorScheme-ViewFocus{ color:$viewFocusTo; } .ColorScheme-ButtonText { color:$buttonTextTo; } .ColorScheme-ButtonBackground { color:$buttonBackgroundTo; } .ColorScheme-ButtonHover { color:$buttonHoverTo; } .ColorScheme-ButtonFocus{ color:$buttonFocusTo; } " colors=($textFrom $backgroundFrom $highlightFrom $viewTextFrom $viewBackgroundFrom $viewHoverFrom $viewFocusFrom $buttonTextFrom $buttonBackgroundFrom $buttonHoverFrom $buttonFocusFrom) colorNames=(ColorScheme-Text ColorScheme-Background ColorScheme-Highlight ColorScheme-ViewText ColorScheme-ViewBackground ColorScheme-ViewHover ColorScheme-ViewFocus ColorScheme-ButtonText ColorScheme-ButtonBackground ColorScheme-ButtonHover ColorScheme-ButtonFocus) reorderXslt=' ' echo $reorderXslt > transform.xsl if grep -q '"current-color-scheme"' $file.svg; then echo replacing the stylesheet xmlstarlet ed --update "/svg:svg/svg:defs/_:style" -v "$stylesheet" $file.svg > temp.svg else echo adding the stylesheet xmlstarlet ed --subnode "/svg:svg/svg:defs" -t elem -n "style" -v "$stylesheet"\ --subnode "/svg:svg/svg:defs/style" -t attr -n "type" -v "text/css"\ --subnode "/svg:svg/svg:defs/style" -t attr -n "id" -v "current-color-scheme" $file.svg > temp.svg fi xmlstarlet tr transform.xsl temp.svg > temp2.svg mv temp2.svg temp.svg for i in ${!colors[@]} do xmlstarlet ed --subnode "//*/*[contains(@style, '${colors[i]}') and not (@class)]" -t attr -n "class" -v "${colorNames[i]}" temp.svg > temp2.svg mv temp2.svg temp.svg sed -i 's/\(style=".*\)fill:'${colors[i]}'/\1fill:currentColor/g' temp.svg sed -i 's/\(style=".*\)stop-color:'${colors[i]}'/\1stop-color:currentColor/g' temp.svg done rm transform.xsl mv temp.svg $file.svg if [ $isSvgz = 1 ]; then gzip -n $file.svg mv $file.svg.gz $file.svgz fi