table

Помоћни програм из командне линије за форматирање и приказ CSV-а
git clone https://git.sr.ht/~strahinja/table
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 7807390a4a0eb5f5ec73021acee942f123a7ca69
родитељ 571241c3b5f4b41fe75ca86718e619d65aed70b0
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Thu,  5 Oct 2023 16:08:21 +0200

Add -D

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
M.gitignore | 1+
Mtable.1.in | 8++++++++
Mtable.c | 42+++++++++++++++++++++++++++++-------------
измењених датотека: 3, додавања: 38(+), брисања: 13(-)

diff --git a/.gitignore b/.gitignore @@ -13,6 +13,7 @@ *.ps *.swp *.did +cscope.out nohup.out *.gz *.xz diff --git a/table.1.in b/table.1.in @@ -50,6 +50,7 @@ is a synonym for .OP "\-a \fR|\fP \-\-align=" alignment .OP "\-b \fR|\fP \-\-border\-mode" .OP "\-c \fR|\fP \-\-columns=" cols +.OP "\-D \fR|\fP \-\-align-dot" .OP "\-d \fR|\fP \-\-delimiter=" delim .OP "\-f \fR|\fP \-\-format=" format .OP "\-H \fR|\fP \-\-align\-header" @@ -122,6 +123,13 @@ Border mode: force single column. Set maximum table width in columns (default 80). . .TP +.BI \-D +.TQ +.BI \-\-align\-dot +.br +Set alignment character to dot "." instead of a space " ". +. +.TP .BI \-d " delim" .TQ .BI \-\-delimiter= delim diff --git a/table.c b/table.c @@ -86,6 +86,7 @@ int msdos = 0; int pause = 0; int expand_tabs = 0; int quotes = Q_PROCESS; +char alignment_char = ' '; int version() @@ -98,8 +99,9 @@ int usage() { printf("Usage: %s [-a <alignment>|--align=<alignment>]" - " [-b|--border-mode] [-c <cols>|--columns=<cols>] [-d" - " <delim>|--delimiter=<delim>] [-f <format>|--format=<format>]" + " [-b|--border-mode] [-c <cols>|--columns=<cols>]" + " [-D|--align-dot] [-d <delim>|--delimiter=<delim>]" + " [-f <format>|--format=<format>]" " [-H|--align-header] [-h|--help] [-m|--msdos] [-n|--no-ansi]" " [-p|--pause] [-q <behavior>|--quotes=<behavior>]" " [-s <set>|--symbols=<set>] [-t|--expand-tabs]" @@ -445,13 +447,13 @@ print_aligned(const u8* s, size_t rune_length, size_t to_size, Alignment align, if (align == ALIGN_CENTER) for (i = 0; 2 * i + rune_length < to_size; i++) { - printf(" "); + printf("%c", alignment_char); (*current_rune_column)++; } else if (align == ALIGN_RIGHT) for (i = 0; i + rune_length < to_size; i++) { - printf(" "); + printf("%c", alignment_char); (*current_rune_column)++; } if (align == ALIGN_LEFT) @@ -462,6 +464,9 @@ print_aligned(const u8* s, size_t rune_length, size_t to_size, Alignment align, skip_while_sgr(ps, &skipped_chars, 1, 0); ps += skipped_chars; + if (!no_ansi && lineno == 0) + printf("%s", ANSI_SGR_BOLD_ON); + u8_char_to_u32(&uch, ps, &ch_len); output_chars = 0; while (output_chars != ch_len) @@ -493,6 +498,9 @@ print_aligned(const u8* s, size_t rune_length, size_t to_size, Alignment align, skip_while_sgr(ps, &skipped_chars, 1, 0); ps += skipped_chars; + if (!no_ansi && lineno == 0) + printf("%s", ANSI_SGR_BOLD_ON); + u8_char_to_u32(&uch, ps, &ch_len); output_chars = 0; while (output_chars != ch_len) @@ -523,6 +531,9 @@ print_aligned(const u8* s, size_t rune_length, size_t to_size, Alignment align, skip_while_sgr(ps, &skipped_chars, 1, 0); ps += skipped_chars; + if (!no_ansi && lineno == 0) + printf("%s", ANSI_SGR_BOLD_ON); + u8_char_to_u32(&uch, ps, &ch_len); output_chars = 0; while (output_chars != ch_len) @@ -611,6 +622,11 @@ do_arg: arg += strlen("align-header"); align_header = 1; } + else if (!strcmp(arg, "align-dot")) + { + arg += strlen("align-dot"); + alignment_char = '.'; + } else if (startswith(arg, "align=")) { arg += strlen("align="); @@ -704,6 +720,9 @@ do_arg: case 'c': cmd = CMD_COLUMNS; break; + case 'D': + alignment_char = '.'; + break; case 'd': cmd = CMD_DELIMITER; break; @@ -949,7 +968,7 @@ empty_line: { while (within_column(column_start, current_rune_column)) { - printf(" "); + printf("%c", alignment_char); current_rune_column++; } u8len = u32_char_to_u8(u8ch, @@ -966,7 +985,7 @@ empty_line: } while (within_column(column_start, current_rune_column)) { - printf(" "); + printf("%c", alignment_char); current_rune_column++; } u8len = u32_char_to_u8(u8ch, *table_symbols[current_symbol_set][5]); @@ -985,9 +1004,6 @@ not_first: u8ch[u8len] = 0; printf("%s", u8ch); - if (!no_ansi && lineno == 0) - printf("%s", ANSI_SGR_BOLD_ON); - do_line: if (!pline || !*pline) { @@ -1066,7 +1082,7 @@ continue_line: while (within_column(column_start, current_rune_column)) { - printf(" "); + printf("%c", alignment_char); current_rune_column++; } @@ -1109,7 +1125,7 @@ continue_line: { while ((current_rune_column + outbufrunelen) % tab_length != 0) { - sprintf((char*)poutbuf, " "); + sprintf((char*)poutbuf, "%c", alignment_char); poutbuf++; outbufrunelen++; } @@ -1156,7 +1172,7 @@ done_line:; { while (within_column(column_start, current_rune_column)) { - printf(" "); + printf("%c", alignment_char); current_rune_column++; } u8len = u32_char_to_u8(u8ch, @@ -1173,7 +1189,7 @@ done_line:; } while (within_column(column_start, current_rune_column)) { - printf(" "); + printf("%c", alignment_char); current_rune_column++; }