package d2format

import (
	

	
)

func escapeSingleQuotedValue( string) string {
	var  strings.Builder
	for ,  := range  {
		switch  {
		case '\'':
			.WriteByte('\'')
		case '\n':
			// TODO: Unified string syntax.
			.WriteByte('\\')
			.WriteByte('n')
			continue
		}
		.WriteRune()
	}
	return .String()
}

func escapeDoubledQuotedValue( string,  bool) string {
	var  strings.Builder
	for ,  := range  {
		switch  {
		case '"', '\\':
			.WriteByte('\\')
		case '\n':
			.WriteByte('\\')
			.WriteByte('n')
			continue
		}
		if ! &&  == '$' {
			.WriteByte('\\')
		}
		.WriteRune()
	}
	return .String()
}

func escapeUnquotedValue( string,  bool) string {
	if len() == 0 {
		return `""`
	}

	if strings.EqualFold(, "null") {
		return `'null'`
	}

	var  strings.Builder
	for ,  := range  {
		switch  {
		case '\'', '"', '|':
			if  == 0 {
				.WriteByte('\\')
			}
		case '\n':
			.WriteByte('\\')
			.WriteByte('n')
			continue
		default:
			if  {
				switch  {
				case '-':
					if +1 < len() && [+1] == '-' {
						.WriteByte('\\')
					}
				case '&':
					if  == 0 {
						.WriteByte('\\')
					}
				default:
					if strings.ContainsRune(d2ast.UnquotedKeySpecials, ) {
						.WriteByte('\\')
					}
				}
			} else if strings.ContainsRune(d2ast.UnquotedValueSpecials, ) {
				.WriteByte('\\')
			}
		}
		.WriteRune()
	}
	return .String()
}