| 274 | } |
| 275 | |
| 276 | void hoedown_buffer_put_utf8(hoedown_buffer *buf, unsigned int c) { |
| 277 | unsigned char unichar[4]; |
| 278 | |
| 279 | assert(buf && buf->unit); |
| 280 | |
| 281 | if (c < 0x80) { |
| 282 | hoedown_buffer_putc(buf, c); |
| 283 | } |
| 284 | else if (c < 0x800) { |
| 285 | unichar[0] = 192 + (c / 64); |
| 286 | unichar[1] = 128 + (c % 64); |
| 287 | hoedown_buffer_put(buf, unichar, 2); |
| 288 | } |
| 289 | else if (c - 0xd800u < 0x800) { |
| 290 | HOEDOWN_BUFPUTSL(buf, "\xef\xbf\xbd"); |
| 291 | } |
| 292 | else if (c < 0x10000) { |
| 293 | unichar[0] = 224 + (c / 4096); |
| 294 | unichar[1] = 128 + (c / 64) % 64; |
| 295 | unichar[2] = 128 + (c % 64); |
| 296 | hoedown_buffer_put(buf, unichar, 3); |
| 297 | } |
| 298 | else if (c < 0x110000) { |
| 299 | unichar[0] = 240 + (c / 262144); |
| 300 | unichar[1] = 128 + (c / 4096) % 64; |
| 301 | unichar[2] = 128 + (c / 64) % 64; |
| 302 | unichar[3] = 128 + (c % 64); |
| 303 | hoedown_buffer_put(buf, unichar, 4); |
| 304 | } |
| 305 | else { |
| 306 | HOEDOWN_BUFPUTSL(buf, "\xef\xbf\xbd"); |
| 307 | } |
| 308 | } |
nothing calls this directly
no test coverage detected