protected List <SynSet> GetCandidateSynSets(WordNet.WordNet wordNet, FsmMorphologicalAnalyzer fsm, List <ParseNodeDrawable> leafList, int index) { LayerInfo twoPrevious = null, previous = null, current, twoNext = null, next = null; var synSets = new List <SynSet>(); current = leafList[index].GetLayerInfo(); if (index > 1) { twoPrevious = leafList[index - 2].GetLayerInfo(); } if (index > 0) { previous = leafList[index - 1].GetLayerInfo(); } if (index != leafList.Count - 1) { next = leafList[index + 1].GetLayerInfo(); } if (index < leafList.Count - 2) { twoNext = leafList[index + 2].GetLayerInfo(); } synSets = wordNet.ConstructSynSets(current.GetMorphologicalParseAt(0).GetWord().GetName(), current.GetMorphologicalParseAt(0), current.GetMetamorphicParseAt(0), fsm); if (twoPrevious?.GetMorphologicalParseAt(0) != null && previous?.GetMorphologicalParseAt(0) != null) { synSets.AddRange(wordNet.ConstructIdiomSynSets(twoPrevious.GetMorphologicalParseAt(0), previous.GetMorphologicalParseAt(0), current.GetMorphologicalParseAt(0), twoPrevious.GetMetamorphicParseAt(0), previous.GetMetamorphicParseAt(0), current.GetMetamorphicParseAt(0), fsm)); } if (previous?.GetMorphologicalParseAt(0) != null && next?.GetMorphologicalParseAt(0) != null) { synSets.AddRange(wordNet.ConstructIdiomSynSets(previous.GetMorphologicalParseAt(0), current.GetMorphologicalParseAt(0), next.GetMorphologicalParseAt(0), previous.GetMetamorphicParseAt(0), current.GetMetamorphicParseAt(0), next.GetMetamorphicParseAt(0), fsm)); } if (next?.GetMorphologicalParseAt(0) != null && twoNext?.GetMorphologicalParseAt(0) != null) { synSets.AddRange(wordNet.ConstructIdiomSynSets(current.GetMorphologicalParseAt(0), next.GetMorphologicalParseAt(0), twoNext.GetMorphologicalParseAt(0), current.GetMetamorphicParseAt(0), next.GetMetamorphicParseAt(0), twoNext.GetMetamorphicParseAt(0), fsm)); } if (previous?.GetMorphologicalParseAt(0) != null) { synSets.AddRange(wordNet.ConstructIdiomSynSets(previous.GetMorphologicalParseAt(0), current.GetMorphologicalParseAt(0), previous.GetMetamorphicParseAt(0), current.GetMetamorphicParseAt(0), fsm)); } if (next?.GetMorphologicalParseAt(0) != null) { synSets.AddRange(wordNet.ConstructIdiomSynSets(current.GetMorphologicalParseAt(0), next.GetMorphologicalParseAt(0), current.GetMetamorphicParseAt(0), next.GetMetamorphicParseAt(0), fsm)); } return(synSets); }