<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Jun 1, 2010, at 10:48 PM, Xiaomei Ji wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr"><div class="gmail_quote"><br><div dir="ltr"><font face="arial, helvetica, sans-serif">Given a DOM Node and an InlineBox, is there a way to convert the character offset within this InlineBox to a VisiblePosition? considering bidi/RTL.</font></div></div></div></blockquote><div><br></div><div>Not sure how being given a DOM node helps here…</div><br><blockquote type="cite"><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div>

<font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Using &lt;span&gt; node in the following example as an example:</font></div>

<div><span style="border-collapse:collapse;white-space:pre"><font face="arial, helvetica, sans-serif">&lt;div contenteditable dir=rtl&gt;abc ששש def &lt;span dir=ltr&gt;שנב abc סטז&lt;/span&gt; uvw זזז xyz&lt;/div&gt; </font></span></div>


<span style="border-collapse:collapse"><pre style="white-space:pre-wrap;width:50em"><span style="white-space:pre"><font face="arial, helvetica, sans-serif">Assume the &lt;span&gt; node is node A, using "(node, offset)a" to represent the node and offset information of Position when caret is before character "a", the position information are:</font></span></pre>


<pre style="white-space:pre-wrap;width:50em"><span style="white-space:pre"><font face="arial, helvetica, sans-serif">...... (A, 4)a(A, 5)b(A, 6)c(A, 7) (A, 0xb)ז(A, 0xa)ט(A, 9)ס(A, 8).
 &nbsp;</font></span></pre></span><div><font><span style="border-collapse:collapse;white-space:pre"><font face="arial, helvetica, sans-serif">Given the &lt;span&gt; node, the InlineBox representing " abc "(with surrounding spaces), and character offset 5 within the InlineBox, is there a way to convert offset 5 into VisiblePosition (A, 0xb) (not (A, 8))? which means when caret is placed after the 2nd space in " abc ", the visible position is (A, 0xb).</font></span></font></div></div></div></div></blockquote><div><br></div><div>I don’t think there’s code to do this—hit testing code will just choose the DOM offset that corresponds to the line box you hit—but how about something like this?</div><div><br></div><div><ol class="MailOutline"><li>If the offset is not at the edge of the text box, then just map it to that box’s text node</li><li>Otherwise, if there is an adjacent text box on that edge, and it has the same direction as the first text box, just map to the first text box’s text node (or, perhaps you should look at the bidi levels of both boxes and choose the one with the higher level?)</li><li>Otherwise, of the two adjacent text boxes, choose the one whose direction is equal to the block direction, and return an offset into the chosen box’s text node, corresponding to the edge</li></ol><div><br></div><div>Does this cover all cases?</div></div></div></body></html>