<!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&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  <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&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&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&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> <span class="comment">// File: resultiterator.cpp</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <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> <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> <span class="comment">// (e.g. mixed Hebrew and English) text.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">// Author: David Eger</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <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> <span class="comment">//</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// (C) Copyright 2011, Google Inc.</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <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> <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> <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> <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> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <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> <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> <span class="comment">// limitations under the License.</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"></span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "<a class="code" href="a00146.html">resultiterator.h</a>"</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include "allheaders.h"</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include "<a class="code" href="a00338.html">pageres.h</a>"</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include "<a class="code" href="a00593.html">strngs.h</a>"</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include "<a class="code" href="a00173.html">tesseractclass.h</a>"</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include "<a class="code" href="a00626.html">unicharset.h</a>"</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include "<a class="code" href="a00635.html">unicodes.h</a>"</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <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> </div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="a02453.html#aa0f6c0e15c83e9ed718d80d736865c3f"> 33</a></span> <a class="code" href="a02453.html#aa0f6c0e15c83e9ed718d80d736865c3f">ResultIterator::ResultIterator</a>(<span class="keyword">const</span> <a class="code" href="a02357.html">LTRResultIterator</a> &resit)</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  : <a class="code" href="a02357.html">LTRResultIterator</a>(resit) {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  in_minor_direction_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  at_beginning_of_minor_run_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  preserve_interword_spaces_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="a02901.html">BoolParam</a> *p = ParamUtils::FindParam<BoolParam>(</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="stringliteral">"preserve_interword_spaces"</span>, <a class="code" href="a00560.html#a71a3243019391d3a438fd279c07cef87">GlobalParams</a>()-><a class="code" href="a02885.html#a6bb13133287d8d8d18c81bb974b1b54f">bool_params</a>,</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <a class="code" href="a02385.html#acca34c1adcf494eca7dfefe74258f991">tesseract_</a>-><a class="code" href="a02769.html#ac993425386ae1f73762107299ee8a114">params</a>()-><a class="code" href="a02885.html#a6bb13133287d8d8d18c81bb974b1b54f">bool_params</a>);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <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> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  current_paragraph_is_ltr_ = CurrentParagraphIsLtr();</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a02453.html#a961e7ee57edae85e855332a301cccacf"> 48</a></span> <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>  <span class="keyword">const</span> <a class="code" href="a02357.html">LTRResultIterator</a> &resit) {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <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> }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a02453.html#a17891e56b5a812ee7728300dac362b40"> 53</a></span> <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>  <span class="keywordflow">return</span> current_paragraph_is_ltr_;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <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>  <span class="keywordflow">if</span> (!<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>())</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// doesn't matter.</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <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>  it.RestartParagraph();</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <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>  <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>  <span class="comment">// Here we denote {ltr characters, RTL CHARACTERS}:</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="comment">//</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// "don't go in there!" DAIS EH</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="comment">// EHT OTNI DEPMUJ FELSMIH NEHT DNA</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// .GNIDLIUB GNINRUB</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="comment">//</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <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>  <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>  <span class="comment">// the whole paragraph contents. So instead of "the leftmost word is LTR"</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <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>  <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>  <span class="comment">// word. So our heuristics are as follows:</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">//</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <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>  <span class="comment">// it is RTL.</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <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>  <span class="comment">// it is LTR.</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <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>  <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>  <span class="comment">// are more LTR words, it's LTR.</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <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>  <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>  <span class="keywordtype">int</span> num_ltr, num_rtl;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  num_rtl = leftmost_rtl ? 1 : 0;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  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>  <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>  !it.Empty(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>) && !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>  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>  <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>  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>  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>  num_ltr += rightmost_ltr ? 1 : 0;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">if</span> (leftmost_rtl)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">if</span> (rightmost_ltr)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <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>  <span class="keywordflow">if</span> (!it.Empty(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>) && !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>  <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>  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>  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>  } <span class="keywordflow">while</span> (it.Next(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>) && !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>  <span class="keywordflow">return</span> num_ltr >= num_rtl;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <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> <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> <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> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">void</span> ResultIterator::CalculateBlobOrder(</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="a02297.html">GenericVector<int></a> *blob_indices)<span class="keyword"> const </span>{</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <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>  blob_indices-><a class="code" href="a02297.html#a9cdbff49b186574b83e43afba606fdd9">clear</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <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>  <span class="keywordflow">if</span> (context_is_ltr || <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-><a class="code" href="a02645.html#a7dda06bb4d68d571d0df20e81475fa15">UnicharsInReadingOrder</a>()) {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="comment">// Easy! just return the blobs in order;</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>; i++)</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  blob_indices-><a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(i);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <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>  <span class="comment">// is right-to-left.</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <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>  <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>  <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>  <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>  <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>  <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>  <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> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <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>  <span class="comment">// [:ET:]*[:EN:]+(([:ES:]|[:CS:])?[:EN:]+)*[:ET:]*</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="a02297.html">GenericVector<int></a> letter_types;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>; i++) {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  letter_types.<a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-><a class="code" href="a02645.html#a2a95941e1613fcfaee0c5c157dd654f9">SymbolDirection</a>(i));</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// Convert a single separtor sandwiched between two EN's into an EN.</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i + 2 < <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>; i++) {</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">if</span> (letter_types[i] == U_EURO_NUM && letter_types[i + 2] == U_EURO_NUM &&</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  (letter_types[i + 1] == U_EURO_NUM_SEP ||</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  letter_types[i + 1] == U_COMMON_NUM_SEP)) {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  letter_types[i + 1] = U_EURO_NUM;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <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>  <span class="comment">// them to ENs.</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>; i++) {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <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>  <span class="keywordtype">int</span> j = i + 1;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">while</span> (j < <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a> && letter_types[j] == U_EURO_NUM_TERM) { j++; }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">if</span> (j < <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a> && letter_types[j] == U_EURO_NUM) {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = i; k < j; k++) letter_types[k] = U_EURO_NUM;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  j = i - 1;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">while</span> (j > -1 && letter_types[j] == U_EURO_NUM_TERM) { j--; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">if</span> (j > -1 && letter_types[j] == U_EURO_NUM) {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = j; k <= i; k++) letter_types[k] = U_EURO_NUM;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <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>  <span class="comment">// Sequences ([:L:]|[:EN:])+ (([:CS:]|[:ON:])+ ([:L:]|[:EN:])+)* -> L.</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="comment">// All other are R.</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>;) {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordtype">int</span> ti = letter_types[i];</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <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>  <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>  <span class="keywordtype">int</span> last_good = i;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = i + 1; j < <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a>; j++) {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordtype">int</span> tj = letter_types[j];</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <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>  last_good = j;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  } <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>  <span class="comment">// do nothing.</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="comment">// [i..last_good] is the L sequence</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = i; k <= last_good; k++) letter_types[k] = U_LTR;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  i = last_good + 1;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  letter_types[i] = U_RTL;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  i++;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <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>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = <a class="code" href="a02385.html#a5bcc04bef9fefefc856440bcfe15d9ab">word_length_</a> - 1; i >= 0;) {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">if</span> (letter_types[i] == U_RTL) {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  blob_indices-><a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(i);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  i--;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <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>  <span class="keywordtype">int</span> j = i - 1;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">for</span> (; j >= 0 && letter_types[j] != U_RTL; j--) { } <span class="comment">// pass</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="comment">// Now (j, i] is LTR</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = j + 1; k <= i; k++) blob_indices-><a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(k);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  i = j;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <a class="code" href="a00500.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a>(blob_indices-><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> }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">static</span> <span class="keywordtype">void</span> PrintScriptDirs(<span class="keyword">const</span> <a class="code" href="a02297.html">GenericVector<StrongScriptDirection></a> &dirs) {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < dirs.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>(); i++) {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">switch</span> (dirs[i]) {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <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">"N "</span>); <span class="keywordflow">break</span>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <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">"L "</span>); <span class="keywordflow">break</span>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <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">"R "</span>); <span class="keywordflow">break</span>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <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">"Z "</span>); <span class="keywordflow">break</span>;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">default</span>: <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"? "</span>); <span class="keywordflow">break</span>;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"\n"</span>);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <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>  <span class="keywordtype">bool</span> paragraph_is_ltr,</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keyword">const</span> LTRResultIterator &resit,</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <a class="code" href="a02449.html">GenericVectorEqEq<int></a> *word_indices)<span class="keyword"> const </span>{</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <a class="code" href="a02297.html">GenericVector<StrongScriptDirection></a> directions;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <a class="code" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06">CalculateTextlineOrder</a>(paragraph_is_ltr, resit, &directions, word_indices);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> }</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <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>  <span class="keywordtype">bool</span> paragraph_is_ltr,</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">const</span> LTRResultIterator &resit,</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <a class="code" href="a02297.html">GenericVector<StrongScriptDirection></a> *dirs_arg,</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="a02449.html">GenericVectorEqEq<int></a> *word_indices)<span class="keyword"> const </span>{</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <a class="code" href="a02297.html">GenericVector<StrongScriptDirection></a> dirs;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <a class="code" href="a02297.html">GenericVector<StrongScriptDirection></a> *directions;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  directions = (dirs_arg != NULL) ? dirs_arg : &dirs;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  directions-><a class="code" href="a02297.html#a980882b5ebc3e72fdedbdbe345196f21">truncate</a>(0);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <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>  <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>  ltr_it.RestartRow();</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <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>  <span class="keywordflow">do</span> {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  directions-><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>  } <span class="keywordflow">while</span> (ltr_it.Next(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>) && !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> </div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  word_indices-><a class="code" href="a02297.html#a980882b5ebc3e72fdedbdbe345196f21">truncate</a>(0);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <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> }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="a02453.html#a10ba7f1e30387d13b518fc1ccdcbfe06"> 255</a></span> <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>  <span class="keywordtype">bool</span> paragraph_is_ltr,</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">const</span> <a class="code" href="a02297.html">GenericVector<StrongScriptDirection></a> &word_dirs,</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="a02449.html">GenericVectorEqEq<int></a> *reading_order) {</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  reading_order-><a class="code" href="a02297.html#a980882b5ebc3e72fdedbdbe345196f21">truncate</a>(0);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <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> </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <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>  <span class="comment">// in reverse order.</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <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>  <span class="keywordflow">if</span> (paragraph_is_ltr) {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  start = 0;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  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>  major_step = 1;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  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>  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>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  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>  end = -1;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  major_step = -1;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  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>  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>  <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>  <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>  <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>  <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>  <span class="keywordtype">int</span> neutral_end = start;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">while</span> (neutral_end > 0 && 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>  neutral_end--;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">if</span> (neutral_end >= 0 && 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>  <span class="comment">// LTR followed by neutrals.</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <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>  <span class="keywordtype">int</span> left = neutral_end;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = left; i >= 0 && 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>  <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>  }</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  reading_order-><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>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = left; i < 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>  reading_order-><a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(i);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">if</span> (word_dirs[i] == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa252615b6d7ebef9293183f6e94488cc1">DIR_MIX</a>) reading_order-><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>  }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  reading_order-><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>  start = left - 1;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <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>  <span class="keywordflow">if</span> (word_dirs[i] == minor_direction) {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordtype">int</span> j = i;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordflow">while</span> (j != end && word_dirs[j] != major_direction)</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  j += major_step;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">if</span> (j == end) j -= major_step;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">while</span> (j != i && word_dirs[j] != minor_direction)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  j -= major_step;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="comment">// [j..i] is a minor direction run.</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  reading_order-><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>  <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>  reading_order-><a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(k);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  reading_order-><a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(i);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  reading_order-><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>  i = j + major_step;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  reading_order-><a class="code" href="a02297.html#a0dc89fe2a365b04a61017f9d78c1a303">push_back</a>(i);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">if</span> (word_dirs[i] == <a class="code" href="a00614.html#abc3119a959ecd5cffc1d9b9d57479dbaa252615b6d7ebef9293183f6e94488cc1">DIR_MIX</a>) reading_order-><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>  i += major_step;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> }</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <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>  <span class="keywordtype">int</span> this_word_index = 0;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <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>  textline.RestartRow();</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <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>  this_word_index++;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  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>  }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">return</span> this_word_index;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="keywordtype">void</span> ResultIterator::MoveToLogicalStartOfWord() {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <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>  <a class="code" href="a02385.html#a9075e98e75619ca5e1270a0a6eb2c352">BeginWord</a>(0);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <a class="code" href="a02297.html">GenericVector<int></a> blob_order;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  CalculateBlobOrder(&blob_order);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <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>  <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> }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <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>  <span class="keywordflow">if</span> (!<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><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>  <a class="code" href="a02297.html">GenericVector<int></a> blob_order;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  CalculateBlobOrder(&blob_order);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <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> }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <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>  <span class="keywordflow">if</span> (!<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><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>  <a class="code" href="a02297.html">GenericVector<int></a> blob_order;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  CalculateBlobOrder(&blob_order);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <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> }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <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>  <span class="keywordflow">if</span> (!<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><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>  <span class="keywordtype">bool</span> reading_direction_is_ltr =</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  current_paragraph_is_ltr_ ^ in_minor_direction_;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <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>  <span class="comment">// left us.</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <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>  <span class="comment">// direction'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>  <span class="comment">// current reading order's mark.</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="a02449.html">GenericVectorEqEq<int></a> textline_order;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <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>  *<span class="keyword">this</span>, &textline_order);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordtype">int</span> this_word_index = LTRWordIndex();</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <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>  <span class="keywordflow">if</span> (i < 0) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keywordtype">int</span> last_non_word_mark = 0;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">for</span> (i++; i < textline_order.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() && textline_order[i] < 0; i++) {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  last_non_word_mark = textline_order[i];</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <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>  *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>  } <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>  <span class="keywordflow">if</span> (current_paragraph_is_ltr_) {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  *text += <a class="code" href="a01738.html#aa393f17e77d059739f005ada9a805c69">kLRM</a>;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  *text += <a class="code" href="a01738.html#a8aa0e462f167f686ef463b5a5b266f04">kRLM</a>;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> }</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordtype">void</span> ResultIterator::MoveToLogicalStartOfTextline() {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <a class="code" href="a02449.html">GenericVectorEqEq<int></a> word_indices;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="a02385.html#a2df743d478df34f1a239cf9675f82be0">RestartRow</a>();</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <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>  dynamic_cast<const LTRResultIterator&>(*<span class="keyword">this</span>),</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  &word_indices);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordtype">int</span> i = 0;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">for</span> (; i < word_indices.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() && word_indices[i] < 0; i++) {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <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>  <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>  }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <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>  <span class="keywordflow">if</span> (i >= 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>  <span class="keywordtype">int</span> first_word_index = word_indices[i];</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j < first_word_index; j++) {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <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>  }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  MoveToLogicalStartOfWord();</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div><div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="a02453.html#a36e6fd5587628440bb19b84648645676"> 413</a></span> <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>  <a class="code" href="a02385.html#a5cc369eb577150a3a677f9c342ce1240">LTRResultIterator::Begin</a>();</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  current_paragraph_is_ltr_ = CurrentParagraphIsLtr();</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  in_minor_direction_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  at_beginning_of_minor_run_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="a02453.html#abd8987e2387f1945b53cf23f99b663e1"> 421</a></span> <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>  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><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>  <span class="keywordflow">switch</span> (level) {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <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>  <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>  <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>  <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>  <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>  <span class="comment">// if we've advanced to a new paragraph,</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="comment">// recalculate current_paragraph_is_ltr_</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  current_paragraph_is_ltr_ = CurrentParagraphIsLtr();</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  }</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  in_minor_direction_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">return</span> <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a997c382ddd2cf2f539532a1d91780963">block</a>() != NULL;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <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>  {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="a02297.html">GenericVector<int></a> blob_order;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  CalculateBlobOrder(&blob_order);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordtype">int</span> next_blob = 0;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">while</span> (next_blob < blob_order.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>() &&</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <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>  next_blob++;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  next_blob++;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">if</span> (next_blob < blob_order.<a class="code" href="a02297.html#a20cfad5c58c50cb85a9529d8ddbd96af">size</a>()) {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="comment">// we're in the same word; simply advance one blob.</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <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>  at_beginning_of_minor_run_ = <span class="keyword">false</span>;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  level = <a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>; <span class="comment">// we've fallen through to the next word.</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <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>  {</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><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>  <a class="code" href="a02449.html">GenericVectorEqEq<int></a> word_indices;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordtype">int</span> this_word_index = LTRWordIndex();</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <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>  *<span class="keyword">this</span>,</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  &word_indices);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <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>  <span class="keywordflow">while</span> (final_real_index > 0 && word_indices[final_real_index] < 0)</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  final_real_index--;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < final_real_index; i++) {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">if</span> (word_indices[i] == this_word_index) {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keywordtype">int</span> j = i + 1;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">for</span> (; j < final_real_index && word_indices[j] < 0; j++) {</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <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>  <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>  }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  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>  <span class="comment">// awesome, we move to word_indices[j]</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordflow">if</span> (BidiDebug(3)) {</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"Next(RIL_WORD): %d -> %d\n"</span>,</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  this_word_index, word_indices[j]);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  }</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <a class="code" href="a02385.html#a2df743d478df34f1a239cf9675f82be0">PageIterator::RestartRow</a>();</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k < word_indices[j]; k++) {</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <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>  }</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  MoveToLogicalStartOfWord();</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  }</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">if</span> (BidiDebug(3)) {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"Next(RIL_WORD): %d -> EOL\n"</span>, this_word_index);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  }</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="comment">// we're going off the end of the text line.</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <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>  }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <a class="code" href="a00500.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a>(<span class="keyword">false</span>); <span class="comment">// shouldn't happen.</span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div><div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="a02453.html#ad3fc35a630d943424dbca9cf217a8980"> 496</a></span> <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>  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><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>  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><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>  <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> </div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keywordtype">bool</span> at_word_start = IsAtFirstSymbolOfWord();</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <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> </div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <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>  <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>  line_start.MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span> </div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordtype">bool</span> at_textline_start = at_word_start && *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>  <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> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <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>  line_start.<a class="code" href="a02385.html#a2df743d478df34f1a239cf9675f82be0">RestartRow</a>();</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keywordtype">bool</span> at_block_start = at_textline_start &&</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  line_start.<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a997c382ddd2cf2f539532a1d91780963">block</a>() != line_start.<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a872e8f5ce0da4f99413d9d55c8214748">prev_block</a>();</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <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> </div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <span class="keywordtype">bool</span> at_para_start = at_block_start ||</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  (at_textline_start &&</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  line_start.<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a2038f4bd5c4c0eac4dba7f1d6bcdb5bf">row</a>()-><a class="code" href="a02641.html#ad3a856f3e9217c47b8f2f54cd3908721">row</a>-><a class="code" href="a02629.html#aa5fa3212ac4b34b56f51691c04f1f10c">para</a>() !=</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  line_start.<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a32f7ecd54106290053205cc118395d8d">prev_row</a>()-><a class="code" href="a02641.html#ad3a856f3e9217c47b8f2f54cd3908721">row</a>-><a class="code" href="a02629.html#aa5fa3212ac4b34b56f51691c04f1f10c">para</a>());</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <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> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <a class="code" href="a00500.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a>(<span class="keyword">false</span>); <span class="comment">// shouldn't happen.</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div><div class="line"><a name="l00532"></a><span class="lineno"><a class="line" href="a02453.html#abda8fe6cd60a9667f0c06c6fd8ff1946"> 532</a></span> <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>  <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>  <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>  <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>  <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>  <span class="comment">// [level, element).</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <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>  <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>  <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>  <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>  next.<a class="code" href="a02453.html#abd8987e2387f1945b53cf23f99b663e1">Next</a>(element);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <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>  <span class="keywordflow">while</span> (element > level) {</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  element = <span class="keyword">static_cast<</span><a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7">PageIteratorLevel</a><span class="keyword">></span>(element - 1);</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> }</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div><div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="a02453.html#a22f65a94be27435440673d7c750808fb"> 556</a></span> <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>  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><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>  <a class="code" href="a02929.html">STRING</a> text;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keywordflow">switch</span> (level) {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <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>  {</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <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>  <span class="keywordflow">do</span> {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  pp.AppendUTF8ParagraphText(&text);</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  } <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>) && pp.<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a997c382ddd2cf2f539532a1d91780963">block</a>() == <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a997c382ddd2cf2f539532a1d91780963">block</a>());</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  }</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <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>  AppendUTF8ParagraphText(&text);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <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>  {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <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>  it.MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  it.IterateAndAppendUTF8TextlineText(&text);</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <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>  AppendUTF8WordText(&text);</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <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>  {</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="keywordtype">bool</span> reading_direction_is_ltr =</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  current_paragraph_is_ltr_ ^ in_minor_direction_;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">if</span> (at_beginning_of_minor_run_) {</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  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>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  text = <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-><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>  <span class="keywordflow">if</span> (IsAtFinalSymbolOfWord()) AppendSuffixMarks(&text);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  }</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <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>  <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>  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>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span> }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <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>  <span class="keywordflow">if</span> (!<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><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>  <a class="code" href="a00500.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a>(<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-><a class="code" href="a02645.html#a3d42ac7ec121263e757c9b7160dfd50d">best_choice</a> != NULL);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keywordtype">bool</span> reading_direction_is_ltr =</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  current_paragraph_is_ltr_ ^ in_minor_direction_;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="keywordflow">if</span> (at_beginning_of_minor_run_) {</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  *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>  }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> </div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <a class="code" href="a02297.html">GenericVector<int></a> blob_order;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  CalculateBlobOrder(&blob_order);</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < 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>  *text += <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-><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>  }</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  AppendSuffixMarks(text);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> </div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <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>  <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>  <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>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  }</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordflow">if</span> (BidiDebug(1)) {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <a class="code" href="a02449.html">GenericVectorEqEq<int></a> textline_order;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <a class="code" href="a02297.html">GenericVector<StrongScriptDirection></a> dirs;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <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>  *<span class="keyword">this</span>, &dirs, &textline_order);</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"Strong Script dirs [%p/P=%s]: "</span>, <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a2038f4bd5c4c0eac4dba7f1d6bcdb5bf">row</a>(),</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  current_paragraph_is_ltr_ ? <span class="stringliteral">"ltr"</span> : <span class="stringliteral">"rtl"</span>);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  PrintScriptDirs(dirs);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"Logical textline order [%p/P=%s]: "</span>, <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a2038f4bd5c4c0eac4dba7f1d6bcdb5bf">row</a>(),</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  current_paragraph_is_ltr_ ? <span class="stringliteral">"ltr"</span> : <span class="stringliteral">"rtl"</span>);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < 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>  <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"%d "</span>, textline_order[i]);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"\n"</span>);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="keywordtype">int</span> words_appended = 0;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">do</span> {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <span class="keywordtype">int</span> numSpaces = preserve_interword_spaces_ ? <a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><a class="code" href="a02649.html#a6cdcdaa4b0b1250ab7e14760d4b5f113">word</a>()-><a class="code" href="a02645.html#afc15fa7c1b5ad55d6772dea0d6865df1">word</a>-><a class="code" href="a02741.html#ab2979974cf23f5c66f4e77cc51f2e189">space</a>()</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  : (words_appended > 0);</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < numSpaces; ++i) {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  *text += <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  }</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  AppendUTF8WordText(text);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  words_appended++;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  } <span class="keywordflow">while</span> (<a class="code" href="a02453.html#abd8987e2387f1945b53cf23f99b663e1">Next</a>(<a class="code" href="a01738.html#aa26c22b65cc9765a0e747120f4287fd7afd466aec253e5daa6f0c112b0f0e0610">RIL_WORD</a>) && !<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>  <span class="keywordflow">if</span> (BidiDebug(1)) {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <a class="code" href="a00608.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"%d words printed\n"</span>, words_appended);</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  *text += <a class="code" href="a02357.html#ae1b5b360d5bf55c0cd0eb336de37ea8b">line_separator_</a>;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <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>  <span class="keywordflow">if</span> (<a class="code" href="a02385.html#a42df7b8e352be1e5a140787109419f93">it_</a>-><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>  *text += <a class="code" href="a02357.html#a1c6e431ccea8aaad26d9e8d6b9ca2f60">paragraph_separator_</a>;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span> }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <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>  <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>  it.RestartParagraph();</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  it.MoveToLogicalStartOfTextline();</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <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>  <span class="keywordflow">do</span> {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  it.IterateAndAppendUTF8TextlineText(text);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  } <span class="keywordflow">while</span> (it.it_->block() != NULL && !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> }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <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>  <span class="keywordtype">int</span> debug_level = 1;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  IntParam *p = ParamUtils::FindParam<IntParam>(</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <span class="stringliteral">"bidi_debug"</span>, <a class="code" href="a00560.html#a71a3243019391d3a438fd279c07cef87">GlobalParams</a>()-><a class="code" href="a02885.html#a22c42b48d2c626d2f3f3b0abd21bc902">int_params</a>,</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <a class="code" href="a02385.html#acca34c1adcf494eca7dfefe74258f991">tesseract_</a>-><a class="code" href="a02769.html#ac993425386ae1f73762107299ee8a114">params</a>()-><a class="code" href="a02885.html#a22c42b48d2c626d2f3f3b0abd21bc902">int_params</a>);</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <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>  <span class="keywordflow">return</span> debug_level >= min_level;</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span> }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span> } <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< int ></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< BoolParam * > 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 &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 & 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< IntParam * > 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< int ></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 &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< StrongScriptDirection > &word_dirs, GenericVectorEqEq< int > *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>