3
// Set the writer error and return false.
4
func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool {
5
emitter.error = yaml_WRITER_ERROR
6
emitter.problem = problem
10
// Flush the output buffer.
11
func yaml_emitter_flush(emitter *yaml_emitter_t) bool {
12
if emitter.write_handler == nil {
13
panic("write handler not set")
16
// Check if the buffer is empty.
17
if emitter.buffer_pos == 0 {
21
// If the output encoding is UTF-8, we don't need to recode the buffer.
22
if emitter.encoding == yaml_UTF8_ENCODING {
23
if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil {
24
return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error())
26
emitter.buffer_pos = 0
30
// Recode the buffer into the raw buffer.
32
if emitter.encoding == yaml_UTF16LE_ENCODING {
39
for pos < emitter.buffer_pos {
40
// See the "reader.c" code for more details on UTF-8 encoding. Note
41
// that we assume that the buffer contains a valid UTF-8 sequence.
43
// Read the next UTF-8 character.
44
octet := emitter.buffer[pos]
49
case octet&0x80 == 0x00:
50
w, value = 1, rune(octet&0x7F)
51
case octet&0xE0 == 0xC0:
52
w, value = 2, rune(octet&0x1F)
53
case octet&0xF0 == 0xE0:
54
w, value = 3, rune(octet&0x0F)
55
case octet&0xF8 == 0xF0:
56
w, value = 4, rune(octet&0x07)
58
for k := 1; k < w; k++ {
59
octet = emitter.buffer[pos+k]
60
value = (value << 6) + (rune(octet) & 0x3F)
64
// Write the character.
67
b[high] = byte(value >> 8)
68
b[low] = byte(value & 0xFF)
69
emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1])
71
// Write the character using a surrogate pair (check "reader.c").
74
b[high] = byte(0xD8 + (value >> 18))
75
b[low] = byte((value >> 10) & 0xFF)
76
b[high+2] = byte(0xDC + ((value >> 8) & 0xFF))
77
b[low+2] = byte(value & 0xFF)
78
emitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1], b[2], b[3])
82
// Write the raw buffer.
83
if err := emitter.write_handler(emitter, emitter.raw_buffer); err != nil {
84
return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error())
86
emitter.buffer_pos = 0
87
emitter.raw_buffer = emitter.raw_buffer[:0]