private void InsertEnter()
{
Caret.CropPosition();
if (Selection.IsValid)
{
Selection.DeleteSelection();
InsertEnter();
}
else
{
switch (Indent)
{
case IndentStyle.None:
{
Document.InsertText("\n", Caret.Position.X, Caret.Position.Y);
//depends on what sort of indention we are using....
Caret.CurrentRow.Parse();
Caret.MoveDown(false);
Caret.CurrentRow.Parse(false);
Caret.CurrentRow.Parse(true);
Caret.Position.X = 0;
Caret.SetPos(Caret.Position);
break;
}
case IndentStyle.LastRow:
{
Row xtr = Caret.CurrentRow;
string indent = xtr.GetLeadingWhitespace();
int Max = Math.Min(indent.Length, Caret.Position.X);
string split = "\n" + indent.Substring(0, Max);
Document.InsertText(split, Caret.Position.X, Caret.Position.Y);
Document.ResetVisibleRows();
Caret.CurrentRow.Parse(false);
Caret.CurrentRow.Parse(true);
Caret.MoveDown(false);
Caret.CurrentRow.Parse(false);
Caret.CurrentRow.Parse(true);
Caret.Position.X = indent.Length;
Caret.SetPos(Caret.Position);
xtr.Parse(false);
xtr.Parse(true);
xtr.NextRow.Parse(false);
xtr.NextRow.Parse(true);
break;
}
case IndentStyle.Scope:
{
Row xtr = Caret.CurrentRow;
xtr.Parse(true);
if (xtr.ShouldOutdent)
{
OutdentEndRow();
}
Document.InsertText("\n", Caret.Position.X, Caret.Position.Y);
//depends on what sort of indention we are using....
Caret.CurrentRow.Parse();
Caret.MoveDown(false);
Caret.CurrentRow.Parse(false);
var indent = new String('\t', Caret.CurrentRow.Depth);
Document.InsertText(indent, 0, Caret.Position.Y);
Caret.CurrentRow.Parse(false);
Caret.CurrentRow.Parse(true);
Caret.Position.X = indent.Length;
Caret.SetPos(Caret.Position);
Caret.CropPosition();
Selection.ClearSelection();
xtr.Parse(false);
xtr.Parse(true);
xtr.NextRow.Parse(false);
xtr.NextRow.Parse(true);
break;
}
case IndentStyle.Smart:
{
Row xtr = Caret.CurrentRow;
if (xtr.ShouldOutdent)
{
OutdentEndRow();
}
Document.InsertText("\n", Caret.Position.X, Caret.Position.Y);
Caret.MoveDown(false);
Caret.CurrentRow.Parse(false);
Caret.CurrentRow.Parse(true);
Caret.CurrentRow.startSpan.StartRow.Parse(false);
Caret.CurrentRow.startSpan.StartRow.Parse(true);
string prev = "\t" +
Caret.CurrentRow.startSpan.StartRow.GetVirtualLeadingWhitespace();
string indent = Caret.CurrentRow.PrevRow.GetLeadingWhitespace();
if (indent.Length < prev.Length)
indent = prev;
string ts = "\t" + new String(' ', TabSize);
while (indent.IndexOf(ts) >= 0)
{
indent = indent.Replace(ts, "\t\t");
}
Document.InsertText(indent, 0, Caret.Position.Y);
Caret.CurrentRow.Parse(false);
Caret.CurrentRow.Parse(true);
Caret.Position.X = indent.Length;
Caret.SetPos(Caret.Position);
Caret.CropPosition();
Selection.ClearSelection();
xtr.Parse(false);
xtr.Parse(true);
xtr.NextRow.Parse(false);
xtr.NextRow.Parse(true);
break;
}
}
ScrollIntoView();
}
}