mirror of
https://github.com/ascii-boxes/boxes.git
synced 2025-01-31 18:09:16 +01:00
Applied patch by Christoph Dreyer to support unexpansion of leading tabs
Added ability to retain existing tabs
This commit is contained in:
parent
0a06325655
commit
0803e5ca0a
@ -3,7 +3,7 @@
|
||||
* Project Main: boxes.c
|
||||
* Date created: June 23, 1999 (Wednesday, 20:10h)
|
||||
* Author: Copyright (C) 1999 Thomas Jensen <boxes@thomasjensen.com>
|
||||
* Version: $Id: generate.c,v 1.9 1999-08-31 08:37:01-07 tsjensen Exp tsjensen $
|
||||
* Version: $Id: generate.c,v 1.10 2006/07/12 05:42:28 tsjensen Exp tsjensen $
|
||||
* Language: ANSI C
|
||||
* World Wide Web: http://boxes.thomasjensen.com/
|
||||
* Purpose: Box generation, i.e. the drawing of boxes
|
||||
@ -24,6 +24,9 @@
|
||||
* Revision History:
|
||||
*
|
||||
* $Log: generate.c,v $
|
||||
* Revision 1.10 2006/07/12 05:42:28 tsjensen
|
||||
* Updated email and web addresses in comment header
|
||||
*
|
||||
* Revision 1.9 1999-08-31 08:37:01-07 tsjensen
|
||||
* Applied Joe Zbiciak's patches to remove all snprintf()s and variants
|
||||
* Replaced snprintf() calls with calls to concat_strings() in the process
|
||||
@ -73,7 +76,7 @@
|
||||
|
||||
|
||||
static const char rcsid_generate_c[] =
|
||||
"$Id: generate.c,v 1.9 1999-08-31 08:37:01-07 tsjensen Exp tsjensen $";
|
||||
"$Id: generate.c,v 1.10 2006/07/12 05:42:28 tsjensen Exp tsjensen $";
|
||||
|
||||
|
||||
|
||||
@ -861,6 +864,7 @@ int output_box (const sentry_t *thebox)
|
||||
size_t nol = thebox[BRIG].height; /* number of output lines */
|
||||
char trailspc[LINE_MAX+1];
|
||||
char *indentspc;
|
||||
int indentspclen;
|
||||
size_t vfill, vfill1, vfill2; /* empty lines/columns in box */
|
||||
size_t hfill;
|
||||
char *hfill1, *hfill2; /* space before/after text */
|
||||
@ -872,6 +876,8 @@ int output_box (const sentry_t *thebox)
|
||||
size_t skip_start; /* lines to skip for box top */
|
||||
size_t skip_end; /* lines to skip for box bottom */
|
||||
size_t skip_left; /* true if left box part is to be skipped */
|
||||
int ntabs, nspcs; /* needed for unexpand of tabs */
|
||||
char *restored_indent;
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf (stderr, "Padding used: left %d, top %d, right %d, bottom %d\n",
|
||||
@ -882,14 +888,31 @@ int output_box (const sentry_t *thebox)
|
||||
/*
|
||||
* Create string of spaces for indentation
|
||||
*/
|
||||
indentspc = NULL;
|
||||
ntabs = nspcs = indentspclen = 0;
|
||||
if (opt.design->indentmode == 'b') {
|
||||
indentspc = (char *) malloc (input.indent+1);
|
||||
if (opt.tabexp == 'u') {
|
||||
ntabs = input.indent / opt.tabstop;
|
||||
nspcs = input.indent % opt.tabstop;
|
||||
indentspclen = ntabs + nspcs;
|
||||
}
|
||||
else {
|
||||
indentspclen = input.indent;
|
||||
}
|
||||
indentspc = (char *) malloc (indentspclen + 1);
|
||||
if (indentspc == NULL) {
|
||||
perror (PROJECT);
|
||||
return 1;
|
||||
}
|
||||
memset (indentspc, (int)' ', input.indent);
|
||||
indentspc[input.indent] = '\0';
|
||||
|
||||
if (opt.tabexp == 'u') {
|
||||
memset (indentspc, (int)'\t', ntabs);
|
||||
memset (indentspc + ntabs, (int)' ', nspcs);
|
||||
}
|
||||
else {
|
||||
memset (indentspc, (int)' ', indentspclen);
|
||||
}
|
||||
indentspc[indentspclen] = '\0';
|
||||
}
|
||||
else {
|
||||
indentspc = (char *) strdup ("");
|
||||
@ -1004,7 +1027,8 @@ int output_box (const sentry_t *thebox)
|
||||
for (j=skip_start; j<nol-skip_end; ++j) {
|
||||
|
||||
if (j < thebox[BTOP].height) { /* box top */
|
||||
concat_strings (obuf, LINE_MAX+1, 4, indentspc,
|
||||
restored_indent = tabbify_indent (0, indentspc, indentspclen);
|
||||
concat_strings (obuf, LINE_MAX+1, 4, restored_indent,
|
||||
skip_left?"":thebox[BLEF].chars[j], thebox[BTOP].chars[j],
|
||||
thebox[BRIG].chars[j]);
|
||||
}
|
||||
@ -1012,7 +1036,8 @@ int output_box (const sentry_t *thebox)
|
||||
else if (vfill1) { /* top vfill */
|
||||
r = thebox[BTOP].width;
|
||||
trailspc[r] = '\0';
|
||||
concat_strings (obuf, LINE_MAX+1, 4, indentspc,
|
||||
restored_indent = tabbify_indent (0, indentspc, indentspclen);
|
||||
concat_strings (obuf, LINE_MAX+1, 4, restored_indent,
|
||||
skip_left?"":thebox[BLEF].chars[j], trailspc,
|
||||
thebox[BRIG].chars[j]);
|
||||
trailspc[r] = ' ';
|
||||
@ -1031,7 +1056,8 @@ int output_box (const sentry_t *thebox)
|
||||
return rc;
|
||||
r = input.maxline - input.lines[ti].len;
|
||||
trailspc[r] = '\0';
|
||||
concat_strings (obuf, LINE_MAX+1, 7, indentspc,
|
||||
restored_indent = tabbify_indent (ti, indentspc, indentspclen);
|
||||
concat_strings (obuf, LINE_MAX+1, 7, restored_indent,
|
||||
skip_left?"":thebox[BLEF].chars[j], hfill1,
|
||||
ti >= 0? input.lines[ti].text : "", hfill2,
|
||||
trailspc, thebox[BRIG].chars[j]);
|
||||
@ -1039,7 +1065,8 @@ int output_box (const sentry_t *thebox)
|
||||
else { /* bottom vfill */
|
||||
r = thebox[BTOP].width;
|
||||
trailspc[r] = '\0';
|
||||
concat_strings (obuf, LINE_MAX+1, 4, indentspc,
|
||||
restored_indent = tabbify_indent (input.anz_lines - 1, indentspc, indentspclen);
|
||||
concat_strings (obuf, LINE_MAX+1, 4, restored_indent,
|
||||
skip_left?"":thebox[BLEF].chars[j], trailspc,
|
||||
thebox[BRIG].chars[j]);
|
||||
}
|
||||
@ -1047,7 +1074,8 @@ int output_box (const sentry_t *thebox)
|
||||
}
|
||||
|
||||
else { /* box bottom */
|
||||
concat_strings (obuf, LINE_MAX+1, 4, indentspc,
|
||||
restored_indent = tabbify_indent (input.anz_lines - 1, indentspc, indentspclen);
|
||||
concat_strings (obuf, LINE_MAX+1, 4, restored_indent,
|
||||
skip_left?"":thebox[BLEF].chars[j],
|
||||
thebox[BBOT].chars[j-(nol-thebox[BBOT].height)],
|
||||
thebox[BRIG].chars[j]);
|
||||
@ -1062,6 +1090,9 @@ int output_box (const sentry_t *thebox)
|
||||
else {
|
||||
btrim (obuf, &obuf_len);
|
||||
}
|
||||
if (opt.tabexp == 'k') {
|
||||
BFREE (restored_indent);
|
||||
}
|
||||
|
||||
fprintf (opt.outfile, "%s\n", obuf);
|
||||
}
|
||||
|
47
src/remove.c
47
src/remove.c
@ -3,7 +3,7 @@
|
||||
* Project Main: boxes.c
|
||||
* Date created: June 23, 1999 (Wednesday, 20:59h)
|
||||
* Author: Copyright (C) 1999 Thomas Jensen <boxes@thomasjensen.com>
|
||||
* Version: $Id: remove.c,v 1.6 1999-11-08 02:51:41-08 tsjensen Exp tsjensen $
|
||||
* Version: $Id: remove.c,v 1.7 2006/07/12 05:28:58 tsjensen Exp tsjensen $
|
||||
* Language: ANSI C
|
||||
* World Wide Web: http://boxes.thomasjensen.com/
|
||||
* Purpose: Box removal, i.e. the deletion of boxes
|
||||
@ -24,6 +24,10 @@
|
||||
* Revision History:
|
||||
*
|
||||
* $Log: remove.c,v $
|
||||
* Revision 1.7 2006/07/12 05:28:58 tsjensen
|
||||
* Updated email and web addresses in comment header
|
||||
* Added trim_only flag to output_input() function, used for box mending
|
||||
*
|
||||
* Revision 1.6 1999-11-08 02:51:41-08 tsjensen
|
||||
* Bugfix: For non-empty left box sides, spaces belonging to "empty" shape
|
||||
* lines were not properly removed in some cases
|
||||
@ -61,7 +65,7 @@
|
||||
#include "remove.h"
|
||||
|
||||
static const char rcsid_remove_c[] =
|
||||
"$Id: remove.c,v 1.6 1999-11-08 02:51:41-08 tsjensen Exp tsjensen $";
|
||||
"$Id: remove.c,v 1.7 2006/07/12 05:28:58 tsjensen Exp tsjensen $";
|
||||
|
||||
|
||||
|
||||
@ -1048,17 +1052,46 @@ void output_input (const int trim_only)
|
||||
*/
|
||||
{
|
||||
size_t j;
|
||||
size_t indent;
|
||||
char *indentspc;
|
||||
int ntabs, nspcs;
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf (stderr, "output_input() - enter (trim_only=%d)\n", trim_only);
|
||||
#endif
|
||||
for (j=0; j<input.anz_lines; ++j) {
|
||||
if (input.lines[j].text) {
|
||||
btrim (input.lines[j].text, &(input.lines[j].len));
|
||||
if (!trim_only) {
|
||||
printf ("%s\n", input.lines[j].text);
|
||||
for (j=0; j<input.anz_lines; ++j)
|
||||
{
|
||||
if (input.lines[j].text == NULL)
|
||||
continue;
|
||||
btrim (input.lines[j].text, &(input.lines[j].len));
|
||||
if (trim_only)
|
||||
continue;
|
||||
|
||||
indentspc = NULL;
|
||||
if (opt.tabexp == 'u') {
|
||||
indent = strspn (input.lines[j].text, " ");
|
||||
ntabs = indent / opt.tabstop;
|
||||
nspcs = indent % opt.tabstop;
|
||||
indentspc = (char *) malloc (ntabs + nspcs + 1);
|
||||
if (indentspc == NULL) {
|
||||
perror (PROJECT);
|
||||
return;
|
||||
}
|
||||
memset (indentspc, (int)'\t', ntabs);
|
||||
memset (indentspc+ntabs, (int)' ', nspcs);
|
||||
indentspc[ntabs+nspcs] = '\0';
|
||||
}
|
||||
else if (opt.tabexp == 'k') {
|
||||
indentspc = tabbify_indent (j, NULL, input.indent);
|
||||
indent = input.indent;
|
||||
}
|
||||
else {
|
||||
indentspc = (char *) strdup ("");
|
||||
indent = 0;
|
||||
}
|
||||
|
||||
printf ("%s%s\n", indentspc, input.lines[j].text + indent);
|
||||
BFREE (indentspc);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user