// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
#include "unicode/utypes.h"
#include "unicode/ucnv.h"
#include "unicode/uniset.h"
#include <stdio.h>
using icu::LocalUConverterPointer;
using icu::UnicodeSet;
static const char *kConverter =
"ibm-1047" ;
int main(
int argc,
const char *argv[]) {
printf(
"// %s\n", U_COPYRIGHT_STRING);
printf(
"// generated by tblgen. You weren't going to edit it by hand, were you?\n");
printf(
"\n" );
UErrorCode status = U_ZERO_ERROR;
LocalUConverterPointer cnv(ucnv_open(kConverter, &status));
if (U_FAILURE(status)) {
fprintf(stderr,
"Failed to open %s: %s\n" , kConverter, u_errorName(status));
return 1 ;
}
printf(
"static const char cp1047_8859_1[256] = { \n" );
for (
int i=
0 x00; i<
0 x100; i++) {
char cp1047[
1 ];
cp1047[
0 ] = i;
char16_t u[
1 ];
char16_t *target = u;
const char *source = cp1047;
ucnv_toUnicode(cnv.getAlias(), &target, u+
1 , &source, cp1047+
1 , nullptr,
true , &status);
if (U_FAILURE(status)) {
fprintf(stderr,
"Conversion failure at #%X: %s\n" , i, u_errorName(status));
return 2 ;
}
printf(
" (char)0x%02X, /* %02X */\n", u[0], i);
}
printf(
"};\n\n" );
//
// UnicodeSet oldIllegal("[:print:]", status); // [a-zA-Z0-9_}{#)(><%:;.?*+-/^&|~!=,\\u005b\\u005d\\u005c]", status);
UnicodeSet oldIllegal(
"[0-9 a-z A-Z "
"_ \\{ \\} \\[ \\] # \\( \\) < > % \\: ; . "
"? * + \\- / \\^ \\& | ~ ! = , \\ \" ' ]", status);
/*
http : //www.lirmm.fr/~ducour/Doc-objets/ISO+IEC+14882-1998.pdf ( note: 1998 ) page 10, section 2.2 says:
1 The basic source character set consists of 96 characters : the space character , the control characters repre - 15 )
senting horizontal tab , vertical tab , form feed , and new - line , plus the following 91 graphical characters :
a b c d e f g h i j k l m n opqrstuvwxyz
A B C D E F G H I J K L M N OPQRSTUVWXYZ
0 12 3 4 5 6 7 8 9
_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ "
2 The universal - character - name construct provides a way to name other characters . hex - quad :
hexadecimal - digit hexadecimal - digit hexadecimal - digit hexadecimal - digit
universal - character - name : \ u hex - quad
\ U hex - quad hex - quad
The character designated by the universal - character - name \ UNNNNNNNN is that character whose character short name in ISO / IEC 10646 is NNNNNNNN ; the character designated by the universal - character - name \ uNNNN is that character whose character short name in ISO / IEC 10646 is 0000 NNNN . If the hexadecimal value for a universal character name is less than 0 x20 or in the range 0 x7F - 0 x9F ( inclusive ) , or if the uni - versal character name designates a character in the basic source character set , then the program is ill - formed .
So basically : printable ASCII plus 0 x00 - 0 x1F , 0 x7F - 0 x9F , was all illegal .
Some discussion at http : //unicode.org/mail-arch/unicode-ml/y2003-m10/0471.html
*/
printf(
"static const bool oldIllegal[256] = { \n" );
for (char16_t i=
0 x00; i<
0 x100;i++) {
printf(
" %s, /* U+%04X */\n",
(oldIllegal.contains(i))?
" true" :
"false" ,
i);
}
printf(
"};\n\n" );
return 0 ;
}
Messung V0.5 in Prozent C=87 H=81 G=83
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland