diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2019-04-09 01:47:48 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2019-04-09 01:47:48 +0300 |
| commit | 080f1697e97e13461ec6df4d31c8924d01257a1b (patch) | |
| tree | b1fe0285de7bc9bc52e9e2195e66fe022bf8f5b3 /Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/TextLocation.cs | |
| parent | 1608e69a417bc5e40a607c3958c4a60f19f66f1a (diff) | |
| download | Tango-080f1697e97e13461ec6df4d31c8924d01257a1b.tar.gz Tango-080f1697e97e13461ec6df4d31c8924d01257a1b.zip | |
MERGE
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/TextLocation.cs')
| -rw-r--r-- | Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/TextLocation.cs | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/TextLocation.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/TextLocation.cs new file mode 100644 index 000000000..1d3c2564c --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/TextLocation.cs @@ -0,0 +1,166 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Globalization; + +namespace Tango.Scripting.Editors.Document +{ + /// <summary> + /// A line/column position. + /// Text editor lines/columns are counted started from one. + /// </summary> + /// <remarks> + /// The document provides the methods <see cref="TextDocument.GetLocation"/> and + /// <see cref="TextDocument.GetOffset(TextLocation)"/> to convert between offsets and TextLocations. + /// </remarks> + public struct TextLocation : IComparable<TextLocation>, IEquatable<TextLocation> + { + /// <summary> + /// Represents no text location (0, 0). + /// </summary> + public static readonly TextLocation Empty = new TextLocation(0, 0); + + /// <summary> + /// Creates a TextLocation instance. + /// <para> + /// Warning: the parameters are (line, column). + /// Not (column, line) as in ICSharpCode.TextEditor! + /// </para> + /// </summary> + public TextLocation(int line, int column) + { + y = line; + x = column; + } + + int x, y; + + /// <summary> + /// Gets the line number. + /// </summary> + public int Line { + get { return y; } + } + + /// <summary> + /// Gets the column number. + /// </summary> + public int Column { + get { return x; } + } + + /// <summary> + /// Gets whether the TextLocation instance is empty. + /// </summary> + public bool IsEmpty { + get { + return x <= 0 && y <= 0; + } + } + + /// <summary> + /// Gets a string representation for debugging purposes. + /// </summary> + public override string ToString() + { + return string.Format(CultureInfo.InvariantCulture, "(Line {1}, Col {0})", this.x, this.y); + } + + /// <summary> + /// Gets a hash code. + /// </summary> + public override int GetHashCode() + { + return unchecked (87 * x.GetHashCode() ^ y.GetHashCode()); + } + + /// <summary> + /// Equality test. + /// </summary> + public override bool Equals(object obj) + { + if (!(obj is TextLocation)) return false; + return (TextLocation)obj == this; + } + + /// <summary> + /// Equality test. + /// </summary> + public bool Equals(TextLocation other) + { + return this == other; + } + + /// <summary> + /// Equality test. + /// </summary> + public static bool operator ==(TextLocation left, TextLocation right) + { + return left.x == right.x && left.y == right.y; + } + + /// <summary> + /// Inequality test. + /// </summary> + public static bool operator !=(TextLocation left, TextLocation right) + { + return left.x != right.x || left.y != right.y; + } + + /// <summary> + /// Compares two text locations. + /// </summary> + public static bool operator <(TextLocation left, TextLocation right) + { + if (left.y < right.y) + return true; + else if (left.y == right.y) + return left.x < right.x; + else + return false; + } + + /// <summary> + /// Compares two text locations. + /// </summary> + public static bool operator >(TextLocation left, TextLocation right) + { + if (left.y > right.y) + return true; + else if (left.y == right.y) + return left.x > right.x; + else + return false; + } + + /// <summary> + /// Compares two text locations. + /// </summary> + public static bool operator <=(TextLocation left, TextLocation right) + { + return !(left > right); + } + + /// <summary> + /// Compares two text locations. + /// </summary> + public static bool operator >=(TextLocation left, TextLocation right) + { + return !(left < right); + } + + /// <summary> + /// Compares two text locations. + /// </summary> + public int CompareTo(TextLocation other) + { + if (this == other) + return 0; + if (this < other) + return -1; + else + return 1; + } + } +} |
