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

Function build_script_table

deps/quickjs/unicode_gen.c:1687–1755  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1685}
1686
1687void build_script_table(FILE *f)
1688{
1689 int i, v, j, n, n1, type;
1690 DynBuf dbuf_s, *dbuf = &dbuf_s;
1691 int cw_count, cw_len_count[4], cw_start;
1692
1693 fprintf(f, "typedef enum {\n");
1694 for(i = 0; i < SCRIPT_COUNT; i++)
1695 fprintf(f, " UNICODE_SCRIPT_%s,\n", unicode_script_name[i]);
1696 fprintf(f, " UNICODE_SCRIPT_COUNT,\n");
1697 fprintf(f, "} UnicodeScriptEnum;\n\n");
1698
1699 i = 1;
1700 dump_name_table(f, "unicode_script_name_table",
1701 unicode_script_name + i, SCRIPT_COUNT - i,
1702 unicode_script_short_name + i);
1703
1704 dbuf_init(dbuf);
1705 cw_count = 0;
1706 for(i = 0; i < 4; i++)
1707 cw_len_count[i] = 0;
1708 for(i = 0; i <= CHARCODE_MAX;) {
1709 v = unicode_db[i].script;
1710 j = i + 1;
1711 while (j <= CHARCODE_MAX && unicode_db[j].script == v)
1712 j++;
1713 n = j - i;
1714 if (v == 0 && j == (CHARCODE_MAX + 1))
1715 break;
1716 // printf("%05x %05x %d\n", i, n, v);
1717 cw_count++;
1718 n--;
1719 cw_start = dbuf->size;
1720 if (v == 0)
1721 type = 0;
1722 else
1723 type = 1;
1724 if (n < 96) {
1725 dbuf_putc(dbuf, n | (type << 7));
1726 } else if (n < 96 + (1 << 12)) {
1727 n1 = n - 96;
1728 assert(n1 < (1 << 12));
1729 dbuf_putc(dbuf, ((n1 >> 8) + 96) | (type << 7));
1730 dbuf_putc(dbuf, n1);
1731 } else {
1732 n1 = n - (96 + (1 << 12));
1733 assert(n1 < (1 << 20));
1734 dbuf_putc(dbuf, ((n1 >> 16) + 112) | (type << 7));
1735 dbuf_putc(dbuf, n1 >> 8);
1736 dbuf_putc(dbuf, n1);
1737 }
1738 if (type != 0)
1739 dbuf_putc(dbuf, v);
1740
1741 cw_len_count[dbuf->size - cw_start - 1]++;
1742 i += n + 1;
1743 }
1744#if defined(DUMP_TABLE_SIZE)

Callers 1

mainFunction · 0.85

Calls 6

dump_name_tableFunction · 0.85
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