ShellMe.CommandLine.Console.LowLevel.LowLevelToAbstractConsoleAdapter.Read C# (CSharp) Method

Read() private method

private Read ( ) : ReadInfo
return ReadInfo
        private ReadInfo Read()
        {
            WritePromptIfNeeded();

            var keyInfo = _console.Read();

            if (keyInfo.Key == ConsoleKey.Backspace)
            {
                if (_cursorController.IsStartOfInput())
                    return new ReadInfo { KeyInfo = keyInfo };

                OnBackspaceHit();
            }
            else if(keyInfo.Key == ConsoleKey.Delete)
            {
                if (_cursorController.IsEndOfInput())
                    return new ReadInfo { KeyInfo = keyInfo };

                OnDeleteHit();
            }
            else if(keyInfo.Key == ConsoleKey.Home)
            {
                if(!_cursorController.IsStartOfInput())
                    _cursorController.MoveCursorToHome();
            }
            else if( keyInfo.Key == ConsoleKey.End)
            {
                if(!_cursorController.IsEndOfInput())
                    _cursorController.MoveCursorToEnd();
            }
            else if (keyInfo.Key == ConsoleKey.LeftArrow)
            {
                if (!_cursorController.IsStartOfInput())
                    _cursorController.MoveCursorBackward();
            }
            else if (keyInfo.Key == ConsoleKey.RightArrow)
            {
                if (!_cursorController.IsEndOfInput())
                    _cursorController.MoveCursorForward();
            }
            else if (keyInfo.Key == ConsoleKey.Enter)
            {
                var inputText = CurrentInput;
                _cursorController.MoveCursorToStartOfNewLine();
                return new ReadInfo {IsNewLine = true, KeyInfo = keyInfo, Text = inputText};
            }
            else if (keyInfo.IsPrintable())
            {
                var textAfterInput = ReadFromCursorToEndOfInput();

                var returnPoint = _cursorController.CreateCursorReturnPoint();

                _console.WriteAtCursorAndMove(keyInfo.KeyChar);
                Write(textAfterInput, false);
                returnPoint();
                _cursorController.MoveCursorForward();
                _cursorController.MoveLineMarkerForward();
            }

            _inputs.OnNext(keyInfo);

            return new ReadInfo {KeyInfo = keyInfo, Text = keyInfo.KeyChar.ToString(CultureInfo.InvariantCulture)};
        }