<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.14"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>tesseract: ccmain/resultiterator.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(initResizable);
/* @license-end */</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">tesseract
   &#160;<span id="projectnumber">3.05.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('a00143_source.html','');});
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">resultiterator.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="a00143.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// File:        resultiterator.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// Description: Iterator for tesseract results that is capable of</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//              iterating in proper reading order over Bi Directional</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">//              (e.g. mixed Hebrew and English) text.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">// Author:      David Eger</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">// Created:     Fri May 27 13:58:06 PST 2011</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">// (C) Copyright 2011, Google Inc.</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">// you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">// You may obtain a copy of the License at</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">// distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">// See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">// limitations under the License.</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="a00146.html">resultiterator.h</a>&quot;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;allheaders.h&quot;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="a00338.html">pageres.h</a>&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="a00593.html">strngs.h</a>&quot;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="a00173.html">tesseractclass.h</a>&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="a00626.html">unicharset.h</a>&quot;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="a00635.html">unicodes.h</a>&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">namespace </span><a class="code" href="a01738.html">tesseract</a> {</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="a02453.html#aa0f6c0e15c83e9ed718d80d736865c3f">   33</a></span>&#160;<a class="code" href="a02453.html#aa0f6c0e15c83e9ed718d80d736865c3f">ResultIterator::ResultIterator</a>(<span class="keyword">const</span> <a class="code" href="a02357.html">LTRResultIterator</a> &amp;resit)</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    : <a class="code" href="a02357.html">LTRResultIterator</a>(resit) {</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;  in_minor_direction_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;  at_beginning_of_minor_run_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;  preserve_interword_spaces_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;  <a class="code" href="a02901.html">BoolParam</a> *p = ParamUtils::FindParam&lt;BoolParam&gt;(</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;      <span class="stringliteral">&quot;preserve_interword_spaces&quot;</span>, <a class="code" href="a00560.html#a71a3243019391d3a438fd279c07cef87">GlobalParams</a>()-&gt;<a class="code" href="a02885.html#a6bb13133287d8d8d18c81bb974b1b54f">bool_params</a>,</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;      <a class="code" href="a02385.html#acca34c1adcf494eca7dfefe74258f991">tesseract_</a>-&gt;<a class="code" href="a02769.html#ac993425386ae1f73762107299ee8a114">params</a>()-&gt;<a class="code" href="a02885.html#a6bb13133287d8d8d18c81bb974b1b54f">bool_params</a>);</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;  <span class="keywordflow">if</span> (p != NULL) preserve_interword_spaces_ = (bool)(*p);</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;  current_paragraph_is_ltr_ = CurrentParagraphIsLtr();</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;  MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;}</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a02453.html#a961e7ee57edae85e855332a301cccacf">   48</a></span>&#160;<a class="code" href="a02453.html">ResultIterator</a> *<a class="code" href="a02453.html#a961e7ee57edae85e855332a301cccacf">ResultIterator::StartOfParagraph</a>(</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="keyword">const</span> <a class="code" href="a02357.html">LTRResultIterator</a> &amp;resit) {</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="a02453.html#aa0f6c0e15c83e9ed718d80d736865c3f">ResultIterator</a>(resit);</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;}</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a02453.html#a17891e56b5a812ee7728300dac362b40">   53</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="a02453.html#a17891e56b5a812ee7728300dac362b40">ResultIterator::ParagraphIsLtr</a>()<span class="keyword"> const </span>{</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  <span class="keywordflow">return</span> current_paragraph_is_ltr_;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;}</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="keywordtype">bool</span> ResultIterator::CurrentParagraphIsLtr()<span class="keyword"> const </span>{</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>())</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;  <span class="comment">// doesn&#39;t matter.</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  <a class="code" href="a02357.html">LTRResultIterator</a> it(*<span class="keyword">this</span>);</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  it.RestartParagraph();</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="comment">// Try to figure out the ltr-ness of the paragraph.  The rules below</span></div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  <span class="comment">// make more sense in the context of a difficult paragraph example.</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  <span class="comment">// Here we denote {ltr characters, RTL CHARACTERS}:</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  <span class="comment">//</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="comment">//   &quot;don&#39;t go in there!&quot; DAIS EH</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  <span class="comment">//   EHT OTNI DEPMUJ FELSMIH NEHT DNA</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  <span class="comment">//                  .GNIDLIUB GNINRUB</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <span class="comment">//</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  <span class="comment">// On the first line, the left-most word is LTR and the rightmost word</span></div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  <span class="comment">// is RTL.  Thus, we are better off taking the majority direction for</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  <span class="comment">// the whole paragraph contents.  So instead of &quot;the leftmost word is LTR&quot;</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;  <span class="comment">// indicating an LTR paragraph, we use a heuristic about what RTL paragraphs</span></div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  <span class="comment">// would not do:  Typically an RTL paragraph would *not* start with an LTR</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  <span class="comment">// word.  So our heuristics are as follows:</span></div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  <span class="comment">//</span></div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  <span class="comment">// (1) If the first text line has an RTL word in the left-most position</span></div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  <span class="comment">//     it is RTL.</span></div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  <span class="comment">// (2) If the first text line has an LTR word in the right-most position</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  <span class="comment">//     it is LTR.</span></div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;  <span class="comment">// (3) If neither of the above is true, take the majority count for the</span></div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="comment">//     paragraph -- if there are more rtl words, it is RTL.  If there</span></div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  <span class="comment">//     are more LTR words, it&#39;s LTR.</span></div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  <span class="keywordtype">bool</span> leftmost_rtl = it.WordDirection() == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa3c6da23f98ab8ac48598c21583d9297e">DIR_RIGHT_TO_LEFT</a>;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <span class="keywordtype">bool</span> rightmost_ltr = it.WordDirection() == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa5978cd698552a6106db1bf6528617317">DIR_LEFT_TO_RIGHT</a>;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  <span class="keywordtype">int</span> num_ltr, num_rtl;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  num_rtl = leftmost_rtl ? 1 : 0;</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  num_ltr = (it.WordDirection() == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa5978cd698552a6106db1bf6528617317">DIR_LEFT_TO_RIGHT</a>) ? 1 : 0;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  <span class="keywordflow">for</span> (it.Next(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>);</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;       !it.Empty(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>) &amp;&amp; !it.IsAtBeginningOf(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a5e87a35f16de644593c353159ede11d1">RIL_TEXTLINE</a>);</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;       it.Next(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>)) {</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dba">StrongScriptDirection</a> dir = it.WordDirection();</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    rightmost_ltr = (dir == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa5978cd698552a6106db1bf6528617317">DIR_LEFT_TO_RIGHT</a>);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    num_rtl += (dir == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa3c6da23f98ab8ac48598c21583d9297e">DIR_RIGHT_TO_LEFT</a>) ? 1 : 0;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    num_ltr += rightmost_ltr ? 1 : 0;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  }</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  <span class="keywordflow">if</span> (leftmost_rtl)</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="keywordflow">if</span> (rightmost_ltr)</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  <span class="comment">// First line is ambiguous.  Take statistics on the whole paragraph.</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  <span class="keywordflow">if</span> (!it.Empty(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>) &amp;&amp; !it.IsAtBeginningOf(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a3e63980691bf64801c704f59bd795bd9">RIL_PARA</a>)) <span class="keywordflow">do</span> {</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dba">StrongScriptDirection</a> dir = it.WordDirection();</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    num_rtl += (dir == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa3c6da23f98ab8ac48598c21583d9297e">DIR_RIGHT_TO_LEFT</a>) ? 1 : 0;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    num_ltr += (dir == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa5978cd698552a6106db1bf6528617317">DIR_LEFT_TO_RIGHT</a>) ? 1 : 0;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  } <span class="keywordflow">while</span> (it.Next(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>) &amp;&amp; !it.IsAtBeginningOf(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a3e63980691bf64801c704f59bd795bd9">RIL_PARA</a>));</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  <span class="keywordflow">return</span> num_ltr &gt;= num_rtl;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;}</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a02453.html#a1c97324553ea1b897dfb5404e0f9e315">ResultIterator::kMinorRunStart</a> = -1;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a02453.html#a15e95d21ce320a7c282c5a8d61fe73ee">ResultIterator::kMinorRunEnd</a> = -2;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="keyword">const</span> <span class="keywordtype">int</span> <a class="code" href="a02453.html#ad23440ad1059127afadd17c18fbf93ad">ResultIterator::kComplexWord</a> = -3;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="keywordtype">void</span> ResultIterator::CalculateBlobOrder(</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <a class="code" href="a02297.html">GenericVector&lt;int&gt;</a> *blob_indices)<span class="keyword"> const </span>{</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  <span class="keywordtype">bool</span> context_is_ltr = current_paragraph_is_ltr_ ^ in_minor_direction_;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  blob_indices-&gt;<a class="code" href="a02297.html#a9cdbff49b186574b83e43afba606fdd9">clear</a>();</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a7e7e1e6e23032c1fb6c10f8025c4fcf0">Empty</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>)) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  <span class="keywordflow">if</span> (context_is_ltr || <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-&gt;<a class="code" href="a02645.html#a7dda06bb4d68d571d0df20e81475fa15">UnicharsInReadingOrder</a>()) {</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="comment">// Easy! just return the blobs in order;</span></div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>; i++)</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;      blob_indices-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(i);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    <span class="keywordflow">return</span>;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  }</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  <span class="comment">// The blobs are in left-to-right order, but the current reading context</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  <span class="comment">// is right-to-left.</span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> U_LTR = <a class="code" href="a04041.html#a31e06ec0b942a9d392db21b49cf40078aea057cec3044e6ec313ffc0c0d85e0db">UNICHARSET::U_LEFT_TO_RIGHT</a>;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> U_RTL = <a class="code" href="a04041.html#a31e06ec0b942a9d392db21b49cf40078ac979da8ecbc0d158b8cb516db7e3824d">UNICHARSET::U_RIGHT_TO_LEFT</a>;</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> U_EURO_NUM = <a class="code" href="a04041.html#a31e06ec0b942a9d392db21b49cf40078aaf5dc95f557dbfbbf3a517e8b93d9a01">UNICHARSET::U_EUROPEAN_NUMBER</a>;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> U_EURO_NUM_SEP = <a class="code" href="a04041.html#a31e06ec0b942a9d392db21b49cf40078a65341629a233d9f3003c110dff857f4b">UNICHARSET::U_EUROPEAN_NUMBER_SEPARATOR</a>;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> U_EURO_NUM_TERM = <a class="code" href="a04041.html#a31e06ec0b942a9d392db21b49cf40078a5f07604e909b46b5dc1920be0bbc7a88">UNICHARSET::U_EUROPEAN_NUMBER_TERMINATOR</a>;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> U_COMMON_NUM_SEP = <a class="code" href="a04041.html#a31e06ec0b942a9d392db21b49cf40078a409ccbace5eab0702c2f3c6eb948742b">UNICHARSET::U_COMMON_NUMBER_SEPARATOR</a>;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> U_OTHER_NEUTRAL = <a class="code" href="a04041.html#a31e06ec0b942a9d392db21b49cf40078a5a183c9262a1161b5d34cf3d7c950cac">UNICHARSET::U_OTHER_NEUTRAL</a>;</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;  <span class="comment">// Step 1: Scan for and mark European Number sequences</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  <span class="comment">//   [:ET:]*[:EN:]+(([:ES:]|[:CS:])?[:EN:]+)*[:ET:]*</span></div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <a class="code" href="a02297.html">GenericVector&lt;int&gt;</a> letter_types;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>; i++) {</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    letter_types.<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-&gt;<a class="code" href="a02645.html#a2a95941e1613fcfaee0c5c157dd654f9">SymbolDirection</a>(i));</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  }</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  <span class="comment">// Convert a single separtor sandwiched between two EN&#39;s into an EN.</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i + 2 &lt; <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>; i++) {</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="keywordflow">if</span> (letter_types[i] == U_EURO_NUM &amp;&amp; letter_types[i + 2] == U_EURO_NUM &amp;&amp;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        (letter_types[i + 1] == U_EURO_NUM_SEP ||</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;         letter_types[i + 1] == U_COMMON_NUM_SEP)) {</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;      letter_types[i + 1] = U_EURO_NUM;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    }</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  }</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  <span class="comment">// Scan for sequences of European Number Terminators around ENs and convert</span></div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  <span class="comment">// them to ENs.</span></div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>; i++) {</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    <span class="keywordflow">if</span> (letter_types[i] == U_EURO_NUM_TERM) {</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;      <span class="keywordtype">int</span> j = i + 1;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;      <span class="keywordflow">while</span> (j &lt; <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a> &amp;&amp; letter_types[j] == U_EURO_NUM_TERM) { j++; }</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;      <span class="keywordflow">if</span> (j &lt; <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a> &amp;&amp; letter_types[j] == U_EURO_NUM) {</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        <span class="comment">// The sequence [i..j] should be converted to all European Numbers.</span></div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = i; k &lt; j; k++) letter_types[k] = U_EURO_NUM;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;      }</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;      j = i - 1;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;      <span class="keywordflow">while</span> (j &gt; -1 &amp;&amp; letter_types[j] == U_EURO_NUM_TERM) { j--; }</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;      <span class="keywordflow">if</span> (j &gt; -1 &amp;&amp; letter_types[j] == U_EURO_NUM) {</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        <span class="comment">// The sequence [j..i] should be converted to all European Numbers.</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = j; k &lt;= i; k++) letter_types[k] = U_EURO_NUM;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;      }</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    }</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  }</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  <span class="comment">// Step 2: Convert all remaining types to either L or R.</span></div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  <span class="comment">// Sequences ([:L:]|[:EN:])+ (([:CS:]|[:ON:])+ ([:L:]|[:EN:])+)* -&gt; L.</span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  <span class="comment">// All other are R.</span></div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>;) {</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    <span class="keywordtype">int</span> ti = letter_types[i];</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <span class="keywordflow">if</span> (ti == U_LTR || ti == U_EURO_NUM) {</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;      <span class="comment">// Left to right sequence; scan to the end of it.</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;      <span class="keywordtype">int</span> last_good = i;</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = i + 1; j &lt; <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>; j++) {</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        <span class="keywordtype">int</span> tj = letter_types[j];</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        <span class="keywordflow">if</span> (tj == U_LTR || tj == U_EURO_NUM) {</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;          last_good = j;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tj == U_COMMON_NUM_SEP || tj == U_OTHER_NEUTRAL) {</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;          <span class="comment">// do nothing.</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;        } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;          <span class="keywordflow">break</span>;</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;        }</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;      }</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;      <span class="comment">// [i..last_good] is the L sequence</span></div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = i; k &lt;= last_good; k++) letter_types[k] = U_LTR;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;      i = last_good + 1;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;      letter_types[i] = U_RTL;</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;      i++;</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    }</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  }</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  <span class="comment">// At this point, letter_types is entirely U_LTR or U_RTL.</span></div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a> - 1; i &gt;= 0;) {</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    <span class="keywordflow">if</span> (letter_types[i] == U_RTL) {</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;      blob_indices-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(i);</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;      i--;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;      <span class="comment">// left to right sequence.  scan to the beginning.</span></div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;      <span class="keywordtype">int</span> j = i - 1;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;      <span class="keywordflow">for</span> (; j &gt;= 0 &amp;&amp; letter_types[j] != U_RTL; j--) { }  <span class="comment">// pass</span></div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;      <span class="comment">// Now (j, i] is LTR</span></div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = j + 1; k &lt;= i; k++) blob_indices-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(k);</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;      i = j;</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    }</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;  }</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;  <a class="code" href="a00500.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a>(blob_indices-&gt;<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() == <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>);</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;}</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> PrintScriptDirs(<span class="keyword">const</span> <a class="code" href="a02297.html">GenericVector&lt;StrongScriptDirection&gt;</a> &amp;dirs) {</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; dirs.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>(); i++) {</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    <span class="keywordflow">switch</span> (dirs[i]) {</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;      <span class="keywordflow">case</span> <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaaacc5ec7fd402a8806e78fba831045aae">DIR_NEUTRAL</a>: <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a> (<span class="stringliteral">&quot;N &quot;</span>); <span class="keywordflow">break</span>;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;      <span class="keywordflow">case</span> <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa5978cd698552a6106db1bf6528617317">DIR_LEFT_TO_RIGHT</a>: <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;L &quot;</span>); <span class="keywordflow">break</span>;</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;      <span class="keywordflow">case</span> <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa3c6da23f98ab8ac48598c21583d9297e">DIR_RIGHT_TO_LEFT</a>: <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;R &quot;</span>); <span class="keywordflow">break</span>;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;      <span class="keywordflow">case</span> <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa252615b6d7ebef9293183f6e94488cc1">DIR_MIX</a>: <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Z &quot;</span>); <span class="keywordflow">break</span>;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;      <span class="keywordflow">default</span>: <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;? &quot;</span>); <span class="keywordflow">break</span>;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    }</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  }</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;}</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="keywordtype">void</span> <a class="code" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">ResultIterator::CalculateTextlineOrder</a>(</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <span class="keywordtype">bool</span> paragraph_is_ltr,</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    <span class="keyword">const</span> LTRResultIterator &amp;resit,</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    <a class="code" href="a02449.html">GenericVectorEqEq&lt;int&gt;</a> *word_indices)<span class="keyword"> const </span>{</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;  <a class="code" href="a02297.html">GenericVector&lt;StrongScriptDirection&gt;</a> directions;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  <a class="code" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">CalculateTextlineOrder</a>(paragraph_is_ltr, resit, &amp;directions, word_indices);</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;}</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;<span class="keywordtype">void</span> <a class="code" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">ResultIterator::CalculateTextlineOrder</a>(</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    <span class="keywordtype">bool</span> paragraph_is_ltr,</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    <span class="keyword">const</span> LTRResultIterator &amp;resit,</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    <a class="code" href="a02297.html">GenericVector&lt;StrongScriptDirection&gt;</a> *dirs_arg,</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    <a class="code" href="a02449.html">GenericVectorEqEq&lt;int&gt;</a> *word_indices)<span class="keyword"> const </span>{</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;  <a class="code" href="a02297.html">GenericVector&lt;StrongScriptDirection&gt;</a> dirs;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;  <a class="code" href="a02297.html">GenericVector&lt;StrongScriptDirection&gt;</a> *directions;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  directions = (dirs_arg != NULL) ? dirs_arg : &amp;dirs;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  directions-&gt;<a class="code" href="a02297.html#a980882b5ebc3e72fdedbdbe345196f21">truncate</a>(0);</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  <span class="comment">// A LTRResultIterator goes strictly left-to-right word order.</span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  <a class="code" href="a02357.html#a51a228fb5f12fca58db098ae9d9c9d5d">LTRResultIterator</a> ltr_it(resit);</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;  ltr_it.RestartRow();</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;  <span class="keywordflow">if</span> (ltr_it.Empty(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>)) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  <span class="keywordflow">do</span> {</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    directions-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(ltr_it.WordDirection());</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  } <span class="keywordflow">while</span> (ltr_it.Next(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>) &amp;&amp; !ltr_it.IsAtBeginningOf(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a5e87a35f16de644593c353159ede11d1">RIL_TEXTLINE</a>));</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  word_indices-&gt;<a class="code" href="a02297.html#a980882b5ebc3e72fdedbdbe345196f21">truncate</a>(0);</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;  <a class="code" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">CalculateTextlineOrder</a>(paragraph_is_ltr, *directions, word_indices);</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;}</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">  255</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">ResultIterator::CalculateTextlineOrder</a>(</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    <span class="keywordtype">bool</span> paragraph_is_ltr,</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    <span class="keyword">const</span> <a class="code" href="a02297.html">GenericVector&lt;StrongScriptDirection&gt;</a> &amp;word_dirs,</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <a class="code" href="a02449.html">GenericVectorEqEq&lt;int&gt;</a> *reading_order) {</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;  reading_order-&gt;<a class="code" href="a02297.html#a980882b5ebc3e72fdedbdbe345196f21">truncate</a>(0);</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;  <span class="keywordflow">if</span> (word_dirs.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() == 0) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;  <span class="comment">// Take all of the runs of minor direction words and insert them</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;  <span class="comment">// in reverse order.</span></div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;  <span class="keywordtype">int</span> minor_direction, major_direction, major_step, start, end;</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;  <span class="keywordflow">if</span> (paragraph_is_ltr) {</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    start = 0;</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    end = word_dirs.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>();</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    major_step = 1;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    major_direction = <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa5978cd698552a6106db1bf6528617317">DIR_LEFT_TO_RIGHT</a>;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    minor_direction = <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa3c6da23f98ab8ac48598c21583d9297e">DIR_RIGHT_TO_LEFT</a>;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    start = word_dirs.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() - 1;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    end = -1;</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    major_step = -1;</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    major_direction = <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa3c6da23f98ab8ac48598c21583d9297e">DIR_RIGHT_TO_LEFT</a>;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    minor_direction = <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa5978cd698552a6106db1bf6528617317">DIR_LEFT_TO_RIGHT</a>;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    <span class="comment">// Special rule: if there are neutral words at the right most side</span></div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    <span class="comment">//   of a line adjacent to a left-to-right word in the middle of the</span></div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    <span class="comment">//   line, we interpret the end of the line as a single LTR sequence.</span></div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <span class="keywordflow">if</span> (word_dirs[start] == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaaacc5ec7fd402a8806e78fba831045aae">DIR_NEUTRAL</a>) {</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;      <span class="keywordtype">int</span> neutral_end = start;</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;      <span class="keywordflow">while</span> (neutral_end &gt; 0 &amp;&amp; word_dirs[neutral_end] == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaaacc5ec7fd402a8806e78fba831045aae">DIR_NEUTRAL</a>) {</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        neutral_end--;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;      }</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;      <span class="keywordflow">if</span> (neutral_end &gt;= 0 &amp;&amp; word_dirs[neutral_end] == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa5978cd698552a6106db1bf6528617317">DIR_LEFT_TO_RIGHT</a>) {</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;        <span class="comment">// LTR followed by neutrals.</span></div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;        <span class="comment">// Scan for the beginning of the minor left-to-right run.</span></div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;        <span class="keywordtype">int</span> left = neutral_end;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = left; i &gt;= 0 &amp;&amp; word_dirs[i] != <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa3c6da23f98ab8ac48598c21583d9297e">DIR_RIGHT_TO_LEFT</a>; i--) {</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;          <span class="keywordflow">if</span> (word_dirs[i] == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa5978cd698552a6106db1bf6528617317">DIR_LEFT_TO_RIGHT</a>) left = i;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;        }</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;        reading_order-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(<a class="code" href="a02453.html#a1c97324553ea1b897dfb5404e0f9e315">kMinorRunStart</a>);</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = left; i &lt; word_dirs.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>(); i++) {</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;          reading_order-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(i);</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;          <span class="keywordflow">if</span> (word_dirs[i] == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa252615b6d7ebef9293183f6e94488cc1">DIR_MIX</a>) reading_order-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(<a class="code" href="a02453.html#ad23440ad1059127afadd17c18fbf93ad">kComplexWord</a>);</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;        }</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        reading_order-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(<a class="code" href="a02453.html#a15e95d21ce320a7c282c5a8d61fe73ee">kMinorRunEnd</a>);</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;        start = left - 1;</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;      }</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    }</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;  }</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = start; i != end;) {</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <span class="keywordflow">if</span> (word_dirs[i] == minor_direction) {</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;      <span class="keywordtype">int</span> j = i;</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;      <span class="keywordflow">while</span> (j != end &amp;&amp; word_dirs[j] != major_direction)</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;        j += major_step;</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;      <span class="keywordflow">if</span> (j == end) j -= major_step;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;      <span class="keywordflow">while</span> (j != i &amp;&amp; word_dirs[j] != minor_direction)</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;        j -= major_step;</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;      <span class="comment">//  [j..i] is a minor direction run.</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;      reading_order-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(<a class="code" href="a02453.html#a1c97324553ea1b897dfb5404e0f9e315">kMinorRunStart</a>);</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = j; k != i; k -= major_step) {</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;        reading_order-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(k);</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;      }</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;      reading_order-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(i);</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;      reading_order-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(<a class="code" href="a02453.html#a15e95d21ce320a7c282c5a8d61fe73ee">kMinorRunEnd</a>);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;      i = j + major_step;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;      reading_order-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(i);</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;      <span class="keywordflow">if</span> (word_dirs[i] == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa252615b6d7ebef9293183f6e94488cc1">DIR_MIX</a>) reading_order-&gt;<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(<a class="code" href="a02453.html#ad23440ad1059127afadd17c18fbf93ad">kComplexWord</a>);</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;      i += major_step;</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    }</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;  }</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;}</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;<span class="keywordtype">int</span> ResultIterator::LTRWordIndex()<span class="keyword"> const </span>{</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;  <span class="keywordtype">int</span> this_word_index = 0;</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;  <a class="code" href="a02357.html">LTRResultIterator</a> textline(*<span class="keyword">this</span>);</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;  textline.RestartRow();</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;  <span class="keywordflow">while</span> (!textline.PositionedAtSameWord(<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>)) {</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    this_word_index++;</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    textline.Next(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>);</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;  }</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;  <span class="keywordflow">return</span> this_word_index;</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;}</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;<span class="keywordtype">void</span> ResultIterator::MoveToLogicalStartOfWord() {</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a> == 0) {</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    <a class="code" href="a02385.html#a9075e98e75619ca5e1270a0a6eb2c352">BeginWord</a>(0);</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <span class="keywordflow">return</span>;</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;  }</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;  <a class="code" href="a02297.html">GenericVector&lt;int&gt;</a> blob_order;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;  CalculateBlobOrder(&amp;blob_order);</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;  <span class="keywordflow">if</span> (blob_order.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() == 0 || blob_order[0] == 0) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;  <a class="code" href="a02385.html#a9075e98e75619ca5e1270a0a6eb2c352">BeginWord</a>(blob_order[0]);</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;}</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;<span class="keywordtype">bool</span> ResultIterator::IsAtFinalSymbolOfWord()<span class="keyword"> const </span>{</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;  <a class="code" href="a02297.html">GenericVector&lt;int&gt;</a> blob_order;</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;  CalculateBlobOrder(&amp;blob_order);</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;  <span class="keywordflow">return</span> blob_order.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() == 0 || blob_order.<a class="code" href="a02297.html#a48b82547ebbaa5fedecfdebe7e2f155a">back</a>() == <a class="code" href="a02385.html#a98d81a4da55f06637a0db60ac33cc814">blob_index_</a>;</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;}</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;<span class="keywordtype">bool</span> ResultIterator::IsAtFirstSymbolOfWord()<span class="keyword"> const </span>{</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;  <a class="code" href="a02297.html">GenericVector&lt;int&gt;</a> blob_order;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;  CalculateBlobOrder(&amp;blob_order);</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;  <span class="keywordflow">return</span> blob_order.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() == 0 || blob_order[0] == <a class="code" href="a02385.html#a98d81a4da55f06637a0db60ac33cc814">blob_index_</a>;</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;}</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;<span class="keywordtype">void</span> ResultIterator::AppendSuffixMarks(<a class="code" href="a02929.html">STRING</a> *text)<span class="keyword"> const </span>{</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;  <span class="keywordtype">bool</span> reading_direction_is_ltr =</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;      current_paragraph_is_ltr_ ^ in_minor_direction_;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;  <span class="comment">// scan forward to see what meta-information the word ordering algorithm</span></div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;  <span class="comment">// left us.</span></div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;  <span class="comment">// If this word is at the  *end* of a minor run, insert the other</span></div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;  <span class="comment">// direction&#39;s mark;  else if this was a complex word, insert the</span></div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;  <span class="comment">// current reading order&#39;s mark.</span></div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;  <a class="code" href="a02449.html">GenericVectorEqEq&lt;int&gt;</a> textline_order;</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;  <a class="code" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">CalculateTextlineOrder</a>(current_paragraph_is_ltr_,</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;                         *<span class="keyword">this</span>, &amp;textline_order);</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;  <span class="keywordtype">int</span> this_word_index = LTRWordIndex();</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;  <span class="keywordtype">int</span> i = textline_order.<a class="code" href="a02297.html#a6dee574daf4a3d4f0fc7048964f8f252">get_index</a>(this_word_index);</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;  <span class="keywordflow">if</span> (i &lt; 0) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;  <span class="keywordtype">int</span> last_non_word_mark = 0;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;  <span class="keywordflow">for</span> (i++; i &lt; textline_order.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() &amp;&amp; textline_order[i] &lt; 0; i++) {</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    last_non_word_mark = textline_order[i];</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;  }</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;  <span class="keywordflow">if</span> (last_non_word_mark == <a class="code" href="a02453.html#ad23440ad1059127afadd17c18fbf93ad">kComplexWord</a>) {</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    *text += reading_direction_is_ltr ? <a class="code" href="a01738.html#aa393f17e77d059739f005ada9a805c69">kLRM</a> : <a class="code" href="a01738.html#a8aa0e462f167f686ef463b5a5b266f04">kRLM</a>;</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (last_non_word_mark == <a class="code" href="a02453.html#a15e95d21ce320a7c282c5a8d61fe73ee">kMinorRunEnd</a>) {</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    <span class="keywordflow">if</span> (current_paragraph_is_ltr_) {</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;      *text += <a class="code" href="a01738.html#aa393f17e77d059739f005ada9a805c69">kLRM</a>;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;      *text += <a class="code" href="a01738.html#a8aa0e462f167f686ef463b5a5b266f04">kRLM</a>;</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    }</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;  }</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;}</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;<span class="keywordtype">void</span> ResultIterator::MoveToLogicalStartOfTextline() {</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;  <a class="code" href="a02449.html">GenericVectorEqEq&lt;int&gt;</a> word_indices;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;  <a class="code" href="a02385.html#a2df743d478df34f1a239cf9675f82be0">RestartRow</a>();</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;  <a class="code" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">CalculateTextlineOrder</a>(current_paragraph_is_ltr_,</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;                         dynamic_cast&lt;const LTRResultIterator&amp;&gt;(*<span class="keyword">this</span>),</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;                         &amp;word_indices);</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;  <span class="keywordtype">int</span> i = 0;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;  <span class="keywordflow">for</span> (; i &lt; word_indices.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() &amp;&amp; word_indices[i] &lt; 0; i++) {</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;    <span class="keywordflow">if</span> (word_indices[i] == <a class="code" href="a02453.html#a1c97324553ea1b897dfb5404e0f9e315">kMinorRunStart</a>) in_minor_direction_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (word_indices[i] == <a class="code" href="a02453.html#a15e95d21ce320a7c282c5a8d61fe73ee">kMinorRunEnd</a>) in_minor_direction_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;  }</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;  <span class="keywordflow">if</span> (in_minor_direction_) at_beginning_of_minor_run_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;  <span class="keywordflow">if</span> (i &gt;= word_indices.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>()) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;  <span class="keywordtype">int</span> first_word_index = word_indices[i];</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; first_word_index; j++) {</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    <a class="code" href="a02385.html#a415ea7c61e24868bc67e676184be0bb9">PageIterator::Next</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>);</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;  }</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;  MoveToLogicalStartOfWord();</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;}</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;</div><div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="a02453.html#a36e6fd5587628440bb19b84648645676">  413</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="a02453.html#a36e6fd5587628440bb19b84648645676">ResultIterator::Begin</a>() {</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;  <a class="code" href="a02385.html#a5cc369eb577150a3a677f9c342ce1240">LTRResultIterator::Begin</a>();</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;  current_paragraph_is_ltr_ = CurrentParagraphIsLtr();</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;  in_minor_direction_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;  at_beginning_of_minor_run_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;  MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;}</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;</div><div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="a02453.html#abd8987e2387f1945b53cf23f99b663e1">  421</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="a02453.html#abd8987e2387f1945b53cf23f99b663e1">ResultIterator::Next</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7">PageIteratorLevel</a> level) {</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a997c382ddd2cf2f539532a1d91780963">block</a>() == NULL) <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// already at end!</span></div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;  <span class="keywordflow">switch</span> (level) {</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a2dcea8d4208c16055353029d26f9bf49">RIL_BLOCK</a>:  <span class="comment">// explicit fall-through</span></div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a3e63980691bf64801c704f59bd795bd9">RIL_PARA</a>:   <span class="comment">// explicit fall-through</span></div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a5e87a35f16de644593c353159ede11d1">RIL_TEXTLINE</a>:</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;      <span class="keywordflow">if</span> (!<a class="code" href="a02385.html#a415ea7c61e24868bc67e676184be0bb9">PageIterator::Next</a>(level)) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;      <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a63758afaebd4bf9f1718397eac57810e">IsWithinFirstTextlineOfParagraph</a>()) {</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;        <span class="comment">// if we&#39;ve advanced to a new paragraph,</span></div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;        <span class="comment">// recalculate current_paragraph_is_ltr_</span></div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;        current_paragraph_is_ltr_ = CurrentParagraphIsLtr();</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;      }</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;      in_minor_direction_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;      MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a997c382ddd2cf2f539532a1d91780963">block</a>() != NULL;</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7adbd62c7f34a9ebdd6e3b813a34cd812d">RIL_SYMBOL</a>:</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    {</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;      <a class="code" href="a02297.html">GenericVector&lt;int&gt;</a> blob_order;</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;      CalculateBlobOrder(&amp;blob_order);</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;      <span class="keywordtype">int</span> next_blob = 0;</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;      <span class="keywordflow">while</span> (next_blob &lt; blob_order.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() &amp;&amp;</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;             <a class="code" href="a02385.html#a98d81a4da55f06637a0db60ac33cc814">blob_index_</a> != blob_order[next_blob])</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;        next_blob++;</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;      next_blob++;</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;      <span class="keywordflow">if</span> (next_blob &lt; blob_order.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>()) {</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;        <span class="comment">// we&#39;re in the same word; simply advance one blob.</span></div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;        <a class="code" href="a02385.html#a9075e98e75619ca5e1270a0a6eb2c352">BeginWord</a>(blob_order[next_blob]);</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;        at_beginning_of_minor_run_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;      }</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;      level = <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>;  <span class="comment">// we&#39;ve fallen through to the next word.</span></div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    }</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>:  <span class="comment">// explicit fall-through.</span></div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    {</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;      <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>() == NULL) <span class="keywordflow">return</span> <a class="code" href="a02453.html#abd8987e2387f1945b53cf23f99b663e1">Next</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a2dcea8d4208c16055353029d26f9bf49">RIL_BLOCK</a>);</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;      <a class="code" href="a02449.html">GenericVectorEqEq&lt;int&gt;</a> word_indices;</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;      <span class="keywordtype">int</span> this_word_index = LTRWordIndex();</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;      <a class="code" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">CalculateTextlineOrder</a>(current_paragraph_is_ltr_,</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;                             *<span class="keyword">this</span>,</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;                             &amp;word_indices);</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;      <span class="keywordtype">int</span> final_real_index = word_indices.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() - 1;</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;      <span class="keywordflow">while</span> (final_real_index &gt; 0 &amp;&amp; word_indices[final_real_index] &lt; 0)</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;        final_real_index--;</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; final_real_index; i++) {</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;        <span class="keywordflow">if</span> (word_indices[i] == this_word_index) {</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;          <span class="keywordtype">int</span> j = i + 1;</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;          <span class="keywordflow">for</span> (; j &lt; final_real_index &amp;&amp; word_indices[j] &lt; 0; j++) {</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;            <span class="keywordflow">if</span> (word_indices[j] == <a class="code" href="a02453.html#a1c97324553ea1b897dfb5404e0f9e315">kMinorRunStart</a>) in_minor_direction_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;            <span class="keywordflow">if</span> (word_indices[j] == <a class="code" href="a02453.html#a15e95d21ce320a7c282c5a8d61fe73ee">kMinorRunEnd</a>) in_minor_direction_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;          }</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;          at_beginning_of_minor_run_ = (word_indices[j - 1] == <a class="code" href="a02453.html#a1c97324553ea1b897dfb5404e0f9e315">kMinorRunStart</a>);</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;          <span class="comment">// awesome, we move to word_indices[j]</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;          <span class="keywordflow">if</span> (BidiDebug(3)) {</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;            <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Next(RIL_WORD): %d -&gt; %d\n&quot;</span>,</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;                    this_word_index, word_indices[j]);</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;          }</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;          <a class="code" href="a02385.html#a2df743d478df34f1a239cf9675f82be0">PageIterator::RestartRow</a>();</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k &lt; word_indices[j]; k++) {</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;            <a class="code" href="a02385.html#a415ea7c61e24868bc67e676184be0bb9">PageIterator::Next</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>);</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;          }</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;          MoveToLogicalStartOfWord();</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;          <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;        }</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;      }</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;      <span class="keywordflow">if</span> (BidiDebug(3)) {</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;        <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Next(RIL_WORD): %d -&gt; EOL\n&quot;</span>, this_word_index);</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;      }</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;      <span class="comment">// we&#39;re going off the end of the text line.</span></div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="a02453.html#abd8987e2387f1945b53cf23f99b663e1">Next</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a5e87a35f16de644593c353159ede11d1">RIL_TEXTLINE</a>);</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;    }</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;  }</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;  <a class="code" href="a00500.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a>(<span class="keyword">false</span>);  <span class="comment">// shouldn&#39;t happen.</span></div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;}</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;</div><div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="a02453.html#ad3fc35a630d943424dbca9cf217a8980">  496</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="a02453.html#ad3fc35a630d943424dbca9cf217a8980">ResultIterator::IsAtBeginningOf</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7">PageIteratorLevel</a> level)<span class="keyword"> const </span>{</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a997c382ddd2cf2f539532a1d91780963">block</a>() == NULL) <span class="keywordflow">return</span> <span class="keyword">false</span>;  <span class="comment">// Already at the end!</span></div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>() == NULL) <span class="keywordflow">return</span> <span class="keyword">true</span>;  <span class="comment">// In an image block.</span></div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;  <span class="keywordflow">if</span> (level == <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7adbd62c7f34a9ebdd6e3b813a34cd812d">RIL_SYMBOL</a>) <span class="keywordflow">return</span> <span class="keyword">true</span>;  <span class="comment">// Always at beginning of a symbol.</span></div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;  <span class="keywordtype">bool</span> at_word_start = IsAtFirstSymbolOfWord();</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;  <span class="keywordflow">if</span> (level == <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>) <span class="keywordflow">return</span> at_word_start;</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;  <a class="code" href="a02453.html">ResultIterator</a> line_start(*<span class="keyword">this</span>);</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;  <span class="comment">// move to the first word in the line...</span></div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;  line_start.MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;  <span class="keywordtype">bool</span> at_textline_start = at_word_start &amp;&amp; *line_start.<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a> == *<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>;</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;  <span class="keywordflow">if</span> (level == <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a5e87a35f16de644593c353159ede11d1">RIL_TEXTLINE</a>) <span class="keywordflow">return</span> at_textline_start;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;  <span class="comment">// now we move to the left-most word...</span></div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;  line_start.<a class="code" href="a02385.html#a2df743d478df34f1a239cf9675f82be0">RestartRow</a>();</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;  <span class="keywordtype">bool</span> at_block_start = at_textline_start &amp;&amp;</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;      line_start.<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a997c382ddd2cf2f539532a1d91780963">block</a>() != line_start.<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a872e8f5ce0da4f99413d9d55c8214748">prev_block</a>();</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;  <span class="keywordflow">if</span> (level == <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a2dcea8d4208c16055353029d26f9bf49">RIL_BLOCK</a>) <span class="keywordflow">return</span> at_block_start;</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;  <span class="keywordtype">bool</span> at_para_start = at_block_start ||</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;      (at_textline_start &amp;&amp;</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;       line_start.<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a2038f4bd5c4c0eac4dba7f1d6bcdb5bf">row</a>()-&gt;<a class="code" href="a02641.html#ad3a856f3e9217c47b8f2f54cd3908721">row</a>-&gt;<a class="code" href="a02629.html#aa5fa3212ac4b34b56f51691c04f1f10c">para</a>() !=</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;           line_start.<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a32f7ecd54106290053205cc118395d8d">prev_row</a>()-&gt;<a class="code" href="a02641.html#ad3a856f3e9217c47b8f2f54cd3908721">row</a>-&gt;<a class="code" href="a02629.html#aa5fa3212ac4b34b56f51691c04f1f10c">para</a>());</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;  <span class="keywordflow">if</span> (level == <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a3e63980691bf64801c704f59bd795bd9">RIL_PARA</a>) <span class="keywordflow">return</span> at_para_start;</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;  <a class="code" href="a00500.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a>(<span class="keyword">false</span>);  <span class="comment">// shouldn&#39;t happen.</span></div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;}</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno"><a class="line" href="a02453.html#abda8fe6cd60a9667f0c06c6fd8ff1946">  532</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="a02453.html#abda8fe6cd60a9667f0c06c6fd8ff1946">ResultIterator::IsAtFinalElement</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7">PageIteratorLevel</a> level,</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;                                      <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7">PageIteratorLevel</a> element)<span class="keyword"> const </span>{</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a7e7e1e6e23032c1fb6c10f8025c4fcf0">Empty</a>(element)) <span class="keywordflow">return</span> <span class="keyword">true</span>;  <span class="comment">// Already at the end!</span></div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;  <span class="comment">// The result is true if we step forward by element and find we are</span></div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;  <span class="comment">// at the the end of the page or at beginning of *all* levels in:</span></div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;  <span class="comment">// [level, element).</span></div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;  <span class="comment">// When there is more than one level difference between element and level,</span></div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;  <span class="comment">// we could for instance move forward one symbol and still be at the first</span></div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;  <span class="comment">// word on a line, so we also have to be at the first symbol in a word.</span></div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;  <a class="code" href="a02453.html">ResultIterator</a> next(*<span class="keyword">this</span>);</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;  next.<a class="code" href="a02453.html#abd8987e2387f1945b53cf23f99b663e1">Next</a>(element);</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;  <span class="keywordflow">if</span> (next.<a class="code" href="a02385.html#a7e7e1e6e23032c1fb6c10f8025c4fcf0">Empty</a>(element)) <span class="keywordflow">return</span> <span class="keyword">true</span>;  <span class="comment">// Reached the end of the page.</span></div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;  <span class="keywordflow">while</span> (element &gt; level) {</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    element = <span class="keyword">static_cast&lt;</span><a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7">PageIteratorLevel</a><span class="keyword">&gt;</span>(element - 1);</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    <span class="keywordflow">if</span> (!next.<a class="code" href="a02453.html#ad3fc35a630d943424dbca9cf217a8980">IsAtBeginningOf</a>(element))</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;  }</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;}</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;</div><div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="a02453.html#a22f65a94be27435440673d7c750808fb">  556</a></span>&#160;<span class="keywordtype">char</span>* <a class="code" href="a02453.html#a22f65a94be27435440673d7c750808fb">ResultIterator::GetUTF8Text</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7">PageIteratorLevel</a> level)<span class="keyword"> const </span>{</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>() == NULL) <span class="keywordflow">return</span> NULL;  <span class="comment">// Already at the end!</span></div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;  <a class="code" href="a02929.html">STRING</a> text;</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;  <span class="keywordflow">switch</span> (level) {</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a2dcea8d4208c16055353029d26f9bf49">RIL_BLOCK</a>:</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;      {</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;        <a class="code" href="a02453.html">ResultIterator</a> pp(*<span class="keyword">this</span>);</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;        <span class="keywordflow">do</span> {</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;          pp.AppendUTF8ParagraphText(&amp;text);</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;        } <span class="keywordflow">while</span> (pp.<a class="code" href="a02453.html#abd8987e2387f1945b53cf23f99b663e1">Next</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a3e63980691bf64801c704f59bd795bd9">RIL_PARA</a>) &amp;&amp; pp.<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a997c382ddd2cf2f539532a1d91780963">block</a>() == <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a997c382ddd2cf2f539532a1d91780963">block</a>());</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;      }</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;      <span class="keywordflow">break</span>;</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a3e63980691bf64801c704f59bd795bd9">RIL_PARA</a>:</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;      AppendUTF8ParagraphText(&amp;text);</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;      <span class="keywordflow">break</span>;</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a5e87a35f16de644593c353159ede11d1">RIL_TEXTLINE</a>:</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;      {</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;        <a class="code" href="a02453.html">ResultIterator</a> it(*<span class="keyword">this</span>);</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;        it.MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;        it.IterateAndAppendUTF8TextlineText(&amp;text);</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;      }</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;      <span class="keywordflow">break</span>;</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>:</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;      AppendUTF8WordText(&amp;text);</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;      <span class="keywordflow">break</span>;</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;    <span class="keywordflow">case</span> <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7adbd62c7f34a9ebdd6e3b813a34cd812d">RIL_SYMBOL</a>:</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;      {</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;        <span class="keywordtype">bool</span> reading_direction_is_ltr =</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;          current_paragraph_is_ltr_ ^ in_minor_direction_;</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;        <span class="keywordflow">if</span> (at_beginning_of_minor_run_) {</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;          text += reading_direction_is_ltr ? <a class="code" href="a01738.html#aa393f17e77d059739f005ada9a805c69">kLRM</a> : <a class="code" href="a01738.html#a8aa0e462f167f686ef463b5a5b266f04">kRLM</a>;</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;        }</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;        text = <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-&gt;<a class="code" href="a02645.html#a83fc7f16d20497893287ee8877840010">BestUTF8</a>(<a class="code" href="a02385.html#a98d81a4da55f06637a0db60ac33cc814">blob_index_</a>, !reading_direction_is_ltr);</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;        <span class="keywordflow">if</span> (IsAtFinalSymbolOfWord()) AppendSuffixMarks(&amp;text);</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;      }</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;      <span class="keywordflow">break</span>;</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;  }</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;  <span class="keywordtype">int</span> length = text.<a class="code" href="a02929.html#a596dad5fcf7b2415719cf78e5d5ed8fa">length</a>() + 1;</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;  <span class="keywordtype">char</span>* result = <span class="keyword">new</span> <span class="keywordtype">char</span>[length];</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;  strncpy(result, text.<a class="code" href="a02929.html#abf0a7b3c6ae39a46e5441f28f61de5de">string</a>(), length);</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;}</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;<span class="keywordtype">void</span> ResultIterator::AppendUTF8WordText(<a class="code" href="a02929.html">STRING</a> *text)<span class="keyword"> const </span>{</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;  <a class="code" href="a00500.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a>(<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-&gt;<a class="code" href="a02645.html#a3d42ac7ec121263e757c9b7160dfd50d">best_choice</a> != NULL);</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;  <span class="keywordtype">bool</span> reading_direction_is_ltr =</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;      current_paragraph_is_ltr_ ^ in_minor_direction_;</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;  <span class="keywordflow">if</span> (at_beginning_of_minor_run_) {</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;    *text += reading_direction_is_ltr ? <a class="code" href="a01738.html#aa393f17e77d059739f005ada9a805c69">kLRM</a> : <a class="code" href="a01738.html#a8aa0e462f167f686ef463b5a5b266f04">kRLM</a>;</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;  }</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;  <a class="code" href="a02297.html">GenericVector&lt;int&gt;</a> blob_order;</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;  CalculateBlobOrder(&amp;blob_order);</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; blob_order.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>(); i++) {</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    *text += <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-&gt;<a class="code" href="a02645.html#a83fc7f16d20497893287ee8877840010">BestUTF8</a>(blob_order[i], !reading_direction_is_ltr);</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;  }</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;  AppendSuffixMarks(text);</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;}</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;<span class="keywordtype">void</span> ResultIterator::IterateAndAppendUTF8TextlineText(<a class="code" href="a02929.html">STRING</a> *text) {</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a7e7e1e6e23032c1fb6c10f8025c4fcf0">Empty</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>)) {</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;    <a class="code" href="a02453.html#abd8987e2387f1945b53cf23f99b663e1">Next</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>);</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;    <span class="keywordflow">return</span>;</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;  }</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;  <span class="keywordflow">if</span> (BidiDebug(1)) {</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;    <a class="code" href="a02449.html">GenericVectorEqEq&lt;int&gt;</a> textline_order;</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;    <a class="code" href="a02297.html">GenericVector&lt;StrongScriptDirection&gt;</a> dirs;</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;    <a class="code" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">CalculateTextlineOrder</a>(current_paragraph_is_ltr_,</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;                           *<span class="keyword">this</span>, &amp;dirs, &amp;textline_order);</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Strong Script dirs     [%p/P=%s]: &quot;</span>, <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a2038f4bd5c4c0eac4dba7f1d6bcdb5bf">row</a>(),</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;            current_paragraph_is_ltr_ ? <span class="stringliteral">&quot;ltr&quot;</span> : <span class="stringliteral">&quot;rtl&quot;</span>);</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    PrintScriptDirs(dirs);</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;    <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Logical textline order [%p/P=%s]: &quot;</span>, <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a2038f4bd5c4c0eac4dba7f1d6bcdb5bf">row</a>(),</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;            current_paragraph_is_ltr_ ? <span class="stringliteral">&quot;ltr&quot;</span> : <span class="stringliteral">&quot;rtl&quot;</span>);</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; textline_order.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>(); i++) {</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;      <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;%d &quot;</span>, textline_order[i]);</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    }</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;  }</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;  <span class="keywordtype">int</span> words_appended = 0;</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;  <span class="keywordflow">do</span> {</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;    <span class="keywordtype">int</span> numSpaces = preserve_interword_spaces_ ? <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-&gt;<a class="code" href="a02645.html#afc15fa7c1b5ad55d6772dea0d6865df1">word</a>-&gt;<a class="code" href="a02741.html#ab2979974cf23f5c66f4e77cc51f2e189">space</a>()</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;                                               : (words_appended &gt; 0);</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; numSpaces; ++i) {</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;      *text += <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    }</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;    AppendUTF8WordText(text);</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    words_appended++;</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;  } <span class="keywordflow">while</span> (<a class="code" href="a02453.html#abd8987e2387f1945b53cf23f99b663e1">Next</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>) &amp;&amp; !<a class="code" href="a02453.html#ad3fc35a630d943424dbca9cf217a8980">IsAtBeginningOf</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a5e87a35f16de644593c353159ede11d1">RIL_TEXTLINE</a>));</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;  <span class="keywordflow">if</span> (BidiDebug(1)) {</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;%d words printed\n&quot;</span>, words_appended);</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;  }</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;  *text += <a class="code" href="a02357.html#ae1b5b360d5bf55c0cd0eb336de37ea8b">line_separator_</a>;</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;  <span class="comment">// If we just finished a paragraph, add an extra newline.</span></div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-&gt;<a class="code" href="a02649.html#a997c382ddd2cf2f539532a1d91780963">block</a>() == NULL || <a class="code" href="a02453.html#ad3fc35a630d943424dbca9cf217a8980">IsAtBeginningOf</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a3e63980691bf64801c704f59bd795bd9">RIL_PARA</a>))</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;    *text += <a class="code" href="a02357.html#a1c6e431ccea8aaad26d9e8d6b9ca2f60">paragraph_separator_</a>;</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;}</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;<span class="keywordtype">void</span> ResultIterator::AppendUTF8ParagraphText(<a class="code" href="a02929.html">STRING</a> *text)<span class="keyword"> const </span>{</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;  <a class="code" href="a02453.html#aa0f6c0e15c83e9ed718d80d736865c3f">ResultIterator</a> it(*<span class="keyword">this</span>);</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;  it.RestartParagraph();</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;  it.MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;  <span class="keywordflow">if</span> (it.Empty(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>)) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;  <span class="keywordflow">do</span> {</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    it.IterateAndAppendUTF8TextlineText(text);</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;  } <span class="keywordflow">while</span> (it.it_-&gt;block() != NULL &amp;&amp; !it.IsAtBeginningOf(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a3e63980691bf64801c704f59bd795bd9">RIL_PARA</a>));</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;}</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;<span class="keywordtype">bool</span> ResultIterator::BidiDebug(<span class="keywordtype">int</span> min_level)<span class="keyword"> const </span>{</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;  <span class="keywordtype">int</span> debug_level = 1;</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;  IntParam *p = ParamUtils::FindParam&lt;IntParam&gt;(</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;      <span class="stringliteral">&quot;bidi_debug&quot;</span>, <a class="code" href="a00560.html#a71a3243019391d3a438fd279c07cef87">GlobalParams</a>()-&gt;<a class="code" href="a02885.html#a22c42b48d2c626d2f3f3b0abd21bc902">int_params</a>,</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;      <a class="code" href="a02385.html#acca34c1adcf494eca7dfefe74258f991">tesseract_</a>-&gt;<a class="code" href="a02769.html#ac993425386ae1f73762107299ee8a114">params</a>()-&gt;<a class="code" href="a02885.html#a22c42b48d2c626d2f3f3b0abd21bc902">int_params</a>);</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;  <span class="keywordflow">if</span> (p != NULL) debug_level = (<a class="code" href="a00524.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>)(*p);</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;  <span class="keywordflow">return</span> debug_level &gt;= min_level;</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;}</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;}  <span class="comment">// namespace tesseract.</span></div><div class="ttc" id="a02641_html_ad3a856f3e9217c47b8f2f54cd3908721"><div class="ttname"><a href="a02641.html#ad3a856f3e9217c47b8f2f54cd3908721">ROW_RES::row</a></div><div class="ttdeci">ROW * row</div><div class="ttdef"><b>Definition:</b> <a href="a00338_source.html#l00127">pageres.h:127</a></div></div>
<div class="ttc" id="a02385_html_a5cc369eb577150a3a677f9c342ce1240"><div class="ttname"><a href="a02385.html#a5cc369eb577150a3a677f9c342ce1240">tesseract::PageIterator::Begin</a></div><div class="ttdeci">virtual void Begin()</div><div class="ttdef"><b>Definition:</b> <a href="a00098_source.html#l00104">pageiterator.cpp:104</a></div></div>
<div class="ttc" id="a02453_html"><div class="ttname"><a href="a02453.html">tesseract::ResultIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="a00146_source.html#l00038">resultiterator.h:38</a></div></div>
<div class="ttc" id="a04041_html_a31e06ec0b942a9d392db21b49cf40078ac979da8ecbc0d158b8cb516db7e3824d"><div class="ttname"><a href="a04041.html#a31e06ec0b942a9d392db21b49cf40078ac979da8ecbc0d158b8cb516db7e3824d">UNICHARSET::U_RIGHT_TO_LEFT</a></div><div class="ttdef"><b>Definition:</b> <a href="a00626_source.html#l00152">unicharset.h:152</a></div></div>
<div class="ttc" id="a00593_html"><div class="ttname"><a href="a00593.html">strngs.h</a></div></div>
<div class="ttc" id="a02297_html"><div class="ttname"><a href="a02297.html">GenericVector&lt; int &gt;</a></div></div>
<div class="ttc" id="a02885_html_a6bb13133287d8d8d18c81bb974b1b54f"><div class="ttname"><a href="a02885.html#a6bb13133287d8d8d18c81bb974b1b54f">tesseract::ParamsVectors::bool_params</a></div><div class="ttdeci">GenericVector&lt; BoolParam * &gt; bool_params</div><div class="ttdef"><b>Definition:</b> <a href="a00563_source.html#l00045">params.h:45</a></div></div>
<div class="ttc" id="a00560_html_a71a3243019391d3a438fd279c07cef87"><div class="ttname"><a href="a00560.html#a71a3243019391d3a438fd279c07cef87">GlobalParams</a></div><div class="ttdeci">tesseract::ParamsVectors * GlobalParams()</div><div class="ttdef"><b>Definition:</b> <a href="a00560_source.html#l00033">params.cpp:33</a></div></div>
<div class="ttc" id="a02629_html_aa5fa3212ac4b34b56f51691c04f1f10c"><div class="ttname"><a href="a02629.html#aa5fa3212ac4b34b56f51691c04f1f10c">ROW::para</a></div><div class="ttdeci">PARA * para() const</div><div class="ttdef"><b>Definition:</b> <a href="a00326_source.html#l00115">ocrrow.h:115</a></div></div>
<div class="ttc" id="a02649_html_a6cdcdaa4b0b1250ab7e14760d4b5f113"><div class="ttname"><a href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">PAGE_RES_IT::word</a></div><div class="ttdeci">WERD_RES * word() const</div><div class="ttdef"><b>Definition:</b> <a href="a00338_source.html#l00736">pageres.h:736</a></div></div>
<div class="ttc" id="a02649_html_a872e8f5ce0da4f99413d9d55c8214748"><div class="ttname"><a href="a02649.html#a872e8f5ce0da4f99413d9d55c8214748">PAGE_RES_IT::prev_block</a></div><div class="ttdeci">BLOCK_RES * prev_block() const</div><div class="ttdef"><b>Definition:</b> <a href="a00338_source.html#l00733">pageres.h:733</a></div></div>
<div class="ttc" id="a01738_html_aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610"><div class="ttname"><a href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">tesseract::RIL_WORD</a></div><div class="ttdef"><b>Definition:</b> <a href="a00374_source.html#l00211">publictypes.h:211</a></div></div>
<div class="ttc" id="a02297_html_a9cdbff49b186574b83e43afba606fdd9"><div class="ttname"><a href="a02297.html#a9cdbff49b186574b83e43afba606fdd9">GenericVector::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdef"><b>Definition:</b> <a href="a00509_source.html#l00835">genericvector.h:835</a></div></div>
<div class="ttc" id="a02929_html_a596dad5fcf7b2415719cf78e5d5ed8fa"><div class="ttname"><a href="a02929.html#a596dad5fcf7b2415719cf78e5d5ed8fa">STRING::length</a></div><div class="ttdeci">inT32 length() const</div><div class="ttdef"><b>Definition:</b> <a href="a00590_source.html#l00196">strngs.cpp:196</a></div></div>
<div class="ttc" id="a02453_html_a961e7ee57edae85e855332a301cccacf"><div class="ttname"><a href="a02453.html#a961e7ee57edae85e855332a301cccacf">tesseract::ResultIterator::StartOfParagraph</a></div><div class="ttdeci">static ResultIterator * StartOfParagraph(const LTRResultIterator &amp;resit)</div><div class="ttdef"><b>Definition:</b> <a href="a00143_source.html#l00048">resultiterator.cpp:48</a></div></div>
<div class="ttc" id="a01738_html_a8aa0e462f167f686ef463b5a5b266f04"><div class="ttname"><a href="a01738.html#a8aa0e462f167f686ef463b5a5b266f04">tesseract::kRLM</a></div><div class="ttdeci">const char * kRLM</div><div class="ttdef"><b>Definition:</b> <a href="a00632_source.html#l00028">unicodes.cpp:28</a></div></div>
<div class="ttc" id="a02453_html_abd8987e2387f1945b53cf23f99b663e1"><div class="ttname"><a href="a02453.html#abd8987e2387f1945b53cf23f99b663e1">tesseract::ResultIterator::Next</a></div><div class="ttdeci">virtual bool Next(PageIteratorLevel level)</div><div class="ttdef"><b>Definition:</b> <a href="a00143_source.html#l00421">resultiterator.cpp:421</a></div></div>
<div class="ttc" id="a04041_html_a31e06ec0b942a9d392db21b49cf40078a5a183c9262a1161b5d34cf3d7c950cac"><div class="ttname"><a href="a04041.html#a31e06ec0b942a9d392db21b49cf40078a5a183c9262a1161b5d34cf3d7c950cac">UNICHARSET::U_OTHER_NEUTRAL</a></div><div class="ttdef"><b>Definition:</b> <a href="a00626_source.html#l00161">unicharset.h:161</a></div></div>
<div class="ttc" id="a02385_html_a63758afaebd4bf9f1718397eac57810e"><div class="ttname"><a href="a02385.html#a63758afaebd4bf9f1718397eac57810e">tesseract::PageIterator::IsWithinFirstTextlineOfParagraph</a></div><div class="ttdeci">bool IsWithinFirstTextlineOfParagraph() const</div><div class="ttdef"><b>Definition:</b> <a href="a00098_source.html#l00122">pageiterator.cpp:122</a></div></div>
<div class="ttc" id="a00635_html"><div class="ttname"><a href="a00635.html">unicodes.h</a></div></div>
<div class="ttc" id="a00614_html_abc3119a959ecd5cffc1d9b9d57479dbaa252615b6d7ebef9293183f6e94488cc1"><div class="ttname"><a href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa252615b6d7ebef9293183f6e94488cc1">DIR_MIX</a></div><div class="ttdef"><b>Definition:</b> <a href="a00614_source.html#l00044">unichar.h:44</a></div></div>
<div class="ttc" id="a00614_html_abc3119a959ecd5cffc1d9b9d57479dbaa5978cd698552a6106db1bf6528617317"><div class="ttname"><a href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa5978cd698552a6106db1bf6528617317">DIR_LEFT_TO_RIGHT</a></div><div class="ttdef"><b>Definition:</b> <a href="a00614_source.html#l00042">unichar.h:42</a></div></div>
<div class="ttc" id="a02453_html_a17891e56b5a812ee7728300dac362b40"><div class="ttname"><a href="a02453.html#a17891e56b5a812ee7728300dac362b40">tesseract::ResultIterator::ParagraphIsLtr</a></div><div class="ttdeci">bool ParagraphIsLtr() const</div><div class="ttdef"><b>Definition:</b> <a href="a00143_source.html#l00053">resultiterator.cpp:53</a></div></div>
<div class="ttc" id="a02645_html_a83fc7f16d20497893287ee8877840010"><div class="ttname"><a href="a02645.html#a83fc7f16d20497893287ee8877840010">WERD_RES::BestUTF8</a></div><div class="ttdeci">const char * BestUTF8(int blob_index, bool in_rtl_context) const</div><div class="ttdef"><b>Definition:</b> <a href="a00338_source.html#l00345">pageres.h:345</a></div></div>
<div class="ttc" id="a00614_html_abc3119a959ecd5cffc1d9b9d57479dba"><div class="ttname"><a href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dba">StrongScriptDirection</a></div><div class="ttdeci">StrongScriptDirection</div><div class="ttdef"><b>Definition:</b> <a href="a00614_source.html#l00040">unichar.h:40</a></div></div>
<div class="ttc" id="a02385_html_a5bcc04bef9fefefc856440bcfe15d9ab"><div class="ttname"><a href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">tesseract::PageIterator::word_length_</a></div><div class="ttdeci">int word_length_</div><div class="ttdef"><b>Definition:</b> <a href="a00101_source.html#l00341">pageiterator.h:341</a></div></div>
<div class="ttc" id="a02649_html_a2038f4bd5c4c0eac4dba7f1d6bcdb5bf"><div class="ttname"><a href="a02649.html#a2038f4bd5c4c0eac4dba7f1d6bcdb5bf">PAGE_RES_IT::row</a></div><div class="ttdeci">ROW_RES * row() const</div><div class="ttdef"><b>Definition:</b> <a href="a00338_source.html#l00739">pageres.h:739</a></div></div>
<div class="ttc" id="a02901_html"><div class="ttname"><a href="a02901.html">tesseract::BoolParam</a></div><div class="ttdef"><b>Definition:</b> <a href="a00563_source.html#l00167">params.h:167</a></div></div>
<div class="ttc" id="a02453_html_a22f65a94be27435440673d7c750808fb"><div class="ttname"><a href="a02453.html#a22f65a94be27435440673d7c750808fb">tesseract::ResultIterator::GetUTF8Text</a></div><div class="ttdeci">virtual char * GetUTF8Text(PageIteratorLevel level) const</div><div class="ttdef"><b>Definition:</b> <a href="a00143_source.html#l00556">resultiterator.cpp:556</a></div></div>
<div class="ttc" id="a02357_html_a51a228fb5f12fca58db098ae9d9c9d5d"><div class="ttname"><a href="a02357.html#a51a228fb5f12fca58db098ae9d9c9d5d">tesseract::LTRResultIterator::LTRResultIterator</a></div><div class="ttdeci">LTRResultIterator(PAGE_RES *page_res, Tesseract *tesseract, int scale, int scaled_yres, int rect_left, int rect_top, int rect_width, int rect_height)</div><div class="ttdef"><b>Definition:</b> <a href="a00077_source.html#l00030">ltrresultiterator.cpp:30</a></div></div>
<div class="ttc" id="a02297_html_a6dee574daf4a3d4f0fc7048964f8f252"><div class="ttname"><a href="a02297.html#a6dee574daf4a3d4f0fc7048964f8f252">GenericVector::get_index</a></div><div class="ttdeci">int get_index(T object) const</div><div class="ttdef"><b>Definition:</b> <a href="a00509_source.html#l00749">genericvector.h:749</a></div></div>
<div class="ttc" id="a02297_html_a48b82547ebbaa5fedecfdebe7e2f155a"><div class="ttname"><a href="a02297.html#a48b82547ebbaa5fedecfdebe7e2f155a">GenericVector::back</a></div><div class="ttdeci">T &amp; back() const</div><div class="ttdef"><b>Definition:</b> <a href="a00509_source.html#l00697">genericvector.h:697</a></div></div>
<div class="ttc" id="a02385_html_a9075e98e75619ca5e1270a0a6eb2c352"><div class="ttname"><a href="a02385.html#a9075e98e75619ca5e1270a0a6eb2c352">tesseract::PageIterator::BeginWord</a></div><div class="ttdeci">TESS_LOCAL void BeginWord(int offset)</div><div class="ttdef"><b>Definition:</b> <a href="a00098_source.html#l00576">pageiterator.cpp:576</a></div></div>
<div class="ttc" id="a02645_html_a3d42ac7ec121263e757c9b7160dfd50d"><div class="ttname"><a href="a02645.html#a3d42ac7ec121263e757c9b7160dfd50d">WERD_RES::best_choice</a></div><div class="ttdeci">WERD_CHOICE * best_choice</div><div class="ttdef"><b>Definition:</b> <a href="a00338_source.html#l00219">pageres.h:219</a></div></div>
<div class="ttc" id="a02645_html_a7dda06bb4d68d571d0df20e81475fa15"><div class="ttname"><a href="a02645.html#a7dda06bb4d68d571d0df20e81475fa15">WERD_RES::UnicharsInReadingOrder</a></div><div class="ttdeci">bool UnicharsInReadingOrder() const</div><div class="ttdef"><b>Definition:</b> <a href="a00338_source.html#l00409">pageres.h:409</a></div></div>
<div class="ttc" id="a04041_html_a31e06ec0b942a9d392db21b49cf40078aea057cec3044e6ec313ffc0c0d85e0db"><div class="ttname"><a href="a04041.html#a31e06ec0b942a9d392db21b49cf40078aea057cec3044e6ec313ffc0c0d85e0db">UNICHARSET::U_LEFT_TO_RIGHT</a></div><div class="ttdef"><b>Definition:</b> <a href="a00626_source.html#l00151">unicharset.h:151</a></div></div>
<div class="ttc" id="a04041_html_a31e06ec0b942a9d392db21b49cf40078aaf5dc95f557dbfbbf3a517e8b93d9a01"><div class="ttname"><a href="a04041.html#a31e06ec0b942a9d392db21b49cf40078aaf5dc95f557dbfbbf3a517e8b93d9a01">UNICHARSET::U_EUROPEAN_NUMBER</a></div><div class="ttdef"><b>Definition:</b> <a href="a00626_source.html#l00153">unicharset.h:153</a></div></div>
<div class="ttc" id="a02297_html_a0dc89fe2a365b04a61017f9d78c1a303"><div class="ttname"><a href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">GenericVector::push_back</a></div><div class="ttdeci">int push_back(T object)</div><div class="ttdef"><b>Definition:</b> <a href="a00509_source.html#l00766">genericvector.h:766</a></div></div>
<div class="ttc" id="a04041_html_a31e06ec0b942a9d392db21b49cf40078a5f07604e909b46b5dc1920be0bbc7a88"><div class="ttname"><a href="a04041.html#a31e06ec0b942a9d392db21b49cf40078a5f07604e909b46b5dc1920be0bbc7a88">UNICHARSET::U_EUROPEAN_NUMBER_TERMINATOR</a></div><div class="ttdef"><b>Definition:</b> <a href="a00626_source.html#l00155">unicharset.h:155</a></div></div>
<div class="ttc" id="a00614_html_abc3119a959ecd5cffc1d9b9d57479dbaaacc5ec7fd402a8806e78fba831045aae"><div class="ttname"><a href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaaacc5ec7fd402a8806e78fba831045aae">DIR_NEUTRAL</a></div><div class="ttdef"><b>Definition:</b> <a href="a00614_source.html#l00041">unichar.h:41</a></div></div>
<div class="ttc" id="a02385_html_acca34c1adcf494eca7dfefe74258f991"><div class="ttname"><a href="a02385.html#acca34c1adcf494eca7dfefe74258f991">tesseract::PageIterator::tesseract_</a></div><div class="ttdeci">Tesseract * tesseract_</div><div class="ttdef"><b>Definition:</b> <a href="a00101_source.html#l00329">pageiterator.h:329</a></div></div>
<div class="ttc" id="a00338_html"><div class="ttname"><a href="a00338.html">pageres.h</a></div></div>
<div class="ttc" id="a02885_html_a22c42b48d2c626d2f3f3b0abd21bc902"><div class="ttname"><a href="a02885.html#a22c42b48d2c626d2f3f3b0abd21bc902">tesseract::ParamsVectors::int_params</a></div><div class="ttdeci">GenericVector&lt; IntParam * &gt; int_params</div><div class="ttdef"><b>Definition:</b> <a href="a00563_source.html#l00044">params.h:44</a></div></div>
<div class="ttc" id="a00614_html_abc3119a959ecd5cffc1d9b9d57479dbaa3c6da23f98ab8ac48598c21583d9297e"><div class="ttname"><a href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa3c6da23f98ab8ac48598c21583d9297e">DIR_RIGHT_TO_LEFT</a></div><div class="ttdef"><b>Definition:</b> <a href="a00614_source.html#l00043">unichar.h:43</a></div></div>
<div class="ttc" id="a01738_html_aa26c22b65cc9765a0e747120f4287fd7a5e87a35f16de644593c353159ede11d1"><div class="ttname"><a href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a5e87a35f16de644593c353159ede11d1">tesseract::RIL_TEXTLINE</a></div><div class="ttdef"><b>Definition:</b> <a href="a00374_source.html#l00210">publictypes.h:210</a></div></div>
<div class="ttc" id="a00626_html"><div class="ttname"><a href="a00626.html">unicharset.h</a></div></div>
<div class="ttc" id="a02929_html_abf0a7b3c6ae39a46e5441f28f61de5de"><div class="ttname"><a href="a02929.html#abf0a7b3c6ae39a46e5441f28f61de5de">STRING::string</a></div><div class="ttdeci">const char * string() const</div><div class="ttdef"><b>Definition:</b> <a href="a00590_source.html#l00201">strngs.cpp:201</a></div></div>
<div class="ttc" id="a02357_html_a1c6e431ccea8aaad26d9e8d6b9ca2f60"><div class="ttname"><a href="a02357.html#a1c6e431ccea8aaad26d9e8d6b9ca2f60">tesseract::LTRResultIterator::paragraph_separator_</a></div><div class="ttdeci">const char * paragraph_separator_</div><div class="ttdef"><b>Definition:</b> <a href="a00080_source.html#l00181">ltrresultiterator.h:181</a></div></div>
<div class="ttc" id="a02741_html_ab2979974cf23f5c66f4e77cc51f2e189"><div class="ttname"><a href="a02741.html#ab2979974cf23f5c66f4e77cc51f2e189">WERD::space</a></div><div class="ttdeci">uinT8 space()</div><div class="ttdef"><b>Definition:</b> <a href="a00443_source.html#l00104">werd.h:104</a></div></div>
<div class="ttc" id="a01738_html_aa26c22b65cc9765a0e747120f4287fd7a2dcea8d4208c16055353029d26f9bf49"><div class="ttname"><a href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a2dcea8d4208c16055353029d26f9bf49">tesseract::RIL_BLOCK</a></div><div class="ttdef"><b>Definition:</b> <a href="a00374_source.html#l00208">publictypes.h:208</a></div></div>
<div class="ttc" id="a00146_html"><div class="ttname"><a href="a00146.html">resultiterator.h</a></div></div>
<div class="ttc" id="a02453_html_abda8fe6cd60a9667f0c06c6fd8ff1946"><div class="ttname"><a href="a02453.html#abda8fe6cd60a9667f0c06c6fd8ff1946">tesseract::ResultIterator::IsAtFinalElement</a></div><div class="ttdeci">virtual bool IsAtFinalElement(PageIteratorLevel level, PageIteratorLevel element) const</div><div class="ttdef"><b>Definition:</b> <a href="a00143_source.html#l00532">resultiterator.cpp:532</a></div></div>
<div class="ttc" id="a01738_html"><div class="ttname"><a href="a01738.html">tesseract</a></div><div class="ttdef"><b>Definition:</b> <a href="a00005_source.html#l00081">baseapi.cpp:81</a></div></div>
<div class="ttc" id="a02385_html_a7e7e1e6e23032c1fb6c10f8025c4fcf0"><div class="ttname"><a href="a02385.html#a7e7e1e6e23032c1fb6c10f8025c4fcf0">tesseract::PageIterator::Empty</a></div><div class="ttdeci">bool Empty(PageIteratorLevel level) const</div><div class="ttdef"><b>Definition:</b> <a href="a00098_source.html#l00348">pageiterator.cpp:348</a></div></div>
<div class="ttc" id="a02385_html_a415ea7c61e24868bc67e676184be0bb9"><div class="ttname"><a href="a02385.html#a415ea7c61e24868bc67e676184be0bb9">tesseract::PageIterator::Next</a></div><div class="ttdeci">virtual bool Next(PageIteratorLevel level)</div><div class="ttdef"><b>Definition:</b> <a href="a00098_source.html#l00146">pageiterator.cpp:146</a></div></div>
<div class="ttc" id="a02357_html_ae1b5b360d5bf55c0cd0eb336de37ea8b"><div class="ttname"><a href="a02357.html#ae1b5b360d5bf55c0cd0eb336de37ea8b">tesseract::LTRResultIterator::line_separator_</a></div><div class="ttdeci">const char * line_separator_</div><div class="ttdef"><b>Definition:</b> <a href="a00080_source.html#l00180">ltrresultiterator.h:180</a></div></div>
<div class="ttc" id="a02297_html_a980882b5ebc3e72fdedbdbe345196f21"><div class="ttname"><a href="a02297.html#a980882b5ebc3e72fdedbdbe345196f21">GenericVector::truncate</a></div><div class="ttdeci">void truncate(int size)</div><div class="ttdef"><b>Definition:</b> <a href="a00509_source.html#l00130">genericvector.h:130</a></div></div>
<div class="ttc" id="a02453_html_a15e95d21ce320a7c282c5a8d61fe73ee"><div class="ttname"><a href="a02453.html#a15e95d21ce320a7c282c5a8d61fe73ee">tesseract::ResultIterator::kMinorRunEnd</a></div><div class="ttdeci">static const int kMinorRunEnd</div><div class="ttdef"><b>Definition:</b> <a href="a00146_source.html#l00129">resultiterator.h:129</a></div></div>
<div class="ttc" id="a02385_html_a2df743d478df34f1a239cf9675f82be0"><div class="ttname"><a href="a02385.html#a2df743d478df34f1a239cf9675f82be0">tesseract::PageIterator::RestartRow</a></div><div class="ttdeci">virtual void RestartRow()</div><div class="ttdef"><b>Definition:</b> <a href="a00098_source.html#l00128">pageiterator.cpp:128</a></div></div>
<div class="ttc" id="a02453_html_ad3fc35a630d943424dbca9cf217a8980"><div class="ttname"><a href="a02453.html#ad3fc35a630d943424dbca9cf217a8980">tesseract::ResultIterator::IsAtBeginningOf</a></div><div class="ttdeci">virtual bool IsAtBeginningOf(PageIteratorLevel level) const</div><div class="ttdef"><b>Definition:</b> <a href="a00143_source.html#l00496">resultiterator.cpp:496</a></div></div>
<div class="ttc" id="a02453_html_a1c97324553ea1b897dfb5404e0f9e315"><div class="ttname"><a href="a02453.html#a1c97324553ea1b897dfb5404e0f9e315">tesseract::ResultIterator::kMinorRunStart</a></div><div class="ttdeci">static const int kMinorRunStart</div><div class="ttdef"><b>Definition:</b> <a href="a00146_source.html#l00128">resultiterator.h:128</a></div></div>
<div class="ttc" id="a02649_html_a32f7ecd54106290053205cc118395d8d"><div class="ttname"><a href="a02649.html#a32f7ecd54106290053205cc118395d8d">PAGE_RES_IT::prev_row</a></div><div class="ttdeci">ROW_RES * prev_row() const</div><div class="ttdef"><b>Definition:</b> <a href="a00338_source.html#l00730">pageres.h:730</a></div></div>
<div class="ttc" id="a02649_html_a997c382ddd2cf2f539532a1d91780963"><div class="ttname"><a href="a02649.html#a997c382ddd2cf2f539532a1d91780963">PAGE_RES_IT::block</a></div><div class="ttdeci">BLOCK_RES * block() const</div><div class="ttdef"><b>Definition:</b> <a href="a00338_source.html#l00742">pageres.h:742</a></div></div>
<div class="ttc" id="a00524_html_aba1f582fd0168f3ff9225d8c90fa9eb8"><div class="ttname"><a href="a00524.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a></div><div class="ttdeci">int inT32</div><div class="ttdef"><b>Definition:</b> <a href="a00524_source.html#l00035">host.h:35</a></div></div>
<div class="ttc" id="a02453_html_a36e6fd5587628440bb19b84648645676"><div class="ttname"><a href="a02453.html#a36e6fd5587628440bb19b84648645676">tesseract::ResultIterator::Begin</a></div><div class="ttdeci">virtual void Begin()</div><div class="ttdef"><b>Definition:</b> <a href="a00143_source.html#l00413">resultiterator.cpp:413</a></div></div>
<div class="ttc" id="a02769_html_ac993425386ae1f73762107299ee8a114"><div class="ttname"><a href="a02769.html#ac993425386ae1f73762107299ee8a114">tesseract::CCUtil::params</a></div><div class="ttdeci">ParamsVectors * params()</div><div class="ttdef"><b>Definition:</b> <a href="a00473_source.html#l00063">ccutil.h:63</a></div></div>
<div class="ttc" id="a04041_html_a31e06ec0b942a9d392db21b49cf40078a65341629a233d9f3003c110dff857f4b"><div class="ttname"><a href="a04041.html#a31e06ec0b942a9d392db21b49cf40078a65341629a233d9f3003c110dff857f4b">UNICHARSET::U_EUROPEAN_NUMBER_SEPARATOR</a></div><div class="ttdef"><b>Definition:</b> <a href="a00626_source.html#l00154">unicharset.h:154</a></div></div>
<div class="ttc" id="a00608_html_a02aa7cca2c3857c14716e8cca96ace6c"><div class="ttname"><a href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a></div><div class="ttdeci">#define tprintf(...)</div><div class="ttdef"><b>Definition:</b> <a href="a00608_source.html#l00031">tprintf.h:31</a></div></div>
<div class="ttc" id="a02929_html"><div class="ttname"><a href="a02929.html">STRING</a></div><div class="ttdef"><b>Definition:</b> <a href="a00593_source.html#l00044">strngs.h:44</a></div></div>
<div class="ttc" id="a02297_html_a20cfad5c58c50cb85a9529d8ddbd96af"><div class="ttname"><a href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">GenericVector::size</a></div><div class="ttdeci">int size() const</div><div class="ttdef"><b>Definition:</b> <a href="a00509_source.html#l00072">genericvector.h:72</a></div></div>
<div class="ttc" id="a01738_html_aa26c22b65cc9765a0e747120f4287fd7a3e63980691bf64801c704f59bd795bd9"><div class="ttname"><a href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7a3e63980691bf64801c704f59bd795bd9">tesseract::RIL_PARA</a></div><div class="ttdef"><b>Definition:</b> <a href="a00374_source.html#l00209">publictypes.h:209</a></div></div>
<div class="ttc" id="a01738_html_aa26c22b65cc9765a0e747120f4287fd7"><div class="ttname"><a href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7">tesseract::PageIteratorLevel</a></div><div class="ttdeci">PageIteratorLevel</div><div class="ttdef"><b>Definition:</b> <a href="a00374_source.html#l00207">publictypes.h:207</a></div></div>
<div class="ttc" id="a02449_html"><div class="ttname"><a href="a02449.html">GenericVectorEqEq&lt; int &gt;</a></div></div>
<div class="ttc" id="a02385_html_a42df7b8e352be1e5a140787109419f93"><div class="ttname"><a href="a02385.html#a42df7b8e352be1e5a140787109419f93">tesseract::PageIterator::it_</a></div><div class="ttdeci">PAGE_RES_IT * it_</div><div class="ttdef"><b>Definition:</b> <a href="a00101_source.html#l00334">pageiterator.h:334</a></div></div>
<div class="ttc" id="a01738_html_aa26c22b65cc9765a0e747120f4287fd7adbd62c7f34a9ebdd6e3b813a34cd812d"><div class="ttname"><a href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7adbd62c7f34a9ebdd6e3b813a34cd812d">tesseract::RIL_SYMBOL</a></div><div class="ttdef"><b>Definition:</b> <a href="a00374_source.html#l00212">publictypes.h:212</a></div></div>
<div class="ttc" id="a02453_html_ad23440ad1059127afadd17c18fbf93ad"><div class="ttname"><a href="a02453.html#ad23440ad1059127afadd17c18fbf93ad">tesseract::ResultIterator::kComplexWord</a></div><div class="ttdeci">static const int kComplexWord</div><div class="ttdef"><b>Definition:</b> <a href="a00146_source.html#l00130">resultiterator.h:130</a></div></div>
<div class="ttc" id="a01738_html_aa393f17e77d059739f005ada9a805c69"><div class="ttname"><a href="a01738.html#aa393f17e77d059739f005ada9a805c69">tesseract::kLRM</a></div><div class="ttdeci">const char * kLRM</div><div class="ttdef"><b>Definition:</b> <a href="a00632_source.html#l00027">unicodes.cpp:27</a></div></div>
<div class="ttc" id="a02645_html_afc15fa7c1b5ad55d6772dea0d6865df1"><div class="ttname"><a href="a02645.html#afc15fa7c1b5ad55d6772dea0d6865df1">WERD_RES::word</a></div><div class="ttdeci">WERD * word</div><div class="ttdef"><b>Definition:</b> <a href="a00338_source.html#l00175">pageres.h:175</a></div></div>
<div class="ttc" id="a02645_html_a2a95941e1613fcfaee0c5c157dd654f9"><div class="ttname"><a href="a02645.html#a2a95941e1613fcfaee0c5c157dd654f9">WERD_RES::SymbolDirection</a></div><div class="ttdeci">UNICHARSET::Direction SymbolDirection(int blob_index) const</div><div class="ttdef"><b>Definition:</b> <a href="a00338_source.html#l00367">pageres.h:367</a></div></div>
<div class="ttc" id="a02357_html"><div class="ttname"><a href="a02357.html">tesseract::LTRResultIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="a00080_source.html#l00046">ltrresultiterator.h:46</a></div></div>
<div class="ttc" id="a02453_html_aa0f6c0e15c83e9ed718d80d736865c3f"><div class="ttname"><a href="a02453.html#aa0f6c0e15c83e9ed718d80d736865c3f">tesseract::ResultIterator::ResultIterator</a></div><div class="ttdeci">TESS_LOCAL ResultIterator(const LTRResultIterator &amp;resit)</div><div class="ttdef"><b>Definition:</b> <a href="a00143_source.html#l00033">resultiterator.cpp:33</a></div></div>
<div class="ttc" id="a04041_html_a31e06ec0b942a9d392db21b49cf40078a409ccbace5eab0702c2f3c6eb948742b"><div class="ttname"><a href="a04041.html#a31e06ec0b942a9d392db21b49cf40078a409ccbace5eab0702c2f3c6eb948742b">UNICHARSET::U_COMMON_NUMBER_SEPARATOR</a></div><div class="ttdef"><b>Definition:</b> <a href="a00626_source.html#l00157">unicharset.h:157</a></div></div>
<div class="ttc" id="a02385_html_a98d81a4da55f06637a0db60ac33cc814"><div class="ttname"><a href="a02385.html#a98d81a4da55f06637a0db60ac33cc814">tesseract::PageIterator::blob_index_</a></div><div class="ttdeci">int blob_index_</div><div class="ttdef"><b>Definition:</b> <a href="a00101_source.html#l00343">pageiterator.h:343</a></div></div>
<div class="ttc" id="a00500_html_a93a603f4063a6b9403d81caa245a583b"><div class="ttname"><a href="a00500.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a></div><div class="ttdeci">#define ASSERT_HOST(x)</div><div class="ttdef"><b>Definition:</b> <a href="a00500_source.html#l00084">errcode.h:84</a></div></div>
<div class="ttc" id="a00173_html"><div class="ttname"><a href="a00173.html">tesseractclass.h</a></div></div>
<div class="ttc" id="a02453_html_a10ba7f1e30387d13b518fc1ccdcbfe06"><div class="ttname"><a href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">tesseract::ResultIterator::CalculateTextlineOrder</a></div><div class="ttdeci">static void CalculateTextlineOrder(bool paragraph_is_ltr, const GenericVector&lt; StrongScriptDirection &gt; &amp;word_dirs, GenericVectorEqEq&lt; int &gt; *reading_order)</div><div class="ttdef"><b>Definition:</b> <a href="a00143_source.html#l00255">resultiterator.cpp:255</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_a1bed42364588c3c9f4f22437dc6089e.html">ccmain</a></li><li class="navelem"><a class="el" href="a00143.html">resultiterator.cpp</a></li>
    <li class="footer">Generated on Mon Oct 29 2018 11:27:45 for tesseract by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.14 </li>
  </ul>
</div>
</body>
</html>