src/utils.c: Support escape sequences in format strings
We support all simple escape sequences listed in the ANSI C standard, plus "\0" to allow for printing null characters. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
parent
1ff6f39c86
commit
fc9cd6149b
55
src/utils.c
55
src/utils.c
@ -1006,6 +1006,55 @@ print_notefile (FILE *out, char *filename, int nbtab)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Print an escape sequence and return its length. */
|
||||||
|
static int
|
||||||
|
print_escape (const char *s)
|
||||||
|
{
|
||||||
|
switch (*(s + 1))
|
||||||
|
{
|
||||||
|
case 'a':
|
||||||
|
putchar ('\a');
|
||||||
|
return 1;
|
||||||
|
case 'b':
|
||||||
|
putchar ('\b');
|
||||||
|
return 1;
|
||||||
|
case 'f':
|
||||||
|
putchar ('\f');
|
||||||
|
return 1;
|
||||||
|
case 'n':
|
||||||
|
putchar ('\n');
|
||||||
|
return 1;
|
||||||
|
case 'r':
|
||||||
|
putchar ('\r');
|
||||||
|
return 1;
|
||||||
|
case 't':
|
||||||
|
putchar ('\t');
|
||||||
|
return 1;
|
||||||
|
case 'v':
|
||||||
|
putchar ('\v');
|
||||||
|
return 1;
|
||||||
|
case '0':
|
||||||
|
putchar ('\0');
|
||||||
|
return 1;
|
||||||
|
case '\'':
|
||||||
|
putchar ('\'');
|
||||||
|
return 1;
|
||||||
|
case '"':
|
||||||
|
putchar ('"');
|
||||||
|
return 1;
|
||||||
|
case '\?':
|
||||||
|
putchar ('?');
|
||||||
|
return 1;
|
||||||
|
case '\\':
|
||||||
|
putchar ('\\');
|
||||||
|
return 1;
|
||||||
|
case '\0':
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Print a formatted appointment to stdout. */
|
/* Print a formatted appointment to stdout. */
|
||||||
void
|
void
|
||||||
print_apoint (const char *format, long day, struct apoint *apt)
|
print_apoint (const char *format, long day, struct apoint *apt)
|
||||||
@ -1056,6 +1105,8 @@ print_apoint (const char *format, long day, struct apoint *apt)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (*p == '\\')
|
||||||
|
p += print_escape (p);
|
||||||
else
|
else
|
||||||
putchar (*p);
|
putchar (*p);
|
||||||
}
|
}
|
||||||
@ -1093,6 +1144,8 @@ print_event (const char *format, long day, struct event *ev)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (*p == '\\')
|
||||||
|
p += print_escape (p);
|
||||||
else
|
else
|
||||||
putchar (*p);
|
putchar (*p);
|
||||||
}
|
}
|
||||||
@ -1160,6 +1213,8 @@ print_todo (const char *format, struct todo *todo)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (*p == '\\')
|
||||||
|
p += print_escape (p);
|
||||||
else
|
else
|
||||||
putchar (*p);
|
putchar (*p);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user