| #!/bin/bash -eu |
| # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # |
| # Generate a new yaml file for each specified hwid_*.bmp file. |
| # |
| |
| # Do initial release locales only, 'cause I'm in a hurry. GB == US. |
| locales="en es fr it nl de" |
| localedir="./localized_bitmaps" |
| |
| # Arbitrary padding |
| ypad=5 |
| xpad=10 |
| yborder=40 |
| |
| |
| # Stuff to center and position bitmaps from the bottom of the screen upwards. |
| |
| # Globals |
| cur_x=0 |
| cur_y=0 |
| |
| |
| # Return width of the specified .bmp file |
| get_x() { |
| file $1 | awk '{print $7}' |
| } |
| |
| get_xx() { |
| local ffile=$(eval "echo \$$1") |
| get_x $ffile |
| } |
| |
| # Return height of the specified .bmp file |
| get_y() { |
| file $1 | awk '{print $9}' |
| } |
| |
| # Return height of the specified .bmp file |
| get_yy() { |
| local ffile=$(eval "echo \$$1") |
| get_y $ffile |
| } |
| |
| |
| # Guess the locale based on the filename, set a global "newlocales" list |
| # accordingly. |
| guess_locale() { |
| local lc |
| local islc |
| local matches |
| islc= |
| |
| matches=0 |
| for lc in $locales; do |
| case "$1" in |
| *[_-]${lc}_* ) |
| matches=$(expr $matches + 1) |
| islc=$lc |
| ;; |
| esac |
| done |
| if (( $matches != 1 )); then |
| islc='en' |
| fi |
| |
| local newlist |
| newlist="$islc" |
| for lc in $locales; do |
| if [ "$lc" != "$islc" ]; then |
| newlist="$newlist $lc" |
| fi |
| done |
| |
| newlocales=$newlist |
| } |
| |
| |
| # Reset the current baseline and width to the size of the specified .bmp file |
| reset_base() { |
| cur_x=$(get_x "$1") |
| cur_y=$(expr $(get_y $1) - $yborder) |
| } |
| |
| # Emit a screen line entry centering the given .bmp files at the current |
| # baseline. We assume that all args are the same height. |
| center_up() { |
| local totalx |
| local totaly |
| local x |
| local ffile |
| |
| totaly=$(get_yy "$1") |
| cur_y=$(expr $cur_y - $totaly - $ypad) |
| |
| totalx=$(expr 0 - $xpad / 2) |
| for fname in "$@"; do |
| totalx=$(expr $totalx + $(get_xx $fname) + $xpad) |
| done |
| |
| x=$(expr "(" $cur_x - $totalx ")" / 2) |
| |
| for fname in $*; do |
| echo " - [$x, $cur_y, $fname]" >> "$yaml_file" |
| x=$(expr $x + $(get_xx $fname) + $xpad) |
| done |
| } |
| |
| |
| |
| # Generate a new yaml file for each specified hwid_*.bmp file. |
| for hwid_bmp in "$@"; do |
| yaml_file=$(echo $(basename "$hwid_bmp" .bmp) | tr 'A-Z' 'a-z').yaml |
| echo "$yaml_file" |
| |
| # List the images. The major difference is the HWID. |
| cat >"$yaml_file" <<EOF1 |
| bmpblock: 1.0 |
| |
| compression: 1 |
| |
| images: |
| |
| # The HWID must change for every BOM |
| hwid: $hwid_bmp |
| |
| # This URL never changes |
| url: URL.bmp |
| |
| # The background images are from the UI people |
| devmode_bg: Devmode.bmp |
| remove_bg: Remove.bmp |
| yuck_bg: Yuck.bmp |
| insert_bg: Insert.bmp |
| |
| # The following strings must be approved by the localization people |
| EOF1 |
| |
| # some global variables matching the yaml definitions |
| hwid=$hwid_bmp |
| url="URL.bmp" |
| |
| # Enumerate the bitmaps for each locale-specific string. |
| for lc in $locales; do |
| cat >>"$yaml_file" <<EOF2 |
| ${lc}_model_text: ${localedir}/$lc/model.bmp |
| ${lc}_devmode_text: ${localedir}/$lc/devmode.bmp |
| ${lc}_remove_text: ${localedir}/$lc/remove.bmp |
| ${lc}_yuck_text: ${localedir}/$lc/yuck.bmp |
| ${lc}_insert_text: ${localedir}/$lc/insert.bmp |
| |
| EOF2 |
| |
| # Also define global variables matching those in the yaml file. |
| eval "${lc}_model_text=${localedir}/$lc/model.bmp" |
| eval "${lc}_devmode_text=${localedir}/$lc/devmode.bmp" |
| eval "${lc}_remove_text=${localedir}/$lc/remove.bmp" |
| eval "${lc}_yuck_text=${localedir}/$lc/yuck.bmp" |
| eval "${lc}_insert_text=${localedir}/$lc/insert.bmp" |
| done |
| |
| # List the screens. We need to composite four screens for each locale. |
| echo "screens:" >> "$yaml_file" |
| |
| for lc in $locales; do |
| echo " ${lc}_devel:" >> "$yaml_file" |
| echo " - [ 0, 0, devmode_bg]" >> "$yaml_file" |
| reset_base Devmode.bmp |
| center_up "${lc}_devmode_text" |
| echo "" >> "$yaml_file" |
| |
| echo " ${lc}_remove:" >> "$yaml_file" |
| echo " - [ 0, 0, remove_bg]" >> "$yaml_file" |
| reset_base Remove.bmp |
| center_up "${lc}_model_text" "hwid" |
| center_up "url" |
| center_up "${lc}_remove_text" |
| echo "" >> "$yaml_file" |
| |
| echo " ${lc}_yuck:" >> "$yaml_file" |
| echo " - [ 0, 0, yuck_bg]" >> "$yaml_file" |
| reset_base Yuck.bmp |
| center_up "${lc}_model_text" "hwid" |
| center_up "url" |
| center_up "${lc}_yuck_text" |
| echo "" >> "$yaml_file" |
| |
| echo " ${lc}_insert:" >> "$yaml_file" |
| echo " - [ 0, 0, insert_bg]" >> "$yaml_file" |
| reset_base Insert.bmp |
| center_up "${lc}_model_text" "hwid" |
| center_up "url" |
| center_up "${lc}_insert_text" |
| echo "" >> "$yaml_file" |
| |
| done |
| |
| |
| # Finally list the localizations. |
| |
| cat >>"$yaml_file" <<EOF2 |
| localizations: |
| |
| # This determines the order in which the localizations appear. The first |
| # one is the default. |
| |
| EOF2 |
| |
| # Let's try to use the native one first, if we can. |
| guess_locale "$yaml_file" |
| |
| for lc in $newlocales; do |
| echo " - [ ${lc}_devel, ${lc}_remove, ${lc}_yuck, ${lc}_insert ]" >> \ |
| "$yaml_file" |
| done |
| |
| done |