rawTherapee/tools/generateUnusedKeys
Hombre 8b2eac9a3d Pipette and "On Preview Widgets" branch. See issue 227
The pipette part is already working quite nice but need to be finished. The widgets part needs more work...
2014-01-21 23:37:36 +01:00

100 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# This Bash4 script checks whether each key in "default" appears in
# a .cc or .h file. Those that do not are printed to screen, and the
# user is asked if they should be deleted from all language files.
#
# Keys in commented-out sections are not skipped, so they will remain
# in the language files.
# It does not handle dynamically built keys:
# HISTORY_MSG_
# EXTPROGTARGET_
# FILEBROWSER_POPUPRANK
# FILEBROWSER_POPUPCOLORLABEL
#
# Run the script from the project root:
# ./tools/generateUnusedKeys
#
# Doublecheck the deletion before committing.
# Run ./tools/generateTranslationDiffs after running this script.
tmp=temp_file
if [[ -w $tmp ]]; then
rm -v "$tmp"
fi
abort () {
printf "%s\n" "" "Aborted" "Removing leftover files:"
[[ -e "$tmp" ]] && rm "$tmp"
rm -v --interactive=once sed*
exit 1
}
trap 'abort' HUP INT QUIT ABRT TERM
cd "rtdata/languages" || { printf "%s\n" "You must run this script from the root of the project."; exit 1; }
# Build array of all interface translation files, or use user-specified ones only
unset langFiles
if [[ $# = 0 ]]; then
while read -r; do
langFiles+=("$REPLY")
done < <(find . -not -iname "LICENSE" -not -iname "README" -not -iname "*.sh" -not -iname ".*" -not -iname "$tmp" | sort)
else
langFiles=("$@")
for langFile in "${langFiles[@]}"; do
if [[ ! -w $langFile ]]; then
printf "%s\n" "File \"$langFile\" not found or not writable." ""
exit 1
fi
done
fi
dos2unix default 2>/dev/null
t1="$(date +%s)"
printf "%s\n" 'Matching keys in "default" against .cc and .h files' 'Unmatched keys follow:'
unset delLines
while read -r 'defLine'; do
grep -Irl -m1 --include=\*.{cc,h} --exclude-dir="klt" "${defLine%%;*}" ../../* &>/dev/null
if [[ $? = 1 ]]; then
printf " %s\n" "${defLine%%;*}"
delLines+=("${defLine%%;*}")
fi
done < <(grep -Ev "^(#|$)|HISTORY_MSG_" "default" | sed -e "s/EXTPROGTARGET_[0-9]*/EXTPROGTARGET_/" -e "s/FILEBROWSER_POPUPCOLORLABEL[0-9]*/FILEBROWSER_POPUPCOLORLABEL/" -e "s/FILEBROWSER_POPUPRANK[0-9]*/FILEBROWSER_POPUPRANK/" | sort -Vu)
# The grep/sed line above lists keys to ignore.
# Dynamically built keys like HISTORY_MSG_1 can't be grepped in the code,
# so it renames KEY_1-KEY_9 to KEY_ so that they can be grepped and therefore ignored.
t2="$(date +%s)"
tt=$((t2-t1))
printf "%s\n" "" "Scan took $tt seconds" ""
read -r -p 'Write results to "unmatched"? [y/n] '
if [[ $REPLY = y || $REPLY = Y ]]; then
printf "%s\n" "${delLines[@]}" > unmatched
printf "%s\n" ""
fi
read -r -p "Delete keys from all ${#langFiles[@]} interface language files? [y/n] "
if [[ $REPLY = y || $REPLY = Y ]]; then
printf "%s\n" "Removing keys from:"
i=1
ttot1="$(date +%s)"
for file in "${langFiles[@]}"; do
printf "%02d - ${file#.*/}" "$i"
t1="$(date +%s)"
for key in "${delLines[@]}"; do
sed -i "/.\?$key/d" "$file"
done
t2="$(date +%s)"
tt=$((t2-t1))
printf "%s\n" " - took $tt seconds"
((i++))
done
ttot2="$(date +%s)"
ttot=$((ttot2-ttot1))
tsec=$((ttot%60))
tmin=$((ttot/60))
printf "%s\n" "Finished updating ${#langFiles[@]} files." "Total time: ${tmin}m ${tsec}s"
fi