Scan a plain scalar.
(parser *yaml_parser_t, token *yaml_token_t)
| 2689 | |
| 2690 | // Scan a plain scalar. |
| 2691 | func yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool { |
| 2692 | |
| 2693 | var s, leading_break, trailing_breaks, whitespaces []byte |
| 2694 | var leading_blanks bool |
| 2695 | var indent = parser.indent + 1 |
| 2696 | |
| 2697 | start_mark := parser.mark |
| 2698 | end_mark := parser.mark |
| 2699 | |
| 2700 | // Consume the content of the plain scalar. |
| 2701 | for { |
| 2702 | // Check for a document indicator. |
| 2703 | if parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) { |
| 2704 | return false |
| 2705 | } |
| 2706 | if parser.mark.column == 0 && |
| 2707 | ((parser.buffer[parser.buffer_pos+0] == '-' && |
| 2708 | parser.buffer[parser.buffer_pos+1] == '-' && |
| 2709 | parser.buffer[parser.buffer_pos+2] == '-') || |
| 2710 | (parser.buffer[parser.buffer_pos+0] == '.' && |
| 2711 | parser.buffer[parser.buffer_pos+1] == '.' && |
| 2712 | parser.buffer[parser.buffer_pos+2] == '.')) && |
| 2713 | is_blankz(parser.buffer, parser.buffer_pos+3) { |
| 2714 | break |
| 2715 | } |
| 2716 | |
| 2717 | // Check for a comment. |
| 2718 | if parser.buffer[parser.buffer_pos] == '#' { |
| 2719 | break |
| 2720 | } |
| 2721 | |
| 2722 | // Consume non-blank characters. |
| 2723 | for !is_blankz(parser.buffer, parser.buffer_pos) { |
| 2724 | |
| 2725 | // Check for indicators that may end a plain scalar. |
| 2726 | if (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) || |
| 2727 | (parser.flow_level > 0 && |
| 2728 | (parser.buffer[parser.buffer_pos] == ',' || |
| 2729 | parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' || |
| 2730 | parser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' || |
| 2731 | parser.buffer[parser.buffer_pos] == '}')) { |
| 2732 | break |
| 2733 | } |
| 2734 | |
| 2735 | // Check if we need to join whitespaces and breaks. |
| 2736 | if leading_blanks || len(whitespaces) > 0 { |
| 2737 | if leading_blanks { |
| 2738 | // Do we need to fold line breaks? |
| 2739 | if leading_break[0] == '\n' { |
| 2740 | if len(trailing_breaks) == 0 { |
| 2741 | s = append(s, ' ') |
| 2742 | } else { |
| 2743 | s = append(s, trailing_breaks...) |
| 2744 | } |
| 2745 | } else { |
| 2746 | s = append(s, leading_break...) |
| 2747 | s = append(s, trailing_breaks...) |
| 2748 | } |
no test coverage detected