[WebODF] SelectionMover and standardising lingo
Aditya Bhatt
aditya at bhatts.org
Wed Oct 9 09:29:39 CEST 2013
On Friday, October 04, 2013 05:31:20 AM Philip Peitsch wrote:
> Hi all,
>
> Just quickly brain-dumping some recommendations for how to improve the
> clarity and reduce terminology confusion within SelectionMover.
>
> Some commonly repeated terms that appear badly overloaded in SelectionMover
> are steps, positions and points.
>
> Add to this, the functions available are also extremely confusing both in
> terms of their names, and the internal code (there is a patch coming today
> to help with the code side).
>
> So, new terms of reference I'm standardising on are:
>
> Points
> ======
> Raw DOM positions. This is any valid node & offset pair.
>
> Related functions
> -----------------
> SelectionMover.StepCounter.countStepsToPosition - converts the distance
> between two Points into to it's (roughly) equivalent number of Steps
>
> Positions
> =========
> A set of positions as returned by the position iterator. This is a subset of
> points as these can be filtered at the node level via a NodeFilter.
>
> Related functions
> -----------------
> SelectionMover.StepCounter.countForwardSteps
> SelectionMover.StepCounter.countBackwardSteps
> - converts the number of Steps into it's equivalent number of Positions
>
> SelectionMover.movePointForward
> SelectionMover.movePointBackward - Move the cursor the requested number of
> Positions in forward or backwards
>
> Steps
> =====
> A filtered subset of positions as returned by the position iterator. This is
> controlled using a PositionFilter.
>
> Related functions
> -----------------
> SelectionMover.StepCounter.countStepsToPosition
> - converts the distance between two Points into to it's (roughly)
> equivalent number of Steps
>
> SelectionMover.StepCounter.isPositionWalkable
> - returns true if the supplied iterator is a valid Step
>
> SelectionMover.StepCounter.convertForwardStepsBetweenFilters
> SelectionMover.StepCounter.convertBackwardStepsBetweenFilters
> - translates between one filtered set of Steps to a different filtered set
> of Steps. IMPORTANT: this function will only work filter1 only accepts a
> subset of filter2.
>
> countStepsToLineBoundary
> - convert the distance between the cursor and nearest line boundary into
> Steps
>
> countLinesSteps
> - convert the distance between the cursor and the same horizontal position X
> lines up/down into Steps
>
>
> My recommendations (I'm assuming you want to hear these :) )
>
> 1. Standardise SelectionMover on Points and Steps only.
> Any attempts to move a cursor to a Position that is not also a Step is
> likely a bug. The only place where we deliberately move in non-Step
> increments is when trying to put the cursor back into a filtered Step. This
> same effect could be achieved by calling moveForwardStep(0, filter).
>
100% Agreed.
> 2. Remove or rewrite convert(Forward|Backward)StepsBetweenFilters.
> The current implementation will not work for arbitrary filter pairs. These
> should likely be re-written to return the number of filter1-steps when
> travelling filter2-steps in distance. I would also suggest this takes the
> same approach as countStepsToPosition and round the cursor back to the
> Point of the last filter2-step that is smaller-than or equal-to the current
> cursor Point.
Good point; at the time when I wrote those I was only looking at a specific
use-case - mapping from TextPositionFilter-space to (TextPositionFilter &
RootFilter)-space, and that approach subconsciously manifested itself here.
Agree that this should be made to work with *really* arbitrary filter pairs.
In all, thanks for the detailing. We should put this in a README-
SelectionMover.txt.
Cheers,
Aditya
More information about the WebODF
mailing list