Remove magic numbers from show_usage_line
This commit is contained in:
parent
488c0ed051
commit
582369bb4b
41
ruby.c
41
ruby.c
@ -241,41 +241,46 @@ static const char esc_standout[] = "\n\033[1;7m";
|
|||||||
static const char esc_bold[] = "\033[1m";
|
static const char esc_bold[] = "\033[1m";
|
||||||
static const char esc_reset[] = "\033[0m";
|
static const char esc_reset[] = "\033[0m";
|
||||||
static const char esc_none[] = "";
|
static const char esc_none[] = "";
|
||||||
|
#define USAGE_INDENT " " /* macro for concatenation */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
show_usage_line(const struct ruby_opt_message *m,
|
show_usage_line(const struct ruby_opt_message *m,
|
||||||
int help, int highlight, unsigned int w, int columns)
|
int help, int highlight, unsigned int w, int columns)
|
||||||
{
|
{
|
||||||
|
static const int indent_width = (int)rb_strlen_lit(USAGE_INDENT);
|
||||||
const char *str = m->str;
|
const char *str = m->str;
|
||||||
const unsigned int namelen = m->namelen, secondlen = m->secondlen;
|
const char *str2 = str + m->namelen;
|
||||||
|
const char *desc = str + m->namelen + m->secondlen;
|
||||||
|
const unsigned int namelen = m->namelen - 1, secondlen = m->secondlen - 1;
|
||||||
const char *sb = highlight ? esc_bold : esc_none;
|
const char *sb = highlight ? esc_bold : esc_none;
|
||||||
const char *se = highlight ? esc_reset : esc_none;
|
const char *se = highlight ? esc_reset : esc_none;
|
||||||
const char *desc = str + namelen + secondlen;
|
|
||||||
unsigned int desclen = (unsigned int)strcspn(desc, "\n");
|
unsigned int desclen = (unsigned int)strcspn(desc, "\n");
|
||||||
if (help && (namelen > w) && (int)(namelen + secondlen) >= columns) {
|
if (help && (namelen + 1 > w) && /* a padding space */
|
||||||
printf(" %s" "%.*s" "%s\n", sb, namelen-1, str, se);
|
(int)(namelen + secondlen + indent_width) >= columns) {
|
||||||
if (secondlen > 1) {
|
printf(USAGE_INDENT "%s" "%.*s" "%s\n", sb, namelen, str, se);
|
||||||
const int second_end = namelen+secondlen-1;
|
if (secondlen > 0) {
|
||||||
int n = namelen;
|
const int second_end = secondlen;
|
||||||
if (str[n] == ',') n++;
|
int n = 0;
|
||||||
if (str[n] == ' ') n++;
|
if (str2[n] == ',') n++;
|
||||||
printf(" %s" "%.*s" "%s\n", sb, second_end-n, str+n, se);
|
if (str2[n] == ' ') n++;
|
||||||
|
printf(USAGE_INDENT "%s" "%.*s" "%s\n", sb, second_end-n, str2+n, se);
|
||||||
}
|
}
|
||||||
printf("%-*s%.*s\n", w + 2, "", desclen, desc);
|
printf("%-*s%.*s\n", w + indent_width, USAGE_INDENT, desclen, desc);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const int wrap = help && namelen + secondlen - 1 > w;
|
const int wrap = help && namelen + secondlen >= w;
|
||||||
printf(" %s%.*s%-*.*s%s%-*s%.*s\n", sb, namelen-1, str,
|
printf(USAGE_INDENT "%s%.*s%-*.*s%s%-*s%.*s\n", sb, namelen, str,
|
||||||
(wrap ? 0 : w - namelen + 1),
|
(wrap ? 0 : w - namelen),
|
||||||
(help ? secondlen-1 : 0), str + namelen, se,
|
(help ? secondlen : 0), str2, se,
|
||||||
(wrap ? w + 3 : 0), (wrap ? "\n" : ""),
|
(wrap ? (int)(w + rb_strlen_lit("\n" USAGE_INDENT)) : 0),
|
||||||
|
(wrap ? "\n" USAGE_INDENT : ""),
|
||||||
desclen, desc);
|
desclen, desc);
|
||||||
}
|
}
|
||||||
if (help) {
|
if (help) {
|
||||||
while (desc[desclen]) {
|
while (desc[desclen]) {
|
||||||
desc += desclen + 1;
|
desc += desclen + rb_strlen_lit("\n");
|
||||||
desclen = (unsigned int)strcspn(desc, "\n");
|
desclen = (unsigned int)strcspn(desc, "\n");
|
||||||
printf("%-*s%.*s\n", w + 2, "", desclen, desc);
|
printf("%-*s%.*s\n", w + indent_width, USAGE_INDENT, desclen, desc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user