X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Fdump_entry.c;h=d0e420ecfb453c6410d2d1f67ebbd33a9a36f5a4;hp=60a3d95670359da88dbf660c21a63328c1281ac5;hb=8f6d94b8d6211a2323caef53fa4c96c475ec9a62;hpb=eccca377f55c70b12e3e92621d94d1e1c1fcfb7d diff --git a/progs/dump_entry.c b/progs/dump_entry.c index 60a3d956..d0e420ec 100644 --- a/progs/dump_entry.c +++ b/progs/dump_entry.c @@ -39,7 +39,7 @@ #include "termsort.c" /* this C file is generated */ #include /* so is this */ -MODULE_ID("$Id: dump_entry.c,v 1.171 2019/01/21 15:11:51 tom Exp $") +MODULE_ID("$Id: dump_entry.c,v 1.173 2019/05/11 21:02:24 tom Exp $") #define DISCARD(string) string = ABSENT_STRING #define PRINTF (void) printf @@ -718,6 +718,33 @@ indent_DYN(DYNBUF * buffer, int level) strncpy_DYN(buffer, "\t", (size_t) 1); } +/* + * Check if the current line which was begun consists only of a tab and the + * given leading text. + */ +static bool +leading_DYN(DYNBUF * buffer, const char *leading) +{ + bool result = FALSE; + size_t need = strlen(leading); + if (buffer->used > need) { + need = buffer->used - need; + if (!strcmp(buffer->text + need, leading)) { + result = TRUE; + while (--need != 0) { + if (buffer->text[need] == '\n') { + break; + } + if (buffer->text[need] != '\t') { + result = FALSE; + break; + } + } + } + } + return result; +} + bool has_params(const char *src) { @@ -821,7 +848,7 @@ fmt_complex(TERMTYPE2 *tterm, const char *capability, char *src, int level) } break; case 'p': - if (percent && params) { + if (percent && params && !leading_DYN(&tmpbuf, "%")) { tmpbuf.text[tmpbuf.used - 1] = '\n'; indent_DYN(&tmpbuf, level + 1); strncpy_DYN(&tmpbuf, "%", (size_t) 1); @@ -1078,8 +1105,7 @@ fmt_entry(TERMTYPE2 *tterm, WRAP_CONCAT; } else if (TcOutput()) { char *srccap = _nc_tic_expand(capability, TRUE, numbers); - int params = (((i < (int) SIZEOF(parametrized)) && - (i < STRCOUNT)) + int params = ((i < (int) SIZEOF(parametrized)) ? parametrized[i] : ((*srccap == 'k') ? 0