#!/bin/bash
# This script automatically converts the rgb colors used for the layers in
# navit_layout_car_shipped.xml to the values appropriate for the dark layout in
# navit_layout_car_dark_shipped.xml.
# It's a bit of a mess, but gets the job done.
# Variables
textcolor='55c4bd'
# Settings
IFS='' # Keep whitespace
# Light and dark input files
ifl=navit_layout_car_shipped.xml
ifd=navit_layout_car_dark_shipped.xml
# Temporary dark output file
ofd=$ifd.new
# Iterate over all layers in dark input file
grep \.* ]]; then
inlayer=true
getlayer=true
fi
# Check to see if inside layer - close tag
if [[ $l =~ .*\.* ]]; then
inlayer=false
fi
# Trigger once when open tag found in dark input file
if [ $getlayer == true ]; then
getlayer=false # Just triggered
inlayer=false # Now used for light input file
# Insert data from light input file
while read -r l
do
# Check to see if inside layer - open tag
if [[ $l =~ .*\.* ]]; then
inlayer=true
fi
# Check to see if inside layer - close tag
if [[ $l =~ .*\.* ]]; then
inlayer=false
fi
# Inside layer
if [ $inlayer == true ]; then
# Modify color
if [[ $l =~ .*color=\"#[0-9a-fA-F]{6}.* ]]; then # Contains rgb(a) color
# Get hexadecimal color
coll=$(echo $l | cut -d# -f2 | cut -c-6)
# Get color values in decimal
cr=$(printf "%d" 0x${coll:0:2})
cg=$(printf "%d" 0x${coll:2:2})
cb=$(printf "%d" 0x${coll:4:2})
# Modify decimal color values
crn=$(echo $cr/16+$cg/32+$cb/32+16 | bc)
cgn=$(echo $cr/24+$cg/12+$cb/24+12 | bc)
cbn=$(echo $cr/16+$cg/16+$cb/ 8+ 8 | bc)
# Convert new decimal color values to hexadecimal
cold=$( printf '%02x' $crn)
cold=$cold$(printf '%02x' $cgn)
cold=$cold$(printf '%02x' $cbn)
# Replace old color with new hexadecimal color values
l=$(echo $l | sed "s/#$coll/#$cold/")
fi
# Miscellaneous modifications
l=$(echo $l | sed -r "s/_bk\./_wh\./") # Black to white icons
l=$(echo $l | sed -r "s/(> $ofd # Modified line from light input file to dark output file
fi
done < $ifl # Read light input file
inlayer=true # Done inserting, still in layer in dark input file
else
# Outside layer
if [ $inlayer == false ]; then
echo $l >> $ofd # Just copy as-is to dark output file
fi
fi
done < $ifd # Read dark input file
cp $ofd $ifd # Replace
rm -f $ofd # Clean up
done # Next layer in dark input file