pull in additions by Sebastian Lang
This commit is contained in:
parent
846c7dafda
commit
4763949d42
|
@ -1,47 +1,105 @@
|
||||||
using System;
|
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
|
||||||
|
* Use of this file is governed by the BSD 3-clause license that
|
||||||
|
* can be found in the LICENSE.txt file in the project root.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
using Antlr4.Runtime.Misc;
|
using Antlr4.Runtime.Misc;
|
||||||
|
|
||||||
namespace Antlr4.Runtime
|
namespace Antlr4.Runtime
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// This class supports case-insensitive lexing by wrapping an existing
|
||||||
|
/// <see cref="ICharStream"/> and forcing the lexer to see either upper or
|
||||||
|
/// lowercase characters. Grammar literals should then be either upper or
|
||||||
|
/// lower case such as 'BEGIN' or 'begin'. The text of the character
|
||||||
|
/// stream is unaffected. Example: input 'BeGiN' would match lexer rule
|
||||||
|
/// 'BEGIN' if constructor parameter upper=true but getText() would return
|
||||||
|
/// 'BeGiN'.
|
||||||
|
/// </summary>
|
||||||
public class CaseChangingCharStream : ICharStream
|
public class CaseChangingCharStream : ICharStream
|
||||||
{
|
{
|
||||||
private ICharStream stream;
|
private ICharStream stream;
|
||||||
private bool upper;
|
private bool upper;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs a new CaseChangingCharStream wrapping the given <paramref name="stream"/> forcing
|
||||||
|
/// all characters to upper case or lower case.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="stream">The stream to wrap.</param>
|
||||||
|
/// <param name="upper">If true force each symbol to upper case, otherwise force to lower.</param>
|
||||||
public CaseChangingCharStream(ICharStream stream, bool upper)
|
public CaseChangingCharStream(ICharStream stream, bool upper)
|
||||||
{
|
{
|
||||||
this.stream = stream;
|
this.stream = stream;
|
||||||
this.upper = upper;
|
this.upper = upper;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Index => stream.Index;
|
public int Index
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return stream.Index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int Size => stream.Size;
|
public int Size
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return stream.Size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string SourceName => stream.SourceName;
|
public string SourceName
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return stream.SourceName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Consume() => stream.Consume();
|
public void Consume()
|
||||||
|
{
|
||||||
|
stream.Consume();
|
||||||
|
}
|
||||||
|
|
||||||
[return: NotNull]
|
[return: NotNull]
|
||||||
public string GetText(Interval interval) => stream.GetText(interval);
|
public string GetText(Interval interval)
|
||||||
|
{
|
||||||
|
return stream.GetText(interval);
|
||||||
|
}
|
||||||
|
|
||||||
public int LA(int i)
|
public int LA(int i)
|
||||||
{
|
{
|
||||||
int c = stream.LA(i);
|
int c = stream.LA(i);
|
||||||
|
|
||||||
if (c <= 0) return c;
|
if (c <= 0)
|
||||||
|
{
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
var o = Convert.ToChar(c);
|
char o = (char)c;
|
||||||
|
|
||||||
if (upper) return Convert.ToInt32(char.ToUpper(o));
|
if (upper)
|
||||||
|
{
|
||||||
|
return (int)char.ToUpperInvariant(o);
|
||||||
|
}
|
||||||
|
|
||||||
return Convert.ToInt32(char.ToLower(o));
|
return (int)char.ToLowerInvariant(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Mark() => stream.Mark();
|
public int Mark()
|
||||||
|
{
|
||||||
|
return stream.Mark();
|
||||||
|
}
|
||||||
|
|
||||||
public void Release(int marker) => stream.Release(marker);
|
public void Release(int marker)
|
||||||
|
{
|
||||||
|
stream.Release(marker);
|
||||||
|
}
|
||||||
|
|
||||||
public void Seek(int index) => stream.Seek(index);
|
public void Seek(int index)
|
||||||
|
{
|
||||||
|
stream.Seek(index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue