protected override bool IsTransformAvailableUnit(UnitTextBase unit, IList <UnitTextBase> sequence) { bool isVerbOrDeepr = false; bool isAdverb = false; if (unit.IsEntity) { Entity entity = (Entity)unit; isVerbOrDeepr = entity.IsType(EntityType.Verb) || entity.IsType(EntityType.Infinitive) || entity.IsType(EntityType.Deepr); isAdverb = entity.IsType(EntityType.Adverb); } return(isVerbOrDeepr || (sequence.Any() && (isAdverb || unit.IsEmptyText()))); }
/// <summary> /// Получение следующего юнита с текстом /// </summary> /// <param name="unit">текущий юнит</param> /// <returns>следующий юнит с текстом</returns> public static UnitTextBase GetNonEmptyNext(this UnitTextBase unit) { UnitTextBase result = unit.Next; while (true) { if ((result == null) || !result.IsEmptyText()) { break; } result = result.Next; } return(result); }
/// <summary> /// Получение следующего юнита, который стоит рядом с пропуском юнитов без текста /// </summary> /// <param name="startUnit">юнит, с которого начинается поиск</param> /// <returns>юнит</returns> private UnitTextBase GetNextNearUnitSkipEmpty(UnitTextBase startUnit) { UnitTextBase result = startUnit; UnitTextBase next = result.Next; while (true) { if ((next == null) || !next.IsEmptyText() || (next.PositionInfo.Start != result.PositionInfo.End)) { break; } result = next; next = next.Next; } return(result); }