| 1755 | } |
| 1756 | |
| 1757 | void build_script_ext_table(FILE *f) |
| 1758 | { |
| 1759 | int i, j, n, n1, script_ext_len; |
| 1760 | DynBuf dbuf_s, *dbuf = &dbuf_s; |
| 1761 | int cw_count; |
| 1762 | |
| 1763 | dbuf_init(dbuf); |
| 1764 | cw_count = 0; |
| 1765 | for(i = 0; i <= CHARCODE_MAX;) { |
| 1766 | script_ext_len = unicode_db[i].script_ext_len; |
| 1767 | j = i + 1; |
| 1768 | while (j <= CHARCODE_MAX && |
| 1769 | unicode_db[j].script_ext_len == script_ext_len && |
| 1770 | !memcmp(unicode_db[j].script_ext, unicode_db[i].script_ext, |
| 1771 | script_ext_len)) { |
| 1772 | j++; |
| 1773 | } |
| 1774 | n = j - i; |
| 1775 | cw_count++; |
| 1776 | n--; |
| 1777 | if (n < 128) { |
| 1778 | dbuf_putc(dbuf, n); |
| 1779 | } else if (n < 128 + (1 << 14)) { |
| 1780 | n1 = n - 128; |
| 1781 | assert(n1 < (1 << 14)); |
| 1782 | dbuf_putc(dbuf, (n1 >> 8) + 128); |
| 1783 | dbuf_putc(dbuf, n1); |
| 1784 | } else { |
| 1785 | n1 = n - (128 + (1 << 14)); |
| 1786 | assert(n1 < (1 << 22)); |
| 1787 | dbuf_putc(dbuf, (n1 >> 16) + 128 + 64); |
| 1788 | dbuf_putc(dbuf, n1 >> 8); |
| 1789 | dbuf_putc(dbuf, n1); |
| 1790 | } |
| 1791 | dbuf_putc(dbuf, script_ext_len); |
| 1792 | for(j = 0; j < script_ext_len; j++) |
| 1793 | dbuf_putc(dbuf, unicode_db[i].script_ext[j]); |
| 1794 | i += n + 1; |
| 1795 | } |
| 1796 | #ifdef DUMP_TABLE_SIZE |
| 1797 | printf("script_ext: %d entries", |
| 1798 | cw_count); |
| 1799 | printf(", length=%d bytes\n", (int)dbuf->size); |
| 1800 | #endif |
| 1801 | |
| 1802 | dump_byte_table(f, "unicode_script_ext_table", dbuf->buf, dbuf->size); |
| 1803 | |
| 1804 | dbuf_free(dbuf); |
| 1805 | } |
| 1806 | |
| 1807 | /* the following properties are synthetized so no table is necessary */ |
| 1808 | #define PROP_TABLE_COUNT PROP_ASCII |