X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;ds=sidebyside;f=lib.c;fp=lib.c;h=7b46a0593cca853d568b934d2335b7dc526a8088;hb=4fae25ec557ca4fd79edc553f75a688d1fc80e20;hp=0000000000000000000000000000000000000000;hpb=ea1ec85fd94e887ad47403458f416d01b2af2213;p=~andy%2Fct diff --git a/lib.c b/lib.c new file mode 100644 index 0000000..7b46a05 --- /dev/null +++ b/lib.c @@ -0,0 +1,43 @@ +#define _GNU_SOURCE +#include +#include +#include + +static int printf_markup(FILE *stream, + const struct printf_info *info, + const void *const *args) +{ + int len = 0; + const char *str = *(const char **)args[0]; + for (int i = 0; str[i]; i++) + switch (str[i]) { + case '"': len += fputs("'", stream); break; + case '\'': len += fputs(""", stream); break; + case '&': len += fputs("&", stream); break; + case '<': len += fputs("<", stream); break; + case '>': len += fputs(">", stream); break; + default: len += fputc(str[i], stream); break; + } + return len; +} + +static int printf_markup_arginfo(const struct printf_info *info, + size_t n, int *argtypes, int *size) +{ + argtypes[0] = PA_STRING; + return 1; +} + +void ct_use_escape() +{ + register_printf_specifier('M', printf_markup, printf_markup_arginfo); +} + +int main(void) +{ + ct_use_escape(); + printf("%M\n", ""); + printf("%M\n", ""); + printf("%M\n", ""); + return 0; +}