static IEnumerable <PcPatrMorph> GetMorphs(WordSynthesis ws) { var ppMorphs = new Dictionary <string, PcPatrMorph>(); var result = new List <PcPatrMorph>(); foreach (Morph morph in ws.Morphs) { string[] formIds = morph.Allomorph.GetProperty("FormID").Split(' '); string[] wordTypes = morph.Allomorph.GetProperty("WordCategory").Split(' '); string form = ws.Stratum.CharacterDefinitionTable.ToString(morph.Shape, ModeType.SYNTHESIS, false); PcPatrMorph ppMorph; if (!ppMorphs.TryGetValue(morph.Allomorph.Morpheme.ID, out ppMorph)) { ppMorph = new PcPatrMorph { formIndex = 0, formId = formIds[0], form = form, wordType = wordTypes[0] }; } else if (formIds.Length == 1) { ppMorph.form += form; continue; } else { PcPatrMorph oldMorph = ppMorph; ppMorph = new PcPatrMorph { formIndex = oldMorph.formIndex + 1, formId = formIds[oldMorph.formIndex + 1], form = form, wordType = wordTypes[oldMorph.formIndex + 1] }; } ppMorph.msaId = morph.Allomorph.GetProperty("MsaID"); ppMorph.featureDescriptors = morph.Allomorph.GetProperty("FeatureDescriptors"); ppMorph.gloss = morph.Allomorph.Morpheme.Gloss.Description; ppMorphs[morph.Allomorph.Morpheme.ID] = ppMorph; string morphType = morph.Allomorph.GetProperty("MorphType"); switch (morphType) { case MoMorphTypeTags.kMorphInfix: case MoMorphTypeTags.kMorphInfixingInterfix: if (result.Count == 0) { result.Add(ppMorph); } else { result.Insert(result.Count - 1, ppMorph); } break; default: result.Add(ppMorph); break; } } return(result); }
IEnumerable<PcPatrMorph> GetMorphs(WordSynthesis ws) { Dictionary<string, PcPatrMorph> ppMorphs = new Dictionary<string, PcPatrMorph>(); List<PcPatrMorph> result = new List<PcPatrMorph>(); foreach (Morph morph in ws.Morphs) { string[] formIds = morph.Allomorph.GetProperty("FormID").Split(' '); string[] wordTypes = morph.Allomorph.GetProperty("WordCategory").Split(' '); string form = ws.Stratum.CharacterDefinitionTable.ToString(morph.Shape, ModeType.SYNTHESIS, false); PcPatrMorph ppMorph; if (!ppMorphs.TryGetValue(morph.Allomorph.Morpheme.ID, out ppMorph)) { ppMorph = new PcPatrMorph(); ppMorph.formIndex = 0; ppMorph.formId = formIds[ppMorph.formIndex]; ppMorph.form = form; ppMorph.wordType = wordTypes[ppMorph.formIndex]; } else if (formIds.Length == 1) { ppMorph.form += form; continue; } else { PcPatrMorph oldMorph = ppMorph; ppMorph = new PcPatrMorph(); ppMorph.formIndex = oldMorph.formIndex + 1; ppMorph.formId = formIds[ppMorph.formIndex]; ppMorph.form = form; ppMorph.wordType = wordTypes[ppMorph.formIndex]; } ppMorph.msaId = morph.Allomorph.GetProperty("MsaID"); ppMorph.featureDescriptors = morph.Allomorph.GetProperty("FeatureDescriptors"); ppMorph.gloss = morph.Allomorph.Morpheme.Gloss.Description; ppMorphs[morph.Allomorph.Morpheme.ID] = ppMorph; string morphType = morph.Allomorph.GetProperty("MorphType"); switch (morphType) { case MoMorphType.kguidMorphInfix: case MoMorphType.kguidMorphInfixingInterfix: if (result.Count == 0) result.Add(ppMorph); else result.Insert(result.Count - 1, ppMorph); break; default: result.Add(ppMorph); break; } } return result; }