/// <summary> /// Обрабатывает очередной символ /// </summary> /// <param name="nextChar">Очередной символ</param> /// <returns>Состояние операции преобразования</returns> public State AddSymbol(char nextChar) { //Если обнаружен разделитель или конец файла if (Settings.Delimiters.Any(delim => delim.Equals(nextChar)) || nextChar.Equals(char.MinValue)) { //Если до разделителя не обнаружено число if (_digitParser == null) { return(State.Incorrect); } //Определяет распознанное число как X или Y в паре координат if (_curParsePairCoord == null) { _curParsePairCoord = new Coordinate { X = _digitParser.ResultDigit }; } else { _curParsePairCoord.Y = _digitParser.ResultDigit; //Добавить координаты в хранилище _coordinatesStore.Add(_curParsePairCoord); Clear(); return(State.PairDone); } //Очищаем распознанное число _digitParser = null; return(State.Accept); } //Пропуск незначимых символов if (char.IsWhiteSpace(nextChar)) { return(State.Ignore); } if (_digitParser == null) { _digitParser = new DigitParser() { NumberFormatInfo = Settings.NumberFormat }; } //Формируем число return(_digitParser.AddChar(nextChar)); }
/// <summary> /// Сбрасывает состояние парсера координат /// </summary> public void Clear() { _curParsePairCoord = null; _digitParser = null; }