public int GetOriginalPosition(int position, PositionRounding rounding) { var subset = GetSubset(position); if (subset == null) { switch (rounding) { case PositionRounding.None: throw new UnableToDetectOriginalPositionException(); case PositionRounding.Up: subset = GetClosestHigherSubset(position); return(subset == null ? int.MaxValue : subset.Index - 1 - subset.OriginalTextShift); case PositionRounding.Down: subset = GetClosestLowerSubset(position); return(subset == null ? 0 : subset.Index + subset.Length - subset.OriginalTextShift); default: throw new NotSupportedException("Unsupported original position rounding option."); } } return(position - subset.OriginalTextShift); }
public virtual int GetOriginalPosition(int position, PositionRounding rounding) { if (Parent != null) { var originalPosition = Parent.GetOriginalPosition(position + Origin.Start, rounding); return(originalPosition); } return(position + Origin.Start); }
public override int GetOriginalPosition(int position, PositionRounding rounding) { position = TextMap.GetOriginalPosition(position, rounding) + Origin.Start; if (Parent != null) { var startOriginalPosition = Parent.GetOriginalPosition(position, rounding); return(startOriginalPosition); } return(position); }