BadScript 2
Loading...
Searching...
No Matches
BadScript2.Reader.BadSourceReaderExtensions Class Reference

Extensions for the Source Reader. More...

Static Public Member Functions

static bool IsWordStart (this BadSourceReader reader, int offset=0)
 Returns true if the Current Character of the Reader is a valid Word Start Character.
 
static bool IsWordChar (this BadSourceReader reader, int offset=0)
 Returns true if the Current Character of the Reader is a valid Word Character.
 
static bool IsKey (this BadSourceReader reader, char c, int offset=0)
 
static bool IsKey (this BadSourceReader reader, string s, int offset=0)
 
static bool IsStringQuote (this BadSourceReader reader, int offset=0, bool singleQuote=false)
 Returns true if the Current Character is a String Quote Character.
 
static bool IsNumberStart (this BadSourceReader reader, int offset=0)
 Returns true if the Current Character is a valid Number Character.
 
static bool IsDigit (this BadSourceReader reader, int offset=0)
 Returns true if the Current Character is a Digit.
 
static bool IsNewLine (this BadSourceReader reader, int offset=0)
 Returns true if the Current Character is a Newline Character.
 
static void SkipWhiteSpace (this BadSourceReader reader)
 Skips all whitespace characters.
 
static void SkipNewLine (this BadSourceReader reader)
 Skips all newline characters.
 
static void SkipToEndOfLine (this BadSourceReader reader)
 Skips all characters untile a newline is found.
 
static void SkipWhiteSpaceAndNewLine (this BadSourceReader reader)
 Skips all whitespace and newline characters.
 
static void SkipComment (this BadSourceReader reader)
 Skips a comment.
 
static void SkipNonToken (this BadSourceReader reader)
 Skips all whitespace, newline characters and comments.
 
static BadWordToken ParseWord (this BadSourceReader reader)
 Parses a Word Token.
 
static BadNumberToken ParseNumber (this BadSourceReader reader)
 Parses a BadNumberToken.
 
static BadBooleanToken ParseBoolean (this BadSourceReader reader)
 Parses a BadBoolean Token.
 
static BadNullToken ParseNull (this BadSourceReader reader)
 Parses a BadNullToken.
 
static ? BadSymbolToken TryParseSymbols (this BadSourceReader reader, string symbols)
 Tries to parse symbols.
 
static ? BadSymbolToken TryParseSymbols (this BadSourceReader reader, IEnumerable< string > symbols)
 Tries to parse a list of symbols.
 
static BadStringToken ParseString (this BadSourceReader reader)
 Parses a BadStringToken.
 
static BadStringToken ParseMultiLineString (this BadSourceReader reader)
 Parses a Multi Line String.
 
static bool IsWhiteSpace (this BadSourceReader reader, int offset=0)
 Returns true if the Current Character is any whitespace or newline characters.
 
static bool Last (this BadSourceReader reader, char c)
 Returns true if the last non-whitespace character is the specified character.
 

Detailed Description

Extensions for the Source Reader.

Definition at line 13 of file BadSourceReaderExtensions.cs.

Member Function Documentation

◆ IsDigit()

static bool BadScript2.Reader.BadSourceReaderExtensions.IsDigit ( this BadSourceReader  reader,
int  offset = 0 
)
static

Returns true if the Current Character is a Digit.

Parameters
readerThe Reader Instance
offsetThe Offset from the Current Reader Position
Returns
True if the Current Character is a Digit

Definition at line 84 of file BadSourceReaderExtensions.cs.

85 {
86 return char.IsDigit(reader.GetCurrentChar(offset));
87 }

◆ IsKey() [1/2]

static bool BadScript2.Reader.BadSourceReaderExtensions.IsKey ( this BadSourceReader  reader,
char  c,
int  offset = 0 
)
static

Definition at line 39 of file BadSourceReaderExtensions.cs.

40 {
41 return reader.Is(c, offset) && !reader.IsWordChar(offset + 1);
42 }

◆ IsKey() [2/2]

static bool BadScript2.Reader.BadSourceReaderExtensions.IsKey ( this BadSourceReader  reader,
string  s,
int  offset = 0 
)
static

Definition at line 44 of file BadSourceReaderExtensions.cs.

45 {
46 return reader.Is(s, offset) && !reader.IsWordChar(offset + s.Length);
47 }

◆ IsNewLine()

static bool BadScript2.Reader.BadSourceReaderExtensions.IsNewLine ( this BadSourceReader  reader,
int  offset = 0 
)
static

Returns true if the Current Character is a Newline Character.

Parameters
readerThe Reader Instance
offsetThe Offset from the Current Reader Position
Returns
True if the Current Character is a NewLine Character

Definition at line 95 of file BadSourceReaderExtensions.cs.

96 {
97 return reader.Is(offset, BadStaticKeys.NewLine);
98 }
Contains Static Data for the BadScript Language.
static readonly char[] NewLine

◆ IsNumberStart()

static bool BadScript2.Reader.BadSourceReaderExtensions.IsNumberStart ( this BadSourceReader  reader,
int  offset = 0 
)
static

Returns true if the Current Character is a valid Number Character.

Parameters
readerThe Reader Instance
offsetThe Offset from the Current Reader Position
Returns
True if the Current Character is a valid Number Character

Definition at line 72 of file BadSourceReaderExtensions.cs.

73 {
74 return reader.IsDigit(offset) ||
75 reader.GetCurrentChar(offset) == BadStaticKeys.DECIMAL_SEPARATOR;
76 }

◆ IsStringQuote()

static bool BadScript2.Reader.BadSourceReaderExtensions.IsStringQuote ( this BadSourceReader  reader,
int  offset = 0,
bool  singleQuote = false 
)
static

Returns true if the Current Character is a String Quote Character.

Parameters
readerThe Reader Instance
offsetThe Offset from the Current Reader Position
singleQuoteIs the string expected to start with '
Returns
True if the Current Character is a Quote

Definition at line 56 of file BadSourceReaderExtensions.cs.

57 {
58 if (singleQuote)
59 {
60 return reader.GetCurrentChar(offset) == BadStaticKeys.SINGLE_QUOTE;
61 }
62
63 return reader.GetCurrentChar(offset) == BadStaticKeys.QUOTE;
64 }

◆ IsWhiteSpace()

static bool BadScript2.Reader.BadSourceReaderExtensions.IsWhiteSpace ( this BadSourceReader  reader,
int  offset = 0 
)
static

Returns true if the Current Character is any whitespace or newline characters.

Parameters
readerThe Reader Instance
offsetThe Offset from the Current Reader Position
Returns
True if the Current Character is a Whitespace or Newline Character

Definition at line 408 of file BadSourceReaderExtensions.cs.

409 {
410 return reader.Is(offset, BadStaticKeys.Whitespace) ||
411 reader.Is(offset, BadStaticKeys.NewLine);
412 }
static readonly char[] Whitespace

◆ IsWordChar()

static bool BadScript2.Reader.BadSourceReaderExtensions.IsWordChar ( this BadSourceReader  reader,
int  offset = 0 
)
static

Returns true if the Current Character of the Reader is a valid Word Character.

Parameters
readerThe Reader Instance
offsetThe Offset from the Current Reader Position
Returns
True if the Current Character is a valid Word Character

Definition at line 33 of file BadSourceReaderExtensions.cs.

34 {
35 return char.IsLetterOrDigit(reader.GetCurrentChar(offset)) ||
36 reader.GetCurrentChar(offset) == '_';
37 }

◆ IsWordStart()

static bool BadScript2.Reader.BadSourceReaderExtensions.IsWordStart ( this BadSourceReader  reader,
int  offset = 0 
)
static

Returns true if the Current Character of the Reader is a valid Word Start Character.

Parameters
readerThe Reader Instance
offsetThe Offset from the Current Reader Position
Returns
True if the Character is a Valid Word Start Character

Definition at line 21 of file BadSourceReaderExtensions.cs.

22 {
23 return char.IsLetter(reader.GetCurrentChar(offset)) ||
24 reader.GetCurrentChar(offset) == '_';
25 }

◆ Last()

static bool BadScript2.Reader.BadSourceReaderExtensions.Last ( this BadSourceReader  reader,
char  c 
)
static

Returns true if the last non-whitespace character is the specified character.

Parameters
readerThe Reader Instance
cThe Character that should be matched
Returns
True if the character is the last non-whitespace character.

Definition at line 420 of file BadSourceReaderExtensions.cs.

421 {
422 int index = -1;
423
424 while (reader.IsWhiteSpace(index))
425 {
426 index--;
427 }
428
429 return reader.GetCurrentChar(index) == c;
430 }

◆ ParseBoolean()

static BadBooleanToken BadScript2.Reader.BadSourceReaderExtensions.ParseBoolean ( this BadSourceReader  reader)
static

Parses a BadBoolean Token.

Parameters
readerThe Reader Instance
Returns
The Resulting BadBoolean Token
Exceptions
BadSourceReaderExceptionGets Raised if the Current Character sequence is not Equal to BadStaticKeys.True and not equal to BadStaticKeys.False

Definition at line 252 of file BadSourceReaderExtensions.cs.

253 {
254 if (reader.Is(BadStaticKeys.TRUE))
255 {
256 return new BadBooleanToken(reader.Eat(BadStaticKeys.TRUE));
257 }
258
259 if (reader.Is(BadStaticKeys.FALSE))
260 {
261 return new BadBooleanToken(reader.Eat(BadStaticKeys.FALSE));
262 }
263
264 throw new BadSourceReaderException(
265 $"Expected boolean but got '{(reader.IsEof() ? "EOF" : reader.GetCurrentChar())}'",
266 reader.MakeSourcePosition(1)
267 );
268 }
Implements a Token that represents a Boolean.

◆ ParseMultiLineString()

static BadStringToken BadScript2.Reader.BadSourceReaderExtensions.ParseMultiLineString ( this BadSourceReader  reader)
static

Parses a Multi Line String.

Parameters
readerThe Reader Instance
Returns
The Resulting BadStringToken Instance
Exceptions
BadSourceReaderExceptionGets Raised if the String is not properly terminated

Definition at line 372 of file BadSourceReaderExtensions.cs.

373 {
374 int start = reader.CurrentIndex;
376
377 StringBuilder sb = new StringBuilder("\"");
378
379 while (!reader.IsStringQuote())
380 {
381 if (reader.IsEof())
382 {
383 throw new BadSourceReaderException(
384 "String not terminated",
385 reader.MakeSourcePosition(start, reader.CurrentIndex - start)
386 );
387 }
388
389
390 sb.Append(reader.GetCurrentChar());
391
392 reader.MoveNext();
393 }
394
395 reader.Eat(BadStaticKeys.QUOTE);
396
397 sb.Append("\"");
398
399 return new BadStringToken(sb.ToString(), reader.MakeSourcePosition(start, reader.CurrentIndex - start));
400 }
Implements a Token that represents a String.

◆ ParseNull()

static BadNullToken BadScript2.Reader.BadSourceReaderExtensions.ParseNull ( this BadSourceReader  reader)
static

Parses a BadNullToken.

Parameters
readerThe Reader Instance
Returns
The Resulting BadNullToken Instance

Definition at line 275 of file BadSourceReaderExtensions.cs.

276 {
277 return new BadNullToken(reader.Eat(BadStaticKeys.NULL));
278 }

◆ ParseNumber()

static BadNumberToken BadScript2.Reader.BadSourceReaderExtensions.ParseNumber ( this BadSourceReader  reader)
static

Parses a BadNumberToken.

Parameters
readerThe Reader Instance
Returns
The Resulting BadNumberToken
Exceptions
BadSourceReaderExceptionGets raised if the Start Character is not a valid number character

Definition at line 211 of file BadSourceReaderExtensions.cs.

212 {
213 if (!reader.IsNumberStart())
214 {
215 throw new BadSourceReaderException(
216 $"Expected number start character but got '{(reader.IsEof() ? "EOF" : reader.GetCurrentChar())}'",
217 reader.MakeSourcePosition(1)
218 );
219 }
220
221 int start = reader.CurrentIndex;
222 reader.MoveNext();
223 bool hasDecimal = false;
224
225 while (reader.IsDigit() || !hasDecimal && reader.Is(BadStaticKeys.DECIMAL_SEPARATOR))
226 {
227 if (reader.Is(BadStaticKeys.DECIMAL_SEPARATOR))
228 {
229 hasDecimal = true;
230 }
231
232 reader.MoveNext();
233 }
234
235 if (reader.Last(BadStaticKeys.DECIMAL_SEPARATOR))
236 {
237 reader.SetPosition(reader.CurrentIndex - 1);
238 }
239
240 return new BadNumberToken(reader.MakeSourcePosition(start, reader.CurrentIndex - start));
241 }
Implements a Token that represents a Number.

◆ ParseString()

static BadStringToken BadScript2.Reader.BadSourceReaderExtensions.ParseString ( this BadSourceReader  reader)
static

Parses a BadStringToken.

Parameters
readerThe Reader Instance
Returns
The Resulting BadStringToken Instance
Exceptions
BadSourceReaderExceptionGets Raised if the Start Character is not a String Quote or the Sequence is not properly terminated.

Definition at line 314 of file BadSourceReaderExtensions.cs.

315 {
316 if (!reader.IsStringQuote() && !reader.IsStringQuote(0, true))
317 {
318 throw new BadSourceReaderException(
319 $"Expected string start character but got '{(reader.IsEof() ? "EOF" : reader.GetCurrentChar())}'",
320 reader.MakeSourcePosition(1)
321 );
322 }
323
324 bool singleQuote = reader.Is(BadStaticKeys.SINGLE_QUOTE);
325 int start = reader.CurrentIndex;
326 reader.MoveNext();
327 bool isEscaped = false;
328 StringBuilder sb = new StringBuilder("\"");
329
330 while (!reader.IsStringQuote(0, singleQuote))
331 {
332 if (reader.IsNewLine() || reader.IsEof())
333 {
334 throw new BadSourceReaderException(
335 "String not terminated",
336 reader.MakeSourcePosition(start, reader.CurrentIndex - start)
337 );
338 }
339
340 if (reader.Is(BadStaticKeys.ESCAPE_CHARACTER))
341 {
342 isEscaped = true;
343 reader.MoveNext();
344 }
345
346 if (isEscaped)
347 {
348 isEscaped = false;
349 sb.Append(Regex.Unescape($"\\{reader.GetCurrentChar()}"));
350 }
351 else
352 {
353 sb.Append(reader.GetCurrentChar());
354 }
355
356 reader.MoveNext();
357 }
358
359 reader.Eat(singleQuote ? BadStaticKeys.SINGLE_QUOTE : BadStaticKeys.QUOTE);
360
361 sb.Append("\"");
362
363 return new BadStringToken(sb.ToString(), reader.MakeSourcePosition(start, reader.CurrentIndex - start));
364 }

◆ ParseWord()

static BadWordToken BadScript2.Reader.BadSourceReaderExtensions.ParseWord ( this BadSourceReader  reader)
static

Parses a Word Token.

Parameters
readerThe Reader Instance
Returns
The Resulting BadWordToken instance.
Exceptions
BadSourceReaderExceptionGets Raised if the Current Character is not a Valid Word Start Character
See also
BadSourceReaderExtensions.IsWordStart

Definition at line 184 of file BadSourceReaderExtensions.cs.

185 {
186 if (!reader.IsWordStart())
187 {
188 throw new BadSourceReaderException(
189 $"Expected word start character but got '{(reader.IsEof() ? "EOF" : reader.GetCurrentChar())}'",
190 reader.MakeSourcePosition(1)
191 );
192 }
193
194 int start = reader.CurrentIndex;
195 reader.MoveNext();
196
197 while (reader.IsWordChar())
198 {
199 reader.MoveNext();
200 }
201
202 return new BadWordToken(reader.MakeSourcePosition(start, reader.CurrentIndex - start));
203 }

◆ SkipComment()

static void BadScript2.Reader.BadSourceReaderExtensions.SkipComment ( this BadSourceReader  reader)
static

Skips a comment.

Parameters
readerThe Reader Instance

Definition at line 141 of file BadSourceReaderExtensions.cs.

142 {
143 if (reader.Is(BadStaticKeys.SINGLE_LINE_COMMENT))
144 {
146 reader.SkipToEndOfLine();
147 reader.SkipNewLine();
148 }
149 else if (reader.Is(BadStaticKeys.MULTI_LINE_COMMENT_START))
150 {
154 }
155 }

◆ SkipNewLine()

static void BadScript2.Reader.BadSourceReaderExtensions.SkipNewLine ( this BadSourceReader  reader)
static

Skips all newline characters.

Parameters
readerThe Reader Instance

Definition at line 114 of file BadSourceReaderExtensions.cs.

115 {
116 reader.Skip(BadStaticKeys.NewLine);
117 }

◆ SkipNonToken()

static void BadScript2.Reader.BadSourceReaderExtensions.SkipNonToken ( this BadSourceReader  reader)
static

Skips all whitespace, newline characters and comments.

Parameters
readerThe Reader Instance

Definition at line 161 of file BadSourceReaderExtensions.cs.

162 {
163 int current;
164
165 do
166 {
167 current = reader.CurrentIndex;
168 reader.SkipComment();
169 reader.SkipWhiteSpaceAndNewLine();
170 }
171 while (current != reader.CurrentIndex);
172 }

◆ SkipToEndOfLine()

static void BadScript2.Reader.BadSourceReaderExtensions.SkipToEndOfLine ( this BadSourceReader  reader)
static

Skips all characters untile a newline is found.

Parameters
readerThe Reader Instance

Definition at line 123 of file BadSourceReaderExtensions.cs.

124 {
125 reader.Seek(BadStaticKeys.NewLine);
126 }

◆ SkipWhiteSpace()

static void BadScript2.Reader.BadSourceReaderExtensions.SkipWhiteSpace ( this BadSourceReader  reader)
static

Skips all whitespace characters.

Parameters
readerThe Reader Instance

Definition at line 104 of file BadSourceReaderExtensions.cs.

105 {
106 reader.Skip(BadStaticKeys.Whitespace);
107 }

◆ SkipWhiteSpaceAndNewLine()

static void BadScript2.Reader.BadSourceReaderExtensions.SkipWhiteSpaceAndNewLine ( this BadSourceReader  reader)
static

Skips all whitespace and newline characters.

Parameters
readerThe Reader Instance

Definition at line 132 of file BadSourceReaderExtensions.cs.

133 {
134 reader.Skip(BadStaticKeys.Whitespace.Concat(BadStaticKeys.NewLine).ToArray());
135 }

◆ TryParseSymbols() [1/2]

static ? BadSymbolToken BadScript2.Reader.BadSourceReaderExtensions.TryParseSymbols ( this BadSourceReader  reader,
IEnumerable< string >  symbols 
)
static

Tries to parse a list of symbols.

Parameters
readerThe Reader Instance
symbolsThe Symbol Sequences to be parsed
Returns
The Bad Symbol Token if one of the Symbols was matched to the Current Character Sequence. Null otherwise

Definition at line 297 of file BadSourceReaderExtensions.cs.

298 {
299 string? symbol =
300 symbols.FirstOrDefault(x => x.All(c => char.IsLetter(c) || c == '_') ? reader.IsKey(x) : reader.Is(x));
301
302 return symbol == null ? null : reader.TryParseSymbols(symbol);
303 }

◆ TryParseSymbols() [2/2]

static ? BadSymbolToken BadScript2.Reader.BadSourceReaderExtensions.TryParseSymbols ( this BadSourceReader  reader,
string  symbols 
)
static

Tries to parse symbols.

Parameters
readerThe Reader Instance
symbolsThe Symbol Sequence to be parsed
Returns
The Bad Symbol Token if the Symbol was matched to the Current Character Sequence. Null otherwise

Definition at line 286 of file BadSourceReaderExtensions.cs.

287 {
288 return reader.Is(symbols) ? new BadSymbolToken(reader.Eat(symbols)) : null;
289 }

The documentation for this class was generated from the following file: