From 3bf8dd356af3701463434700c372149e15e3543d Mon Sep 17 00:00:00 2001 From: Ev Bogdanov Date: Sat, 19 Aug 2017 18:08:56 +0300 Subject: [PATCH] Spaces to tabs implemented in AWK --- bin/s2t | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/bin/s2t b/bin/s2t index 9b67677..4142881 100755 --- a/bin/s2t +++ b/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 +function spaces_to_tabs(line) { + 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: - line = line.rstrip() - n_leading_spaces = 0 + if ( (0 < n_leading_spaces) && (n_leading_spaces < n_spaces) ) + n_tabs = 1 + else + n_tabs = int(n_leading_spaces / n_spaces) - for ch in line: - if ch != SPACE: - break - n_leading_spaces += 1 + tabs = "" + while (n_tabs--) + tabs = tabs tab - if 0 < n_leading_spaces < n_spaces: - n_tabs = 1 - else: - n_tabs = n_leading_spaces // n_spaces + return tabs substr(line, i) +} - print(TAB * n_tabs, line[n_leading_spaces:], sep='') +{ print spaces_to_tabs($0) } + +'