void cdiff_file_write( cdiff_file file, char *fmt, ...) { corto_assert(file != NULL, "NULL specified for file"); if (file->newLine && file->indent) { int i; for (i = 0; i < file->indent * 4; i++) { corto_buffer_appendstrn(&file->writeBuffer, " ", 1); } } va_list args; va_start(args, fmt); corto_buffer_vappend(&file->writeBuffer, fmt, args); va_end(args); /* If no element specified for writing, write to new text element. */ if (!file->cur && file->isNew) { cdiff_elem *el = corto_calloc(sizeof(cdiff_elem)); el->kind = CDIFF_TEXT; el->body = corto_buffer_str(&file->writeBuffer); if (!file->elements) { file->elements = corto_ll_new(); } corto_ll_append(file->elements, el); file->writeBuffer = CORTO_BUFFER_INIT; } file->newLine = fmt[strlen(fmt) - 1] == '\n'; }
void cdiff_file_writeBuffer( cdiff_file file, corto_buffer *buffer) { char *str = corto_buffer_str(buffer); cdiff_file_write(file, "%s", str); free(str); }
void cdiff_file_bodyEnd(cdiff_file file) { corto_assert(file != NULL, "NULL specified for file"); corto_assert(file->writeTo == 2, "not writing to body"); file->cur->body = corto_buffer_str(&file->writeBuffer); file->writeTo = 0; file->isChanged = TRUE; }
static corto_ll cdiff_parse(char *src) { corto_ll elements = corto_ll_new(); corto_id id; char *ptr = src; corto_buffer header = CORTO_BUFFER_INIT, body = CORTO_BUFFER_INIT; id[0] = '\0'; while ((ptr = cdiff_parseElem(ptr, id, &header, &body)) && *ptr) { char *h = corto_buffer_str(&header); char *b = corto_buffer_str(&body); cdiff_addElem(elements, id[0] ? strdup(id) : NULL, h, b); } char *h = corto_buffer_str(&header); char *b = corto_buffer_str(&body); cdiff_addElem(elements, id[0] ? strdup(id) : NULL, h, b); return elements; }
void cdiff_file_headerEnd(cdiff_file file) { corto_assert(file != NULL, "NULL specified for file"); corto_assert(file->writeTo == 1, "not writing to header"); char *header = corto_buffer_str(&file->writeBuffer); if (!file->cur->header) { file->cur->header = header; } else if (strcmp(header, file->cur->header)) { corto_ptr_setstr(&file->cur->header, header); file->isChanged = TRUE; } file->writeTo = 0; }
corto_string corto_value_str(corto_value* v, corto_uint32 maxLength) { corto_string_ser_t serData; corto_walk_opt s; serData.buffer = CORTO_BUFFER_INIT; serData.buffer.max = maxLength; serData.compactNotation = TRUE; serData.prefixType = FALSE; serData.enableColors = FALSE; s = corto_string_ser(CORTO_LOCAL, CORTO_NOT, CORTO_WALK_TRACE_NEVER); corto_walk_value(&s, v, &serData); corto_string result = corto_buffer_str(&serData.buffer); corto_walk_deinit(&s, &serData); return result; }
* Only code written between the begin and end tags will be preserved * when the file is regenerated. */ #include <test.h> corto_void _test_Buffer_tc_append( test_Buffer this) { /* $begin(test/Buffer/tc_append) */ corto_buffer b = CORTO_BUFFER_INIT; corto_bool proceed = corto_buffer_append(&b, "Foo"); test_assert(proceed == TRUE); corto_string str = corto_buffer_str(&b); test_assert(str != NULL); test_assertstr(str, "Foo"); /* $end */ } corto_void _test_Buffer_tc_appendEmpty( test_Buffer this) { /* $begin(test/Buffer/tc_appendEmpty) */ corto_buffer b = CORTO_BUFFER_INIT; corto_bool proceed = corto_buffer_append(&b, ""); test_assert(proceed == TRUE);