@@ -136,6 +136,28 @@ void uprintf(FILE *out, codepoint_t c, const char *format) | |||
} | |||
++format; | |||
break; | |||
case '\\': | |||
switch (*++format) { | |||
case 0: | |||
break; | |||
case 't': | |||
fputc('\t', out); | |||
++format; | |||
break; | |||
case 'r': | |||
fputc('\r', out); | |||
++format; | |||
break; | |||
case 'n': | |||
fputc('\n', out); | |||
++format; | |||
break; | |||
default: | |||
fputc(*format, out); | |||
++format; | |||
break; | |||
} | |||
break; | |||
default: | |||
fputc(*format, out); | |||
++format; | |||
@@ -143,21 +165,24 @@ void uprintf(FILE *out, codepoint_t c, const char *format) | |||
} | |||
} | |||
void print_file(FILE *in) | |||
void print_file(FILE *in, const char *format) | |||
{ | |||
codepoint_t c = 0; | |||
while (fget_utf8c(in, &c)) | |||
uprintf(stdout, c, "%pc\t%pH\t%s\t%c\t%Uc\t%Lc\t%Tc\t%W\n"); | |||
uprintf(stdout, c, format ? format : "%pc\t%pH\t%s\t%c\t%Uc\t%Lc\t%Tc\t%W\n"); | |||
} | |||
int main(int argc, char **argv) | |||
{ | |||
FILE *in = NULL; | |||
const char *format = NULL; | |||
for (int argn = 1; argn != argc; ++argn) | |||
{ | |||
const char *arg = argv[argn]; | |||
if (!strcmp(arg, "--stdin") || !strcmp(arg, "-")) | |||
in = stdin; | |||
else if (!strncmp(arg, "--format=", 9)) | |||
format = arg + 9; | |||
else if (in == NULL) | |||
{ | |||
in = fopen(arg, "r"); | |||
@@ -167,16 +192,16 @@ int main(int argc, char **argv) | |||
} | |||
if (in == stdin) | |||
print_file(stdin); | |||
print_file(stdin, format); | |||
else if (in != NULL) | |||
{ | |||
print_file(in); | |||
print_file(in, format); | |||
fclose(in); | |||
} | |||
else | |||
{ | |||
for (codepoint_t c = 0; c <= 0x10FFFF; ++c) | |||
uprintf(stdout, c, "%pH %s %C %c %UH %LH %TH %W\n"); | |||
uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %W\n"); | |||
} | |||
return 0; | |||
} |
@@ -136,6 +136,28 @@ void uprintf(FILE *out, ucd::codepoint_t c, const char *format) | |||
} | |||
++format; | |||
break; | |||
case '\\': | |||
switch (*++format) { | |||
case 0: | |||
break; | |||
case 't': | |||
fputc('\t', out); | |||
++format; | |||
break; | |||
case 'r': | |||
fputc('\r', out); | |||
++format; | |||
break; | |||
case 'n': | |||
fputc('\n', out); | |||
++format; | |||
break; | |||
default: | |||
fputc(*format, out); | |||
++format; | |||
break; | |||
} | |||
break; | |||
default: | |||
fputc(*format, out); | |||
++format; | |||
@@ -143,21 +165,24 @@ void uprintf(FILE *out, ucd::codepoint_t c, const char *format) | |||
} | |||
} | |||
void print_file(FILE *in) | |||
void print_file(FILE *in, const char *format) | |||
{ | |||
ucd::codepoint_t c = 0; | |||
while (fget_utf8c(in, c)) | |||
uprintf(stdout, c, "%pc\t%pH\t%s\t%c\t%Uc\t%Lc\t%Tc\t%W\n"); | |||
uprintf(stdout, c, format ? format : "%pc\t%pH\t%s\t%c\t%Uc\t%Lc\t%Tc\t%W\n"); | |||
} | |||
int main(int argc, char **argv) | |||
{ | |||
FILE *in = NULL; | |||
const char *format = NULL; | |||
for (int argn = 1; argn != argc; ++argn) | |||
{ | |||
const char *arg = argv[argn]; | |||
if (!strcmp(arg, "--stdin") || !strcmp(arg, "-")) | |||
in = stdin; | |||
else if (!strncmp(arg, "--format=", 9)) | |||
format = arg + 9; | |||
else if (in == NULL) | |||
{ | |||
in = fopen(arg, "r"); | |||
@@ -167,16 +192,16 @@ int main(int argc, char **argv) | |||
} | |||
if (in == stdin) | |||
print_file(stdin); | |||
print_file(stdin, format); | |||
else if (in != NULL) | |||
{ | |||
print_file(in); | |||
print_file(in, format); | |||
fclose(in); | |||
} | |||
else | |||
{ | |||
for (codepoint_t c = 0; c <= 0x10FFFF; ++c) | |||
uprintf(stdout, c, "%pH %s %C %c %UH %LH %TH %W\n"); | |||
for (ucd::codepoint_t c = 0; c <= 0x10FFFF; ++c) | |||
uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %W\n"); | |||
} | |||
return 0; | |||
} |