diff options
| author | Tyge Løvset <[email protected]> | 2022-06-07 16:39:30 +0200 |
|---|---|---|
| committer | Tyge Løvset <[email protected]> | 2022-06-07 16:39:30 +0200 |
| commit | 48b3336d8f10d8097d7626732ede5896ec353407 (patch) | |
| tree | e83f87925eb84fbbaefeb3fe4cee39edacf232e0 | |
| parent | b65f70fdc80b19d869adabb5cb270807c96d152b (diff) | |
| download | STC-modified-48b3336d8f10d8097d7626732ede5896ec353407.tar.gz STC-modified-48b3336d8f10d8097d7626732ede5896ec353407.zip | |
Some improvements in utf8tabs.py
| -rw-r--r-- | examples/gauss1.c | 1 | ||||
| -rw-r--r-- | examples/shape.c | 8 | ||||
| -rw-r--r-- | src/utf8code.c | 2 | ||||
| -rw-r--r-- | src/utf8tabs.py | 25 |
4 files changed, 17 insertions, 19 deletions
diff --git a/examples/gauss1.c b/examples/gauss1.c index 75d5567e..da6d73f4 100644 --- a/examples/gauss1.c +++ b/examples/gauss1.c @@ -1,7 +1,6 @@ #include <time.h> #include <math.h> -#define STC_IMPLEMENT #include <stc/crandom.h> #include <stc/cstr.h> diff --git a/examples/shape.c b/examples/shape.c index 051e1c63..e5ac0e58 100644 --- a/examples/shape.c +++ b/examples/shape.c @@ -4,7 +4,7 @@ #include <stdio.h> #include <stc/ccommon.h> -#define c_dyn_ptr(T, s) \ +#define c_dyn_cast(T, s) \ (&T##_api == (s)->api ? (T*)(s) : (T*)0) #define c_vtable(Api, T) \ @@ -64,7 +64,7 @@ Triangle* Triangle_new(Point a, Point b, Point c) static void Triangle_draw(const Shape* shape) { - const Triangle* self = c_dyn_ptr(Triangle, shape); + const Triangle* self = c_dyn_cast(Triangle, shape); printf("Triangle : (%g,%g), (%g,%g), (%g,%g)\n", self->p[0].x, self->p[0].y, self->p[1].x, self->p[1].y, @@ -103,7 +103,7 @@ void Polygon_addPoint(Polygon* self, Point p) static void Polygon_drop(Shape* shape) { - Polygon* self = c_dyn_ptr(Polygon, shape); + Polygon* self = c_dyn_cast(Polygon, shape); printf("poly destructed\n"); PointVec_drop(&self->points); Shape_drop(shape); @@ -111,7 +111,7 @@ static void Polygon_drop(Shape* shape) static void Polygon_draw(const Shape* shape) { - const Polygon* self = c_dyn_ptr(Polygon, shape); + const Polygon* self = c_dyn_cast(Polygon, shape); printf("Polygon :"); c_foreach (i, PointVec, self->points) printf(" (%g,%g)", i.ref->x, i.ref->y); diff --git a/src/utf8code.c b/src/utf8code.c index 4b55d2be..0cdcd8b6 100644 --- a/src/utf8code.c +++ b/src/utf8code.c @@ -105,7 +105,7 @@ int utf8_icmp_n(size_t u8max, const char* s1, const size_t n1, do { utf8_decode(&d2, (uint8_t)s2[j2++]); } while (d2.state); int c = utf8_tolower(d1.codep) - utf8_tolower(d2.codep); if (c || !s2[j2]) - return c; + return c; } return (j2 < n2) - (j1 < n1); } diff --git a/src/utf8tabs.py b/src/utf8tabs.py index 55be3f99..241f44af 100644 --- a/src/utf8tabs.py +++ b/src/utf8tabs.py @@ -60,7 +60,7 @@ def make_table(caselist): offset = b - a if abs(diff_a) > 2 or a - prev_a != diff_a or b - prev_b != diff_b or prev_offs != offset: - if j > 0 and start_a not in [0xAB70, 0x13F8]: + if j > 0 and start_a not in [0xAB70, 0x13F8]: # BUG in CaseFolding.txt V14 table.append([start_a, prev_a, prev_b, start_name]) if j < n_1: diff_a = caselist[j+1][0] - a @@ -103,7 +103,7 @@ def print_index_table(name, indtab): def make_inverse_ind(table): inv = [] for i in range(len(table)): - if table[i][2] not in [ord('i'), ord('s')]: # remove 'i'. 's' upcase mappings. + if table[i][2] not in [ord('i'), ord('s')]: # ignore 'i'. 's' upcase mappings. inv.append(i) # sort by mapped value table[:][2] (= inv) of the first element in each range entry inv.sort(key=lambda i: table[i][2] - (table[i][1] - table[i][0])) @@ -124,25 +124,24 @@ def main(): print('#include <stdint.h>\n') print('struct CaseMapping { uint16_t c0, c1, m1; };\n') - casemappings = compile_table('lowcase') # casefold - lowcase = compile_table('lowcase', 'Lu') # unicode lowercase + casemappings = compile_table('lowcase') # Casefolding.txt + upcase = compile_table('lowcase', 'Lu') # UnicodeData.txt uppercase - lowcase_ind = [] - for v in lowcase: - try: - lowcase_ind.append(casemappings.index(v)) - except: - lowcase_ind.append(len(casemappings)) + # merge in additional Lu => Ll mappings from UnicodeData.txt + for v in upcase: + if v not in casemappings: casemappings.append(v) - casefold_len = len(casemappings) + # sort casemappings by uppercase values: casemappings.sort(key=lambda x: x[0]) - print_table('casemappings', casemappings, style=1) + + # index list sorted by mapped lowercase values: upcase_ind = make_inverse_ind(casemappings) - print('enum { casefold_len = %d };' % casefold_len) + print('enum { casefold_len = %d };' % len(casemappings)) print_index_table('upcase_ind', upcase_ind) + ########### main: if __name__ == "__main__": |
