Пример #1
0
        public override ParsedResult <TSchema> Parse(ParseText text, TextSpan span)
        {
            if (span.Length == 0)
            {
                throw new MacheteParserException("The body was empty");
            }

            int i = span.Start;

            for (; i < span.End; i++)
            {
                if (!char.IsWhiteSpace(text[i]))
                {
                    break;
                }
            }

            if (i + 8 > span.End)
            {
                throw new MacheteParserException("The body must contain at least 8 characters");
            }

            if (text[i] != 'M' || text[i + 1] != 'S' || text[i + 2] != 'H')
            {
                throw new MacheteParserException("The body must start with an MSH segment");
            }

            var settings = GetHL7Settings(text, TextSpan.FromBounds(i, span.End));

            var streamText = new StreamText(text, null);

            var textCursor = new StreamTextCursor(streamText, TextSpan.FromBounds(i, span.End), TextSpan.FromBounds(span.End, span.End), _messageParser);

            return(new HL7ParsedSlice <TSchema>(Schema, settings, textCursor));
        }
Пример #2
0
        public Result <TextSpan, TextSpan> Parse(ParseText text, TextSpan span)
        {
            var next = span;

            var parsed = _parser.Parse(text, span);

            if (_atLeastOne && !parsed.HasResult)
            {
                return(new Unmatched <TextSpan, TextSpan>(parsed.Next));
            }

            var matched = parsed.Result.Head;

            while (parsed.HasResult)
            {
                if (next == parsed.Next)
                {
                    break;
                }

                if (!matched.IsAdjacentTo(parsed.Result))
                {
                    break;
                }

                matched += parsed.Result;

                next = parsed.Next;

                parsed = _parser.Parse(text, next);
            }

            return(new Success <TextSpan, TextSpan>(matched, next));
        }
Пример #3
0
        public Result <TextSpan, TextSpan> Parse(ParseText text, TextSpan span)
        {
            if (span.IsEmpty)
            {
                return(new Unmatched <TextSpan, TextSpan>(span));
            }

            var offset = span.Start;

            for (; offset < span.End && _isWhiteSpace(text[offset]); offset++)
            {
            }

            var start = offset;

            for (; offset < span.End; offset++)
            {
                var c = text[offset];
                if (c == _separator)
                {
                    break;
                }
            }

            var end = offset;

            for (; end > start && _isWhiteSpace(text[end - 1]); end--)
            {
            }

            return(new Success <TextSpan, TextSpan>(TextSpan.FromBounds(start, end),
                                                    offset < span.End ? TextSpan.FromBounds(offset + 1, span.End) : new TextSpan(span.End, 0)));
        }
Пример #4
0
        public Result <TextSpan, TextSpan> Parse(ParseText text, TextSpan span)
        {
            int offset = span.Start;

            if (offset < span.End)
            {
                if (_firstCharacter(text[offset]))
                {
                    offset++;
                    for (; offset < span.End; offset++)
                    {
                        if (_nextCharacter(text[offset]) == false)
                        {
                            break;
                        }
                    }
                }
            }

            if (offset > span.Start)
            {
                return(new Success <TextSpan, TextSpan>(TextSpan.FromBounds(span.Start, offset), TextSpan.FromBounds(offset, span.End)));
            }

            return(new Unmatched <TextSpan, TextSpan>(span));
        }
Пример #5
0
        public ParseTextSlice(ParseText text, TextSpan span)
        {
            SourceText = text;
            SourceSpan = span;

            Text = text.GetSubText(span);
        }
Пример #6
0
        public Result <TextSpan, TextSpan> Parse(ParseText text, TextSpan span)
        {
            if (span.IsEmpty)
            {
                return(new Unmatched <TextSpan, TextSpan>(span));
            }

            var next = span;

            var element = _element.Parse(text, span);

            if (element.HasResult)
            {
                var separator = _separator.Parse(text, element.Next);
                if (separator.HasResult)
                {
                    return(new Success <TextSpan, TextSpan>(element.Result, separator.Next));
                }

                if (element.Next == next)
                {
                    return(new Unmatched <TextSpan, TextSpan>(next));
                }

                return(new Success <TextSpan, TextSpan>(element.Result, element.Next));
            }

            return(new Unmatched <TextSpan, TextSpan>(element.Next));
        }
Пример #7
0
        private void parseText(ParseText text)
        {
            var lines = text.Text.Replace("\r", "")
                        .Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries)
                        .Select(x => x.Trim()).ToList();
            var emails = lines.Select(x =>
            {
                try
                {
                    var parts = x.Split(';');
                    return(new EmailMessage(parts[0], parts[1], parts[2]));
                }
                catch (Exception e)
                {
                    logger.Error(e.Message);
                    return(null);
                }
            })
                         .OfType <EmailMessage>().ToList();

            if (emails.Any())
            {
                logger.Debug("Parsed items: " + emails.Count);
                Context.Sender.Tell(new EmailsQueuedEvent(emails));
            }
            else
            {
                logger.Debug("No items parsed");
            }
        }
Пример #8
0
        public Result <TextSpan, IReadOnlyList <TextSpan> > Parse(ParseText text, TextSpan span)
        {
            var next = span;

            var result = _parser.Parse(text, span);

            if (!result.HasResult)
            {
                return(new Unmatched <TextSpan, IReadOnlyList <TextSpan> >(result.Next));
            }

            List <TextSpan> spans = new List <TextSpan>();

            while (result.HasResult)
            {
                if (next == result.Next)
                {
                    break;
                }

                spans.Add(result.Result);

                next = result.Next;

                result = _parser.Parse(text, next);
            }

            return(new Success <TextSpan, IReadOnlyList <TextSpan> >(spans, next));
        }
Пример #9
0
    public void PlayGame()
    {
        LoadStatusData();
        ParseText.AtScene(this, status["atScene"]);

        mainUI.OnPlayGame();
    }
Пример #10
0
 public ConvertedValue(ParseText text, TextSpan span, TValue value, bool hasValue = true)
 {
     _text    = text;
     _span    = span;
     Value    = value;
     HasValue = hasValue;
 }
Пример #11
0
        public Result <TextSpan, TextSpan> Parse(ParseText text, TextSpan span)
        {
            if (span.Start < span.End && _condition(text[span.Start]))
            {
                return(new Success <TextSpan, TextSpan>(new TextSpan(span.Start, 1), TextSpan.FromBounds(span.Start + 1, span.End)));
            }

            return(new Unmatched <TextSpan, TextSpan>(span));
        }
Пример #12
0
        public SubText(ParseText text, TextSpan span)
        {
            Debug.Assert(text != null, "text != null");
            Debug.Assert(span.Start <= text.Length, "span.Start <= text.Length");
            Debug.Assert(span.Start + span.Length <= text.Length, "span.Start + span.Length <= text.Length");

            _text = text;
            _span = span;
        }
Пример #13
0
        public Result <TextSpan, TextSpan> Parse(ParseText text, TextSpan span)
        {
            if (span.Length > 0)
            {
                return(new Success <TextSpan, TextSpan>(span, span.Tail));
            }

            return(new Unmatched <TextSpan, TextSpan>(span));
        }
Пример #14
0
        protected TextParserSlice(ParseText text, TextSpan span, ITextParser parser)
        {
            _sourceText = text;
            _sourceSpan = span;
            _parser     = parser;

            _parseSpan = span;

            _slices = new List <TSlice>();
        }
Пример #15
0
        async Task <StreamText> IStreamTextReader.Next(ParseText left)
        {
            var textSpan = await Text.ConfigureAwait(false);

            var parseTexts = _separator != null
                ? new[] { left, _separator, textSpan }
                : new[] { left, textSpan };
            var compositeText = new CompositeText(parseTexts);

            return(new StreamText(compositeText, textSpan.Reader));
        }
Пример #16
0
        public Result <TextSpan, TextSpan> Parse(ParseText text, TextSpan span)
        {
            var result = _first.Parse(text, span);

            if (result.HasResult)
            {
                return(result);
            }

            return(_second.Parse(text, span));
        }
Пример #17
0
        public Result <TextSpan, TextSpan> Parse(ParseText text, TextSpan span)
        {
            var parsed = _except.Parse(text, span);

            if (parsed.HasResult)
            {
                return(new Unmatched <TextSpan, TextSpan>(span));
            }

            return(_parser.Parse(text, span));
        }
Пример #18
0
        public static Task <TextCursor> ParseText(ParseText text, TextSpan span, ITextParser parser)
        {
            var result = parser.Parse(text, span);

            if (result.HasResult)
            {
                return(Task.FromResult <TextCursor>(new StreamTextCursor(new StreamText(text, null), result.Result, result.Next, parser)));
            }

            return(Task.FromResult <TextCursor>(new EmptyTextCursor(new StreamText(text, null), span)));
        }
Пример #19
0
        public Result <TextSpan, TextSpan> Parse(ParseText text, TextSpan span)
        {
            var parsed = _parser.Parse(text, span);

            if (parsed.HasResult)
            {
                return(parsed);
            }

            return(new Success <TextSpan, TextSpan>(_defaultValue, span));
        }
Пример #20
0
        static X12ParserSettings GetX12Settings(ParseText text, TextSpan span)
        {
            var offset = span.Start;

            return(new ParsedX12Settings
            {
                ElementSeparator = text[offset + 3],
                RepetitionSeparator = text[offset + 82],
                SubElementSeparator = text[offset + 104],
                SegmentSeparator = text[offset + 105],
            });
        }
Пример #21
0
        public StreamTextCursor(StreamText text, TextSpan valueSpan, TextSpan nextSpan, ITextParser parser)
        {
            _text      = text;
            _valueSpan = valueSpan;
            _nextSpan  = nextSpan;
            _parser    = parser;

            _next          = null;
            _nextComputed  = false;
            _value         = null;
            _valueComputed = false;
        }
Пример #22
0
        ParseText GetText()
        {
            ParseText[] texts = new ParseText[_slices.Length];
            for (int i = 0; i < _slices.Length; i++)
            {
                texts[i] = _slices[i].Text;
            }

            _text         = new CompositeText(texts);
            _textComputed = true;

            return(_text);
        }
Пример #23
0
        public PrefixMatcher <T> Match(ParseText text, TextSpan span)
        {
            var matcher = new PrefixMatcher <T>(_root);

            for (var i = 0; i < span.Length; i++)
            {
                if (!matcher.Next(text[span.Start + i]))
                {
                    break;
                }
            }

            return(matcher);
        }
Пример #24
0
        public Result <TextSpan, T> Parse(ParseText text, TextSpan span)
        {
            var parsed = _parser.Parse(text, span);

            if (parsed.HasResult)
            {
                if (_converter(text, parsed.Result, out T result))
                {
                    return(new Success <TextSpan, T>(result, parsed.Next));
                }
            }

            return(new Unmatched <TextSpan, T>(parsed.Next));
        }
Пример #25
0
        public Result <TextSpan, TextSpan> Parse(ParseText text, TextSpan span)
        {
            if (span.Length >= _constant.Length)
            {
                int compareLength = span.Length > _constant.Length ? _constant.Length : span.Length;

                if (text.Compare(_constant, 0, new TextSpan(span.Start, compareLength), _comparisonType) == 0)
                {
                    return(new Success <TextSpan, TextSpan>(new TextSpan(span.Start, compareLength), TextSpan.FromBounds(span.Start + compareLength, span.End)));
                }
            }

            return(new Unmatched <TextSpan, TextSpan>(span));
        }
Пример #26
0
        public Result <TextSpan, char> Parse(ParseText text, TextSpan span)
        {
            if (span.Length > 0)
            {
                var value = text[span.Start];

                if (_condition(value))
                {
                    return(new Success <TextSpan, char>(value, span.Skip(1)));
                }
            }

            return(new Unmatched <TextSpan, char>(span));
        }
Пример #27
0
        public Result <TextSpan, TextSpan> Parse(ParseText text, TextSpan span)
        {
            if (span.IsEmpty)
            {
                return(new Unmatched <TextSpan, TextSpan>(span));
            }

            if (span.Length == 2 && text[span.Start] == '"' && text[span.Start + 1] == '"')
            {
                return(new Success <TextSpan, TextSpan>(new TextSpan(span.Start, 2), TextSpan.FromBounds(span.Start + 2, span.End)));
            }

            return(new Success <TextSpan, TextSpan>(span, span.Tail));
        }
Пример #28
0
 //
 void Update()
 {
     if (status["atScene"] != null)
     {
         ParseText.AtScene(this, status["atScene"]);     // set: status["atScene"] = null
     }
     else
     {
         if (m_isGameOver)
         {
             m_isGameOver = false;
             StartCoroutine(GameOver(0.3f));
         }
     }
 }
Пример #29
0
    private void OnSelect(int selectedIndex)
    {
        var action = Data.actions[selectedIndex];

        Data.selectedIndex = selectedIndex;
        OnDataChange();

        var cm = GameApp.Instance;

        cm.status["atScene"] = action.identifier;
        cm.SaveStatusData(action.identifier);

        ParseText.AtScene(GameApp.Instance, GameApp.Instance.status["atScene"]);     // set: status["atScene"] = null
        cm.mainUI.ShowNextMessage();
    }
Пример #30
0
        static HL7ParserSettings ParseSettings(ParseText text, TextSpan span)
        {
            var offset = span.Start;

            HL7ParserSettings settings = new ParsedHL7Settings
            {
                FieldSeparator        = text[offset + 3],
                ComponentSeparator    = text[offset + 4],
                RepetitionSeparator   = text[offset + 5],
                EscapeCharacter       = text[offset + 6] != '\\' ? default(char) : text[offset + 6],
                SubComponentSeparator = text[offset + 7]
            };

            return(settings);
        }
Пример #31
0
 void Start()
 {
     parseText = gameObject.GetComponent<ParseText>();
 }