|
|
@@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
* Copyright (C) 2012-2013 Reece H. Dunn |
|
|
|
* Copyright (C) 2012-2015 Reece H. Dunn |
|
|
|
* |
|
|
|
* This file is part of ucd-tools. |
|
|
|
* |
|
|
@@ -21,21 +21,64 @@ |
|
|
|
|
|
|
|
#include <stdio.h> |
|
|
|
|
|
|
|
int main() |
|
|
|
void uprintf_codepoint(FILE *out, ucd::codepoint_t c, char mode) |
|
|
|
{ |
|
|
|
for (ucd::codepoint_t c = 0; c <= 0x10FFFF; ++c) |
|
|
|
switch (mode) |
|
|
|
{ |
|
|
|
case 'h': // hexadecimal (lower) |
|
|
|
fprintf(out, "%06x", c); |
|
|
|
break; |
|
|
|
case 'H': // hexadecimal (upper) |
|
|
|
fprintf(out, "%06X", c); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void uprintf(FILE *out, ucd::codepoint_t c, const char *format) |
|
|
|
{ |
|
|
|
while (*format) switch (*format) |
|
|
|
{ |
|
|
|
const char *script = ucd::get_script_string(ucd::lookup_script(c)); |
|
|
|
const char *category = ucd::get_category_string(ucd::lookup_category(c)); |
|
|
|
const char *category_group = ucd::get_category_group_string(ucd::lookup_category_group(c)); |
|
|
|
ucd::codepoint_t upper = ucd::toupper(c); |
|
|
|
ucd::codepoint_t lower = ucd::tolower(c); |
|
|
|
ucd::codepoint_t title = ucd::totitle(c); |
|
|
|
const char *whitespace = ucd::isspace(c) ? "White_Space" : ""; |
|
|
|
printf("%06X %s %s %s %06X %06X %06X %s\n", |
|
|
|
c, script, category_group, category, |
|
|
|
upper, lower, title, |
|
|
|
whitespace); |
|
|
|
case '%': |
|
|
|
switch (*++format) |
|
|
|
{ |
|
|
|
case 'c': // category |
|
|
|
fputs(ucd::get_category_string(ucd::lookup_category(c)), out); |
|
|
|
break; |
|
|
|
case 'C': // category group |
|
|
|
fputs(ucd::get_category_group_string(ucd::lookup_category_group(c)), out); |
|
|
|
break; |
|
|
|
case 'p': // codepoint |
|
|
|
uprintf_codepoint(out, c, *++format); |
|
|
|
break; |
|
|
|
case 'L': // lowercase |
|
|
|
uprintf_codepoint(out, ucd::tolower(c), *++format); |
|
|
|
break; |
|
|
|
case 's': // script |
|
|
|
fputs(ucd::get_script_string(ucd::lookup_script(c)), out); |
|
|
|
break; |
|
|
|
case 'T': // titlecase |
|
|
|
uprintf_codepoint(out, ucd::totitle(c), *++format); |
|
|
|
break; |
|
|
|
case 'U': // uppercase |
|
|
|
uprintf_codepoint(out, ucd::toupper(c), *++format); |
|
|
|
break; |
|
|
|
case 'W': // whitespace |
|
|
|
if (ucd::isspace(c)) |
|
|
|
fputs("White_Space", out); |
|
|
|
break; |
|
|
|
} |
|
|
|
++format; |
|
|
|
break; |
|
|
|
default: |
|
|
|
fputc(*format, out); |
|
|
|
++format; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int main() |
|
|
|
{ |
|
|
|
for (ucd::codepoint_t c = 0; c <= 0x10FFFF; ++c) |
|
|
|
uprintf(stdout, c, "%pH %s %C %c %UH %LH %TH %W\n"); |
|
|
|
return 0; |
|
|
|
} |