master hovercats/oakiss / repo / xkeyboard-config / files / xml2lst
 1#!/bin/sh
 2# converts the <rules>.xml file to the old format <rules>.lst file
 3# Usage: xml2lst < filename.xml > filename.lst
 4
 5[ "$1" ] && exec 0< "$1"
 6
 7var=0 com=0 nam=''
 8
 9printf '! model\n'
10while read -r l || [ "$l" ]; do case $l in
11    *'<name>'*)         n=${l#*>} n=${n%<*};;
12    *'<description>'*)  l=${l#*>}; printf '  %-15s %s\n' "$n" "${l%<*}" ;;
13    *'</modelList>'*)   break
14esac; done
15
16printf '\n! layout\n'
17while read -r l || [ "$l" ]; do case $l in
18    *'<variantList>'*)  var=1;;
19    *'</variantList>'*) var=0;;
20    *'</layoutList>'*)  break;;
21
22    *'<name>'*)
23        l="${l#*>}"
24        [ "$var" -eq 0 ] && ln=${l%<*} || n=${l%<*}
25    ;;
26
27    *'<description>'*)
28        l=${l#*>}
29
30        case $var in
31            0) printf '  %-15s %s\n' "${ln}" "${l%<*}" ;;
32            *) nam="${nam%x}  $(printf '%-15s %s: %s\nx' "$n" "$ln" "${l%<*}")"
33        esac
34    ;;
35esac; done
36
37printf '\n! variant\n%s\n! option\n' "${nam%x}"
38while read -r l || [ "$l" ]; do case $l in
39    *'-->'*)            com=0;;
40    *'<!--'*)           com=1;;
41    *'</optionList>'*)  break;;
42    *'<name>'*)         n=${l#*>} n=${n%<*} ;;
43
44    *'<description>'*)
45        l=${l#*>}
46
47        [ "$com" -ne 0 ] || printf '  %-20s %s\n' "$n" "${l%<*}"
48    ;;
49esac; done