14 using System.Collections.Generic;
27 public string Terminator =
",";
29 private char[] _terminators;
32 public DsvLiteral(
string name, TypeCode dataType,
string terminator) : this(name, dataType) {
33 Terminator = terminator;
35 public DsvLiteral(
string name, TypeCode dataType) : base(name, dataType) { }
38 base.Init(grammarData);
39 if (Terminator == null)
40 _terminators =
new char[] {
'\n',
'\r'};
42 _terminators =
new char[] { Terminator[0]};
48 body = ReadQuotedBody(context, source);
50 body = ReadNotQuotedBody(context, source);
52 MoveSourcePositionAfterTerminator(source);
57 const char dQuoute =
'"';
58 StringBuilder sb = null;
59 var from = source.Location.Position + 1;
61 var until = source.Text.IndexOf(dQuoute, from);
64 source.PreviewPosition = until;
65 var piece = source.Text.Substring(from, until - from);
66 source.PreviewPosition++;
71 sb =
new StringBuilder(100);
77 from = source.PreviewPosition + 1;
81 private string ReadNotQuotedBody(ParsingContext context, ISourceStream source) {
82 var startPos = source.Location.Position;
83 var sepPos = source.Text.IndexOfAny(_terminators, startPos);
85 sepPos = source.Text.Length;
86 source.PreviewPosition = sepPos;
87 var valueText = source.Text.Substring(startPos, sepPos - startPos);
91 private void MoveSourcePositionAfterTerminator(ISourceStream source) {
92 while(!source.EOF()) {
93 while(source.PreviewChar != Terminator[0])
94 source.PreviewPosition++;
95 if(source.MatchSymbol(Terminator, !Grammar.CaseSensitive)) {
96 source.PreviewPosition += Terminator.Length;
override string ReadBody(ParsingContext context, ISourceStream source)
char PreviewChar
Gets a char at preview position
A strongly-typed resource class, for looking up localized strings, etc.
DsvLiteral(string name, TypeCode dataType, string terminator)
override void Init(GrammarData grammarData)
Interface for Terminals to access the source stream and produce tokens.
static string ErrDsvNoClosingQuote
Looks up a localized string similar to Could not find a closing quote for quoted value..
DsvLiteral(string name, TypeCode dataType)