コード例 #1
0
        private bool IterateSequence(Allomorph neighbour)
        {
            if (Position == Position.BeforeSource)
            {
                for (int i = _sequence.Length - 1; i >= 0; i--)
                {
                    if (_sequence[i] != neighbour.Morpheme.Id)
                        return false;

                    if (neighbour.HasPrevious)
                    {
                        neighbour = neighbour.Previous;
                    }
                }

                return true;
            }

            if (Position == Position.AfterTarget)
            {
                for (int i = 0; i < _sequence.Length; i++)
                {
                    if (_sequence[i] != neighbour.Morpheme.Id)
                        return false;

                    if (neighbour.HasNext)
                    {
                        neighbour = neighbour.Next;
                    }
                }
                return true;
            }

            throw new ArgumentException("Invalid Morpheme Position for MorphemeSequenceEquals: " + Position);
        }
コード例 #2
0
ファイル: MorphemeExists.cs プロジェクト: diegolinan/nuve
        private bool Exists(Allomorph operand)
        {
            if (Position == Position.BeforeSource)
            {
                while (operand.HasPrevious)
                {
                    if (operand.Morpheme.Id == Operand)
                    {
                        return true;
                    }
                    operand = operand.Previous;
                }
            }

            if (Position == Position.AfterTarget)
            {
                if (operand.Morpheme.Id == Operand)
                {
                    return true;
                }
                while (operand.HasNext)
                {
                    operand = operand.Next;
                    if (operand.Morpheme.Id == Operand)
                    {
                        return true;
                    }
                }
            }

            throw new ArgumentException("Invalid position for MorphemeExists: " + Position);
        }
コード例 #3
0
ファイル: BaseAction.cs プロジェクト: hrzafer/nuve
 public void Do(Allomorph allomorph, Position position)
 {
     Allomorph operand;
     if (TryGetOperandMorpheme(allomorph, out operand, position))
     {
         Do(operand);
     }
 }
コード例 #4
0
ファイル: Replace.cs プロジェクト: diegolinan/nuve
 public override void Do(Allomorph allomorph, Position position)
 {
     Allomorph operand;
     if (TryGetOperandMorpheme(allomorph, out operand, position))
     {
         operand.Surface = _Replace(operand.Surface);
     }
 }
コード例 #5
0
ファイル: ConditionContainer.cs プロジェクト: diegolinan/nuve
        public bool IsTrue(Allomorph allomorph)
        {
            if (IsEmpty)
            {
                return true;
            }

            return _flag ? AreAllConditionsTrue(allomorph) : IsAnyConditionTrue(allomorph);
        }
コード例 #6
0
ファイル: IsLastMorpheme.cs プロジェクト: hrzafer/nuve
        public override bool IsTrueFor(Allomorph allomorph)
        {
            Allomorph operand;
            if (TryGetOperandMorpheme(allomorph, out operand))
            {
                return !operand.HasNext;
            }

            return false;
        }
コード例 #7
0
ファイル: MorphemeEquals.cs プロジェクト: diegolinan/nuve
        public override bool IsTrueFor(Allomorph allomorph)
        {
            Allomorph operand;
            if (TryGetOperandMorpheme(allomorph, out operand))
            {
                return Operand == operand.Morpheme.Id;
            }

            return false;
        }
コード例 #8
0
ファイル: HasLabel.cs プロジェクト: diegolinan/nuve
        public override bool IsTrueFor(Allomorph allomorph)
        {
            Allomorph operand;
            if (TryGetOperandMorpheme(allomorph, out operand))
            {
                return operand.Morpheme.HasLabel(_label);
            }

            return false;
        }
コード例 #9
0
ファイル: MorphemeExists.cs プロジェクト: diegolinan/nuve
        public override bool IsTrueFor(Allomorph allomorph)
        {
            Allomorph operand;
            if (TryGetOperandMorpheme(allomorph, out operand))
            {
                return Exists(operand);
            }

            return false;
        }
コード例 #10
0
        public override bool IsTrueFor(Allomorph allomorph)
        {
            Allomorph neighbour;
            if (TryGetOperandMorpheme(allomorph, out neighbour))
            {
                return IterateSequence(neighbour);
            }

            return false;
        }
コード例 #11
0
ファイル: ConditionContainer.cs プロジェクト: diegolinan/nuve
 private bool IsAnyConditionTrue(Allomorph allomorph)
 {
     foreach (ConditionBase condition in _conditions)
     {
         if (condition.IsTrueFor(allomorph))
         {
             return true;
         }
     }
     return false;
 }
コード例 #12
0
ファイル: OrthographyRule.cs プロジェクト: diegolinan/nuve
 public void Process(Allomorph allomorph)
 {
     foreach (Transformation transformation in _transformations)
     {
         if (transformation.Condition.IsTrue(allomorph))
         {
             transformation.Transform(allomorph);
             break;
         }
     }
 }
コード例 #13
0
ファイル: Allomorph.cs プロジェクト: yusufkaratoprak/nuve
        /// <summary>
        ///     Allomorph'un solunda kalan yüzeyi döndürür.
        /// </summary>
        /// <returns>sol/önceki yüzey</returns>
        protected string GetPreviousSurface()
        {
            var       sb   = new StringBuilder();
            Allomorph temp = this;

            while (temp.HasPrevious)
            {
                temp = temp.Previous;
                sb.Insert(0, temp.Surface);
            }
            return(sb.ToString());
        }
コード例 #14
0
ファイル: Allomorph.cs プロジェクト: yusufkaratoprak/nuve
        /// <summary>
        ///     Allomorph'un sonrasındaki yüzeyi döndürür.
        /// </summary>
        /// <returns>sağ/sonraki yüzey</returns>
        protected string GetNextSurface()
        {
            var       sb   = new StringBuilder();
            Allomorph temp = this;

            while (temp.HasNext)
            {
                temp = temp.Next;
                sb.Append(temp.Surface);
            }
            return(sb.ToString());
        }
コード例 #15
0
 internal void ProcessRules(int phase, Allomorph allomorph)
 {
     if (HasRule)
     {
         foreach (var rule in Rules)
         {
             if (rule.Phase == phase)
             {
                 rule.Process(allomorph);
             }
         }
     }
 }
コード例 #16
0
ファイル: DeleteLastLetter.cs プロジェクト: diegolinan/nuve
        public override void Do(Allomorph allomorph, Position position)
        {
            Allomorph neighbour = allomorph;
            switch (position)
            {
                case Position.Next:
                    neighbour = allomorph.Next;
                    break;

                case Position.Previous:
                    neighbour = allomorph.Previous;
                    break;
            }

            neighbour.Surface = neighbour.Surface.DeleteLastChar();
        }
コード例 #17
0
ファイル: BaseAction.cs プロジェクト: diegolinan/nuve
        // out parameter for result
        protected bool TryGetOperandMorpheme(Allomorph allomorph, out Allomorph operand, Position position)
        {
            switch (position)
            {
                case Position.This:
                    operand = allomorph;
                    return true;

                case Position.Next:
                    operand = allomorph.Next;
                    return allomorph.HasNext;

                case Position.Previous:
                    operand = allomorph.Previous;
                    return allomorph.HasPrevious;

                default:
                    throw new ArgumentException("Invalid Position for Action : " + position);
            }
        }
コード例 #18
0
ファイル: ConditionBase.cs プロジェクト: hrzafer/nuve
        // out parameter for result
        protected bool TryGetOperandMorpheme(Allomorph allomorph, out Allomorph operand)
        {
            switch (Position)
            {
                case Position.Next:
                case Position.Target:
                    operand = allomorph.Next;
                    return allomorph.HasNext;

                case Position.Previous:
                case Position.BeforeSource:
                    operand = allomorph.Previous;
                    return allomorph.HasPrevious;

                case Position.This:
                case Position.Source:
                    operand = allomorph;
                    return true;

                case Position.First:
                    operand = allomorph.First;
                    return true;

                case Position.AfterTarget:
                    if (allomorph.HasNext)
                    {
                        operand = allomorph.Next.Next;
                        return allomorph.Next.HasNext;
                    }
                    operand = null;
                    return false;

                default:
                    throw new ArgumentException($"Invalid Argument : {Position}");
            }
        }
コード例 #19
0
ファイル: Morphotactics.cs プロジェクト: drupaltr/nuve
 public bool IsConditionTrue(Allomorph previous, Allomorph next)
 {
     throw new NotImplementedException();
 }
コード例 #20
0
ファイル: Replace.cs プロジェクト: hrzafer/nuve
 protected override void Do(Allomorph allomorph)
 {
     allomorph.Surface = _Replace(allomorph.Surface);
 }
コード例 #21
0
ファイル: HasNotLabel.cs プロジェクト: hrzafer/nuve
 public override bool IsTrueFor(Allomorph allomorph)
 {
     return !base.IsTrueFor(allomorph);
 }
コード例 #22
0
ファイル: DeleteLastVowel.cs プロジェクト: hrzafer/nuve
 protected override void Do(Allomorph allomorph)
 {
     allomorph.Surface = allomorph.Surface.DeleteLastOccurrenceOfAny(Alphabet.Vowels);
 }
コード例 #23
0
ファイル: LastLetterEquals.cs プロジェクト: diegolinan/nuve
 public override bool IsTrueFor(Allomorph allomorph)
 {
     string neighbourSurface = allomorph.GetSurface(Position);
     return neighbourSurface.LastCharEqualsAny(Operand);
 }
コード例 #24
0
ファイル: DeleteLastVowel.cs プロジェクト: diegolinan/nuve
 public override void Do(Allomorph allomorph, Position position)
 {
     allomorph.Surface = allomorph.Surface.DeleteLastOccurrenceOfAny(Alphabet.Vowels);
 }
コード例 #25
0
ファイル: BaseAction.cs プロジェクト: diegolinan/nuve
 public abstract void Do(Allomorph allomorph, Position position);
コード例 #26
0
ファイル: PenultVowelEquals.cs プロジェクト: diegolinan/nuve
 public override bool IsTrueFor(Allomorph allomorph)
 {
     string neighbourSurface = allomorph.GetSurface(Position);
     char? penultVowel = neighbourSurface.PenultimateOccurrenceOfAny(Alphabet.Vowels);
     return penultVowel.HasValue && Operand.IndexOf((char) penultVowel) != -1;
 }
コード例 #27
0
ファイル: DoubleLastLetter.cs プロジェクト: diegolinan/nuve
 public override void Do(Allomorph allomorph, Position position)
 {
     char last = allomorph.Surface[allomorph.Surface.Length - 1];
     allomorph.Surface += last;
 }
コード例 #28
0
ファイル: StartsWithVowel.cs プロジェクト: diegolinan/nuve
 public override bool IsTrueFor(Allomorph allomorph)
 {
     string neighbourSurface = allomorph.GetSurface(Position);
     return neighbourSurface.FirstCharEqualsAny(Alphabet.Vowels);
 }
コード例 #29
0
ファイル: DeleteFirstLetter.cs プロジェクト: diegolinan/nuve
 public override void Do(Allomorph allomorph, Position position)
 {
     allomorph.Surface = allomorph.Surface.DeleteFirstChar();
 }
コード例 #30
0
ファイル: LexicalToSurface.cs プロジェクト: hrzafer/nuve
 protected override void Do(Allomorph allomorph)
 {
     allomorph.Surface = ((Root) allomorph.Morpheme).Surfaces.First();
 }
コード例 #31
0
ファイル: Append.cs プロジェクト: hrzafer/nuve
 protected override void Do(Allomorph allomorph)
 {
     allomorph.Surface += OperandOne;
 }
コード例 #32
0
ファイル: DeleteLastLetter.cs プロジェクト: hrzafer/nuve
 protected override void Do(Allomorph allomorph)
 {
     allomorph.Surface = allomorph.Surface.DeleteLastChar();
 }
コード例 #33
0
ファイル: DoubleLastLetter.cs プロジェクト: hrzafer/nuve
 protected override void Do(Allomorph allomorph)
 {
     var last = allomorph.Surface[allomorph.Surface.Length - 1];
     allomorph.Surface += last;
 }