The pipette part is already working quite nice but need to be finished. The widgets part needs more work...
100 lines
3.1 KiB
Bash
Executable File
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
|