예제 #1
0
        // helper function for creating segment objects
        private ISegment CreateSegment(XmlNode segNode, ISegmentPairProperties pair, bool source)
        {
            int i = 1;

            ISegment segment = ItemFactory.CreateSegment(pair);

            if (source)
            {
                _srcSegmentTagCount = 0;
                if (_totalTagCount < _tmpTotalTagCount)
                {
                    _totalTagCount = _tmpTotalTagCount;
                }
            }
            else
            {
                _totalTagCount = _totalTagCount - _srcSegmentTagCount;
            }


            foreach (XmlNode item in segNode.ChildNodes)
            {
                if (item.NodeType == XmlNodeType.Text)
                {
                    segment.Add(CreateText(item.InnerText));
                }

                if (item.NodeType == XmlNodeType.Element)
                {
                    segment.Add(CreatePhTag(item.Name, item, i, source));
                    i++;
                }
            }
            return(segment);
        }
예제 #2
0
        private void PopulateSegment(ISegment segment, XmlNode node, bool source)
        {
            int i = 1;

            foreach (XmlNode item in node.ChildNodes)
            {
                if (item.NodeType == XmlNodeType.Text)
                {
                    foreach (var chunk in Regex.Split(item.InnerText, @"((?:{|<)\^*[a-z0-9]{0,2}(?:>|}))"))
                    {
                        if (Regex.IsMatch(chunk, @"((?:{|<)\^*[a-z0-9]{0,2}(?:>|}))"))
                        {
                            segment.Add(CreatePhTag(chunk, i, source));
                            i++;
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(chunk))
                            {
                                segment.Add(CreateText(chunk));
                            }
                        }
                    }
                }

                if (item.NodeType == XmlNodeType.Element)
                {
                    segment.Add(CreatePhTag(item.OuterXml, i, source));
                    i++;
                }
            }
        }
        public void Create_WhenHasPluralFormAndTargetNeeded_ShouldAddMsgidpluralWithThirdMsgstr()
        {
            // Arrange
            var testee = CreateTestee();

            var entry = new Entry
            {
                MessageId            = "message id",
                MessageIdPlural      = "message id plural",
                MessageStringPlurals = new List <string>
                {
                    "message string 0",
                    "message string 1",
                    "message string 2",
                },
            };

            // Act
            testee.Create(entry, LineType.MessageId, true);

            // Assert
            A.CallTo(() => _sourceSegment2Mock.Add(_textMsgidPluralMock)).MustHaveHappened();
            A.CallTo(() => _targetSegment2Mock.Add(_textMsgstr2Mock)).MustHaveHappened();
            A.CallTo(() => _paragraphSourceMock.Add(_sourceSegment2Mock)).MustHaveHappened();
            A.CallTo(() => _paragraphTargetMock.Add(_targetSegment2Mock)).MustHaveHappened();
        }
예제 #4
0
        public override ISegment Add(ISegment segment)
        {
            switch (segment.SegmentType)
            {
            case SegmentType.Field:
            case SegmentType.Value:
            case SegmentType.Query:
                if (Left == null &&
                    !(_mode == CompareSegmentMode.Exists || _mode == CompareSegmentMode.NotExists))
                {
                    Left = segment;
                }
                else
                {
                    Right = segment;
                }
                return(this);

            case SegmentType.Group:
                var groupFunctionSegment = (GroupFunctionSegment)segment;
                if (groupFunctionSegment.SegmentToGroup == null)
                {
                    if (Right != null && Right.SegmentType == SegmentType.Field)
                    {
                        groupFunctionSegment.SegmentToGroup = (FieldSegment)Right;
                        Right = groupFunctionSegment;
                    }
                    else if (Left != null && Left.SegmentType == SegmentType.Field)
                    {
                        groupFunctionSegment.SegmentToGroup = (FieldSegment)Left;
                        Left = groupFunctionSegment;
                    }
                }
                else
                {
                    if (Left == null &&
                        !(Mode == CompareSegmentMode.Exists || Mode == CompareSegmentMode.NotExists))
                    {
                        Left = segment;
                    }
                    else
                    {
                        Right = segment;
                    }
                }
                return(this);

            case SegmentType.Merge:
                segment.Add(this);
                Parent = segment;
                return(segment);

            case SegmentType.Compare:
                throw new ExpressionParsingException("Cannot add compare segment to compare segment");

            default:
                return(this);
            }
        }
        public void Create_ShouldAddText()
        {
            // Arrange
            var testee = CreateTestee();

            var entry = new Entry
            {
                MessageId     = "message id",
                MessageString = "message string",
            };

            // Act
            testee.Create(entry, LineType.MessageId, false);

            // Assert
            A.CallTo(() => _sourceSegment0Mock.Add(_textMsgidMock)).MustHaveHappened();
        }
        // helper function for creating segment objects
        private ISegment CreateSegment(XmlNode segNode, ISegmentPairProperties pair)
        {
            ISegment segment = ItemFactory.CreateSegment(pair);

            foreach (XmlNode item in segNode.ChildNodes)
            {
                if (item.NodeType == XmlNodeType.Text)
                {
                    segment.Add(CreateText(item.InnerText));
                }

                if (item.NodeType == XmlNodeType.Element)
                {
                    segment.Add(CreateTagPair(item));
                }
            }
            return(segment);
        }
        public void Create_WhenTargetTextIsNeeded_ShouldAddTargetText()
        {
            // Arrange
            var testee = CreateTestee();

            var entry = new Entry
            {
                MessageId     = "message id",
                MessageString = "message string",
            };

            // Act
            testee.Create(entry, LineType.MessageId, true);

            // Assert
            A.CallTo(() => _targetSegment0Mock.Add(_textMsgstrMock)).MustHaveHappened();
            A.CallTo(() => _paragraphTargetMock.Add(_targetSegment0Mock)).MustHaveHappened();
        }
예제 #8
0
        // helper function for creating segment objects
        private ISegment CreateSegment(XmlNode segNode, ISegmentPairProperties pair, bool source)
        {
            ISegment segment = ItemFactory.CreateSegment(pair);

            if (source)
            {
                _srcSegment = segment;


                srcSegmentTagCount = 0;
                if (totalTagCount < tmpTotalTagCount)
                {
                    totalTagCount = tmpTotalTagCount;
                }
            }
            else
            {
                _trgSegment   = segment;
                totalTagCount = totalTagCount - srcSegmentTagCount;
            }
            if (segNode != null)
            {
                foreach (XmlNode item in segNode.ChildNodes)
                {
                    if (item.NodeType == XmlNodeType.Text)
                    {
                        segment.Add(CreateText(item.InnerText));
                    }

                    if (item.NodeType == XmlNodeType.Element)
                    {
                        segment.Add(CreatePhTag(item.Name, item, source));
                    }

                    if (item.NodeType == XmlNodeType.Whitespace)
                    {
                        segment.Add(CreateText(" "));
                    }
                }
            }

            return(segment);
        }
예제 #9
0
        public override ISegment Add(ISegment segment)
        {
            switch (segment.SegmentType)
            {
            case SegmentType.Field:
            case SegmentType.Value:
            case SegmentType.Query:
            case SegmentType.Group:
                throw new ExpressionParsingException("Cannot add field/value/query/group segments to field segment");

            case SegmentType.Merge:
                segment.Add(this);
                return(segment);

            case SegmentType.Compare:
                segment.Add(this);
                return(segment);

            default:
                return(this);
            }
        }