Overview
Comment: | Add case folding table generator. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
a95f375c284c80a800228d557d6253c7 |
User & Date: | js on 2009-10-31 14:46:30 |
Other Links: | manifest | tags |
Context
2009-11-01
| ||
18:14 | Add .xcodeproj. check-in: 2bb0bb11ed user: js tags: trunk | |
2009-10-31
| ||
14:46 | Add case folding table generator. check-in: a95f375c28 user: js tags: trunk | |
2009-10-29
| ||
14:16 | Split Unicode table generator and download CaseFolding.txt. check-in: c51761c6e9 user: js tags: trunk | |
Changes
Added generators/CaseFoldingGenerator.h version [d3e4620949].
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /* * Copyright (c) 2008 - 2009 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of libobjfw. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #import "OFString.h" @interface CaseFoldingGenerator: OFObject { of_unichar_t table[0x110000]; size_t size; } - (void)fillTableFromFile: (OFString*)file; - (void)writeTableToFile: (OFString*)file; - (void)appendHeaderToFile: (OFString*)file; @end |
Added generators/CaseFoldingGenerator.m version [3fb8e54484].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | /* * Copyright (c) 2008 - 2009 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of libobjfw. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #import "OFFile.h" #import "OFAutoreleasePool.h" #import "CaseFoldingGenerator.h" #import "copyright.h" @implementation CaseFoldingGenerator - (void)fillTableFromFile: (OFString*)file; { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init], *pool2; OFFile *src = [OFFile fileWithPath: file mode: @"rb"]; OFString *line; pool2 = [[OFAutoreleasePool alloc] init]; while ((line = [src readLine])) { OFArray *splitted; OFString **splitted_carray; of_unichar_t codep; if ([line characterAtIndex: 0] == '#') continue; splitted = [line splitWithDelimiter: @"; "]; if ([splitted count] != 4) { fprintf(stderr, "Invalid line: %s\n", [line cString]); exit(1); } splitted_carray = [splitted cArray]; if (![splitted_carray[1] isEqual: @"S"] && ![splitted_carray[1] isEqual: @"C"]) continue; codep = [splitted_carray[0] hexadecimalValueAsInteger]; table[codep] = [splitted_carray[2] hexadecimalValueAsInteger]; [pool2 releaseObjects]; } [pool release]; } - (void)writeTableToFile: (OFString*)file { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFAutoreleasePool *pool2; OFFile *f = [OFFile fileWithPath: file mode: @"wb"]; of_unichar_t i, j; size_t last_used = SIZE_MAX; BOOL table_used[0x1100]; memset(table_used, NO, 0x1100); [f writeString: COPYRIGHT @"#include \"config.h\"\n" @"\n" @"#import \"OFString.h\"\n\n"]; [f writeString: @"static const of_unichar_t nop_page[0x100] = {};" @"\n\n"]; for (i = 0; i < 0x110000; i += 0x100) { BOOL empty; empty = YES; for (j = i; j < i + 0x100; j++) { if (table[j] != 0) { empty = NO; last_used = i >> 8; table_used[last_used] = YES; } } if (!empty) { pool2 = [[OFAutoreleasePool alloc] init]; [f writeString: [OFString stringWithFormat: @"static const of_unichar_t page_%d[0x100] = " @"{\n", i >> 8]]; for (j = i; j < i + 0x100; j += 4) { [f writeString: [OFString stringWithFormat: @"\t0x%06X, 0x%06X, 0x%06X, 0x%06X,\n", table[j], table[j + 1], table[j + 2], table[j + 3]]]; [pool2 releaseObjects]; } [f writeString: @"};\n\n"]; [pool2 release]; } } last_used++; [f writeString: [OFString stringWithFormat: @"const of_unichar_t* const of_unicode_titlecase_table[0x%X] = " @"{\n\t", last_used]]; pool2 = [[OFAutoreleasePool alloc] init]; for (i = 0; i < last_used; i++) { if (table_used[i]) [f writeString: [OFString stringWithFormat: @"page_%d", i]]; else [f writeString: @"nop_page"]; if ((i + 1) % 4 == 0) [f writeString: @",\n\t"]; else if (i + 1 < last_used) [f writeString: @", "]; [pool2 releaseObjects]; } [f writeString: @"\n};\n"]; size = last_used; [pool release]; } - (void)appendHeaderToFile: (OFString*)file { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFFile *f = [OFFile fileWithPath: file mode: @"ab"]; [f writeString: [OFString stringWithFormat: @"\n#define OF_UNICODE_CASEFOLDING_TABLE_SIZE 0x%X\n\n", size]]; [f writeString: @"extern const of_unichar_t* const\n" @" of_unicode_casefolding_table[" @"OF_UNICODE_CASEFOLDING_TABLE_SIZE];\n"]; [pool release]; } @end |
Modified generators/Makefile from [7ae395816f] to [12f632ea2d].
1 2 | PROG_NOINST = gen_tables${PROG_SUFFIX} SRCS = main.o \ | | > | 1 2 3 4 5 6 7 8 9 10 11 | PROG_NOINST = gen_tables${PROG_SUFFIX} SRCS = main.o \ UpperLowerGenerator.m \ CaseFoldingGenerator.m .PHONY: run run: all UnicodeData.txt CaseFolding.txt rm -f libobjfw.so.0 libobjfw.so.0.1 libobjfw.dll libobjfw.dylib if test -f ../src/libobjfw.so; then \ ln -s ../src/libobjfw.so libobjfw.so.0; \ ln -s ../src/libobjfw.so libobjfw.so.0.1; \ |
︙ | ︙ |
Modified generators/UpperLowerGenerator.h from [4a2f69fdd1] to [75752449a4].
︙ | ︙ | |||
11 12 13 14 15 16 17 18 19 20 21 22 23 | #import "OFString.h" @interface UpperLowerGenerator: OFObject { of_unichar_t upper[0x110000]; of_unichar_t lower[0x110000]; } - (void)fillTablesFromFile: (OFString*)file; - (size_t)writeTable: (of_unichar_t*)table withName: (OFString*)name toFile: (OFString*)file; | > > | | | < < | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #import "OFString.h" @interface UpperLowerGenerator: OFObject { of_unichar_t upper[0x110000]; of_unichar_t lower[0x110000]; size_t upper_size; size_t lower_size; } - (void)fillTablesFromFile: (OFString*)file; - (size_t)writeTable: (of_unichar_t*)table withName: (OFString*)name toFile: (OFString*)file; - (void)writeUpperTableToFile: (OFString*)file; - (void)writeLowerTableToFile: (OFString*)file; - (void)writeHeaderToFile: (OFString*)file; @end |
Modified generators/UpperLowerGenerator.m from [cb98ef8d98] to [6e8155bc72].
︙ | ︙ | |||
133 134 135 136 137 138 139 | [f writeString: @"\n};\n"]; [pool release]; return last_used; } | | | | | | | | | < < | 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | [f writeString: @"\n};\n"]; [pool release]; return last_used; } - (void)writeUpperTableToFile: (OFString*)file { upper_size = [self writeTable: upper withName: @"upper" toFile: file]; } - (void)writeLowerTableToFile: (OFString*)file { lower_size = [self writeTable: lower withName: @"lower" toFile: file]; } - (void)writeHeaderToFile: (OFString*)file { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFFile *f = [OFFile fileWithPath: file mode: @"wb"]; [f writeString: COPYRIGHT @"#import \"OFString.h\"\n\n"]; |
︙ | ︙ |
Modified generators/main.m from [50bb57fa45] to [dbb1dcb480].
︙ | ︙ | |||
10 11 12 13 14 15 16 17 18 19 20 21 | */ #include "config.h" #import "OFAutoreleasePool.h" #import "UpperLowerGenerator.h" int main() { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; | > | | | | | | | | > | > > | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | */ #include "config.h" #import "OFAutoreleasePool.h" #import "UpperLowerGenerator.h" #import "CaseFoldingGenerator.h" int main() { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; UpperLowerGenerator *ulgen; CaseFoldingGenerator *cfgen; ulgen = [[[UpperLowerGenerator alloc] init] autorelease]; [ulgen fillTablesFromFile: @"UnicodeData.txt"]; [ulgen writeUpperTableToFile: @"../src/unicode_upper.m"]; [ulgen writeLowerTableToFile: @"../src/unicode_lower.m"]; [ulgen writeHeaderToFile: @"../src/unicode.h"]; cfgen = [[[CaseFoldingGenerator alloc] init] autorelease]; [cfgen fillTableFromFile: @"CaseFolding.txt"]; [cfgen writeTableToFile: @"../src/unicode_casefolding.m"]; [cfgen appendHeaderToFile: @"../src/unicode.h"]; [pool release]; return 0; } |