MCPcopy
hub / github.com/go-yaml/yaml / yaml_parser_scan_plain_scalar

Function yaml_parser_scan_plain_scalar

scannerc.go:2691–2832  ·  view source on GitHub ↗

Scan a plain scalar.

(parser *yaml_parser_t, token *yaml_token_t)

Source from the content-addressed store, hash-verified

2689
2690// Scan a plain scalar.
2691func 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 }

Callers 1

Calls 9

is_blankzFunction · 0.85
readFunction · 0.85
is_blankFunction · 0.85
is_breakFunction · 0.85
is_tabFunction · 0.85
skipFunction · 0.85
read_lineFunction · 0.85

Tested by

no test coverage detected