Spaces to tabs implemented in AWK

This commit is contained in:
Ev Bogdanov 2017-08-19 18:08:56 +03:00
parent 77dd6b1d66
commit 3bf8dd356a

49
bin/s2t
View file

@ -1,30 +1,35 @@
#!/usr/bin/env python3 #!/usr/bin/env bash
import sys awk -v n_spaces="$1" '
DEFAULT_N_SPACES = 4 BEGIN {
TAB, SPACE = ' ', ' ' tab = " "
space = " "
try: if (n_spaces < 1)
n_spaces = int(sys.argv[1]) n_spaces = 4
except: }
n_spaces = DEFAULT_N_SPACES
if n_spaces < 1: function spaces_to_tabs(line) {
n_spaces = DEFAULT_N_SPACES n_leading_spaces = 0
for (i = 1; i <= length(line); i += 1) {
if (substr(line, i, 1) != space)
break
n_leading_spaces += 1
}
for line in sys.stdin: if ( (0 < n_leading_spaces) && (n_leading_spaces < n_spaces) )
line = line.rstrip() n_tabs = 1
n_leading_spaces = 0 else
n_tabs = int(n_leading_spaces / n_spaces)
for ch in line: tabs = ""
if ch != SPACE: while (n_tabs--)
break tabs = tabs tab
n_leading_spaces += 1
if 0 < n_leading_spaces < n_spaces: return tabs substr(line, i)
n_tabs = 1 }
else:
n_tabs = n_leading_spaces // n_spaces
print(TAB * n_tabs, line[n_leading_spaces:], sep='') { print spaces_to_tabs($0) }
'