Exemple #1
0
CDString*
CD_CreateStringFromFormatList (const char* format, va_list ap)
{
	CDString* self = CD_CreateString();

	bvcformata(self->raw, 9001, format, ap);

	cd_UpdateLength(self);

	return self;
}
Exemple #2
0
CDString*
CD_CloneString (CDString* self)
{
	CDString* cloned = CD_CreateString();

	bdestroy(cloned->raw);
	cloned->raw = (CDRawString) bstrcpy(self->raw);

	assert(cloned->raw);

	cd_UpdateLength(cloned);

	return cloned;
}
Exemple #3
0
CDString*
CD_CreateStringFromBufferCopy (const char* buffer, size_t length)
{
	CDString* self = CD_malloc(sizeof(CDString));

	self->raw      = blk2bstr(buffer, length);
	self->external = false;

	assert(self->raw);

	cd_UpdateLength(self);

	return self;
}
Exemple #4
0
CDString*
CD_CreateStringFromCStringCopy (const char* string)
{
	CDString* self = CD_malloc(sizeof(CDString));

	self->raw      = bfromcstr(string);
	self->external = false;

	assert(self->raw);

	cd_UpdateLength(self);

	return self;
}
Exemple #5
0
CDString*
CD_PrependString (CDString* self, CDString* append)
{
	assert(self);
	assert(append);

	cd_MakeStringInternal(self);

	if (binsert(self->raw, 0, append->raw, '\0') == BSTR_OK) {
		cd_UpdateLength(self);
	}
	else {
		self = NULL;
	}

	return self;
}
Exemple #6
0
CDString*
CD_InsertString (CDString* self, CDString* insert, size_t position)
{
	assert(self);
	assert(insert);

	cd_MakeStringInternal(self);

	if (binsert(self->raw, CD_UTF8_offset(CD_StringContent(self), position), insert->raw, '\0') == BSTR_OK) {
		cd_UpdateLength(self);
	}
	else {
		self = NULL;
	}

	return self;
}
Exemple #7
0
CDString*
CD_CharAtSet (CDString* self, size_t index, CDString* set)
{
	assert(self);

	cd_MakeStringInternal(self);

	size_t offset = CD_UTF8_offset((const char*) self->raw->data, index);

	if (breplace(self->raw, offset, cd_UTF8_nextCharLength(self->raw->data[offset]), set->raw, '\0') == BSTR_OK) {
		cd_UpdateLength(self);
	}
	else {
		self = NULL;
	}

	return self;
}
Exemple #8
0
CDString*
CD_CreateStringFromBuffer (const char* buffer, size_t size)
{
	CDString* self = CD_malloc(sizeof(CDString));

	self->raw      = CD_malloc(sizeof(*self->raw));
	self->external = true;

	assert(self->raw);

	self->raw->data = (unsigned char*) buffer;
	self->raw->mlen = size;
	self->raw->slen = size;

	cd_UpdateLength(self);

	return self;
}
Exemple #9
0
CDString*
CD_AppendStringAndClean (CDString* self, CDString* append)
{
	assert(self);
	assert(append);

	cd_MakeStringInternal(self);

	if (binsert(self->raw, self->raw->slen, append->raw, '\0') == BSTR_OK) {
		cd_UpdateLength(self);
	}
	else {
		self = NULL;
	}

	CD_DestroyString(append);

	return self;
}
Exemple #10
0
MCString
MC_StringSanitize (MCString self)
{
    CDString* result = CD_CreateString();

    assert(self);

    for (size_t i = 0, ie = CD_StringLength(self); i < ie; i++) {
        bool      has = false;
        CDString* ch  = CD_CharAt(self, i);

        for (size_t h = 0, he = cd_UTF8_strlen(MCCharset); h < he; h++) {
            const char* che = &MCCharset[cd_UTF8_offset(MCCharset, h)];

            if (strncmp(CD_StringContent(ch), che, CD_StringSize(ch)) == 0) {
                has = true;
                break;
            }
        }

        if (i == ie - 2 && strncmp(CD_StringContent(ch), "§", 2) == 0){
            CD_DestroyString(ch);
            break;
        }

        if (has || strncmp(CD_StringContent(ch), "§", 2) == 0) {
            CD_AppendString(result, ch);
        }
        else {
            CD_AppendCString(result, "?");
        }

        CD_DestroyString(ch);
    }

    cd_UpdateLength(self);

    return result;
}
Exemple #11
0
CDString*
CD_CreateStringFromCString (const char* string)
{
	CDString* self = CD_malloc(sizeof(CDString));

	self->raw = CD_malloc(sizeof(*self->raw));

	if (string == NULL) {
		self->raw->data = (unsigned char*) "";
	}
	else {
		self->raw->data = (unsigned char*) string;
	}

	self->raw->slen = strlen((const char*) self->raw->data);
	self->raw->mlen = self->raw->slen;

	self->external = true;

	cd_UpdateLength(self);

	return self;
}