int GetSubTypeIndex(ITargetItem target) { var parent = this; Tracer.Assert(!string.IsNullOrWhiteSpace(target.Token)); var token = target.Token; if(parent.Brackets.Any(item => item.Left == token)) return 0; if(parent.Brackets.Any(item => item.Right == token)) return 2; return 1; }
internal Relation GetRelation(ITargetItem newItem, ITargetItem recentItem) { var delta = newItem.GetLeftDepth() - recentItem.GetRightDepth(); switch(delta) { case 0: return GetRelationOnSameDepth ( GetSubTypeIndex(newItem), GetSubTypeIndex(recentItem), newItem.Token, recentItem.Token); case 1: return Relation.Push; default: NotImplementedMethod(newItem, recentItem, nameof(delta), delta); return null; } }