コード例 #1
0
ファイル: Segment.cs プロジェクト: bbriggs/FieldWorks
		/// <summary>
		/// Initializes a new instance of the <see cref="Segment"/> class.
		/// </summary>
		/// <param name="segDef">The segment definition.</param>
		/// <param name="features">The features.</param>
		public Segment(SegmentDefinition segDef, FeatureBundle featureValues)
		{
			m_segDef = segDef;
			m_desc = segDef.StrRep;
			m_featureValues = featureValues;
			m_instantiatedSegs = new Set<SegmentDefinition>();
		}
コード例 #2
0
		/// <summary>
		/// Adds the segment definition.
		/// </summary>
		/// <param name="segDef">The segment definition.</param>
		public override void AddSegmentDefinition(SegmentDefinition segDef)
		{
			IPACharInfo ipaChar;
			// get information about this IPA character
			if (!s_ipaChars.TryGetValue(segDef.StrRep[0], out ipaChar))
				throw new LoadException(string.Format(HCStrings.kstidInvalidIPAChar, segDef.StrRep));

			switch (ipaChar.Type)
			{
				case IPACharInfo.CharType.BASE_CHAR:
					// add a segment definition for this base character
					base.AddSegmentDefinition(segDef);
					// add segment definitions for each base character and modifier combo
					foreach (SegmentDefinition modifier in m_modifierChars)
						base.AddSegmentDefinition(ComposeModifier(segDef, modifier));

					// add affricate segment definitions if this character is a stop or a fricative
					if (ipaChar.IsFricative || ipaChar.IsStop)
					{
						foreach (SegmentDefinition tiebar in m_tieBars)
						{
							if (ipaChar.IsStop)
							{
								foreach (SegmentDefinition fricative in m_fricatives)
									base.AddSegmentDefinition(ComposeAffricate(segDef, tiebar, fricative));
							}
							else
							{
								foreach (SegmentDefinition stop in m_stops)
									base.AddSegmentDefinition(ComposeAffricate(stop, tiebar, segDef));
							}
						}

						if (ipaChar.IsStop)
							m_stops.Add(segDef);
						else
							m_fricatives.Add(segDef);
					}

					m_baseChars.Add(segDef);
					break;

				case IPACharInfo.CharType.MODIFIER:
					// compose segment definitions for all base character and modifier combos
					foreach (SegmentDefinition baseChar in m_baseChars)
						base.AddSegmentDefinition(ComposeModifier(baseChar, segDef));
					m_modifierChars.Add(segDef);
					break;

				case IPACharInfo.CharType.TIE_BAR:
					// add all affricates using this tie bar
					foreach (SegmentDefinition stop in m_stops)
					{
						foreach (SegmentDefinition fricative in m_fricatives)
							base.AddSegmentDefinition(ComposeAffricate(stop, segDef, fricative));
					}
					m_tieBars.Add(segDef);
					break;
			}
		}
コード例 #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Segment"/> class.
 /// </summary>
 /// <param name="segDef">The segment definition.</param>
 /// <param name="features">The features.</param>
 public Segment(SegmentDefinition segDef, FeatureBundle featureValues)
 {
     m_segDef           = segDef;
     m_desc             = segDef.StrRep;
     m_featureValues    = featureValues;
     m_instantiatedSegs = new Set <SegmentDefinition>();
 }
コード例 #4
0
        /// <summary>
        /// Adds the segment definition.
        /// </summary>
        /// <param name="segDef">The segment definition.</param>
        public virtual void AddSegmentDefinition(string strRep, IEnumerable <FeatureValue> featVals)
        {
            SegmentDefinition segDef = new SegmentDefinition(strRep, this, featVals, Morpher.PhoneticFeatureSystem);

            // what do we do about culture?
            m_segDefs[strRep.ToLowerInvariant()] = segDef;
        }
コード例 #5
0
 public bool Equals(SegmentDefinition other)
 {
     if (other == null)
     {
         return(false);
     }
     return(m_strRep == other.m_strRep && m_charDefTable == other.m_charDefTable);
 }
コード例 #6
0
        SegmentDefinition ComposeModifier(SegmentDefinition baseChar, SegmentDefinition diacritic)
        {
            FeatureBundle fb = baseChar.SynthFeatures.Clone();

            fb.Apply(diacritic.SynthFeatures, true);
            fb.Apply(diacritic.AntiFeatures, false);
            return(new SegmentDefinition(baseChar.StrRep + diacritic.StrRep, fb));
        }
コード例 #7
0
        public bool IsSegmentInstantiated(SegmentDefinition segDef)
        {
            if (m_instantiatedSegs.Count == 0)
            {
                return(true);
            }

            return(m_instantiatedSegs.Contains(segDef));
        }
コード例 #8
0
 /// <summary>
 /// Copy constructor.
 /// </summary>
 /// <param name="seg">The segment.</param>
 public Segment(Segment seg)
     : base(seg)
 {
     m_desc             = seg.m_desc;
     m_segDef           = seg.m_segDef;
     m_instantiatedSegs = new Set <SegmentDefinition>(seg.m_instantiatedSegs);
     m_featureValues    = seg.m_featureValues.Clone();
     m_isClean          = seg.m_isClean;
 }
コード例 #9
0
ファイル: Segment.cs プロジェクト: bbriggs/FieldWorks
		/// <summary>
		/// Copy constructor.
		/// </summary>
		/// <param name="seg">The segment.</param>
		public Segment(Segment seg)
			: base(seg)
		{
			m_desc = seg.m_desc;
			m_segDef = seg.m_segDef;
			m_instantiatedSegs = new Set<SegmentDefinition>(seg.m_instantiatedSegs);
			m_featureValues = seg.m_featureValues.Clone();
			m_isClean = seg.m_isClean;
		}
コード例 #10
0
        SegmentDefinition ComposeAffricate(SegmentDefinition stop, SegmentDefinition tiebar, SegmentDefinition fricative)
        {
            FeatureBundle fb = stop.SynthFeatures.Clone();

            fb.Apply(fricative.SynthFeatures, true);
            fb.Apply(fricative.AntiFeatures, false);
            // the tie bar will probably set [+delayed-release], so do this last
            fb.Apply(tiebar.SynthFeatures, true);
            fb.Apply(tiebar.AntiFeatures, false);
            return(new SegmentDefinition(stop.StrRep + tiebar.StrRep + fricative.StrRep, fb));
        }
コード例 #11
0
        PhoneticShapeNode GetPhoneticShapeNode(string strRep, ModeType mode)
        {
            PhoneticShapeNode node   = null;
            SegmentDefinition segDef = GetSegmentDefinition(strRep);

            if (segDef != null)
            {
                Segment seg = new Segment(segDef, mode == ModeType.SYNTHESIS ? segDef.SynthFeatures.Clone() : segDef.AnalysisFeatures.Clone());
                if (!Morpher.PhoneticFeatureSystem.HasFeatures)
                {
                    seg.InstantiateSegment(segDef);
                }
                node = seg;
            }
            else
            {
                BoundaryDefinition bdryDef = GetBoundaryDefinition(strRep);
                if (bdryDef != null)
                {
                    node = new Boundary(bdryDef);
                }
            }
            return(node);
        }
コード例 #12
0
		SegmentDefinition ComposeModifier(SegmentDefinition baseChar, SegmentDefinition diacritic)
		{
			FeatureBundle fb = baseChar.SynthFeatures.Clone();
			fb.Apply(diacritic.SynthFeatures, true);
			fb.Apply(diacritic.AntiFeatures, false);
			return new SegmentDefinition(baseChar.StrRep + diacritic.StrRep, fb);
		}
コード例 #13
0
ファイル: NaturalClass.cs プロジェクト: bbriggs/FieldWorks
		/// <summary>
		/// Adds the segment definition.
		/// </summary>
		/// <param name="segDef">The seg def.</param>
		public void AddSegmentDefinition(SegmentDefinition segDef)
		{
			m_segDefs.Add(segDef);
		}
コード例 #14
0
 /// <summary>
 /// Copy constructor.
 /// </summary>
 /// <param name="ctxt">The simple context.</param>
 public SegmentContext(SegmentContext ctxt)
     : base(ctxt)
 {
     m_segDef = ctxt.m_segDef;
 }
コード例 #15
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SegmentContext"/> class from a segment.
 /// </summary>
 /// <param name="seg">The segment.</param>
 public SegmentContext(Segment seg)
     : base(seg.FeatureValues.Clone(), seg.SegmentDefinition.AntiFeatures.Clone())
 {
     m_segDef = seg.SegmentDefinition;
 }
コード例 #16
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SegmentContext"/> class from a segment.
 /// </summary>
 /// <param name="segDef">The segment definition.</param>
 public SegmentContext(SegmentDefinition segDef)
     : base(segDef.SynthFeatures.Clone(), segDef.AntiFeatures.Clone())
 {
     m_segDef = segDef;
 }
コード例 #17
0
ファイル: Stratum.cs プロジェクト: cambell-prince/FieldWorks
 public TrieNode(SegmentDefinition segDef)
 {
     m_segDef   = segDef;
     m_values   = new List <T>();
     m_children = new List <TrieNode>();
 }
コード例 #18
0
		/// <summary>
		/// Adds the segment definition.
		/// </summary>
		/// <param name="segDef">The segment definition.</param>
		public virtual void AddSegmentDefinition(string strRep, IEnumerable<FeatureValue> featVals)
		{
			SegmentDefinition segDef = new SegmentDefinition(strRep, this, featVals, Morpher.PhoneticFeatureSystem);
			// what do we do about culture?
			m_segDefs[strRep.ToLowerInvariant()] = segDef;
		}
コード例 #19
0
 /// <summary>
 /// Instantiates the segment represented by the specified segment definition.
 /// </summary>
 /// <param name="segDef">The segment definition.</param>
 internal void InstantiateSegment(SegmentDefinition segDef)
 {
     m_instantiatedSegs.Add(segDef);
 }
コード例 #20
0
        /// <summary>
        /// Adds the segment definition.
        /// </summary>
        /// <param name="segDef">The segment definition.</param>
        public override void AddSegmentDefinition(SegmentDefinition segDef)
        {
            IPACharInfo ipaChar;

            // get information about this IPA character
            if (!s_ipaChars.TryGetValue(segDef.StrRep[0], out ipaChar))
            {
                throw new LoadException(string.Format(HCStrings.kstidInvalidIPAChar, segDef.StrRep));
            }

            switch (ipaChar.Type)
            {
            case IPACharInfo.CharType.BASE_CHAR:
                // add a segment definition for this base character
                base.AddSegmentDefinition(segDef);
                // add segment definitions for each base character and modifier combo
                foreach (SegmentDefinition modifier in m_modifierChars)
                {
                    base.AddSegmentDefinition(ComposeModifier(segDef, modifier));
                }

                // add affricate segment definitions if this character is a stop or a fricative
                if (ipaChar.IsFricative || ipaChar.IsStop)
                {
                    foreach (SegmentDefinition tiebar in m_tieBars)
                    {
                        if (ipaChar.IsStop)
                        {
                            foreach (SegmentDefinition fricative in m_fricatives)
                            {
                                base.AddSegmentDefinition(ComposeAffricate(segDef, tiebar, fricative));
                            }
                        }
                        else
                        {
                            foreach (SegmentDefinition stop in m_stops)
                            {
                                base.AddSegmentDefinition(ComposeAffricate(stop, tiebar, segDef));
                            }
                        }
                    }

                    if (ipaChar.IsStop)
                    {
                        m_stops.Add(segDef);
                    }
                    else
                    {
                        m_fricatives.Add(segDef);
                    }
                }

                m_baseChars.Add(segDef);
                break;

            case IPACharInfo.CharType.MODIFIER:
                // compose segment definitions for all base character and modifier combos
                foreach (SegmentDefinition baseChar in m_baseChars)
                {
                    base.AddSegmentDefinition(ComposeModifier(baseChar, segDef));
                }
                m_modifierChars.Add(segDef);
                break;

            case IPACharInfo.CharType.TIE_BAR:
                // add all affricates using this tie bar
                foreach (SegmentDefinition stop in m_stops)
                {
                    foreach (SegmentDefinition fricative in m_fricatives)
                    {
                        base.AddSegmentDefinition(ComposeAffricate(stop, segDef, fricative));
                    }
                }
                m_tieBars.Add(segDef);
                break;
            }
        }
コード例 #21
0
ファイル: Segment.cs プロジェクト: bbriggs/FieldWorks
		/// <summary>
		/// Copy constructor.
		/// </summary>
		/// <param name="ctxt">The simple context.</param>
		public SegmentContext(SegmentContext ctxt)
			: base(ctxt)
		{
			m_segDef = ctxt.m_segDef;
		}
コード例 #22
0
		SegmentDefinition ComposeAffricate(SegmentDefinition stop, SegmentDefinition tiebar, SegmentDefinition fricative)
		{
			FeatureBundle fb = stop.SynthFeatures.Clone();
			fb.Apply(fricative.SynthFeatures, true);
			fb.Apply(fricative.AntiFeatures, false);
			// the tie bar will probably set [+delayed-release], so do this last
			fb.Apply(tiebar.SynthFeatures, true);
			fb.Apply(tiebar.AntiFeatures, false);
			return new SegmentDefinition(stop.StrRep + tiebar.StrRep + fricative.StrRep, fb);
		}
コード例 #23
0
ファイル: Segment.cs プロジェクト: bbriggs/FieldWorks
		/// <summary>
		/// Initializes a new instance of the <see cref="SegmentContext"/> class from a segment.
		/// </summary>
		/// <param name="segDef">The segment definition.</param>
		public SegmentContext(SegmentDefinition segDef)
			: base(segDef.SynthFeatures.Clone(), segDef.AntiFeatures.Clone())
		{
			m_segDef = segDef;
		}
コード例 #24
0
ファイル: Segment.cs プロジェクト: bbriggs/FieldWorks
		public bool IsSegmentInstantiated(SegmentDefinition segDef)
		{
			if (m_instantiatedSegs.Count == 0)
				return true;

			return m_instantiatedSegs.Contains(segDef);
		}
コード例 #25
0
ファイル: Segment.cs プロジェクト: bbriggs/FieldWorks
		/// <summary>
		/// Instantiates the segment represented by the specified segment definition.
		/// </summary>
		/// <param name="segDef">The segment definition.</param>
		internal void InstantiateSegment(SegmentDefinition segDef)
		{
			m_instantiatedSegs.Add(segDef);
		}
コード例 #26
0
		public bool Equals(SegmentDefinition other)
		{
			if (other == null)
				return false;
			return m_strRep == other.m_strRep && m_charDefTable == other.m_charDefTable;
		}
コード例 #27
0
 /// <summary>
 /// Adds the segment definition.
 /// </summary>
 /// <param name="segDef">The seg def.</param>
 public void AddSegmentDefinition(SegmentDefinition segDef)
 {
     m_segDefs.Add(segDef);
 }
コード例 #28
0
ファイル: Segment.cs プロジェクト: bbriggs/FieldWorks
		/// <summary>
		/// Initializes a new instance of the <see cref="SegmentContext"/> class from a segment.
		/// </summary>
		/// <param name="seg">The segment.</param>
		public SegmentContext(Segment seg)
			: base(seg.FeatureValues.Clone(), seg.SegmentDefinition.AntiFeatures.Clone())
		{
			m_segDef = seg.SegmentDefinition;
		}