Spaces to tabs implemented in AWK
This commit is contained in:
parent
77dd6b1d66
commit
3bf8dd356a
1 changed files with 27 additions and 22 deletions
45
bin/s2t
45
bin/s2t
|
|
@ -1,30 +1,35 @@
|
|||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env bash
|
||||
|
||||
import sys
|
||||
awk -v n_spaces="$1" '
|
||||
|
||||
DEFAULT_N_SPACES = 4
|
||||
TAB, SPACE = ' ', ' '
|
||||
BEGIN {
|
||||
tab = " "
|
||||
space = " "
|
||||
|
||||
try:
|
||||
n_spaces = int(sys.argv[1])
|
||||
except:
|
||||
n_spaces = DEFAULT_N_SPACES
|
||||
if (n_spaces < 1)
|
||||
n_spaces = 4
|
||||
}
|
||||
|
||||
if n_spaces < 1:
|
||||
n_spaces = DEFAULT_N_SPACES
|
||||
|
||||
for line in sys.stdin:
|
||||
line = line.rstrip()
|
||||
function spaces_to_tabs(line) {
|
||||
n_leading_spaces = 0
|
||||
|
||||
for ch in line:
|
||||
if ch != SPACE:
|
||||
for (i = 1; i <= length(line); i += 1) {
|
||||
if (substr(line, i, 1) != space)
|
||||
break
|
||||
n_leading_spaces += 1
|
||||
}
|
||||
|
||||
if 0 < n_leading_spaces < n_spaces:
|
||||
if ( (0 < n_leading_spaces) && (n_leading_spaces < n_spaces) )
|
||||
n_tabs = 1
|
||||
else:
|
||||
n_tabs = n_leading_spaces // n_spaces
|
||||
else
|
||||
n_tabs = int(n_leading_spaces / n_spaces)
|
||||
|
||||
print(TAB * n_tabs, line[n_leading_spaces:], sep='')
|
||||
tabs = ""
|
||||
while (n_tabs--)
|
||||
tabs = tabs tab
|
||||
|
||||
return tabs substr(line, i)
|
||||
}
|
||||
|
||||
{ print spaces_to_tabs($0) }
|
||||
|
||||
'
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue