1 | /* |
2 | Copyright (C) 1997-2021 Sam Lantinga <slouken@libsdl.org> |
3 | |
4 | This software is provided 'as-is', without any express or implied |
5 | warranty. In no event will the authors be held liable for any damages |
6 | arising from the use of this software. |
7 | |
8 | Permission is granted to anyone to use this software for any purpose, |
9 | including commercial applications, and to alter it and redistribute it |
10 | freely. |
11 | */ |
12 | |
13 | #include <stdio.h> |
14 | |
15 | #include "SDL.h" |
16 | |
17 | static size_t |
18 | widelen(char *data) |
19 | { |
20 | size_t len = 0; |
21 | Uint32 *p = (Uint32 *) data; |
22 | while (*p++) { |
23 | ++len; |
24 | } |
25 | return len; |
26 | } |
27 | |
28 | int |
29 | main(int argc, char *argv[]) |
30 | { |
31 | const char *formats[] = { |
32 | "UTF8" , |
33 | "UTF-8" , |
34 | "UTF16BE" , |
35 | "UTF-16BE" , |
36 | "UTF16LE" , |
37 | "UTF-16LE" , |
38 | "UTF32BE" , |
39 | "UTF-32BE" , |
40 | "UTF32LE" , |
41 | "UTF-32LE" , |
42 | "UCS4" , |
43 | "UCS-4" , |
44 | }; |
45 | char buffer[BUFSIZ]; |
46 | char *ucs4; |
47 | char *test[2]; |
48 | int i; |
49 | FILE *file; |
50 | int errors = 0; |
51 | |
52 | /* Enable standard application logging */ |
53 | SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); |
54 | |
55 | if (!argv[1]) { |
56 | argv[1] = "utf8.txt" ; |
57 | } |
58 | file = fopen(argv[1], "rb" ); |
59 | if (!file) { |
60 | SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to open %s\n" , argv[1]); |
61 | return (1); |
62 | } |
63 | |
64 | while (fgets(buffer, sizeof(buffer), file)) { |
65 | /* Convert to UCS-4 */ |
66 | size_t len; |
67 | ucs4 = |
68 | SDL_iconv_string("UCS-4" , "UTF-8" , buffer, |
69 | SDL_strlen(buffer) + 1); |
70 | len = (widelen(ucs4) + 1) * 4; |
71 | for (i = 0; i < SDL_arraysize(formats); ++i) { |
72 | test[0] = SDL_iconv_string(formats[i], "UCS-4" , ucs4, len); |
73 | test[1] = SDL_iconv_string("UCS-4" , formats[i], test[0], len); |
74 | if (!test[1] || SDL_memcmp(test[1], ucs4, len) != 0) { |
75 | SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "FAIL: %s\n" , formats[i]); |
76 | ++errors; |
77 | } |
78 | SDL_free(test[0]); |
79 | SDL_free(test[1]); |
80 | } |
81 | test[0] = SDL_iconv_string("UTF-8" , "UCS-4" , ucs4, len); |
82 | SDL_free(ucs4); |
83 | fputs(test[0], stdout); |
84 | SDL_free(test[0]); |
85 | } |
86 | fclose(file); |
87 | return (errors ? errors + 1 : 0); |
88 | } |
89 | |