Esempio n. 1
0
        public Sentence ShuffleSentence(Sentence sentence)
        {
            if (!sentence.HasModifier())
            {
                return(sentence);
            }

            _mdSentenceDecorator =
                new MdSentenceDecorator(sentence);

            List <Text> modifiersUpToVbPastPresOrBkp;

            int firstModifierPosition = _mdSentenceDecorator.FirstModifierPosition;

            if (_mdSentenceDecorator.HasMoreThanOneModifier())
            {
                modifiersUpToVbPastPresOrBkp =
                    _mdSentenceDecorator.GetModifierUnitUpToVbPastPresBkp(firstModifierPosition);

                if (modifiersUpToVbPastPresOrBkp.Count > 1)
                {
                    var mdPositions = ModifierPositionHelper.GetMDUnitPositions(
                        modifiersUpToVbPastPresOrBkp);

                    ReverseModifierUnit(modifiersUpToVbPastPresOrBkp, firstModifierPosition, mdPositions);

                    AddDeParticleToMDUnit(sentence, mdPositions);

                    UnderlineMdUnit(
                        firstModifierPosition,
                        _mdSentenceDecorator.Texts.Skip(firstModifierPosition).ToList().FindIndex(text => text.IsDe()));
                }
            }
            else  // one modifier unit
            {
                modifiersUpToVbPastPresOrBkp =
                    _mdSentenceDecorator.GetModifierUnitUpToVbPastPresBkp(firstModifierPosition);

                UnderlineMdUnit(firstModifierPosition,
                                modifiersUpToVbPastPresOrBkp.Count - 1);
            }

            var textsbeforeMdUnit =
                TextsBefore(firstModifierPosition).ToList();

            if (textsbeforeMdUnit.Any())
            {
                ApplySearchLeftRules(
                    sentence, textsbeforeMdUnit, firstModifierPosition, modifiersUpToVbPastPresOrBkp);
            }

            return(sentence);
        }
        private static void MoveMdUnitAfterMdbk(
            Sentence sentence, MdSentenceDecorator mdSentenceDecorator, int modifierPosition,
            int mdbkPosition)
        {
            var mdUnit =
                mdSentenceDecorator.GetModifierUnitUpToVbPastPresBkp(modifierPosition);

            sentence.Texts.RemoveRange(modifierPosition, mdUnit.Count);

            sentence.Texts.InsertRange(
                mdbkPosition + 1 + sentence.Texts[mdbkPosition].pe_merge_ahead,
                mdUnit);
        }
        private static void ApplyMdShufflingRules(
            Sentence sentence, int mdbkPosition, MdbkSentenceDecorator mdbkSentenceDecorator)
        {
            // 1.1.1
            int modifierPosition =
                mdbkSentenceDecorator.ModifierPositionAfterMdbk;

            InsertDeParticleAtPosition(
                sentence, modifierPosition);

            modifierPosition++;

            var mdSentenceDecorator =
                new MdSentenceDecorator(sentence);

            //*1.1.2.Move the MD unit to after the MDBK unit:
            MoveMdUnitAfterMdbk(
                sentence, mdSentenceDecorator, modifierPosition, mdbkPosition);

            // 1.1.3.Underline MDBK all the way to and including ‘de’ to form one MDBK unit:*/
            UnderlineMdbkToDe(sentence, mdbkPosition);
        }