Exemplo n.º 1
0
        private IEnumerable <TagSegment> GetAllTags(TextTagsState state)
        {
            var nextStates = new Stack <TextTagsState>();

            for (var index = 0; index < state.Text.Length; index++)
            {
                var tag = finder.GetFirstTagOnSegment(state);
                if (tag == null)
                {
                    if (nextStates.Count == 0)
                    {
                        break;
                    }
                    index = nextStates.Peek().Start - 1;
                    state = nextStates.Pop();
                    continue;
                }
                yield return(tag);

                var newStart = tag.CloseIndex + Tags.GetMd(tag.TagName).Length;
                if (newStart < state.End)
                {
                    nextStates.Push(state.ChangeSegment(newStart, state.End));
                }
                index = tag.OpenIndex + Tags.GetMd(tag.TagName).Length;
                if (index <= state.End - 1)
                {
                    state = state.SwitchTag(tag.TagName).ChangeSegment(index, tag.CloseIndex - 1);
                }
                index -= 1;
            }
        }
Exemplo n.º 2
0
        public void SwitchTag_InverseBitInMask()
        {
            var expectedState = !textTagsState.IsInTag(TagName.Em);

            textTagsState = textTagsState.SwitchTag(TagName.Em);

            textTagsState.IsInTag(TagName.Em).Should().Be(expectedState);
        }