Beispiel #1
0
        public void Migrate(SegmentPool segmentPool, CogProject project)
        {
            // add prenasal superscript for n
            project.Segmenter.Consonants.AddSymbolBasedOn("ⁿ", "n");

            foreach (KeyValuePair <string, IProcessor <Variety> > kvp in project.VarietyProcessors.Where(kvp => kvp.Value is SspSyllabifier).ToArray())
            {
                var             syllabifier = (SspSyllabifier)kvp.Value;
                SonorityClass[] scale       = syllabifier.SonorityScale.OrderBy(sc => sc.Sonority).ThenBy(sc => sc.SoundClass.Name).ToArray();
                // if the user has changed the sonority scale preserve their changes and do not update
                if (HasSonorityScaleChanged(project, scale))
                {
                    continue;
                }

                // add prenasal sonority class
                var newScale = new List <SonorityClass> {
                    new SonorityClass(1, new UnnaturalClass("Prenasal", new[] { "ᵐ", "ⁿ", "ᵑ" }, false, project.Segmenter))
                };
                foreach (SonorityClass sc in scale)
                {
                    SoundClass newClass;
                    switch (sc.SoundClass.Name)
                    {
                    case "Glide":
                        // correct the ignore modifiers flag on the "Glide" class
                        newClass = new UnnaturalClass("Glide", new[] { "j", "ɥ", "ɰ", "w" }, true, project.Segmenter);
                        break;

                    case "Open vowel":
                        // correct the height feature value on the "Open vowel" class
                        newClass = new NaturalClass("Open vowel", FeatureStruct.New(project.FeatureSystem).Symbol(CogFeatureSystem.VowelType).Symbol("syllabic+").Symbol("open").Value);
                        break;

                    default:
                        newClass = sc.SoundClass;
                        break;
                    }
                    // increment sonority for all existing classes
                    newScale.Add(new SonorityClass(sc.Sonority + 1, newClass));
                }
                project.VarietyProcessors[kvp.Key] = new SspSyllabifier(syllabifier.CombineVowels, syllabifier.CombineConsonants, syllabifier.VowelsSameSonorityTautosyllabic,
                                                                        segmentPool, newScale);
            }
        }
 public InsertSimpleContext(NaturalClass nc, IEnumerable<SymbolicFeatureValue> variables)
     : this(new SimpleContext(nc, variables))
 {
 }
Beispiel #3
0
 public ModifyFromInput(string partName, NaturalClass nc, IEnumerable<SymbolicFeatureValue> variables)
     : this(partName, new SimpleContext(nc, variables))
 {
 }
 public InsertSimpleContext(NaturalClass nc, IEnumerable <SymbolicFeatureValue> variables)
     : this(new SimpleContext(nc, variables))
 {
 }
Beispiel #5
0
 public ModifyFromInput(string partName, NaturalClass nc, IEnumerable <SymbolicFeatureValue> variables)
     : this(partName, new SimpleContext(nc, variables))
 {
 }
Beispiel #6
0
        public EditNaturalClassViewModel(FeatureSystem featSys, IEnumerable <SoundClass> soundClasses, NaturalClass naturalClass)
            : base("Edit Feature-based Class", soundClasses, naturalClass)
        {
            _type = naturalClass.Type == CogFeatureSystem.ConsonantType ? SoundType.Consonant : SoundType.Vowel;
            _availableFeatures = new BindableList <FeatureViewModel>();
            _activeFeatures    = new BindableList <FeatureViewModel>();
            foreach (SymbolicFeature feature in featSys.OfType <SymbolicFeature>())
            {
                SymbolicFeatureValue sfv;
                if (naturalClass.FeatureStruct.TryGetValue(feature, out sfv))
                {
                    _activeFeatures.Add(new FeatureViewModel(feature, (FeatureSymbol)sfv));
                }
                else
                {
                    _availableFeatures.Add(new FeatureViewModel(feature));
                }
            }

            _addCommand    = new RelayCommand(AddFeature, CanAddFeature);
            _removeCommand = new RelayCommand(RemoveFeature, CanRemoveFeature);
        }