diff options
| author | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2019-04-08 13:49:55 +0300 |
|---|---|---|
| committer | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2019-04-08 13:49:55 +0300 |
| commit | fc8a05358a92cc3c77c5f1e30d536807ef0614fd (patch) | |
| tree | c65f696ebd60f3790145721307c255e5a339923f /Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/TextLocation.cs | |
| parent | b4a71931ea52636c6b36376aa9d71697ccf73524 (diff) | |
| download | Tango-fc8a05358a92cc3c77c5f1e30d536807ef0614fd.tar.gz Tango-fc8a05358a92cc3c77c5f1e30d536807ef0614fd.zip | |
were added scripting projects
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; + } + } +} |
