(emitter *yaml_emitter_t, value []byte, allow_breaks bool)
| 1725 | } |
| 1726 | |
| 1727 | func yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool { |
| 1728 | spaces := false |
| 1729 | if !yaml_emitter_write_indicator(emitter, []byte{'"'}, true, false, false) { |
| 1730 | return false |
| 1731 | } |
| 1732 | |
| 1733 | for i := 0; i < len(value); { |
| 1734 | if !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) || |
| 1735 | is_bom(value, i) || is_break(value, i) || |
| 1736 | value[i] == '"' || value[i] == '\\' { |
| 1737 | |
| 1738 | octet := value[i] |
| 1739 | |
| 1740 | var w int |
| 1741 | var v rune |
| 1742 | switch { |
| 1743 | case octet&0x80 == 0x00: |
| 1744 | w, v = 1, rune(octet&0x7F) |
| 1745 | case octet&0xE0 == 0xC0: |
| 1746 | w, v = 2, rune(octet&0x1F) |
| 1747 | case octet&0xF0 == 0xE0: |
| 1748 | w, v = 3, rune(octet&0x0F) |
| 1749 | case octet&0xF8 == 0xF0: |
| 1750 | w, v = 4, rune(octet&0x07) |
| 1751 | } |
| 1752 | for k := 1; k < w; k++ { |
| 1753 | octet = value[i+k] |
| 1754 | v = (v << 6) + (rune(octet) & 0x3F) |
| 1755 | } |
| 1756 | i += w |
| 1757 | |
| 1758 | if !put(emitter, '\\') { |
| 1759 | return false |
| 1760 | } |
| 1761 | |
| 1762 | var ok bool |
| 1763 | switch v { |
| 1764 | case 0x00: |
| 1765 | ok = put(emitter, '0') |
| 1766 | case 0x07: |
| 1767 | ok = put(emitter, 'a') |
| 1768 | case 0x08: |
| 1769 | ok = put(emitter, 'b') |
| 1770 | case 0x09: |
| 1771 | ok = put(emitter, 't') |
| 1772 | case 0x0A: |
| 1773 | ok = put(emitter, 'n') |
| 1774 | case 0x0b: |
| 1775 | ok = put(emitter, 'v') |
| 1776 | case 0x0c: |
| 1777 | ok = put(emitter, 'f') |
| 1778 | case 0x0d: |
| 1779 | ok = put(emitter, 'r') |
| 1780 | case 0x1b: |
| 1781 | ok = put(emitter, 'e') |
| 1782 | case 0x22: |
| 1783 | ok = put(emitter, '"') |
| 1784 | case 0x5c: |
no test coverage detected