This appears to be the same logic as is present in SearchService.ApplySearchDataOffsetStartEnd.  Both need to move a number of points in a direction across lines but ignoring line breaks.  Could you unify the logic while your making this change so we don't have duplicate code?  i'd be fine with just changing that code to call into this new code.