Aliaksei Budavei | 48fa319 | 2024-12-30 10:23:50 +0100 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | # VIM_TEST_SETUP highlight link shArrayValue Identifier |
| 3 | # VIM_TEST_SETUP highlight link shBracketExprDelim Structure |
| 4 | # VIM_TEST_SETUP highlight link shCharClass Todo |
| 5 | # VIM_TEST_SETUP highlight link shRange CursorLine |
| 6 | |
| 7 | |
| 8 | |
| 9 | |
| 10 | [[ ( "$1" == ?(-)+([0-9]) && "$1" =~ ^-?[[:digit:]]+$ && |
| 11 | '^?(-)+([[:digit:]])$' == "$2" && ! "^-?[0-9]+$" =~ "$2" ) ]] || : |
| 12 | |
| 13 | [ \( "$1" != "?(-)+([0-9])" -a "$1" != '?(-)+([[:digit:]])' \) ] && |
| 14 | [ \( "?(-)+([[:digit:]])" != "$2" -a '?(-)+([0-9])' != "$2" \) ] || : |
| 15 | |
| 16 | # Match "\[0\]\[0\]", "{0}{0}", etc. |
| 17 | : [[{][0-9]*[]}][[{][[:digit:]]*[]}] |
| 18 | : [\ |
| 19 | [{][0-9]*[]}][[{][[:digit:]]*[]}] |
| 20 | : [[\ |
| 21 | {][0-9]*[]}][[{][[:digit:]]*[]}] |
| 22 | : [[{\ |
| 23 | ][0-9]*[]}][[{][[:digit:]]*[]}] |
| 24 | : [[{]\ |
| 25 | [0-9]*[]}][[{][[:digit:]]*[]}] |
| 26 | : [[{][\ |
| 27 | 0-9]*[]}][[{][[:digit:]]*[]}] |
| 28 | : [[{][0-9\ |
| 29 | ]*[]}][[{][[:digit:]]*[]}] |
| 30 | : [[{][0-9]\ |
| 31 | *[]}][[{][[:digit:]]*[]}] |
| 32 | : [[{][0-9]*\ |
| 33 | []}][[{][[:digit:]]*[]}] |
| 34 | : [[{][0-9]*[]\ |
| 35 | }][[{][[:digit:]]*[]}] |
| 36 | : [[{][0-9]*[]}\ |
| 37 | ][[{][[:digit:]]*[]}] |
| 38 | : [[{][0-9]*[]}]\ |
| 39 | [[{][[:digit:]]*[]}] |
| 40 | : [[{][0-9]*[]}][\ |
| 41 | [{][[:digit:]]*[]}] |
| 42 | : [[{][0-9]*[]}][[\ |
| 43 | {][[:digit:]]*[]}] |
| 44 | : [[{][0-9]*[]}][[{\ |
| 45 | ][[:digit:]]*[]}] |
| 46 | : [[{][0-9]*[]}][[{]\ |
| 47 | [[:digit:]]*[]}] |
| 48 | : [[{][0-9]*[]}][[{][\ |
| 49 | [:digit:]]*[]}] |
| 50 | : [[{][0-9]*[]}][[{][[:digit:]\ |
| 51 | ]*[]}] |
| 52 | : [[{][0-9]*[]}][[{][[:digit:]]\ |
| 53 | *[]}] |
| 54 | : [[{][0-9]*[]}][[{][[:digit:]]*\ |
| 55 | []}] |
| 56 | : [[{][0-9]*[]}][[{][[:digit:]]*[]\ |
| 57 | }] |
| 58 | : [[{][0-9]*[]}][[{][[:digit:]]*[]}\ |
| 59 | ] |
| 60 | : [[{][0-9]*[]}][[{][[:digit:]]*[[.].]}] |
| 61 | : [[{][0-9]*[]}][[{][[:digit:]]*[\ |
| 62 | [.].]}] |
| 63 | : [[{][0-9]*[]}][[{][[:digit:]]*[[.].]\ |
| 64 | }] |
| 65 | : [[{][0-9]*[]}][[{][[:digit:]]*[[.].]}\ |
| 66 | ] |
| 67 | |
| 68 | # Match "\[0\]\[0\]", "{0}{0}", etc. |
| 69 | case "$1" in |
| 70 | [[{][0-9]*[]}][[{][[:digit:]]*[]}]*) : [0-9]; : [!0-9]; : [^0-9];; |
| 71 | [\ |
| 72 | [{][0-9]*[]}][[{][[:digit:]]*[]}]*) : [0123]; : [!0123]; : [^0123];; |
| 73 | [[\ |
| 74 | {][0-9]*[]}][[{][[:digit:]]*[]}]*) : [1[.0.]]; : [![.0.]]; : [^[.0.]^];; |
| 75 | [[{\ |
| 76 | ][0-9]*[]}][[{][[:digit:]]*[]}]*) : [1[=0=]]; : [![=0=]!]; : [^[=0=]];; |
| 77 | [[{]\ |
| 78 | [0-9]*[]}][[{][[:digit:]]*[]}]*) ;; |
| 79 | [[{][\ |
| 80 | 0-9]*[]}][[{][[:digit:]]*[]}]*) ;; |
| 81 | [[{][0-9\ |
| 82 | ]*[]}][[{][[:digit:]]*[]}]*) : ?[[:foo:]]?; : [![:foo:]]?; : ?[^[:foo:]];; |
| 83 | [[{][0-9]\ |
| 84 | *[]}][[{][[:digit:]]*[]}]*) : [[:digit:]]; : [![:digit:]]; : [^[:digit:]];; |
| 85 | [[{][0-9]*\ |
| 86 | []}][[{][[:digit:]]*[]}]*) : "${1^[[:lower:]]}"; : "${1^^[a-z]}";; |
| 87 | [[{][0-9]*[]\ |
| 88 | }][[{][[:digit:]]*[]}]*) : "${1,[[:upper:]]}"; : "${1,,[A-Z]}";; |
| 89 | [[{][0-9]*[]}\ |
| 90 | ][[{][[:digit:]]*[]}]*) ;; |
| 91 | [[{][0-9]*[]}]\ |
| 92 | [[{][[:digit:]]*[]}]*) ;; |
| 93 | [[{][0-9]*[]}][\ |
| 94 | [{][[:digit:]]*[]}]*) : "${1#[[:digit:]]}"; : "${1##[0-9]}";; |
| 95 | [[{][0-9]*[]}][[\ |
| 96 | {][[:digit:]]*[]}]*) : "${1%[[:digit:]]}"; : "${1%%[0-9]}";; |
| 97 | [[{][0-9]*[]}][[{\ |
| 98 | ][[:digit:]]*[]}]*) : "${1/[][:digit:][]/[0-9]}"; : "${1//[]0-9[]/[0-9]}";; |
| 99 | [[{][0-9]*[]}][[{]\ |
| 100 | [[:digit:]]*[]}]*) : "${1/#[][:digit:][]/[0-9]}"; : "${1/%[]0-9[]/[0-9]}";; |
| 101 | [[{][0-9]*[]}][[{][\ |
| 102 | [:digit:]]*[]}]*) ;; |
| 103 | [[{][0-9]*[]}][[{][[:digit:]\ |
| 104 | ]*[]}]*) ;; |
| 105 | [[{][0-9]*[]}][[{][[:digit:]]\ |
| 106 | *[]}]*) : "${1#*[[.[.][.].]]}"; : "${1%[[.].][.[.]]*}"; : "${1#*" "[][]}";; |
| 107 | [[{][0-9]*[]}][[{][[:digit:]]*\ |
| 108 | []}]*) : "${1#*[[=[=][=]=]]}"; : "${1%[[=]=][=[=]]*}"; : "${1#*\ [!][]}";; |
| 109 | [[{][0-9]*[]}][[{][[:digit:]]*[]\ |
| 110 | }]*) : "${1#*[!]]}"; : "${1#*[^]]}"; : "${1%[![]*}"; : "${1%[^[]*}";; |
| 111 | [[{][0-9]*[]}][[{][[:digit:]]*[]}\ |
| 112 | ]*) : "${1#*[!\]]}"; : "${1#*[^\]]}"; : "${1%[!\[]*}"; : "${1%[^\[]*}";; |
| 113 | [[{][0-9]*[]}][[{][[:digit:]]*[]}]\ |
| 114 | *) ;; |
| 115 | [[{][0-9]*[]}][[{][[:digit:]]*[[.].]}]\ |
| 116 | *) ;; |
| 117 | [[{][0-9]*[]}][[{][[:digit:]]*[\ |
| 118 | [.].]}]*) ;; |
| 119 | [[{][0-9]*[]}][[{][[:digit:]]*[[.].]\ |
| 120 | }]*) ;; |
| 121 | [[{][0-9]*[]}][[{][[:digit:]]*[[.].]}\ |
| 122 | ]*) ;; |
| 123 | [!][:digit:][:xdigit:]\ [^[:lower:]![:upper:]]*) ;; |
| 124 | [^][:digit:]0-9a-fA-F\ [![:lower:]^[:upper:]]*) ;; |
| 125 | [!!] | [!![] | [!]!] | [!^] | [!^[] | [!]^]) ;; |
| 126 | [^!] | [^![] | [^]!] | [^^] | [^^[] | [^]^]) ;; |
| 127 | esac |
| 128 | |
| 129 | # Match "\[0\]\[0\]", "{0}{0}", etc. |
| 130 | : "${1#*[[{][0-9]*[]}][[{][[:digit:]]*[]}]}" |
| 131 | : "${1#*\ |
| 132 | [[{][0-9]*[]}][[{][[:digit:]]*[]}]}" |
| 133 | : "${1#*[\ |
| 134 | [{][0-9]*[]}][[{][[:digit:]]*[]}]}" |
| 135 | : "${1#*[[\ |
| 136 | {][0-9]*[]}][[{][[:digit:]]*[]}]}" |
| 137 | : "${1#*[[{\ |
| 138 | ][0-9]*[]}][[{][[:digit:]]*[]}]}" |
| 139 | : "${1#*[[{]\ |
| 140 | [0-9]*[]}][[{][[:digit:]]*[]}]}" |
| 141 | : "${1#*[[{][\ |
| 142 | 0-9]*[]}][[{][[:digit:]]*[]}]}" |
| 143 | : "${1#*[[{][0-9\ |
| 144 | ]*[]}][[{][[:digit:]]*[]}]}" |
| 145 | : "${1#*[[{][0-9]\ |
| 146 | *[]}][[{][[:digit:]]*[]}]}" |
| 147 | : "${1#*[[{][0-9]*\ |
| 148 | []}][[{][[:digit:]]*[]}]}" |
| 149 | : "${1#*[[{][0-9]*[]\ |
| 150 | }][[{][[:digit:]]*[]}]}" |
| 151 | : "${1#*[[{][0-9]*[]}\ |
| 152 | ][[{][[:digit:]]*[]}]}" |
| 153 | : "${1#*[[{][0-9]*[]}]\ |
| 154 | [[{][[:digit:]]*[]}]}" |
| 155 | : "${1#*[[{][0-9]*[]}][\ |
| 156 | [{][[:digit:]]*[]}]}" |
| 157 | : "${1#*[[{][0-9]*[]}][[\ |
| 158 | {][[:digit:]]*[]}]}" |
| 159 | : "${1#*[[{][0-9]*[]}][[{\ |
| 160 | ][[:digit:]]*[]}]}" |
| 161 | : "${1#*[[{][0-9]*[]}][[{]\ |
| 162 | [[:digit:]]*[]}]}" |
| 163 | : "${1#*[[{][0-9]*[]}][[{][\ |
| 164 | [:digit:]]*[]}]}" |
| 165 | : "${1#*[[{][0-9]*[]}][[{][[:digit:]\ |
| 166 | ]*[]}]}" |
| 167 | : "${1#*[[{][0-9]*[]}][[{][[:digit:]]\ |
| 168 | *[]}]}" |
| 169 | : "${1#*[[{][0-9]*[]}][[{][[:digit:]]*\ |
| 170 | []}]}" |
| 171 | : "${1#*[[{][0-9]*[]}][[{][[:digit:]]*[]\ |
| 172 | }]}" |
| 173 | : "${1#*[[{][0-9]*[]}][[{][[:digit:]]*[]}\ |
| 174 | ]}" |
| 175 | : "${1#*[[{][0-9]*[]}][[{][[:digit:]]*[]}]\ |
| 176 | }" |
| 177 | : "${1#*[[{][0-9]*[]}][[{][[:digit:]]*[[.].]}]}" |
| 178 | : "${1#*[[{][0-9]*[]}][[{][[:digit:]]*[\ |
| 179 | [.].]}]}" |
| 180 | : "${1#*[[{][0-9]*[]}][[{][[:digit:]]*[[.].]\ |
| 181 | }]}" |
| 182 | : "${1#*[[{][0-9]*[]}][[{][[:digit:]]*[[.].]}]\ |
| 183 | }" |
| 184 | |
| 185 | : *[x[=[=][=]=]]; : [x[=]=][=[=]]*; : *[x[.[.][.].]]; : [x[.].][.[.]]* |
| 186 | : *[[=[=]x[=]=]]; : [[=]=]x[=[=]]*; : *[[.[.]x[.].]]; : [[.].]x[.[.]]* |
| 187 | : *[[=[=][=]=]x]; : [[=]=][=[=]x]*; : *[[.[.][.].]x]; : [[.].][.[.]x]* |
| 188 | : [!]]; : [^]]; : [![]; : [^[]; : [!\]]; : [^\]]; : [!\[]; : [^\[] |
| 189 | : [$'\x5b']; : [$'\x5d']; : []]; : [[]; : [\]]; : [\[] |
| 190 | : [$'\x20'[]; : [" "[]; : [' '[]; : [\ []; : [\ \[]; : "${1#[ ]}" |
| 191 | : [[$'\x20']; : [[" "]; : [[' ']; : [[\ ]; : [\[\ ]; : "${1#[ ]}" |
| 192 | : [^$'\x20'[]; : [!" "[]; : [^' '[]; : [!\ []; : "${1#[^ ]}" |
| 193 | : [![$'\x20']; : [^[" "]; : [![' ']; : [^[\ ]; : "${1#[! ]}" |
| 194 | |
| 195 | nl=' |
| 196 | ' |
| 197 | echo "${1#${1%%[!"${nl}"]*}}"; echo "${1#${1%%[!'${nl}']*}}" |
| 198 | echo "${1#${1%%[!\"${nl}]*}}"; echo "${1#${1%%[!\'${nl}]*}}" |
| 199 | echo "${1#${1%%[!${nl}\"]*}}"; echo "${1#${1%%[!${nl}\']*}}" |
| 200 | |
| 201 | bins=(); bins=(0 1); eval bins+=({0..1}) |
| 202 | bins[0]=0; bins[1]=1; eval bins+=(\${bins[{1..0}]}); unset bins[3] bins[2] |
| 203 | bins=([8#0]=$((2#100)) [$((8#1))]=$((2#10)) [3]=${bins[2#1]} ${bins[0]}) |
| 204 | (echo sum[$((bins[16#3] + bins[8#2] + bins[2#1] + bins[0]))]) |
| 205 | eval unset bins[{0..$((${#bins[*]} - 1))}] |
| 206 | : |