mirror of
https://github.com/ascii-boxes/boxes.git
synced 2025-06-20 01:37:52 +02:00
Updated usage information
Updated quickinfo (-l -d) with killblank default value Made indentation computation into a function of its own (get_indent()) Bugfix: REVERSION code may change indentation -> recompute if necessary
This commit is contained in:
parent
52120808f5
commit
0f2a1703ce
113
src/boxes.c
113
src/boxes.c
@ -3,7 +3,7 @@
|
|||||||
* Date created: March 18, 1999 (Thursday, 15:09h)
|
* Date created: March 18, 1999 (Thursday, 15:09h)
|
||||||
* Author: Copyright (C) 1999 Thomas Jensen
|
* Author: Copyright (C) 1999 Thomas Jensen
|
||||||
* tsjensen@stud.informatik.uni-erlangen.de
|
* tsjensen@stud.informatik.uni-erlangen.de
|
||||||
* Version: $Id: boxes.c,v 1.28 1999/07/23 16:15:48 tsjensen Exp tsjensen $
|
* Version: $Id: boxes.c,v 1.29 1999/08/16 18:29:39 tsjensen Exp tsjensen $
|
||||||
* Language: ANSI C
|
* Language: ANSI C
|
||||||
* Platforms: sunos5/sparc, for now
|
* Platforms: sunos5/sparc, for now
|
||||||
* World Wide Web: http://home.pages.de/~jensen/boxes/
|
* World Wide Web: http://home.pages.de/~jensen/boxes/
|
||||||
@ -48,6 +48,9 @@
|
|||||||
* Revision History:
|
* Revision History:
|
||||||
*
|
*
|
||||||
* $Log: boxes.c,v $
|
* $Log: boxes.c,v $
|
||||||
|
* Revision 1.29 1999/08/16 18:29:39 tsjensen
|
||||||
|
* Added output of total number of designs for -l
|
||||||
|
*
|
||||||
* Revision 1.28 1999/07/23 16:15:48 tsjensen
|
* Revision 1.28 1999/07/23 16:15:48 tsjensen
|
||||||
* Added quickinfo mode to list_styles(). Called with -l and -d together.
|
* Added quickinfo mode to list_styles(). Called with -l and -d together.
|
||||||
*
|
*
|
||||||
@ -206,7 +209,7 @@ extern int optind, opterr, optopt; /* for getopt() */
|
|||||||
|
|
||||||
|
|
||||||
static const char rcsid_boxes_c[] =
|
static const char rcsid_boxes_c[] =
|
||||||
"$Id: boxes.c,v 1.28 1999/07/23 16:15:48 tsjensen Exp tsjensen $";
|
"$Id: boxes.c,v 1.29 1999/08/16 18:29:39 tsjensen Exp tsjensen $";
|
||||||
|
|
||||||
|
|
||||||
/* _\|/_
|
/* _\|/_
|
||||||
@ -246,13 +249,13 @@ static void usage (FILE *st)
|
|||||||
{
|
{
|
||||||
fprintf (st, "Usage: %s [options] [infile [outfile]]\n", PROJECT);
|
fprintf (st, "Usage: %s [options] [infile [outfile]]\n", PROJECT);
|
||||||
fprintf (st, " -a fmt alignment/positioning of text inside box [default: hlvt]\n");
|
fprintf (st, " -a fmt alignment/positioning of text inside box [default: hlvt]\n");
|
||||||
fprintf (st, " -d name select box design\n");
|
fprintf (st, " -d name select box design [default: first one in file]\n");
|
||||||
fprintf (st, " -f file use only file as configuration file\n");
|
fprintf (st, " -f file use only file as configuration file\n");
|
||||||
fprintf (st, " -h print usage information\n");
|
fprintf (st, " -h print usage information\n");
|
||||||
fprintf (st, " -i mode indentation mode\n");
|
fprintf (st, " -i mode indentation mode [default: box]\n");
|
||||||
fprintf (st, " -k bool kill leading/trailing blank lines on removal or not\n");
|
fprintf (st, " -k bool kill leading/trailing blank lines on removal or not\n");
|
||||||
fprintf (st, " -l list available box designs w/ samples\n");
|
fprintf (st, " -l list available box designs w/ samples\n");
|
||||||
fprintf (st, " -p fmt padding [default: design-dependent]\n");
|
fprintf (st, " -p fmt padding [default: none]\n");
|
||||||
fprintf (st, " -r remove box from input\n");
|
fprintf (st, " -r remove box from input\n");
|
||||||
fprintf (st, " -s wxh specify box size (width w and/or height h)\n");
|
fprintf (st, " -s wxh specify box size (width w and/or height h)\n");
|
||||||
fprintf (st, " -t uint set tab stop distance [default: %d]\n", DEF_TABSTOP);
|
fprintf (st, " -t uint set tab stop distance [default: %d]\n", DEF_TABSTOP);
|
||||||
@ -406,7 +409,7 @@ static int process_commandline (int argc, char *argv[])
|
|||||||
/*
|
/*
|
||||||
* Display usage information and terminate
|
* Display usage information and terminate
|
||||||
*/
|
*/
|
||||||
printf ("%s - draws boxes around your text (and removes them)\n", PROJECT);
|
printf ("%s - draws any kind of box around your text (and removes it)\n", PROJECT);
|
||||||
printf (" (c) Thomas Jensen <tsjensen@stud.informatik.uni-erlangen.de>\n");
|
printf (" (c) Thomas Jensen <tsjensen@stud.informatik.uni-erlangen.de>\n");
|
||||||
printf (" Web page: http://home.pages.de/~jensen/%s/\n", PROJECT);
|
printf (" Web page: http://home.pages.de/~jensen/%s/\n", PROJECT);
|
||||||
usage (stdout);
|
usage (stdout);
|
||||||
@ -748,7 +751,6 @@ static int list_styles()
|
|||||||
memset (&space, ' ', LINE_MAX);
|
memset (&space, ' ', LINE_MAX);
|
||||||
space[LINE_MAX] = '\0';
|
space[LINE_MAX] = '\0';
|
||||||
|
|
||||||
|
|
||||||
fprintf (opt.outfile, "Complete Design Information for \"%s\":\n",
|
fprintf (opt.outfile, "Complete Design Information for \"%s\":\n",
|
||||||
d->name);
|
d->name);
|
||||||
fprintf (opt.outfile, "-----------------------------------");
|
fprintf (opt.outfile, "-----------------------------------");
|
||||||
@ -756,25 +758,26 @@ static int list_styles()
|
|||||||
fprintf (opt.outfile, "-");
|
fprintf (opt.outfile, "-");
|
||||||
fprintf (opt.outfile, "\n");
|
fprintf (opt.outfile, "\n");
|
||||||
|
|
||||||
|
|
||||||
fprintf (opt.outfile, "Author: %s\n",
|
fprintf (opt.outfile, "Author: %s\n",
|
||||||
d->author? d->author: "(unknown artist)");
|
d->author? d->author: "(unknown artist)");
|
||||||
fprintf (opt.outfile, "Creation Date: %s\n",
|
fprintf (opt.outfile, "Creation Date: %s\n",
|
||||||
d->created? d->created: "(unknown)");
|
d->created? d->created: "(unknown)");
|
||||||
|
|
||||||
fprintf (opt.outfile, "Current Revision: %s%s%s\n",
|
fprintf (opt.outfile, "Current Revision: %s%s%s\n",
|
||||||
d->revision? d->revision: "",
|
d->revision? d->revision: "",
|
||||||
d->revision && d->revdate? " as of ": "",
|
d->revision && d->revdate? " as of ": "",
|
||||||
d->revdate? d->revdate: (d->revision? "": "(unknown)"));
|
d->revdate? d->revdate: (d->revision? "": "(unknown)"));
|
||||||
|
|
||||||
fprintf (opt.outfile, "Indentation Mode: ");
|
fprintf (opt.outfile, "Indentation Mode: ");
|
||||||
switch (d->indentmode) {
|
switch (d->indentmode) {
|
||||||
case 'b':
|
case 'b':
|
||||||
fprintf (opt.outfile, "box - indent box\n");
|
fprintf (opt.outfile, "box (indent box)\n");
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
fprintf (opt.outfile, "text - retain indentation inside of box\n");
|
fprintf (opt.outfile, "text (retain indentation inside of box)\n");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf (opt.outfile, "none - discard indentation\n");
|
fprintf (opt.outfile, "none (discard indentation)\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -807,6 +810,7 @@ static int list_styles()
|
|||||||
|
|
||||||
fprintf (opt.outfile, "Minimum Box Dimensions: %d x %d (width x height)\n",
|
fprintf (opt.outfile, "Minimum Box Dimensions: %d x %d (width x height)\n",
|
||||||
d->minwidth, d->minheight);
|
d->minwidth, d->minheight);
|
||||||
|
|
||||||
fprintf (opt.outfile, "Default Padding: ");
|
fprintf (opt.outfile, "Default Padding: ");
|
||||||
if (d->padding[BTOP] || d->padding[BRIG]
|
if (d->padding[BTOP] || d->padding[BRIG]
|
||||||
|| d->padding[BBOT] || d->padding[BLEF]) {
|
|| d->padding[BBOT] || d->padding[BLEF]) {
|
||||||
@ -832,6 +836,11 @@ static int list_styles()
|
|||||||
else {
|
else {
|
||||||
fprintf (opt.outfile, "none\n");
|
fprintf (opt.outfile, "none\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fprintf (opt.outfile, "Default Killblank: %s\n",
|
||||||
|
empty_side (opt.design->shape, BTOP) &&
|
||||||
|
empty_side (opt.design->shape, BBOT)? "no": "yes");
|
||||||
|
|
||||||
fprintf (opt.outfile, "Elastic Shapes: ");
|
fprintf (opt.outfile, "Elastic Shapes: ");
|
||||||
sstart = 0;
|
sstart = 0;
|
||||||
for (i=0; i<ANZ_SHAPES; ++i) {
|
for (i=0; i<ANZ_SHAPES; ++i) {
|
||||||
@ -938,6 +947,50 @@ static int list_styles()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int get_indent (const line_t *lines, const size_t lanz)
|
||||||
|
/*
|
||||||
|
* Determine indentation of given lines in spaces.
|
||||||
|
*
|
||||||
|
* lines the lines to examine
|
||||||
|
* lanz number of lines to examine
|
||||||
|
*
|
||||||
|
* Lines are assumed to be free of trailing whitespace.
|
||||||
|
*
|
||||||
|
* RETURNS: >= 0 indentation in spaces
|
||||||
|
* < 0 error
|
||||||
|
*
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
size_t j;
|
||||||
|
int res = LINE_MAX; /* result */
|
||||||
|
int nonblank = 0; /* true if one non-blank line found */
|
||||||
|
|
||||||
|
if (lines == NULL) {
|
||||||
|
fprintf (stderr, "%s: internal error\n", PROJECT);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (lanz == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (j=0; j<lanz; ++j) {
|
||||||
|
if (lines[j].len > 0) {
|
||||||
|
size_t ispc;
|
||||||
|
nonblank = 1;
|
||||||
|
ispc = strspn (lines[j].text, " ");
|
||||||
|
if ((int) ispc < res)
|
||||||
|
res = ispc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nonblank)
|
||||||
|
return res; /* success */
|
||||||
|
else
|
||||||
|
return 0; /* success, but only blank lines */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int apply_substitutions (const int mode)
|
static int apply_substitutions (const int mode)
|
||||||
/*
|
/*
|
||||||
* Apply regular expression substitutions to input text.
|
* Apply regular expression substitutions to input text.
|
||||||
@ -1024,6 +1077,19 @@ static int apply_substitutions (const int mode)
|
|||||||
opt.design->current_rule = NULL;
|
opt.design->current_rule = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If text indentation was part of the lines processed, indentation
|
||||||
|
* may now be different -> recalculate input.indent.
|
||||||
|
*/
|
||||||
|
if (opt.design->indentmode == 't') {
|
||||||
|
int rc;
|
||||||
|
rc = get_indent (input.lines, input.anz_lines);
|
||||||
|
if (rc >= 0)
|
||||||
|
input.indent = (size_t) rc;
|
||||||
|
else
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1048,6 +1114,7 @@ static int read_all_input()
|
|||||||
char *temp = NULL; /* string resulting from tab exp. */
|
char *temp = NULL; /* string resulting from tab exp. */
|
||||||
size_t newlen; /* line length after tab expansion */
|
size_t newlen; /* line length after tab expansion */
|
||||||
size_t i;
|
size_t i;
|
||||||
|
int rc;
|
||||||
|
|
||||||
input.anz_lines = 0;
|
input.anz_lines = 0;
|
||||||
input.indent = LINE_MAX;
|
input.indent = LINE_MAX;
|
||||||
@ -1102,16 +1169,6 @@ static int read_all_input()
|
|||||||
if (input.lines[input.anz_lines].len > input.maxline)
|
if (input.lines[input.anz_lines].len > input.maxline)
|
||||||
input.maxline = input.lines[input.anz_lines].len;
|
input.maxline = input.lines[input.anz_lines].len;
|
||||||
|
|
||||||
/*
|
|
||||||
* Update current estimate for text indentation
|
|
||||||
*/
|
|
||||||
if (input.lines[input.anz_lines].len > 0) {
|
|
||||||
size_t ispc;
|
|
||||||
ispc = strspn (input.lines[input.anz_lines].text, " ");
|
|
||||||
if (ispc < input.indent)
|
|
||||||
input.indent = ispc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* next please
|
* next please
|
||||||
*/
|
*/
|
||||||
@ -1124,6 +1181,15 @@ static int read_all_input()
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compute indentation
|
||||||
|
*/
|
||||||
|
rc = get_indent (input.lines, input.anz_lines);
|
||||||
|
if (rc >= 0)
|
||||||
|
input.indent = (size_t) rc;
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Exit if there was no input at all
|
* Exit if there was no input at all
|
||||||
*/
|
*/
|
||||||
@ -1135,7 +1201,6 @@ static int read_all_input()
|
|||||||
* Remove indentation, unless we want to preserve it (when removing
|
* Remove indentation, unless we want to preserve it (when removing
|
||||||
* a box or if the user wants to retain it inside the box)
|
* a box or if the user wants to retain it inside the box)
|
||||||
*/
|
*/
|
||||||
if (input.indent < LINE_MAX) {
|
|
||||||
if (opt.design->indentmode != 't' && opt.r == 0) {
|
if (opt.design->indentmode != 't' && opt.r == 0) {
|
||||||
for (i=0; i<input.anz_lines; ++i) {
|
for (i=0; i<input.anz_lines; ++i) {
|
||||||
if (input.lines[i].len >= input.indent) {
|
if (input.lines[i].len >= input.indent) {
|
||||||
@ -1146,10 +1211,6 @@ static int read_all_input()
|
|||||||
}
|
}
|
||||||
input.maxline -= input.indent;
|
input.maxline -= input.indent;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else {
|
|
||||||
input.indent = 0; /* seems like blank lines only */
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Apply regular expression substitutions
|
* Apply regular expression substitutions
|
||||||
|
Loading…
x
Reference in New Issue
Block a user