diff options
-rw-r--r-- | tools/sed-callbacks | 11 | ||||
-rw-r--r-- | tools/sed-enums | 17 | ||||
-rw-r--r-- | tools/sed-functions | 8 | ||||
-rw-r--r-- | tools/sed-types | 18 | ||||
-rw-r--r-- | tools/sed-variables | 3 |
5 files changed, 47 insertions, 10 deletions
diff --git a/tools/sed-callbacks b/tools/sed-callbacks index 4a2e27f..42051ba 100644 --- a/tools/sed-callbacks +++ b/tools/sed-callbacks @@ -1,11 +1,20 @@ +# drop if don't start with typedef +/^\s*typedef/ ! b +# one line typedef xxx (...); we are done s/^\s*typedef\s+(.*)(\(\*?\w+\))?\s*(\(.*\));.*$/typedef \1 \2 \3;/ t finish +# if ends with , s/^\s*typedef\s+(.*)(\(\*?\w+\))?\s*(\(.*,)/typedef \1 \2 \3/ +# drop if substitution fail, copy pattern to hold space T;h :loop;n +# append each parameters /,$/ { H; b loop } -/;$/ { H;x} +# when ; reached, append a swap hold space to pattern space +/;.*$/ { H;x} :finish +# drop \n s/\n//g +# replace multi spaces with one s/ {2,}/ /g p diff --git a/tools/sed-enums b/tools/sed-enums index ffc193b..14738ac 100644 --- a/tools/sed-enums +++ b/tools/sed-enums @@ -1,17 +1,32 @@ -s/^\s*(typedef)?\s+(enum(\s+\w+)?).*$/typedef \2 { / +# drop if don't start with (typedef)? enum +/^\s*(typedef\s)?\s*enum/ ! b +# +s/^\s*(typedef\s)?\s*(enum(\s+\w+)?).*$/typedef \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*-?[0-9]+)?.*$/\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 diff --git a/tools/sed-functions b/tools/sed-functions index 296cab1..ac784a5 100644 --- a/tools/sed-functions +++ b/tools/sed-functions @@ -1,9 +1,13 @@ -/EAPI extern/ b -# if return type on single line, append next line +# drop if don't start with EAPI +/^\s*EAPI/ ! b +# drop extern definitions +/EAPI\s+extern/ b +# if does not end with ;, append next line /EAPI.*[^;]\s*$/ { N; s/\n/ / } # while unfinished argument list, append next line :loop /,$/ { N; s/\n/ /; t loop } +# replace multi spaces with one ... s/ {2,}/ /g s/\s+EINA_.*/;/ s/^\s*EAPI/EAPI/p diff --git a/tools/sed-types b/tools/sed-types index 7ac79a2..52a7252 100644 --- a/tools/sed-types +++ b/tools/sed-types @@ -1,14 +1,22 @@ +# drop if don't start with typedef +/^\s*typedef/ ! b +# read one line typedef (struct)? (word*)? (*)? word; s/^\s*typedef\s+(struct\s+)?((\w+\**\s+)*)(\w+)\s*;.*$/typedef \1 \2 \4;/ t finish +# read multi line s/^\s*typedef\s+(struct.*[^;].*)/typedef \1/ -T -h -:loop -n +# leave if substitution fails, or copy pattern to hold space +T; h +:loop; n +# read till } is reached /^\s*\}/ ! b loop +# take care of the last } word; s/^\s*\}\s*(\w+)\s*;.*$/\1;/ +# append pattern to hold space, then swap H;x -s/\n/ /g :finish +# remove \n +s/\n/ /g +# replace multi spaces with one ... s/ {2,}/ /g p diff --git a/tools/sed-variables b/tools/sed-variables index 3f11c67..36c612f 100644 --- a/tools/sed-variables +++ b/tools/sed-variables @@ -1 +1,2 @@ -s/(EAPI\s+extern\s+\w+\s+\*?\w+\s*;).*$/\1/p +# variable should be EAPI extern word word;; +s/^\s*(EAPI\s+extern\s+\w+\s+\*?\w+\s*;).*$/\1/p |