Exemple #1
0
        public void AllomorphEnvironments()
        {
            var vowel = FeatureStruct.New(Language.PhonologicalFeatureSystem).Symbol("voc+").Value;

            LexEntry headEntry = Entries["32"];
            Pattern <Word, ShapeNode> envPattern = Pattern <Word, ShapeNode> .New().Annotation(vowel).Value;

            var env = new AllomorphEnvironment(SpanFactory, ConstraintType.Require, null, envPattern);

            headEntry.PrimaryAllomorph.Environments.Add(env);

            var word = new Word(headEntry.PrimaryAllomorph, FeatureStruct.New().Value);

            ShapeNode node         = word.Shape.Last;
            LexEntry  nonHeadEntry = Entries["40"];

            word.Shape.AddRange(nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone());
            Annotation <ShapeNode> nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(node.Next, word.Shape.Last), nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.True);

            word.RemoveMorph(nonHeadMorph);

            nonHeadEntry = Entries["41"];
            word.Shape.AddRange(nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone());
            nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(node.Next, word.Shape.Last), nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.False);

            headEntry.PrimaryAllomorph.Environments.Clear();

            env = new AllomorphEnvironment(SpanFactory, ConstraintType.Require, envPattern, null);
            headEntry.PrimaryAllomorph.Environments.Add(env);

            word.RemoveMorph(nonHeadMorph);

            node         = word.Shape.First;
            nonHeadEntry = Entries["40"];
            word.Shape.AddRangeAfter(word.Shape.Begin, nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone());
            nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(word.Shape.First, node.Prev), nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.True);

            word.RemoveMorph(nonHeadMorph);

            nonHeadEntry = Entries["41"];
            word.Shape.AddRangeAfter(word.Shape.Begin, nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone());
            word.MarkMorph(word.Shape.GetNodes(word.Shape.First, node.Prev), nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.False);
        }
Exemple #2
0
        public void AllomorphEnvironments()
        {
            var vowel = FeatureStruct.New(Language.PhonologicalFeatureSystem).Symbol("voc+").Value;

            LexEntry headEntry = Entries["32"];
            Pattern<Word, ShapeNode> envPattern = Pattern<Word, ShapeNode>.New().Annotation(vowel).Value;
            var env = new AllomorphEnvironment(SpanFactory, ConstraintType.Require, null, envPattern);
            headEntry.PrimaryAllomorph.Environments.Add(env);

            var word = new Word(headEntry.PrimaryAllomorph, FeatureStruct.New().Value);

            ShapeNode node = word.Shape.Last;
            LexEntry nonHeadEntry = Entries["40"];
            word.Shape.AddRange(nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone());
            Annotation<ShapeNode> nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(node.Next, word.Shape.Last), nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.True);

            word.RemoveMorph(nonHeadMorph);

            nonHeadEntry = Entries["41"];
            word.Shape.AddRange(nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone());
            nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(node.Next, word.Shape.Last), nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.False);

            headEntry.PrimaryAllomorph.Environments.Clear();

            env = new AllomorphEnvironment(SpanFactory, ConstraintType.Require, envPattern, null);
            headEntry.PrimaryAllomorph.Environments.Add(env);

            word.RemoveMorph(nonHeadMorph);

            node = word.Shape.First;
            nonHeadEntry = Entries["40"];
            word.Shape.AddRangeAfter(word.Shape.Begin, nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone());
            nonHeadMorph = word.MarkMorph(word.Shape.GetNodes(word.Shape.First, node.Prev), nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.True);

            word.RemoveMorph(nonHeadMorph);

            nonHeadEntry = Entries["41"];
            word.Shape.AddRangeAfter(word.Shape.Begin, nonHeadEntry.PrimaryAllomorph.Segments.Shape.AsEnumerable().DeepClone());
            word.MarkMorph(word.Shape.GetNodes(word.Shape.First, node.Prev), nonHeadEntry.PrimaryAllomorph);

            Assert.That(env.IsWordValid(word), Is.False);
        }