summaryrefslogtreecommitdiffstats
path: root/tools/sed-enums
blob: 870e030a0feddffdfde927f85f9cf8cc53b6c351 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# drop if don't start with (typedef)? enum
/^\s*(typedef\s)?\s*enum/ ! b
#
s/^\s*(typedef\s)?\s*(enum(\s+\w+)?).*$/\1\2 { /
# drop if substitution fail, copy pattern to  hold space
T;h
:attrs;n
# read again if {
/^\s*\{/ b attrs
# append each item
s/^\s*([A-Z0-9_]+)(\s*=\s*[^,\/]+)?.*$/\1\2, /
# goto next if subsitution fails, append pattern, loop
T next;H;b attrs
:next
# try again if } not found
/^\s*\}/ ! b attrs
# read enumeration name
s/^\s*}\s*(\w+).*$/ } \1;/
t finish
:close
# read the enum typedef
s/^\s*typedef\s+enum\s+\w+\s+(\w+)\s*;/ } \1/
# leave if substitution works, or read next line and retry
t finish;n;b close
:finish
# append pattern, exchange hold space and pattern space
H;x
# remove \n
s/\n//g
# replace multi spaces with one
s/ {2,}/ /g
s/, }/ }/p