/// <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>(); }
/// <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; } }
/// <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>(); }
/// <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; }
public bool Equals(SegmentDefinition other) { if (other == null) { return(false); } return(m_strRep == other.m_strRep && m_charDefTable == other.m_charDefTable); }
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)); }
public bool IsSegmentInstantiated(SegmentDefinition segDef) { if (m_instantiatedSegs.Count == 0) { return(true); } return(m_instantiatedSegs.Contains(segDef)); }
/// <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; }
/// <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; }
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)); }
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); }
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); }
/// <summary> /// Adds the segment definition. /// </summary> /// <param name="segDef">The seg def.</param> public void AddSegmentDefinition(SegmentDefinition segDef) { m_segDefs.Add(segDef); }
/// <summary> /// Copy constructor. /// </summary> /// <param name="ctxt">The simple context.</param> public SegmentContext(SegmentContext ctxt) : base(ctxt) { m_segDef = ctxt.m_segDef; }
/// <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; }
/// <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; }
public TrieNode(SegmentDefinition segDef) { m_segDef = segDef; m_values = new List <T>(); m_children = new List <TrieNode>(); }
/// <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; }
/// <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); }
/// <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; } }
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); }
public bool IsSegmentInstantiated(SegmentDefinition segDef) { if (m_instantiatedSegs.Count == 0) return true; return m_instantiatedSegs.Contains(segDef); }
public bool Equals(SegmentDefinition other) { if (other == null) return false; return m_strRep == other.m_strRep && m_charDefTable == other.m_charDefTable; }