xkeyboard-config: Simpler xml2lst. Thanks @E5ten

This commit is contained in:
Dylan Araps 2020-02-27 21:03:43 +02:00
parent 0aea8f5209
commit 723989ae50
No known key found for this signature in database
GPG Key ID: 46D62DD9F1DE636E
1 changed files with 34 additions and 96 deletions

View File

@ -1,109 +1,47 @@
#!/bin/sh #!/bin/sh
# converts the <rules>.xml file to the old format <rules>.lst file # converts the <rules>.xml file to the old format <rules>.lst file
# # Usage: xml2lst < filename.xml > filename.lst
# Usage:
#
# sh xml2lst.sh < filename.xml > filename.lst
#
# author Ivan Pascal
configitem=0 var=0 com=0 nam=''
modellist=0
layout=0
configitem=0
variant=0
comment=0
printf '! model\n' printf '! model\n'
while read -r l || [ "$l" ]; do case $l in
while read -r line || [ "$line" ]; do *'<name>'*) n=${l#*>} n=${n%<*};;
case $line in *'<description>'*) l=${l#*>}; printf ' %-15s %s\n' "$n" "${l%<*}" ;;
*'<configItem>'*) configitem=1 ;; *'</modelList>'*) break
*'</configItem>'*) configitem=0 ;; esac; done
*'<modelList>'*) modellist=1 ;;
*'</modelList>'*) break ;;
*'<name>'*)
name=${line##*<name>}
name=${name%%</name>*}
;;
*'<description>'*)
desc=${line##*<description>}
desc=${desc%%</description>*}
[ "$configitem" -eq 0 ] || [ "$modellist" -eq 0 ] ||
printf ' %-15s %s\n' "$name" "$desc"
;;
esac
done
printf '\n! layout\n' printf '\n! layout\n'
while read -r l || [ "$l" ]; do case $l in
*'<variantList>'*) var=1;;
*'</variantList>'*) var=0;;
*'</layoutList>'*) break;;
while read -r line || [ "$line" ]; do *'<name>'*)
case $line in l="${l#*>}"
*'<layoutList>'*|*'<layout>'*) layout=1 ;; [ "$var" -eq 0 ] && ln=${l%<*} || n=${l%<*}
*'</layout>'*) layout=0 ;; ;;
*'<configItem>'*) configitem=1 ;;
*'</configItem>'*) configitem=0 ;;
*'<variantList>'*|*'<variant>'*) variant=1 ;;
*'</variantList>'*|*'</variant>'*) variant=0 ;;
*'</layoutList>'*) break ;;
esac
if [ "$layout" -ne 0 ]; then *'<description>'*)
if [ "${variant}" -ne 0 ]; then l=${l#*>}
case $line in
*'<name>'*)
name=${line##*<name>}
name=${name%%</name>*}
;;
*'<description>'*) case $var in
line="$lname: ${line##*<description>}" 0) printf ' %-15s %s\n' "${ln}" "${l%<*}" ;;
line=${line%%</description>*} *) nam="${nam%x} $(printf '%-15s %s: %s\nx' "$n" "$ln" "${l%<*}")"
names="$names $(printf '%-15s %s' "$name" "$line") esac
" ;;
;; esac; done
esac
elif [ "$configitem" -ne 0 ]; then printf '\n! variant\n%s\n! option\n' "${nam%x}"
case $line in while read -r l || [ "$l" ]; do case $l in
*'<name>'*) *'-->'*) com=0;;
lname=${line##*<name>} *'<!--'*) com=1;;
lname=${lname%%</name>*} *'</optionList>'*) break;;
;; *'<name>'*) n=${l#*>} n=${n%<*} ;;
*'<description>'*) *'<description>'*)
line=${line##*<description>} l=${l#*>}
line=${line%%</description>*}
printf ' %-15s %s\n' "$lname" "$line"
;;
esac
fi
fi
done
printf '\n! variant\n%s\n! option\n' "$names" [ "$com" -ne 0 ] || printf ' %-20s %s\n' "$n" "${l%<*}"
;;
while read -r line || [ "$line" ]; do esac; done
case $line in
*'-->'*) comment=0;;
*'<!--'*) comment=1;;
*'</optionList>'*) break;;
*'<name>'*)
name=${line##*<name>}
name=${name%%</name>*}
;;
*'<description>'*)
line=${line##*<description>}
line=${line%%</description>*}
[ "$comment" -ne 0 ] ||
printf ' %-20s %s\n' "$name" "$line"
;;
esac
done