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 407 of file BadSourceReaderExtensions.cs.

408 {
409 return reader.Is(offset, BadStaticKeys.Whitespace) ||
410 reader.Is(offset, BadStaticKeys.NewLine);
411 }
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 419 of file BadSourceReaderExtensions.cs.

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

◆ 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 254 of file BadSourceReaderExtensions.cs.

255 {
256 if (reader.Is(BadStaticKeys.TRUE))
257 {
258 return new BadBooleanToken(reader.Eat(BadStaticKeys.TRUE));
259 }
260
261 if (reader.Is(BadStaticKeys.FALSE))
262 {
263 return new BadBooleanToken(reader.Eat(BadStaticKeys.FALSE));
264 }
265
266 throw new
267 BadSourceReaderException($"Expected boolean but got '{(reader.IsEof() ? "EOF" : reader.GetCurrentChar())}'",
268 reader.MakeSourcePosition(1)
269 );
270 }
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 373 of file BadSourceReaderExtensions.cs.

374 {
375 int start = reader.CurrentIndex;
377
378 StringBuilder sb = new StringBuilder("\"");
379
380 while (!reader.IsStringQuote())
381 {
382 if (reader.IsEof())
383 {
384 throw new BadSourceReaderException("String not terminated",
385 reader.MakeSourcePosition(start, reader.CurrentIndex - start)
386 );
387 }
388
389 sb.Append(reader.GetCurrentChar());
390
391 reader.MoveNext();
392 }
393
394 reader.Eat(BadStaticKeys.QUOTE);
395
396 sb.Append("\"");
397
398 return new BadStringToken(sb.ToString(), reader.MakeSourcePosition(start, reader.CurrentIndex - start));
399 }
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 277 of file BadSourceReaderExtensions.cs.

278 {
279 return new BadNullToken(reader.Eat(BadStaticKeys.NULL));
280 }

◆ 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 213 of file BadSourceReaderExtensions.cs.

214 {
215 if (!reader.IsNumberStart())
216 {
217 throw new
218 BadSourceReaderException($"Expected number start character but got '{(reader.IsEof() ? "EOF" : reader.GetCurrentChar())}'",
219 reader.MakeSourcePosition(1)
220 );
221 }
222
223 int start = reader.CurrentIndex;
224 reader.MoveNext();
225 bool hasDecimal = false;
226
227 while (reader.IsDigit() || (!hasDecimal && reader.Is(BadStaticKeys.DECIMAL_SEPARATOR)))
228 {
229 if (reader.Is(BadStaticKeys.DECIMAL_SEPARATOR))
230 {
231 hasDecimal = true;
232 }
233
234 reader.MoveNext();
235 }
236
237 if (reader.Last(BadStaticKeys.DECIMAL_SEPARATOR))
238 {
239 reader.SetPosition(reader.CurrentIndex - 1);
240 }
241
242 return new BadNumberToken(reader.MakeSourcePosition(start, reader.CurrentIndex - start));
243 }
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 316 of file BadSourceReaderExtensions.cs.

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

◆ 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 186 of file BadSourceReaderExtensions.cs.

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

◆ SkipComment()

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

Skips a comment.

Parameters
readerThe Reader Instance

Definition at line 143 of file BadSourceReaderExtensions.cs.

144 {
145 if (reader.Is(BadStaticKeys.SINGLE_LINE_COMMENT))
146 {
148 reader.SkipToEndOfLine();
149 reader.SkipNewLine();
150 }
151 else if (reader.Is(BadStaticKeys.MULTI_LINE_COMMENT_START))
152 {
156 }
157 }

◆ 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 163 of file BadSourceReaderExtensions.cs.

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

◆ 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 {
135 .ToArray()
136 );
137 }

◆ 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 299 of file BadSourceReaderExtensions.cs.

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

◆ 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 288 of file BadSourceReaderExtensions.cs.

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

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