Example #1
0
        private void EscapeBackslashAndQuotes(StringBuilder sb, ReadOnlySpan <char> line)
        {
            var  bsSplitter = new SpanSplitEnumerator <char>(line, "\\".AsSpan());
            bool hadBs      = false;

            foreach (var bsPart in bsSplitter)
            {
                if (bsPart.End.Value - bsPart.Start.Value < 0)
                {
                    continue;
                }

                if (hadBs)
                {
                    sb.Append("\\\\");
                }

                var bsLine = line[bsPart];
                if (bsLine.IsEmpty)
                {
                    continue;
                }
                var  quotSplitter = new SpanSplitEnumerator <char>(bsLine, "\"".AsSpan());
                bool hadQuot      = false;
                foreach (var quotPart in quotSplitter)
                {
                    if (quotPart.End.Value - quotPart.Start.Value < 0)
                    {
                        continue;
                    }
                    if (hadQuot)
                    {
                        sb.Append("\\\"");
                    }
                    sb.Append(bsLine[quotPart]);
                    hadQuot = true;
                }

                hadBs = true;
            }
        }
Example #2
0
        private void BuildMultilineAppend(StringBuilder sb, ReadOnlySpan <char> text)
        {
            if (text.IsEmpty)
            {
                return;
            }
            var splitter = new SpanSplitEnumerator <char>(text, "\r\n".AsSpan());
            var hadLast  = false;

            foreach (var range in splitter)
            {
                if (range.End.Value - range.Start.Value < 0)
                {
                    continue;
                }

                var line = text[range];
                if (line.IsEmpty)
                {
                    continue;
                }

                if (hadLast)
                {
                    sb.Append("\\n\";");
                    sb.Append(nl);
                }

                sb.Append("__builder += \"");
                EscapeBackslashAndQuotes(sb, line);
                hadLast = true;
            }

            if (hadLast)
            {
                sb.Append("\";");
                sb.Append(nl);
            }
        }