Changeset: 70edcd2ff4e3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/70edcd2ff4e3
Modified Files:
gdk/gdk_atoms.h
gdk/gdk_string.c
sql/backends/monet5/sql_result.c
Branch: directappend
Log Message:
Move printable width computation to gdk_string.c
So it's accessible in tablet.c and wherever else it might
come in handy in the future
diffs (truncated from 385 to 300 lines):
diff --git a/gdk/gdk_atoms.h b/gdk/gdk_atoms.h
--- a/gdk/gdk_atoms.h
+++ b/gdk/gdk_atoms.h
@@ -136,6 +136,7 @@ gdk_export ssize_t GDKstrFromStr(unsigne
gdk_export ssize_t strFromStr(const char *restrict src, size_t *restrict len,
str *restrict dst, bool external);
gdk_export size_t escapedStrlen(const char *restrict src, const char *sep1,
const char *sep2, int quote);
gdk_export size_t escapedStr(char *restrict dst, const char *restrict src,
size_t dstlen, const char *sep1, const char *sep2, int quote);
+gdk_export size_t strPrintWidth(const char *restrict s);
/*
* @- nil values
* All types have a single value designated as a NIL value. It
diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c
--- a/gdk/gdk_string.c
+++ b/gdk/gdk_string.c
@@ -585,6 +585,171 @@ strFromStr(const char *restrict src, siz
(ssize_t) (cur - start));
}
+size_t strPrintWidth(const char *restrict s)
+{
+ int len = 0;
+ int c;
+ int n;
+
+ if (strNil(s))
+ return int_nil;
+ c = 0;
+ n = 0;
+ while (*s != 0) {
+ if ((*s & 0x80) == 0) {
+ assert(n == 0);
+ len++;
+ n = 0;
+ } else if ((*s & 0xC0) == 0x80) {
+ c = (c << 6) | (*s & 0x3F);
+ if (--n == 0) {
+ /* last byte of a multi-byte character */
+ len++;
+ /* this list was created by combining
+ * the code points marked as
+ * Emoji_Presentation in
+ * /usr/share/unicode/emoji/emoji-data.txt
+ * and code points marked either F or
+ * W in EastAsianWidth.txt; this list
+ * is up-to-date with Unicode 9.0 */
+ if ((0x1100 <= c && c <= 0x115F) ||
+ (0x231A <= c && c <= 0x231B) ||
+ (0x2329 <= c && c <= 0x232A) ||
+ (0x23E9 <= c && c <= 0x23EC) ||
+ c == 0x23F0 ||
+ c == 0x23F3 ||
+ (0x25FD <= c && c <= 0x25FE) ||
+ (0x2614 <= c && c <= 0x2615) ||
+ (0x2648 <= c && c <= 0x2653) ||
+ c == 0x267F ||
+ c == 0x2693 ||
+ c == 0x26A1 ||
+ (0x26AA <= c && c <= 0x26AB) ||
+ (0x26BD <= c && c <= 0x26BE) ||
+ (0x26C4 <= c && c <= 0x26C5) ||
+ c == 0x26CE ||
+ c == 0x26D4 ||
+ c == 0x26EA ||
+ (0x26F2 <= c && c <= 0x26F3) ||
+ c == 0x26F5 ||
+ c == 0x26FA ||
+ c == 0x26FD ||
+ c == 0x2705 ||
+ (0x270A <= c && c <= 0x270B) ||
+ c == 0x2728 ||
+ c == 0x274C ||
+ c == 0x274E ||
+ (0x2753 <= c && c <= 0x2755) ||
+ c == 0x2757 ||
+ (0x2795 <= c && c <= 0x2797) ||
+ c == 0x27B0 ||
+ c == 0x27BF ||
+ (0x2B1B <= c && c <= 0x2B1C) ||
+ c == 0x2B50 ||
+ c == 0x2B55 ||
+ (0x2E80 <= c && c <= 0x2E99) ||
+ (0x2E9B <= c && c <= 0x2EF3) ||
+ (0x2F00 <= c && c <= 0x2FD5) ||
+ (0x2FF0 <= c && c <= 0x2FFB) ||
+ (0x3000 <= c && c <= 0x303E) ||
+ (0x3041 <= c && c <= 0x3096) ||
+ (0x3099 <= c && c <= 0x30FF) ||
+ (0x3105 <= c && c <= 0x312D) ||
+ (0x3131 <= c && c <= 0x318E) ||
+ (0x3190 <= c && c <= 0x31BA) ||
+ (0x31C0 <= c && c <= 0x31E3) ||
+ (0x31F0 <= c && c <= 0x321E) ||
+ (0x3220 <= c && c <= 0x3247) ||
+ (0x3250 <= c && c <= 0x32FE) ||
+ (0x3300 <= c && c <= 0x4DBF) ||
+ (0x4E00 <= c && c <= 0xA48C) ||
+ (0xA490 <= c && c <= 0xA4C6) ||
+ (0xA960 <= c && c <= 0xA97C) ||
+ (0xAC00 <= c && c <= 0xD7A3) ||
+ (0xF900 <= c && c <= 0xFAFF) ||
+ (0xFE10 <= c && c <= 0xFE19) ||
+ (0xFE30 <= c && c <= 0xFE52) ||
+ (0xFE54 <= c && c <= 0xFE66) ||
+ (0xFE68 <= c && c <= 0xFE6B) ||
+ (0xFF01 <= c && c <= 0xFF60) ||
+ (0xFFE0 <= c && c <= 0xFFE6) ||
+ c == 0x16FE0 ||
+ (0x17000 <= c && c <= 0x187EC) ||
+ (0x18800 <= c && c <= 0x18AF2) ||
+ (0x1B000 <= c && c <= 0x1B001) ||
+ c == 0x1F004 ||
+ c == 0x1F0CF ||
+ c == 0x1F18E ||
+ (0x1F191 <= c && c <= 0x1F19A) ||
+ /* removed 0x1F1E6..0x1F1FF */
+ (0x1F200 <= c && c <= 0x1F202) ||
+ (0x1F210 <= c && c <= 0x1F23B) ||
+ (0x1F240 <= c && c <= 0x1F248) ||
+ (0x1F250 <= c && c <= 0x1F251) ||
+ (0x1F300 <= c && c <= 0x1F320) ||
+ (0x1F32D <= c && c <= 0x1F335) ||
+ (0x1F337 <= c && c <= 0x1F37C) ||
+ (0x1F37E <= c && c <= 0x1F393) ||
+ (0x1F3A0 <= c && c <= 0x1F3CA) ||
+ (0x1F3CF <= c && c <= 0x1F3D3) ||
+ (0x1F3E0 <= c && c <= 0x1F3F0) ||
+ c == 0x1F3F4 ||
+ (0x1F3F8 <= c && c <= 0x1F43E) ||
+ c == 0x1F440 ||
+ (0x1F442 <= c && c <= 0x1F4FC) ||
+ (0x1F4FF <= c && c <= 0x1F53D) ||
+ (0x1F54B <= c && c <= 0x1F54E) ||
+ (0x1F550 <= c && c <= 0x1F567) ||
+ c == 0x1F57A ||
+ (0x1F595 <= c && c <= 0x1F596) ||
+ c == 0x1F5A4 ||
+ (0x1F5FB <= c && c <= 0x1F64F) ||
+ (0x1F680 <= c && c <= 0x1F6C5) ||
+ c == 0x1F6CC ||
+ (0x1F6D0 <= c && c <= 0x1F6D2) ||
+ (0x1F6EB <= c && c <= 0x1F6EC) ||
+ (0x1F6F4 <= c && c <= 0x1F6F6) ||
+ (0x1F910 <= c && c <= 0x1F91E) ||
+ (0x1F920 <= c && c <= 0x1F927) ||
+ c == 0x1F930 ||
+ (0x1F933 <= c && c <= 0x1F93E) ||
+ (0x1F940 <= c && c <= 0x1F94B) ||
+ (0x1F950 <= c && c <= 0x1F95E) ||
+ (0x1F980 <= c && c <= 0x1F991) ||
+ c == 0x1F9C0 ||
+ (0x20000 <= c && c <= 0x2FFFD) ||
+ (0x30000 <= c && c <= 0x3FFFD))
+ len++;
+ }
+ } else if ((*s & 0xE0) == 0xC0) {
+ assert(n == 0);
+ n = 1;
+ c = *s & 0x1F;
+ } else if ((*s & 0xF0) == 0xE0) {
+ assert(n == 0);
+ n = 2;
+ c = *s & 0x0F;
+ } else if ((*s & 0xF8) == 0xF0) {
+ assert(n == 0);
+ n = 3;
+ c = *s & 0x07;
+ } else if ((*s & 0xFC) == 0xF8) {
+ assert(n == 0);
+ n = 4;
+ c = *s & 0x03;
+ } else {
+ assert(0);
+ n = 0;
+ }
+ s++;
+ }
+ return len;
+
+}
+
+
+
+
/*
* Convert a GDK string value to something printable.
*/
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -235,168 +235,6 @@ sql_timestamp_tostr(void *TS_RES, char *
return (ssize_t) (s - *buf);
}
-static inline int
-STRwidth(const char *restrict s)
-{
- int len = 0;
- int c;
- int n;
-
- if (strNil(s))
- return int_nil;
- c = 0;
- n = 0;
- while (*s != 0) {
- if ((*s & 0x80) == 0) {
- assert(n == 0);
- len++;
- n = 0;
- } else if ((*s & 0xC0) == 0x80) {
- c = (c << 6) | (*s & 0x3F);
- if (--n == 0) {
- /* last byte of a multi-byte character */
- len++;
- /* this list was created by combining
- * the code points marked as
- * Emoji_Presentation in
- * /usr/share/unicode/emoji/emoji-data.txt
- * and code points marked either F or
- * W in EastAsianWidth.txt; this list
- * is up-to-date with Unicode 9.0 */
- if ((0x1100 <= c && c <= 0x115F) ||
- (0x231A <= c && c <= 0x231B) ||
- (0x2329 <= c && c <= 0x232A) ||
- (0x23E9 <= c && c <= 0x23EC) ||
- c == 0x23F0 ||
- c == 0x23F3 ||
- (0x25FD <= c && c <= 0x25FE) ||
- (0x2614 <= c && c <= 0x2615) ||
- (0x2648 <= c && c <= 0x2653) ||
- c == 0x267F ||
- c == 0x2693 ||
- c == 0x26A1 ||
- (0x26AA <= c && c <= 0x26AB) ||
- (0x26BD <= c && c <= 0x26BE) ||
- (0x26C4 <= c && c <= 0x26C5) ||
- c == 0x26CE ||
- c == 0x26D4 ||
- c == 0x26EA ||
- (0x26F2 <= c && c <= 0x26F3) ||
- c == 0x26F5 ||
- c == 0x26FA ||
- c == 0x26FD ||
- c == 0x2705 ||
- (0x270A <= c && c <= 0x270B) ||
- c == 0x2728 ||
- c == 0x274C ||
- c == 0x274E ||
- (0x2753 <= c && c <= 0x2755) ||
- c == 0x2757 ||
- (0x2795 <= c && c <= 0x2797) ||
- c == 0x27B0 ||
- c == 0x27BF ||
- (0x2B1B <= c && c <= 0x2B1C) ||
- c == 0x2B50 ||
- c == 0x2B55 ||
- (0x2E80 <= c && c <= 0x2E99) ||
- (0x2E9B <= c && c <= 0x2EF3) ||
- (0x2F00 <= c && c <= 0x2FD5) ||
- (0x2FF0 <= c && c <= 0x2FFB) ||
- (0x3000 <= c && c <= 0x303E) ||
- (0x3041 <= c && c <= 0x3096) ||
- (0x3099 <= c && c <= 0x30FF) ||
- (0x3105 <= c && c <= 0x312D) ||
- (0x3131 <= c && c <= 0x318E) ||
- (0x3190 <= c && c <= 0x31BA) ||
- (0x31C0 <= c && c <= 0x31E3) ||
- (0x31F0 <= c && c <= 0x321E) ||
- (0x3220 <= c && c <= 0x3247) ||
- (0x3250 <= c && c <= 0x32FE) ||
- (0x3300 <= c && c <= 0x4DBF) ||
- (0x4E00 <= c && c <= 0xA48C) ||
- (0xA490 <= c && c <= 0xA4C6) ||
- (0xA960 <= c && c <= 0xA97C) ||
- (0xAC00 <= c && c <= 0xD7A3) ||
- (0xF900 <= c && c <= 0xFAFF) ||
- (0xFE10 <= c && c <= 0xFE19) ||
- (0xFE30 <= c && c <= 0xFE52) ||
- (0xFE54 <= c && c <= 0xFE66) ||
- (0xFE68 <= c && c <= 0xFE6B) ||
- (0xFF01 <= c && c <= 0xFF60) ||
- (0xFFE0 <= c && c <= 0xFFE6) ||
- c == 0x16FE0 ||
- (0x17000 <= c && c <= 0x187EC) ||
- (0x18800 <= c && c <= 0x18AF2) ||
- (0x1B000 <= c && c <= 0x1B001) ||
- c == 0x1F004 ||
- c == 0x1F0CF ||
- c == 0x1F18E ||
- (0x1F191 <= c && c <= 0x1F19A) ||
- /* removed 0x1F1E6..0x1F1FF */
- (0x1F200 <= c && c <= 0x1F202) ||
- (0x1F210 <= c && c <= 0x1F23B) ||
- (0x1F240 <= c && c <= 0x1F248) ||
- (0x1F250 <= c && c <= 0x1F251) ||
- (0x1F300 <= c && c <= 0x1F320) ||
- (0x1F32D <= c && c <= 0x1F335) ||
- (0x1F337 <= c && c <= 0x1F37C) ||
- (0x1F37E <= c && c <= 0x1F393) ||
- (0x1F3A0 <= c && c <= 0x1F3CA) ||
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list