using System;
using System.Diagnostics;
using Unity.CodeEditor.Rendering;
using Unity.CodeEditor.Utils;
using UnityEngine;
namespace Unity.CodeEditor.Text
{
internal abstract class TextRun
{
internal const int DefaultTextSourceLength = 1;
///
/// Gets the text source length.
///
internal virtual int Length => DefaultTextSourceLength;
///
/// Gets the text run's text.
///
internal virtual string Text => default;
internal TextParagraphProperties TextParagraphProperties { get; }
internal TextRun(TextParagraphProperties properties)
{
TextParagraphProperties = properties;
}
}
internal class StringTextRun : TextRun
{
private string _contents;
internal StringTextRun(string contents, TextParagraphProperties properties) : base(properties)
{
_contents = contents;
}
internal override int Length => _contents.Length;
internal override string Text => _contents;
}
internal class TabTextRun : StringTextRun
{
internal TabTextRun(string tabString, TextParagraphProperties properties) : base(tabString, properties)
{
}
}
internal class StringSegmentTextRun : TextRun
{
private StringSegment _stringSegment;
internal StringSegmentTextRun(StringSegment stringSegment, TextParagraphProperties properties) : base(properties)
{
_stringSegment = stringSegment;
}
internal override int Length => _stringSegment.Count;
internal override string Text => _stringSegment.Text.Substring(_stringSegment.Offset, _stringSegment.Count);
}
internal class TextEndOfLine : TextRun
{
internal TextEndOfLine(int textSourceLength, TextParagraphProperties properties) : base(properties)
{
Length = textSourceLength;
}
internal override int Length { get; }
}
internal class TextEndOfParagraph : TextEndOfLine
{
internal TextEndOfParagraph(TextParagraphProperties properties) : base(DefaultTextSourceLength, properties)
{
}
internal TextEndOfParagraph(int textSourceLength, TextParagraphProperties properties) : base(textSourceLength, properties)
{
}
}
internal class DrawableTextRun : StringTextRun
{
internal DrawableTextRun(string text, TextParagraphProperties properties) : base(text, properties)
{
}
internal virtual void Draw(Vector2 origin)
{
}
}
}