MCPcopy Create free account
hub / github.com/buke/quickjs-go / build_cc_table

Function build_cc_table

deps/quickjs/unicode_gen.c:1971–2064  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1969#define CC_BLOCK_LEN 32
1970
1971void build_cc_table(FILE *f)
1972{
1973 int i, cc, n, cc_table_len, type, n1;
1974 DynBuf dbuf_s, *dbuf = &dbuf_s;
1975 DynBuf dbuf1_s, *dbuf1 = &dbuf1_s;
1976 int cw_len_tab[3], cw_start, block_end_pos;
1977 uint32_t v;
1978
1979 dbuf_init(dbuf);
1980 dbuf_init(dbuf1);
1981 cc_table_len = 0;
1982 for(i = 0; i < countof(cw_len_tab); i++)
1983 cw_len_tab[i] = 0;
1984 block_end_pos = CC_BLOCK_LEN;
1985 for(i = 0; i <= CHARCODE_MAX;) {
1986 cc = unicode_db[i].combining_class;
1987 assert(cc <= 255);
1988 /* check increasing values */
1989 n = 1;
1990 while ((i + n) <= CHARCODE_MAX &&
1991 unicode_db[i + n].combining_class == (cc + n))
1992 n++;
1993 if (n >= 2) {
1994 type = 1;
1995 } else {
1996 type = 0;
1997 n = 1;
1998 while ((i + n) <= CHARCODE_MAX &&
1999 unicode_db[i + n].combining_class == cc)
2000 n++;
2001 }
2002 /* no need to encode the last run */
2003 if (cc == 0 && (i + n - 1) == CHARCODE_MAX)
2004 break;
2005#ifdef DUMP_CC_TABLE
2006 printf("%05x %6d %d %d\n", i, n, type, cc);
2007#endif
2008 if (type == 0) {
2009 if (cc == 0)
2010 type = 2;
2011 else if (cc == 230)
2012 type = 3;
2013 }
2014 n1 = n - 1;
2015
2016 /* add an entry to the index if necessary */
2017 if (dbuf->size >= block_end_pos) {
2018 v = i | ((dbuf->size - block_end_pos) << 21);
2019 dbuf_putc(dbuf1, v);
2020 dbuf_putc(dbuf1, v >> 8);
2021 dbuf_putc(dbuf1, v >> 16);
2022 block_end_pos += CC_BLOCK_LEN;
2023 }
2024 cw_start = dbuf->size;
2025 if (n1 < 48) {
2026 dbuf_putc(dbuf, n1 | (type << 6));
2027 } else if (n1 < 48 + (1 << 11)) {
2028 n1 -= 48;

Callers 1

mainFunction · 0.85

Calls 5

dbuf_initFunction · 0.85
dbuf_putcFunction · 0.85
dump_byte_tableFunction · 0.85
dbuf_freeFunction · 0.85
assertFunction · 0.50

Tested by

no test coverage detected