Hi folks,<br><br>I had a HTMLInput issue with gtk-webkit :&nbsp; input text box wont work at all on HTML pages at all.<br><br>Interestingly, If i add a JavaScript handler, then the key press is processed and captured by the JS, but not by the HTMLInputElement.<br>

<br>I debugged the issue in HTMLInputElement::constrainValue calls numCharactersInGraphemeClusters(), which in turn creates a TextBreakIterator.<br><br>The TextBreakIterator would not create for me .. and always return NULL !<br>

<br>The issue was finally with icu&#39;s ubrk_open failing to initialize !<br><br>The reason was this : &nbsp;&nbsp; U_FILE_ACCESS_ERROR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&nbsp; 4,&nbsp;&nbsp;&nbsp;&nbsp; /**&lt; The requested file cannot be found */<br><br>ICU was unable to find its data file , in my case <b>icudt36l.dat</b><br>

<br>I copied the file to my target, export ICU_DATA and things just started working ! great !<br><br>Thanks to Mike (<a href="mailto:mike.emmel@gmail.com">mike.emmel@gmail.com</a>) for pointing me in the right direction !<br>
<br>May be this is obvious for people familiar with ICU, but a dumbo like me, took 2 weeks to trace myself through the webkit code and to get the openStatus ERROR !<br>
<br>So, why not add a printf atleast (if not ASSERT) in debug mode, and indicate that the characterBreakIterator failed to initalize. This will save some else&#39; 2 weeks and frustration&nbsp; as well.<br><br>Kindly accept the patch<br>
<br>Here is a patch for file :<br><br>&nbsp;WebCore/platform/text/TextBreakIteratorICU.cpp<br><pre>***************<br>*** 25,30 ****<br>--- 25,34 ----<br>  #include &quot;TextBreakIteratorInternalICU.h&quot;<br><br>  #include &lt;unicode/ubrk.h&gt;<br>
+ #include &lt;wtf/Assertions.h&gt;<br>+ #include &lt;stdio.h&gt;<br>+<br>+ using namespace std;<br><br>  namespace WebCore {<br><br>*************** static TextBreakIterator* setUpIterator(<br>*** 34,46 ****<br>      if (!string)<br>
          return 0;<br><br>      if (!createdIterator) {<br>-         UErrorCode openStatus = U_ZERO_ERROR;<br>          iterator = static_cast&lt;TextBreakIterator*&gt;(ubrk_open(type,<br>currentTextBreakLocaleID(), 0, 0, &amp;openStatus));<br>
          createdIterator = true;<br>      }<br>      if (!iterator)<br>          return 0;<br><br>      UErrorCode setTextStatus = U_ZERO_ERROR;<br>      ubrk_setText(iterator, string, length, &amp;setTextStatus);<br>--- 38,54 ----<br>
      if (!string)<br>          return 0;<br><br>+     UErrorCode openStatus = U_ZERO_ERROR;<br>      if (!createdIterator) {<br>          iterator = static_cast&lt;TextBreakIterator*&gt;(ubrk_open(type,<br>currentTextBreakLocaleID(), 0, 0, &amp;openStatus));<br>
          createdIterator = true;<br>      }<br>      if (!iterator)<br>+     {<br>+         fprintf(stderr,&quot;Could not create iterator instance @ %s:%d,<br>ICU_ERROR=%d\n&quot;,__FILE__,__LINE__,openStatus);<br>+         ASSERT(iterator);<br>
          return 0;<br>+     }<br><br>      UErrorCode setTextStatus = U_ZERO_ERROR;<br>      ubrk_setText(iterator, string, length, &amp;setTextStatus);<br></pre><br><br><br><br><br><br>-- <br>Sriram Neelakandan<br>Author - Embedded Linux System Design And Development (<a href="http://tinyurl.com/2doosu" target="_blank">http://tinyurl.com/2doosu</a>)