Files
Mementos/Unity/Alternate Genre Jam/Assets/Ink/InkLibs/InkCompiler/CharacterRange.cs
2021-06-30 21:39:19 +10:00

55 lines
1.7 KiB
C#

using System.Collections.Generic;
using System.Linq;
namespace Ink
{
/// <summary>
/// A class representing a character range. Allows for lazy-loading a corresponding <see cref="CharacterSet">character set</see>.
/// </summary>
public sealed class CharacterRange
{
public static CharacterRange Define(char start, char end, IEnumerable<char> excludes = null)
{
return new CharacterRange (start, end, excludes);
}
/// <summary>
/// Returns a <see cref="CharacterSet">character set</see> instance corresponding to the character range
/// represented by the current instance.
/// </summary>
/// <remarks>
/// The internal character set is created once and cached in memory.
/// </remarks>
/// <returns>The char set.</returns>
public CharacterSet ToCharacterSet ()
{
if (_correspondingCharSet.Count == 0)
{
for (char c = _start; c <= _end; c++)
{
if (!_excludes.Contains (c))
{
_correspondingCharSet.Add (c);
}
}
}
return _correspondingCharSet;
}
public char start { get { return _start; } }
public char end { get { return _end; } }
CharacterRange (char start, char end, IEnumerable<char> excludes)
{
_start = start;
_end = end;
_excludes = excludes == null ? new HashSet<char>() : new HashSet<char> (excludes);
}
char _start;
char _end;
ICollection<char> _excludes;
CharacterSet _correspondingCharSet = new CharacterSet();
}
}