Sha256: 73b226d488973c8e5beed98a88206ee3945c64c1bf4da866837d9caaf2cee1b0

Contents?: true

Size: 1.86 KB

Versions: 44

Compression:

Stored size: 1.86 KB

Contents

/* special.c
 * Copyright (c) 2011, Peter Ohler
 * All rights reserved.
 */

#include "special.h"

/*
u0000..u007F                00000000000000xxxxxxx  0xxxxxxx
u0080..u07FF                0000000000yyyyyxxxxxx  110yyyyy 10xxxxxx
u0800..uD7FF, uE000..uFFFF  00000zzzzyyyyyyxxxxxx  1110zzzz 10yyyyyy 10xxxxxx
u10000..u10FFFF             uuuzzzzzzyyyyyyxxxxxx  11110uuu 10zzzzzz 10yyyyyy 10xxxxxx
*/
char*
ox_ucs_to_utf8_chars(char *text, uint64_t u) {
    int			reading = 0;
    int			i;
    unsigned char	c;

    if (u <= 0x000000000000007FULL) {
	/* 0xxxxxxx */
	*text++ = (char)u;
    } else if (u <= 0x00000000000007FFULL) {
	/* 110yyyyy 10xxxxxx */
	*text++ = (char)(0x00000000000000C0ULL | (0x000000000000001FULL & (u >> 6)));
	*text++ = (char)(0x0000000000000080ULL | (0x000000000000003FULL & u));
    } else if (u <= 0x000000000000D7FFULL || (0x000000000000E000ULL <= u && u <= 0x000000000000FFFFULL)) {
	/* 1110zzzz 10yyyyyy 10xxxxxx */
	*text++ = (char)(0x00000000000000E0ULL | (0x000000000000000FULL & (u >> 12)));
	*text++ = (char)(0x0000000000000080ULL | (0x000000000000003FULL & (u >> 6)));
	*text++ = (char)(0x0000000000000080ULL | (0x000000000000003FULL & u));
    } else if (0x0000000000010000ULL <= u && u <= 0x000000000010FFFFULL) {
	/* 11110uuu 10zzzzzz 10yyyyyy 10xxxxxx */
	*text++ = (char)(0x00000000000000F0ULL | (0x0000000000000007ULL & (u >> 18)));
	*text++ = (char)(0x0000000000000080ULL | (0x000000000000003FULL & (u >> 12)));
	*text++ = (char)(0x0000000000000080ULL | (0x000000000000003FULL & (u >> 6)));
	*text++ = (char)(0x0000000000000080ULL | (0x000000000000003FULL & u));
    } else {
	/* assume it is UTF-8 encoded directly and not UCS */
	for (i = 56; 0 <= i; i -= 8) {
	    c = (unsigned char)((u >> i) & 0x00000000000000FFULL);
	    if (reading) {
		*text++ = (char)c;
	    } else if ('\0' != c) {
		*text++ = (char)c;
		reading = 1;
	    }
	}
    }
    return text;
}

Version data entries

44 entries across 44 versions & 2 rubygems

Version Path
ox-2.12.1 ext/ox/special.c
ox-2.12.0 ext/ox/special.c
ox-2.11.0 ext/ox/special.c
ox-2.10.1 ext/ox/special.c
xaiml-0.1.3 vendor/bundle/ruby/2.5.0/gems/ox-2.10.0/ext/ox/special.c
xaiml-0.1.2 vendor/bundle/ruby/2.5.0/gems/ox-2.10.0/ext/ox/special.c
xaiml-0.1.1 vendor/bundle/ruby/2.5.0/gems/ox-2.10.0/ext/ox/special.c
xaiml-0.1.0 vendor/bundle/ruby/2.5.0/gems/ox-2.10.0/ext/ox/special.c
ox-2.10.0 ext/ox/special.c
ox-2.9.4 ext/ox/special.c
ox-2.9.3 ext/ox/special.c
ox-2.9.2 ext/ox/special.c
ox-2.9.1 ext/ox/special.c
ox-2.9.0 ext/ox/special.c
ox-2.8.4 ext/ox/special.c
ox-2.8.3 ext/ox/special.c
ox-2.8.2 ext/ox/special.c
ox-2.8.1 ext/ox/special.c
ox-2.8.0 ext/ox/special.c
ox-2.7.0 ext/ox/special.c