diff options
Diffstat (limited to 'doc/sample_html/cogapp_cogapp.html')
-rw-r--r-- | doc/sample_html/cogapp_cogapp.html | 1881 |
1 files changed, 943 insertions, 938 deletions
diff --git a/doc/sample_html/cogapp_cogapp.html b/doc/sample_html/cogapp_cogapp.html index 555756f3..df5b4345 100644 --- a/doc/sample_html/cogapp_cogapp.html +++ b/doc/sample_html/cogapp_cogapp.html @@ -1,19 +1,21 @@ -<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
+<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title>Coverage for cogapp\cogapp</title>
<link rel='stylesheet' href='style.css' type='text/css'>
-<script src='jquery-1.3.2.min.js'></script>
-<script>
+<script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+<script type='text/javascript'>
function toggle_lines(btn, cls) {
var btn = $(btn);
- if (btn.hasClass("hide")) {
- $("#source ."+cls).removeClass("hide");
- btn.removeClass("hide");
+ var hide = "hide_"+cls;
+ if (btn.hasClass(hide)) {
+ $("#source ."+cls).removeClass(hide);
+ btn.removeClass(hide);
}
else {
- $("#source ."+cls).addClass("hide");
- btn.addClass("hide");
+ $("#source ."+cls).addClass(hide);
+ btn.addClass(hide);
}
}
</script>
@@ -22,13 +24,16 @@ function toggle_lines(btn, cls) { <div id='header'>
<div class='content'>
<h1>Coverage for <b>cogapp\cogapp</b> :
- <span class='pc_cov'>57%</span>
+ <span class='pc_cov'>51%</span>
</h1>
<h2 class='stats'>
387 statements
- <span class='run hide' onclick='toggle_lines(this, "run")'>219 run</span>
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>219 run</span>
<span class='exc' onclick='toggle_lines(this, "exc")'>3 excluded</span>
<span class='mis' onclick='toggle_lines(this, "mis")'>168 missing</span>
+
+ <span class='par run hide_run' onclick='toggle_lines(this, "par")'>26 partial</span>
+
</h2>
</div>
</div>
@@ -43,22 +48,22 @@ function toggle_lines(btn, cls) { <p class='pln'>4</p>
<p class='pln'>5</p>
<p class='pln'>6</p>
-<p class='stm run hide'>7</p>
-<p class='stm run hide'>8</p>
+<p class='stm run hide_run'>7</p>
+<p class='stm run hide_run'>8</p>
<p class='pln'>9</p>
<p class='pln'>10</p>
-<p class='stm run hide'>11</p>
-<p class='stm run hide'>12</p>
-<p class='stm run hide'>13</p>
+<p class='stm run hide_run'>11</p>
+<p class='stm run hide_run'>12</p>
+<p class='stm run hide_run'>13</p>
<p class='stm mis'>14</p>
<p class='stm mis'>15</p>
<p class='stm mis'>16</p>
<p class='pln'>17</p>
-<p class='stm run hide'>18</p>
+<p class='stm run hide_run'>18</p>
<p class='pln'>19</p>
-<p class='stm run hide'>20</p>
+<p class='stm run hide_run'>20</p>
<p class='pln'>21</p>
-<p class='stm run hide'>22</p>
+<p class='stm run hide_run'>22</p>
<p class='pln'>23</p>
<p class='pln'>24</p>
<p class='pln'>25</p>
@@ -86,127 +91,127 @@ function toggle_lines(btn, cls) { <p class='pln'>47</p>
<p class='pln'>48</p>
<p class='pln'>49</p>
-<p class='stm run hide'>50</p>
+<p class='stm run hide_run'>50</p>
<p class='pln'>51</p>
-<p class='stm run hide'>52</p>
+<p class='stm run hide_run'>52</p>
<p class='pln'>53</p>
<p class='pln'>54</p>
-<p class='stm run hide'>55</p>
-<p class='stm run hide'>56</p>
-<p class='stm run hide'>57</p>
+<p class='stm run hide_run'>55</p>
+<p class='stm par run hide_run'>56</p>
+<p class='stm run hide_run'>57</p>
<p class='pln'>58</p>
<p class='stm mis'>59</p>
<p class='pln'>60</p>
-<p class='stm run hide'>61</p>
+<p class='stm run hide_run'>61</p>
<p class='pln'>62</p>
<p class='pln'>63</p>
<p class='exc'>64</p>
<p class='pln'>65</p>
-<p class='stm run hide'>66</p>
+<p class='stm run hide_run'>66</p>
<p class='pln'>67</p>
<p class='pln'>68</p>
<p class='exc'>69</p>
<p class='pln'>70</p>
-<p class='stm run hide'>71</p>
+<p class='stm run hide_run'>71</p>
<p class='pln'>72</p>
<p class='pln'>73</p>
<p class='exc'>74</p>
<p class='pln'>75</p>
-<p class='stm run hide'>76</p>
+<p class='stm run hide_run'>76</p>
<p class='pln'>77</p>
<p class='pln'>78</p>
-<p class='stm run hide'>79</p>
-<p class='stm run hide'>80</p>
-<p class='stm run hide'>81</p>
+<p class='stm run hide_run'>79</p>
+<p class='stm run hide_run'>80</p>
+<p class='stm run hide_run'>81</p>
<p class='pln'>82</p>
-<p class='stm run hide'>83</p>
+<p class='stm run hide_run'>83</p>
<p class='pln'>84</p>
<p class='pln'>85</p>
-<p class='stm run hide'>86</p>
-<p class='stm run hide'>87</p>
-<p class='stm run hide'>88</p>
+<p class='stm par run hide_run'>86</p>
+<p class='stm run hide_run'>87</p>
+<p class='stm par run hide_run'>88</p>
<p class='stm mis'>89</p>
<p class='pln'>90</p>
-<p class='stm run hide'>91</p>
+<p class='stm run hide_run'>91</p>
<p class='pln'>92</p>
<p class='pln'>93</p>
-<p class='stm run hide'>94</p>
-<p class='stm run hide'>95</p>
-<p class='stm run hide'>96</p>
-<p class='stm run hide'>97</p>
+<p class='stm run hide_run'>94</p>
+<p class='stm run hide_run'>95</p>
+<p class='stm run hide_run'>96</p>
+<p class='stm run hide_run'>97</p>
<p class='pln'>98</p>
-<p class='stm run hide'>99</p>
-<p class='stm run hide'>100</p>
+<p class='stm run hide_run'>99</p>
+<p class='stm run hide_run'>100</p>
<p class='pln'>101</p>
-<p class='stm run hide'>102</p>
-<p class='stm run hide'>103</p>
+<p class='stm run hide_run'>102</p>
+<p class='stm run hide_run'>103</p>
<p class='pln'>104</p>
-<p class='stm run hide'>105</p>
+<p class='stm run hide_run'>105</p>
<p class='pln'>106</p>
<p class='pln'>107</p>
<p class='pln'>108</p>
<p class='pln'>109</p>
<p class='pln'>110</p>
-<p class='stm run hide'>111</p>
-<p class='stm run hide'>112</p>
-<p class='stm run hide'>113</p>
-<p class='stm run hide'>114</p>
+<p class='stm run hide_run'>111</p>
+<p class='stm run hide_run'>112</p>
+<p class='stm run hide_run'>113</p>
+<p class='stm run hide_run'>114</p>
<p class='pln'>115</p>
-<p class='stm run hide'>116</p>
+<p class='stm run hide_run'>116</p>
<p class='pln'>117</p>
-<p class='stm run hide'>118</p>
+<p class='stm run hide_run'>118</p>
<p class='pln'>119</p>
-<p class='stm run hide'>120</p>
+<p class='stm run hide_run'>120</p>
<p class='pln'>121</p>
-<p class='stm run hide'>122</p>
-<p class='stm run hide'>123</p>
-<p class='stm run hide'>124</p>
+<p class='stm run hide_run'>122</p>
+<p class='stm run hide_run'>123</p>
+<p class='stm run hide_run'>124</p>
<p class='pln'>125</p>
<p class='pln'>126</p>
-<p class='stm run hide'>127</p>
-<p class='stm run hide'>128</p>
+<p class='stm run hide_run'>127</p>
+<p class='stm run hide_run'>128</p>
<p class='pln'>129</p>
<p class='pln'>130</p>
-<p class='stm run hide'>131</p>
-<p class='stm run hide'>132</p>
-<p class='stm run hide'>133</p>
-<p class='stm run hide'>134</p>
+<p class='stm run hide_run'>131</p>
+<p class='stm run hide_run'>132</p>
+<p class='stm run hide_run'>133</p>
+<p class='stm run hide_run'>134</p>
<p class='pln'>135</p>
-<p class='stm run hide'>136</p>
-<p class='stm run hide'>137</p>
+<p class='stm run hide_run'>136</p>
+<p class='stm run hide_run'>137</p>
<p class='pln'>138</p>
<p class='pln'>139</p>
<p class='pln'>140</p>
<p class='pln'>141</p>
-<p class='stm run hide'>142</p>
-<p class='stm run hide'>143</p>
+<p class='stm run hide_run'>142</p>
+<p class='stm run hide_run'>143</p>
<p class='pln'>144</p>
-<p class='stm run hide'>145</p>
+<p class='stm run hide_run'>145</p>
<p class='pln'>146</p>
-<p class='stm run hide'>147</p>
+<p class='stm run hide_run'>147</p>
<p class='stm mis'>148</p>
<p class='pln'>149</p>
-<p class='stm run hide'>150</p>
+<p class='stm run hide_run'>150</p>
<p class='pln'>151</p>
<p class='pln'>152</p>
-<p class='stm run hide'>153</p>
-<p class='stm run hide'>154</p>
-<p class='stm run hide'>155</p>
-<p class='stm run hide'>156</p>
-<p class='stm run hide'>157</p>
-<p class='stm run hide'>158</p>
-<p class='stm run hide'>159</p>
-<p class='stm run hide'>160</p>
-<p class='stm run hide'>161</p>
-<p class='stm run hide'>162</p>
+<p class='stm run hide_run'>153</p>
+<p class='stm run hide_run'>154</p>
+<p class='stm run hide_run'>155</p>
+<p class='stm run hide_run'>156</p>
+<p class='stm par run hide_run'>157</p>
+<p class='stm run hide_run'>158</p>
+<p class='stm run hide_run'>159</p>
+<p class='stm run hide_run'>160</p>
+<p class='stm run hide_run'>161</p>
+<p class='stm run hide_run'>162</p>
<p class='pln'>163</p>
-<p class='stm run hide'>164</p>
+<p class='stm run hide_run'>164</p>
<p class='pln'>165</p>
<p class='pln'>166</p>
-<p class='stm run hide'>167</p>
-<p class='stm run hide'>168</p>
+<p class='stm run hide_run'>167</p>
+<p class='stm run hide_run'>168</p>
<p class='pln'>169</p>
-<p class='stm run hide'>170</p>
+<p class='stm run hide_run'>170</p>
<p class='pln'>171</p>
<p class='pln'>172</p>
<p class='pln'>173</p>
@@ -215,60 +220,60 @@ function toggle_lines(btn, cls) { <p class='stm mis'>176</p>
<p class='pln'>177</p>
<p class='pln'>178</p>
-<p class='stm run hide'>179</p>
+<p class='stm run hide_run'>179</p>
<p class='pln'>180</p>
<p class='pln'>181</p>
-<p class='stm run hide'>182</p>
-<p class='stm run hide'>183</p>
-<p class='stm run hide'>184</p>
+<p class='stm run hide_run'>182</p>
+<p class='stm run hide_run'>183</p>
+<p class='stm run hide_run'>184</p>
<p class='pln'>185</p>
-<p class='stm run hide'>186</p>
-<p class='stm run hide'>187</p>
-<p class='stm run hide'>188</p>
-<p class='stm run hide'>189</p>
-<p class='stm run hide'>190</p>
+<p class='stm run hide_run'>186</p>
+<p class='stm run hide_run'>187</p>
+<p class='stm run hide_run'>188</p>
+<p class='stm run hide_run'>189</p>
+<p class='stm run hide_run'>190</p>
<p class='pln'>191</p>
-<p class='stm run hide'>192</p>
-<p class='stm run hide'>193</p>
+<p class='stm run hide_run'>192</p>
+<p class='stm run hide_run'>193</p>
<p class='pln'>194</p>
<p class='pln'>195</p>
-<p class='stm run hide'>196</p>
+<p class='stm run hide_run'>196</p>
<p class='pln'>197</p>
<p class='pln'>198</p>
-<p class='stm run hide'>199</p>
+<p class='stm run hide_run'>199</p>
<p class='pln'>200</p>
-<p class='stm run hide'>201</p>
-<p class='stm run hide'>202</p>
-<p class='stm run hide'>203</p>
-<p class='stm run hide'>204</p>
-<p class='stm run hide'>205</p>
-<p class='stm run hide'>206</p>
-<p class='stm run hide'>207</p>
-<p class='stm run hide'>208</p>
-<p class='stm run hide'>209</p>
-<p class='stm run hide'>210</p>
-<p class='stm run hide'>211</p>
-<p class='stm run hide'>212</p>
-<p class='stm run hide'>213</p>
-<p class='stm run hide'>214</p>
+<p class='stm run hide_run'>201</p>
+<p class='stm run hide_run'>202</p>
+<p class='stm run hide_run'>203</p>
+<p class='stm run hide_run'>204</p>
+<p class='stm run hide_run'>205</p>
+<p class='stm run hide_run'>206</p>
+<p class='stm run hide_run'>207</p>
+<p class='stm run hide_run'>208</p>
+<p class='stm run hide_run'>209</p>
+<p class='stm run hide_run'>210</p>
+<p class='stm run hide_run'>211</p>
+<p class='stm run hide_run'>212</p>
+<p class='stm run hide_run'>213</p>
+<p class='stm run hide_run'>214</p>
<p class='pln'>215</p>
-<p class='stm run hide'>216</p>
+<p class='stm run hide_run'>216</p>
<p class='pln'>217</p>
<p class='pln'>218</p>
<p class='stm mis'>219</p>
<p class='pln'>220</p>
-<p class='stm run hide'>221</p>
+<p class='stm run hide_run'>221</p>
<p class='pln'>222</p>
<p class='pln'>223</p>
<p class='stm mis'>224</p>
<p class='pln'>225</p>
-<p class='stm run hide'>226</p>
+<p class='stm run hide_run'>226</p>
<p class='pln'>227</p>
<p class='pln'>228</p>
<p class='stm mis'>229</p>
<p class='stm mis'>230</p>
<p class='pln'>231</p>
-<p class='stm run hide'>232</p>
+<p class='stm run hide_run'>232</p>
<p class='pln'>233</p>
<p class='stm mis'>234</p>
<p class='stm mis'>235</p>
@@ -311,7 +316,7 @@ function toggle_lines(btn, cls) { <p class='pln'>272</p>
<p class='stm mis'>273</p>
<p class='pln'>274</p>
-<p class='stm run hide'>275</p>
+<p class='stm run hide_run'>275</p>
<p class='pln'>276</p>
<p class='pln'>277</p>
<p class='stm mis'>278</p>
@@ -321,174 +326,174 @@ function toggle_lines(btn, cls) { <p class='stm mis'>282</p>
<p class='pln'>283</p>
<p class='pln'>284</p>
-<p class='stm run hide'>285</p>
+<p class='stm run hide_run'>285</p>
<p class='pln'>286</p>
<p class='pln'>287</p>
-<p class='stm run hide'>288</p>
-<p class='stm run hide'>289</p>
-<p class='stm run hide'>290</p>
-<p class='stm run hide'>291</p>
-<p class='stm run hide'>292</p>
-<p class='stm run hide'>293</p>
-<p class='stm run hide'>294</p>
+<p class='stm run hide_run'>288</p>
+<p class='stm run hide_run'>289</p>
+<p class='stm run hide_run'>290</p>
+<p class='stm run hide_run'>291</p>
+<p class='stm run hide_run'>292</p>
+<p class='stm run hide_run'>293</p>
+<p class='stm run hide_run'>294</p>
<p class='pln'>295</p>
-<p class='stm run hide'>296</p>
-<p class='stm run hide'>297</p>
+<p class='stm run hide_run'>296</p>
+<p class='stm run hide_run'>297</p>
<p class='pln'>298</p>
-<p class='stm run hide'>299</p>
+<p class='stm run hide_run'>299</p>
<p class='pln'>300</p>
-<p class='stm run hide'>301</p>
+<p class='stm run hide_run'>301</p>
<p class='stm mis'>302</p>
<p class='pln'>303</p>
-<p class='stm run hide'>304</p>
-<p class='stm run hide'>305</p>
+<p class='stm run hide_run'>304</p>
+<p class='stm run hide_run'>305</p>
<p class='pln'>306</p>
-<p class='stm run hide'>307</p>
-<p class='stm run hide'>308</p>
+<p class='stm run hide_run'>307</p>
+<p class='stm run hide_run'>308</p>
<p class='pln'>309</p>
<p class='pln'>310</p>
-<p class='stm run hide'>311</p>
-<p class='stm run hide'>312</p>
+<p class='stm run hide_run'>311</p>
+<p class='stm run hide_run'>312</p>
<p class='pln'>313</p>
-<p class='stm run hide'>314</p>
+<p class='stm run hide_run'>314</p>
<p class='pln'>315</p>
<p class='pln'>316</p>
<p class='pln'>317</p>
-<p class='stm run hide'>318</p>
-<p class='stm run hide'>319</p>
-<p class='stm run hide'>320</p>
+<p class='stm run hide_run'>318</p>
+<p class='stm run hide_run'>319</p>
+<p class='stm run hide_run'>320</p>
<p class='pln'>321</p>
-<p class='stm run hide'>322</p>
+<p class='stm run hide_run'>322</p>
<p class='pln'>323</p>
<p class='pln'>324</p>
<p class='pln'>325</p>
<p class='pln'>326</p>
-<p class='stm run hide'>327</p>
-<p class='stm run hide'>328</p>
-<p class='stm run hide'>329</p>
+<p class='stm run hide_run'>327</p>
+<p class='stm run hide_run'>328</p>
+<p class='stm run hide_run'>329</p>
<p class='pln'>330</p>
-<p class='stm run hide'>331</p>
+<p class='stm par run hide_run'>331</p>
<p class='pln'>332</p>
<p class='stm mis'>333</p>
<p class='stm mis'>334</p>
-<p class='stm run hide'>335</p>
+<p class='stm par run hide_run'>335</p>
<p class='pln'>336</p>
<p class='stm mis'>337</p>
<p class='stm mis'>338</p>
<p class='pln'>339</p>
-<p class='stm run hide'>340</p>
-<p class='stm run hide'>341</p>
+<p class='stm run hide_run'>340</p>
+<p class='stm run hide_run'>341</p>
<p class='pln'>342</p>
-<p class='stm run hide'>343</p>
+<p class='stm run hide_run'>343</p>
<p class='pln'>344</p>
-<p class='stm run hide'>345</p>
-<p class='stm run hide'>346</p>
+<p class='stm run hide_run'>345</p>
+<p class='stm run hide_run'>346</p>
<p class='pln'>347</p>
<p class='pln'>348</p>
-<p class='stm run hide'>349</p>
-<p class='stm run hide'>350</p>
+<p class='stm par run hide_run'>349</p>
+<p class='stm run hide_run'>350</p>
<p class='pln'>351</p>
<p class='pln'>352</p>
-<p class='stm run hide'>353</p>
+<p class='stm run hide_run'>353</p>
<p class='pln'>354</p>
<p class='pln'>355</p>
-<p class='stm run hide'>356</p>
-<p class='stm run hide'>357</p>
+<p class='stm run hide_run'>356</p>
+<p class='stm run hide_run'>357</p>
<p class='pln'>358</p>
-<p class='stm run hide'>359</p>
-<p class='stm run hide'>360</p>
+<p class='stm run hide_run'>359</p>
+<p class='stm par run hide_run'>360</p>
<p class='stm mis'>361</p>
<p class='pln'>362</p>
-<p class='stm run hide'>363</p>
+<p class='stm par run hide_run'>363</p>
<p class='stm mis'>364</p>
<p class='pln'>365</p>
-<p class='stm run hide'>366</p>
-<p class='stm run hide'>367</p>
-<p class='stm run hide'>368</p>
-<p class='stm run hide'>369</p>
-<p class='stm run hide'>370</p>
-<p class='stm run hide'>371</p>
+<p class='stm run hide_run'>366</p>
+<p class='stm run hide_run'>367</p>
+<p class='stm run hide_run'>368</p>
+<p class='stm run hide_run'>369</p>
+<p class='stm par run hide_run'>370</p>
+<p class='stm run hide_run'>371</p>
<p class='pln'>372</p>
<p class='pln'>373</p>
-<p class='stm run hide'>374</p>
-<p class='stm run hide'>375</p>
-<p class='stm run hide'>376</p>
-<p class='stm run hide'>377</p>
-<p class='stm run hide'>378</p>
+<p class='stm run hide_run'>374</p>
+<p class='stm run hide_run'>375</p>
+<p class='stm run hide_run'>376</p>
+<p class='stm run hide_run'>377</p>
+<p class='stm run hide_run'>378</p>
<p class='pln'>379</p>
<p class='pln'>380</p>
<p class='pln'>381</p>
-<p class='stm run hide'>382</p>
-<p class='stm run hide'>383</p>
-<p class='stm run hide'>384</p>
-<p class='stm run hide'>385</p>
-<p class='stm run hide'>386</p>
+<p class='stm run hide_run'>382</p>
+<p class='stm run hide_run'>383</p>
+<p class='stm run hide_run'>384</p>
+<p class='stm run hide_run'>385</p>
+<p class='stm run hide_run'>386</p>
<p class='pln'>387</p>
<p class='pln'>388</p>
-<p class='stm run hide'>389</p>
-<p class='stm run hide'>390</p>
+<p class='stm run hide_run'>389</p>
+<p class='stm run hide_run'>390</p>
<p class='pln'>391</p>
<p class='pln'>392</p>
-<p class='stm run hide'>393</p>
+<p class='stm run hide_run'>393</p>
<p class='pln'>394</p>
<p class='pln'>395</p>
-<p class='stm run hide'>396</p>
-<p class='stm run hide'>397</p>
+<p class='stm run hide_run'>396</p>
+<p class='stm par run hide_run'>397</p>
<p class='stm mis'>398</p>
<p class='pln'>399</p>
-<p class='stm run hide'>400</p>
+<p class='stm par run hide_run'>400</p>
<p class='stm mis'>401</p>
<p class='pln'>402</p>
-<p class='stm run hide'>403</p>
-<p class='stm run hide'>404</p>
-<p class='stm run hide'>405</p>
-<p class='stm run hide'>406</p>
-<p class='stm run hide'>407</p>
+<p class='stm par run hide_run'>403</p>
+<p class='stm run hide_run'>404</p>
+<p class='stm run hide_run'>405</p>
+<p class='stm run hide_run'>406</p>
+<p class='stm par run hide_run'>407</p>
<p class='stm mis'>408</p>
<p class='pln'>409</p>
<p class='pln'>410</p>
<p class='pln'>411</p>
-<p class='stm run hide'>412</p>
-<p class='stm run hide'>413</p>
-<p class='stm run hide'>414</p>
+<p class='stm par run hide_run'>412</p>
+<p class='stm run hide_run'>413</p>
+<p class='stm run hide_run'>414</p>
<p class='pln'>415</p>
-<p class='stm run hide'>416</p>
+<p class='stm run hide_run'>416</p>
<p class='pln'>417</p>
<p class='pln'>418</p>
<p class='pln'>419</p>
-<p class='stm run hide'>420</p>
-<p class='stm run hide'>421</p>
-<p class='stm run hide'>422</p>
+<p class='stm run hide_run'>420</p>
+<p class='stm run hide_run'>421</p>
+<p class='stm par run hide_run'>422</p>
<p class='stm mis'>423</p>
<p class='pln'>424</p>
-<p class='stm run hide'>425</p>
+<p class='stm par run hide_run'>425</p>
<p class='stm mis'>426</p>
<p class='pln'>427</p>
-<p class='stm run hide'>428</p>
-<p class='stm run hide'>429</p>
-<p class='stm run hide'>430</p>
+<p class='stm run hide_run'>428</p>
+<p class='stm run hide_run'>429</p>
+<p class='stm run hide_run'>430</p>
<p class='pln'>431</p>
-<p class='stm run hide'>432</p>
+<p class='stm par run hide_run'>432</p>
<p class='pln'>433</p>
<p class='stm mis'>434</p>
<p class='pln'>435</p>
<p class='pln'>436</p>
<p class='pln'>437</p>
<p class='pln'>438</p>
-<p class='stm run hide'>439</p>
-<p class='stm run hide'>440</p>
-<p class='stm run hide'>441</p>
-<p class='stm run hide'>442</p>
-<p class='stm run hide'>443</p>
-<p class='stm run hide'>444</p>
-<p class='stm run hide'>445</p>
-<p class='stm run hide'>446</p>
+<p class='stm run hide_run'>439</p>
+<p class='stm par run hide_run'>440</p>
+<p class='stm run hide_run'>441</p>
+<p class='stm run hide_run'>442</p>
+<p class='stm run hide_run'>443</p>
+<p class='stm run hide_run'>444</p>
+<p class='stm run hide_run'>445</p>
+<p class='stm run hide_run'>446</p>
<p class='pln'>447</p>
-<p class='stm run hide'>448</p>
+<p class='stm run hide_run'>448</p>
<p class='pln'>449</p>
<p class='pln'>450</p>
-<p class='stm run hide'>451</p>
-<p class='stm run hide'>452</p>
+<p class='stm run hide_run'>451</p>
+<p class='stm par run hide_run'>452</p>
<p class='stm mis'>453</p>
<p class='stm mis'>454</p>
<p class='stm mis'>455</p>
@@ -503,45 +508,45 @@ function toggle_lines(btn, cls) { <p class='pln'>464</p>
<p class='pln'>465</p>
<p class='pln'>466</p>
-<p class='stm run hide'>467</p>
+<p class='stm par run hide_run'>467</p>
<p class='stm mis'>468</p>
<p class='pln'>469</p>
-<p class='stm run hide'>470</p>
-<p class='stm run hide'>471</p>
-<p class='stm run hide'>472</p>
+<p class='stm par run hide_run'>470</p>
+<p class='stm run hide_run'>471</p>
+<p class='stm run hide_run'>472</p>
<p class='pln'>473</p>
-<p class='stm run hide'>474</p>
+<p class='stm par run hide_run'>474</p>
<p class='stm mis'>475</p>
<p class='pln'>476</p>
-<p class='stm run hide'>477</p>
+<p class='stm par run hide_run'>477</p>
<p class='stm mis'>478</p>
-<p class='stm run hide'>479</p>
+<p class='stm par run hide_run'>479</p>
<p class='stm mis'>480</p>
<p class='pln'>481</p>
<p class='pln'>482</p>
<p class='pln'>483</p>
-<p class='stm run hide'>484</p>
+<p class='stm run hide_run'>484</p>
<p class='pln'>485</p>
-<p class='stm run hide'>486</p>
+<p class='stm run hide_run'>486</p>
<p class='pln'>487</p>
<p class='pln'>488</p>
<p class='pln'>489</p>
-<p class='stm run hide'>490</p>
+<p class='stm par run hide_run'>490</p>
<p class='pln'>491</p>
<p class='stm mis'>492</p>
<p class='stm mis'>493</p>
-<p class='stm run hide'>494</p>
+<p class='stm run hide_run'>494</p>
<p class='pln'>495</p>
-<p class='stm run hide'>496</p>
+<p class='stm run hide_run'>496</p>
<p class='pln'>497</p>
<p class='pln'>498</p>
<p class='pln'>499</p>
-<p class='stm run hide'>500</p>
-<p class='stm run hide'>501</p>
-<p class='stm run hide'>502</p>
-<p class='stm run hide'>503</p>
+<p class='stm run hide_run'>500</p>
+<p class='stm run hide_run'>501</p>
+<p class='stm run hide_run'>502</p>
+<p class='stm run hide_run'>503</p>
<p class='pln'>504</p>
-<p class='stm run hide'>505</p>
+<p class='stm run hide_run'>505</p>
<p class='pln'>506</p>
<p class='pln'>507</p>
<p class='stm mis'>508</p>
@@ -559,20 +564,20 @@ function toggle_lines(btn, cls) { <p class='stm mis'>520</p>
<p class='stm mis'>521</p>
<p class='pln'>522</p>
-<p class='stm run hide'>523</p>
+<p class='stm run hide_run'>523</p>
<p class='stm mis'>524</p>
<p class='stm mis'>525</p>
<p class='pln'>526</p>
-<p class='stm run hide'>527</p>
+<p class='stm run hide_run'>527</p>
<p class='stm mis'>528</p>
<p class='stm mis'>529</p>
<p class='stm mis'>530</p>
<p class='pln'>531</p>
-<p class='stm run hide'>532</p>
+<p class='stm run hide_run'>532</p>
<p class='stm mis'>533</p>
<p class='stm mis'>534</p>
<p class='pln'>535</p>
-<p class='stm run hide'>536</p>
+<p class='stm run hide_run'>536</p>
<p class='pln'>537</p>
<p class='pln'>538</p>
<p class='pln'>539</p>
@@ -620,7 +625,7 @@ function toggle_lines(btn, cls) { <p class='pln'>581</p>
<p class='stm mis'>582</p>
<p class='pln'>583</p>
-<p class='stm run hide'>584</p>
+<p class='stm run hide_run'>584</p>
<p class='pln'>585</p>
<p class='pln'>586</p>
<p class='stm mis'>587</p>
@@ -637,7 +642,7 @@ function toggle_lines(btn, cls) { <p class='stm mis'>598</p>
<p class='stm mis'>599</p>
<p class='pln'>600</p>
-<p class='stm run hide'>601</p>
+<p class='stm run hide_run'>601</p>
<p class='pln'>602</p>
<p class='pln'>603</p>
<p class='stm mis'>604</p>
@@ -655,7 +660,7 @@ function toggle_lines(btn, cls) { <p class='pln'>616</p>
<p class='stm mis'>617</p>
<p class='pln'>618</p>
-<p class='stm run hide'>619</p>
+<p class='stm run hide_run'>619</p>
<p class='pln'>620</p>
<p class='pln'>621</p>
<p class='pln'>622</p>
@@ -680,7 +685,7 @@ function toggle_lines(btn, cls) { <p class='pln'>641</p>
<p class='stm mis'>642</p>
<p class='pln'>643</p>
-<p class='stm run hide'>644</p>
+<p class='stm run hide_run'>644</p>
<p class='pln'>645</p>
<p class='pln'>646</p>
<p class='pln'>647</p>
@@ -749,715 +754,715 @@ function toggle_lines(btn, cls) { </td>
<td class='text' valign='top'>
-<p class='pln'><span class='str'>""" Cog code generation tool.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> http://nedbatchelder.com/code/cog</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> </span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> Copyright 2004-2009, Ned Batchelder.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'>"""</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>import</span> <span class='nam'>copy</span><span class='op'>,</span> <span class='nam'>getopt</span><span class='op'>,</span> <span class='nam'>imp</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>,</span> <span class='nam'>shlex</span><span class='op'>,</span> <span class='nam'>string</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>,</span> <span class='nam'>traceback</span><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>from</span> <span class='nam'>cStringIO</span> <span class='key'>import</span> <span class='nam'>StringIO</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'><span class='com'># The recommended way to compute md5's changed in Python 2.5</span><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>try</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>import</span> <span class='nam'>hashlib</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>hash_factory</span> <span class='op'>=</span> <span class='nam'>hashlib</span><span class='op'>.</span><span class='nam'>md5</span><span class="strut"> </span></p>
-<p class='stm mis'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>import</span> <span class='nam'>md5</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>hash_factory</span> <span class='op'>=</span> <span class='nam'>md5</span><span class='op'>.</span><span class='nam'>new</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='nam'>__all__</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'Cog'</span><span class='op'>,</span> <span class='str'>'CogUsageError'</span><span class='op'>]</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='nam'>__version__</span> <span class='op'>=</span> <span class='str'>'2.2'</span> <span class='com'># History at the end of the file.</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='nam'>usage</span> <span class='op'>=</span> <span class='str'>"""\</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'>cog - generate code with inlined Python code.</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'><span class='str'>cog [OPTIONS] [INFILE | @FILELIST] ...</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'><span class='str'>INFILE is the name of an input file.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'>FILELIST is the name of a text file containing file names or</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> other @FILELISTs.</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'><span class='str'>OPTIONS:</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -c Checksum the output to protect it against accidental change.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -d Delete the generator code from the output file.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -D name=val Define a global string available to your generator code.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -e Warn if a file has no cog code in it.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -I PATH Add PATH to the list of directories for data files and modules.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -o OUTNAME Write the output to OUTNAME.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -r Replace the input file with the output.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -s STRING Suffix all generated output lines with STRING.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -U Write the output with Unix newlines (only LF line-endings).</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -w CMD Use CMD if the output file needs to be made writable.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> A %s in the CMD will be filled with the filename.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -x Excise all the generated output without running the generators.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -z The [[[end]]] marker can be omitted, and is assumed at eof.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -v Print the version of cog and exit.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> -h Print this help.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'>"""</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'><span class='com'># Other package modules</span><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>from</span> <span class='nam'>whiteutils</span> <span class='key'>import</span> <span class='op'>*</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='nam'>Exception</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Any exception raised by Cog.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>file</span><span class='op'>=</span><span class='str'>''</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>file</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>Exception</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='str'>"%s(%d): %s"</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>file</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>Exception</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" An error in usage of command-line arguments in cog.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='exc'> <span class='key'>pass</span> <span class='com'>#pragma: no cover</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogInternalError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" An error in the coding of Cog. Should never happen.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='exc'> <span class='key'>pass</span> <span class='com'>#pragma: no cover</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogGeneratedError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" An error raised by a user's cog generator.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='exc'> <span class='key'>pass</span> <span class='com'>#pragma: no cover</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>Redirectable</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" An object with its own stdout and stderr files.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stdout</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stderr</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Assign new files for standard out and/or standard error.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>stdout</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span> <span class='op'>=</span> <span class='nam'>stdout</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>stderr</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>stderr</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogGenerator</span><span class='op'>(</span><span class='nam'>Redirectable</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" A generator pulled from a source file.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>Redirectable</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='str'>'\n'</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>getCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Extract the executable Python code from the generator.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># If the markers and lines all have the same prefix</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># (end-of-line comment chars, for example),</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># then remove it from all the lines.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>prefIn</span> <span class='op'>=</span> <span class='nam'>commonPrefix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>prefIn</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>=</span> <span class='op'>[</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>prefIn</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>]</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>=</span> <span class='op'>[</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>prefIn</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>]</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>return</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>evaluate</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>cog</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='str'>'cog generator'</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># figure out the right whitespace prefix for the output</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>prefOut</span> <span class='op'>=</span> <span class='nam'>whitePrefix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>intext</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>intext</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>return</span> <span class='str'>''</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># In Python 2.2, the last line has to end in a newline.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>intext</span> <span class='op'>=</span> <span class='str'>"import cog\n"</span> <span class='op'>+</span> <span class='nam'>intext</span> <span class='op'>+</span> <span class='str'>"\n"</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>code</span> <span class='op'>=</span> <span class='nam'>compile</span><span class='op'>(</span><span class='nam'>intext</span><span class='op'>,</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>fname</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'exec'</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Make sure the "cog" module has our state.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>msg</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>msg</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>out</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>outl</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outl</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>error</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>error</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>=</span> <span class='str'>''</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>eval</span><span class='op'>(</span><span class='nam'>code</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># We need to make sure that the last line in the output</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># ends with a newline, or it will be joined to the</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># end-output line, ruining cog's idempotency.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span> <span class='op'>!=</span> <span class='str'>'\n'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>+=</span> <span class='str'>'\n'</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>return</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span><span class='op'>,</span> <span class='nam'>prefOut</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>msg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>"Message: "</span><span class='op'>+</span><span class='nam'>s</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>out</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOut</span><span class='op'>=</span><span class='str'>''</span><span class='op'>,</span> <span class='nam'>dedent</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span> <span class='nam'>trimblanklines</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" The cog.out function.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>trimblanklines</span> <span class='key'>and</span> <span class='op'>(</span><span class='str'>'\n'</span> <span class='key'>in</span> <span class='nam'>sOut</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>sOut</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'\n'</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>lines</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>''</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>del</span> <span class='nam'>lines</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>lines</span> <span class='key'>and</span> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>''</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>del</span> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>sOut</span> <span class='op'>=</span> <span class='str'>'\n'</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>)</span><span class='op'>+</span><span class='str'>'\n'</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>dedent</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>sOut</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>sOut</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>+=</span> <span class='nam'>sOut</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>outl</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOut</span><span class='op'>=</span><span class='str'>''</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kw</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" The cog.outl function.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class='op'>(</span><span class='nam'>sOut</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kw</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class='op'>(</span><span class='str'>'\n'</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>error</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>=</span><span class='str'>'Error raised by cog generator.'</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" The cog.error function.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> Instead of raising standard python errors, cog generators can use</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> this function. It will display the error without a scary Python</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> traceback.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogGeneratedError</span><span class='op'>(</span><span class='nam'>msg</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>NumberedFileReader</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" A decorator for files that counts the readline()'s called.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>f</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>f</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span> <span class='op'>=</span> <span class='num'>0</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>readline</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>f</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>l</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span> <span class='op'>+=</span> <span class='num'>1</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>return</span> <span class='nam'>l</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>linenumber</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogOptions</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Options for a run of cog.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Defaults for argument values.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>args</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>includePath</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>defines</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bShowVersion</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span> <span class='op'>=</span> <span class='nam'>None</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNoGenerate</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span> <span class='op'>=</span> <span class='nam'>None</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bHashOutput</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sSuffix</span> <span class='op'>=</span> <span class='nam'>None</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNewlines</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>__cmp__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>other</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Comparison operator for tests to use.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>__dict__</span><span class='op'>.</span><span class='nam'>__cmp__</span><span class='op'>(</span><span class='nam'>other</span><span class='op'>.</span><span class='nam'>__dict__</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>clone</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Make a clone of these options, for further refinement.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>return</span> <span class='nam'>copy</span><span class='op'>.</span><span class='nam'>deepcopy</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>dirs</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Add directories to the include path.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>dirs</span> <span class='op'>=</span> <span class='nam'>dirs</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>pathsep</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>dirs</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Parse the command line arguments.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>opts</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>args</span> <span class='op'>=</span> <span class='nam'>getopt</span><span class='op'>.</span><span class='nam'>getopt</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>,</span> <span class='str'>'cdD:eI:o:rs:Uvw:xz'</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>except</span> <span class='nam'>getopt</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='nam'>msg</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Handle the command line arguments.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>for</span> <span class='nam'>o</span><span class='op'>,</span> <span class='nam'>a</span> <span class='key'>in</span> <span class='nam'>opts</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-c'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bHashOutput</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-d'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-D'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>a</span><span class='op'>.</span><span class='nam'>count</span><span class='op'>(</span><span class='str'>'='</span><span class='op'>)</span> <span class='op'><</span> <span class='num'>1</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>"-D takes a name=value argument"</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>value</span> <span class='op'>=</span> <span class='nam'>a</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'='</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>defines</span><span class='op'>[</span><span class='nam'>name</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>value</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-e'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-I'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>a</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-o'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span> <span class='op'>=</span> <span class='nam'>a</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-r'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-s'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sSuffix</span> <span class='op'>=</span> <span class='nam'>a</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-U'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNewlines</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-v'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bShowVersion</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-w'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span> <span class='op'>=</span> <span class='nam'>a</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-x'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNoGenerate</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-z'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Since getopt.getopt is given a list of possible flags,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># this is an internal error.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogInternalError</span><span class='op'>(</span><span class='str'>"Don't understand argument %s"</span> <span class='op'>%</span> <span class='nam'>o</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>validate</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Does nothing if everything is OK, raises CogError's if it's not.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>"Can't use -d with -r (or you would delete all your source!)"</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>"Can't use -o with -r (they are opposites)"</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>Cog</span><span class='op'>(</span><span class='nam'>Redirectable</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" The Cog engine.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>Redirectable</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span> <span class='op'>=</span> <span class='str'>'[[[cog'</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span> <span class='op'>=</span> <span class='str'>']]]'</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span> <span class='op'>=</span> <span class='str'>'[[[end]]]'</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reEndOutput</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>compile</span><span class='op'>(</span><span class='str'>r'\[\[\[end]]](?P<hashsect> *\(checksum: (?P<hash>[a-f0-9]+)\))'</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndFormat</span> <span class='op'>=</span> <span class='str'>'[[[end]]] (checksum: %s)'</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>'w'</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>installCogModule</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>showWarning</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>"Warning:"</span><span class='op'>,</span> <span class='nam'>msg</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span> <span class='key'>and</span> <span class='xx'>\</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>installCogModule</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Magic mumbo-jumbo so that imported Python modules</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> can say "import cog" and get our state.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span> <span class='op'>=</span> <span class='nam'>imp</span><span class='op'>.</span><span class='nam'>new_module</span><span class='op'>(</span><span class='str'>'cog'</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class='op'>[</span><span class='str'>'cog'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>fIn</span><span class='op'>,</span> <span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Process an input file object to an output file object.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> fIn and fOut can be file objects, or file names.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>sFileIn</span> <span class='op'>=</span> <span class='nam'>fname</span> <span class='key'>or</span> <span class='str'>''</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>sFileOut</span> <span class='op'>=</span> <span class='nam'>fname</span> <span class='key'>or</span> <span class='str'>''</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>fInToClose</span> <span class='op'>=</span> <span class='nam'>fOutToClose</span> <span class='op'>=</span> <span class='nam'>None</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Convert filenames to files.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Open the input file.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>sFileIn</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>fIn</span> <span class='op'>=</span> <span class='nam'>fInToClose</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>,</span> <span class='str'>'r'</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Open the output file.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>sFileOut</span> <span class='op'>=</span> <span class='nam'>fOut</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>fOut</span> <span class='op'>=</span> <span class='nam'>fOutToClose</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>try</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>fIn</span> <span class='op'>=</span> <span class='nam'>NumberedFileReader</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>bSawCog</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>inFile</span> <span class='op'>=</span> <span class='nam'>sFileIn</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>outFile</span> <span class='op'>=</span> <span class='nam'>sFileOut</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># The globals dict we'll use for this file.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>globals</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>globals</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># If there are any global defines, put them in the globals.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>globals</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>defines</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># loop over generator chunks</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>while</span> <span class='nam'>l</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Find the next spec begin</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>break</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># l is the begin spec</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>gen</span> <span class='op'>=</span> <span class='nam'>CogGenerator</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>firstLineNum</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>firstLineNum</span> <span class='op'>=</span> <span class='nam'>firstLineNum</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># If the spec begin is also a spec end, then process the single</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># line of code inside.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>beg</span> <span class='op'>=</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>end</span> <span class='op'>=</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>beg</span> <span class='op'>></span> <span class='nam'>end</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Cog code markers inverted"</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>firstLineNum</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>sCode</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>[</span><span class='nam'>beg</span><span class='op'>+</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span><span class='op'>:</span><span class='nam'>end</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>sCode</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Deal with an ordinary code block.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Get all the lines in the spec</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>"Cog block begun but never ended."</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>firstLineNum</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Eat all the lines in the output section. While reading past</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># them, compute the md5 hash of the old output.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>hasher</span> <span class='op'>=</span> <span class='nam'>hash_factory</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>curHash</span> <span class='op'>=</span> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>hexdigest</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># We reached end of file before we found the end output line.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Missing '%s' before end of file."</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Write the output of the spec to be the new output if we're </span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># supposed to generate code.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>hasher</span> <span class='op'>=</span> <span class='nam'>hash_factory</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bNoGenerate</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>sFile</span> <span class='op'>=</span> <span class='str'>"%s+%d"</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>firstLineNum</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>sGen</span> <span class='op'>=</span> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>evaluate</span><span class='op'>(</span><span class='nam'>cog</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>=</span><span class='nam'>globals</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>sFile</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>sGen</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>suffixLines</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>newHash</span> <span class='op'>=</span> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>hexdigest</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>bSawCog</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Write the ending output line</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>hashMatch</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reEndOutput</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bHashOutput</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>hashMatch</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>oldHash</span> <span class='op'>=</span> <span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>groupdict</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='str'>'hash'</span><span class='op'>]</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>oldHash</span> <span class='op'>!=</span> <span class='nam'>curHash</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Output has been edited! Delete old checksum to unprotect."</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Create a new end line with the correct hash.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>endpieces</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># There was no old hash, but we want a new hash.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>endpieces</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>l</span> <span class='op'>=</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndFormat</span> <span class='op'>%</span> <span class='nam'>newHash</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>endpieces</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># We don't want hashes output, so if there was one, get rid of</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># it.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>hashMatch</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>groupdict</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='str'>'hashsect'</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>bSawCog</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>showWarning</span><span class='op'>(</span><span class='str'>"no cog code found in %s"</span> <span class='op'>%</span> <span class='nam'>sFileIn</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>finally</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>fInToClose</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>fInToClose</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>fOutToClose</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>fOutToClose</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># A regex for non-empty lines, used by suffixLines.</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>reNonEmptyLines</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>compile</span><span class='op'>(</span><span class='str'>"^\s*\S+.*$"</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>MULTILINE</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>suffixLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>text</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Add suffixes to the lines in text, if our options desire it.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> text is many lines, as a single string.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sSuffix</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Find all non-blank lines, and add the suffix to the end.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>repl</span> <span class='op'>=</span> <span class='str'>r"\g<0>"</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sSuffix</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'\\'</span><span class='op'>,</span> <span class='str'>'\\\\'</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>text</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reNonEmptyLines</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='nam'>repl</span><span class='op'>,</span> <span class='nam'>text</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>return</span> <span class='nam'>text</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>processString</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sInput</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Process sInput as the text to cog.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> Return the cogged output as a string.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>fOld</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>(</span><span class='nam'>sInput</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>fNew</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>fOld</span><span class='op'>,</span> <span class='nam'>fNew</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>fname</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>return</span> <span class='nam'>fNew</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>replaceFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>sNewText</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Replace file sOldPath with the contents sNewText</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Need to ensure we can write.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Use an external command to make the file writable.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>cmd</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'%s'</span><span class='op'>,</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>popen</span><span class='op'>(</span><span class='nam'>cmd</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Couldn't make %s writable"</span> <span class='op'>%</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Can't write!</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Can't overwrite %s"</span> <span class='op'>%</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>sNewText</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>saveIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedInclude</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>[</span><span class='op'>:</span><span class='op'>]</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedSysPath</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>[</span><span class='op'>:</span><span class='op'>]</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>restoreIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedInclude</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedSysPath</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>includePath</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>includePath</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>includePath</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>processOneFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Process one filename through cog.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>saveIncludePath</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Since we know where the input file came from,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># push its directory onto the include path.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>dirname</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Set the file output mode based on whether we want \n or native</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># line endings.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>'w'</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bNewlines</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>'wb'</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># How we process the file depends on where the output is going.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bReplace</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># We want to replace the cog file with the output,</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># but only if they differ.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>"Cogging %s"</span> <span class='op'>%</span> <span class='nam'>sFile</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>bNeedNewline</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>fOldFile</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>sOldText</span> <span class='op'>=</span> <span class='nam'>fOldFile</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>fOldFile</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>sNewText</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>sOldText</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>sFile</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>sOldText</span> <span class='op'>!=</span> <span class='nam'>sNewText</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>" (changed)"</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>bNeedNewline</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>replaceFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>sNewText</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>finally</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># The try-finally block is so we can print a partial line</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># with the name of the file, and print (changed) on the</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># same line, but also make sure to break the line before</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># any traceback.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>bNeedNewline</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>finally</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>restoreIncludePath</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>processFileList</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFileList</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Process the files in a file list.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>flist</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sFileList</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>flist</span><span class='op'>.</span><span class='nam'>readlines</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>flist</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>lines</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Use shlex to parse the line like a shell.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>lex</span> <span class='op'>=</span> <span class='nam'>shlex</span><span class='op'>.</span><span class='nam'>shlex</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>posix</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>whitespace_split</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>commenters</span> <span class='op'>=</span> <span class='str'>'#'</span><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># No escapes, so that backslash can be part of the path</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>escape</span> <span class='op'>=</span> <span class='str'>''</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>args</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>lex</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>args</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processArguments</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>processArguments</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>args</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Process one command-line.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>saved_options</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>clone</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>validate</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>==</span> <span class='str'>'@'</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>"Can't use -o with @file"</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFileList</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processOneFile</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>saved_options</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>callableMain</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" All of command-line cog, but in a callable form.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> This is used by main.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> argv is the equivalent of sys.argv.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>argv0</span> <span class='op'>=</span> <span class='nam'>argv</span><span class='op'>.</span><span class='nam'>pop</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'> <span class='com'># Provide help if asked for anywhere in the command line.</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='str'>'-?'</span> <span class='key'>in</span> <span class='nam'>argv</span> <span class='key'>or</span> <span class='str'>'-h'</span> <span class='key'>in</span> <span class='nam'>argv</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>usage</span><span class='op'>,</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>return</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>validate</span><span class='op'>(</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bShowVersion</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>"Cog version %s"</span> <span class='op'>%</span> <span class='nam'>__version__</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>return</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>args</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>for</span> <span class='nam'>a</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>args</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processArguments</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>a</span><span class='op'>]</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>"No files to process"</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm run hide'> <span class='key'>def</span> <span class='nam'>main</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='pln'> <span class='str'>""" Handle the command-line execution for cog.</span><span class="strut"> </span></p>
-<p class='pln'><span class='str'> """</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>return</span> <span class='num'>0</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>except</span> <span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>err</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='str'>"(for help use -?)"</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>return</span> <span class='num'>2</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>except</span> <span class='nam'>CogGeneratedError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='str'>"Error: %s"</span> <span class='op'>%</span> <span class='nam'>err</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>return</span> <span class='num'>3</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>except</span> <span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>err</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>return</span> <span class='num'>1</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>print_exc</span><span class='op'>(</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>)</span><span class="strut"> </span></p>
-<p class='stm mis'> <span class='key'>return</span> <span class='num'>1</span><span class="strut"> </span></p>
-<p class='pln'><span class="strut"> </span></p>
-<p class='pln'><span class='com'># History:</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20040210: First public version.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20040220: Text preceding the start and end marker are removed from Python lines.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># -v option on the command line shows the version.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20040311: Make sure the last line of output is properly ended with a newline.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20040605: Fixed some blank line handling in cog.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># Fixed problems with assigning to xml elements in handyxml.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20040621: Changed all line-ends to LF from CRLF.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20041002: Refactor some option handling to simplify unittesting the options.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20041118: cog.out and cog.outl have optional string arguments.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20041119: File names weren't being properly passed around for warnings, etc.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20041122: Added cog.firstLineNum: a property with the line number of the [[[cog line.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># Added cog.inFile and cog.outFile: the names of the input and output file.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20041218: Single-line cog generators, with start marker and end marker on</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># the same line.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20041230: Keep a single globals dict for all the code fragments in a single</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># file so they can share state.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050206: Added the -x switch to remove all generated output.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050218: Now code can be on the marker lines as well.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050219: Added -c switch to checksum the output so that edits can be</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># detected before they are obliterated.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050521: Added cog.error, contributed by Alexander Belchenko.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050720: Added code deletion and settable globals contributed by Blake Winton.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050724: Many tweaks to improve code coverage.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050726: Error messages are now printed with no traceback.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># Code can no longer appear on the marker lines,</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># except for single-line style.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># -z allows omission of the [[[end]]] marker, and it will be assumed</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># at the end of the file.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050729: Refactor option parsing into a separate class, in preparation for</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># future features.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050805: The cogmodule.path wasn't being properly maintained.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050808: Added the -D option to define a global value.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050810: The %s in the -w command is dealt with more robustly.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># Added the -s option to suffix output lines with a marker.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20050817: Now @files can have arguments on each line to change the cog's</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># behavior for that line.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20051006: Version 2.0</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20080521: -U options lets you create Unix newlines on Windows. Thanks,</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># Alexander Belchenko.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20080522: It's now ok to have -d with output to stdout, and now we validate</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># the args after each line of an @file.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># 20090520: Use hashlib where it's available, to avoid a warning.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># Use the builtin compile() instead of compiler, for Jython.</span><span class="strut"> </span></p>
-<p class='pln'><span class='com'># Explicitly close files we opened, Jython likes this.</span><span class="strut"> </span></p>
+<p class='pln'><span class='str'>""" Cog code generation tool.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> http://nedbatchelder.com/code/cog</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> </span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> Copyright 2004-2009, Ned Batchelder.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'>"""</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>import</span> <span class='nam'>copy</span><span class='op'>,</span> <span class='nam'>getopt</span><span class='op'>,</span> <span class='nam'>imp</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>,</span> <span class='nam'>shlex</span><span class='op'>,</span> <span class='nam'>string</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>,</span> <span class='nam'>traceback</span><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>from</span> <span class='nam'>cStringIO</span> <span class='key'>import</span> <span class='nam'>StringIO</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'><span class='com'># The recommended way to compute md5's changed in Python 2.5</span><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>import</span> <span class='nam'>hashlib</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>hash_factory</span> <span class='op'>=</span> <span class='nam'>hashlib</span><span class='op'>.</span><span class='nam'>md5</span><span class='strut'> </span></p>
+<p class='stm mis'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>import</span> <span class='nam'>md5</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>hash_factory</span> <span class='op'>=</span> <span class='nam'>md5</span><span class='op'>.</span><span class='nam'>new</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='nam'>__all__</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>'Cog'</span><span class='op'>,</span> <span class='str'>'CogUsageError'</span><span class='op'>]</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='nam'>__version__</span> <span class='op'>=</span> <span class='str'>'2.2'</span> <span class='com'># History at the end of the file.</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='nam'>usage</span> <span class='op'>=</span> <span class='str'>"""\</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'>cog - generate code with inlined Python code.</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'><span class='str'>cog [OPTIONS] [INFILE | @FILELIST] ...</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'><span class='str'>INFILE is the name of an input file.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'>FILELIST is the name of a text file containing file names or</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> other @FILELISTs.</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'><span class='str'>OPTIONS:</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -c Checksum the output to protect it against accidental change.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -d Delete the generator code from the output file.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -D name=val Define a global string available to your generator code.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -e Warn if a file has no cog code in it.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -I PATH Add PATH to the list of directories for data files and modules.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -o OUTNAME Write the output to OUTNAME.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -r Replace the input file with the output.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -s STRING Suffix all generated output lines with STRING.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -U Write the output with Unix newlines (only LF line-endings).</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -w CMD Use CMD if the output file needs to be made writable.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> A %s in the CMD will be filled with the filename.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -x Excise all the generated output without running the generators.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -z The [[[end]]] marker can be omitted, and is assumed at eof.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -v Print the version of cog and exit.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> -h Print this help.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'>"""</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'><span class='com'># Other package modules</span><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>from</span> <span class='nam'>whiteutils</span> <span class='key'>import</span> <span class='op'>*</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='nam'>Exception</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Any exception raised by Cog.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>file</span><span class='op'>=</span><span class='str'>''</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>59</span> <span class='key'>if</span> <span class='nam'>file</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>Exception</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='str'>"%s(%d): %s"</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>file</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>Exception</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" An error in usage of command-line arguments in cog.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='exc'> <span class='key'>pass</span> <span class='com'>#pragma: no cover</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogInternalError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" An error in the coding of Cog. Should never happen.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='exc'> <span class='key'>pass</span> <span class='com'>#pragma: no cover</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogGeneratedError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" An error raised by a user's cog generator.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='exc'> <span class='key'>pass</span> <span class='com'>#pragma: no cover</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>class</span> <span class='nam'>Redirectable</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" An object with its own stdout and stderr files.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stdout</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stderr</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Assign new files for standard out and/or standard error.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>88</span> <span class='key'>if</span> <span class='nam'>stdout</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span> <span class='op'>=</span> <span class='nam'>stdout</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>89</span> <span class='key'>if</span> <span class='nam'>stderr</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>stderr</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogGenerator</span><span class='op'>(</span><span class='nam'>Redirectable</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" A generator pulled from a source file.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>Redirectable</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='str'>'\n'</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>getCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Extract the executable Python code from the generator.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># If the markers and lines all have the same prefix</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># (end-of-line comment chars, for example),</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># then remove it from all the lines.</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>prefIn</span> <span class='op'>=</span> <span class='nam'>commonPrefix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>prefIn</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>=</span> <span class='op'>[</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>prefIn</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>]</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>=</span> <span class='op'>[</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>prefIn</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>]</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>evaluate</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>cog</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='str'>'cog generator'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># figure out the right whitespace prefix for the output</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>prefOut</span> <span class='op'>=</span> <span class='nam'>whitePrefix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>intext</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>intext</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>return</span> <span class='str'>''</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># In Python 2.2, the last line has to end in a newline.</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>intext</span> <span class='op'>=</span> <span class='str'>"import cog\n"</span> <span class='op'>+</span> <span class='nam'>intext</span> <span class='op'>+</span> <span class='str'>"\n"</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>code</span> <span class='op'>=</span> <span class='nam'>compile</span><span class='op'>(</span><span class='nam'>intext</span><span class='op'>,</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>fname</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>'exec'</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Make sure the "cog" module has our state.</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>msg</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>msg</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>out</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>outl</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outl</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>error</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>error</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>=</span> <span class='str'>''</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>eval</span><span class='op'>(</span><span class='nam'>code</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># We need to make sure that the last line in the output</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># ends with a newline, or it will be joined to the</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># end-output line, ruining cog's idempotency.</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span> <span class='op'>!=</span> <span class='str'>'\n'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>+=</span> <span class='str'>'\n'</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span><span class='op'>,</span> <span class='nam'>prefOut</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>msg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>"Message: "</span><span class='op'>+</span><span class='nam'>s</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>out</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOut</span><span class='op'>=</span><span class='str'>''</span><span class='op'>,</span> <span class='nam'>dedent</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span> <span class='nam'>trimblanklines</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" The cog.out function.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>trimblanklines</span> <span class='key'>and</span> <span class='op'>(</span><span class='str'>'\n'</span> <span class='key'>in</span> <span class='nam'>sOut</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>sOut</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'\n'</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>lines</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>''</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>del</span> <span class='nam'>lines</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>159</span> <span class='key'>if</span> <span class='nam'>lines</span> <span class='key'>and</span> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>''</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>del</span> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>sOut</span> <span class='op'>=</span> <span class='str'>'\n'</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>)</span><span class='op'>+</span><span class='str'>'\n'</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>dedent</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>sOut</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>sOut</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>+=</span> <span class='nam'>sOut</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>outl</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOut</span><span class='op'>=</span><span class='str'>''</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kw</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" The cog.outl function.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class='op'>(</span><span class='nam'>sOut</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kw</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class='op'>(</span><span class='str'>'\n'</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>error</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>=</span><span class='str'>'Error raised by cog generator.'</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" The cog.error function.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> Instead of raising standard python errors, cog generators can use</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> this function. It will display the error without a scary Python</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> traceback.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogGeneratedError</span><span class='op'>(</span><span class='nam'>msg</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>class</span> <span class='nam'>NumberedFileReader</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" A decorator for files that counts the readline()'s called.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>f</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>f</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>readline</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>f</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>l</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>l</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>linenumber</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogOptions</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Options for a run of cog.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Defaults for argument values.</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>args</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>includePath</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>defines</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bShowVersion</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNoGenerate</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bHashOutput</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sSuffix</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNewlines</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__cmp__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>other</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Comparison operator for tests to use.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>__dict__</span><span class='op'>.</span><span class='nam'>__cmp__</span><span class='op'>(</span><span class='nam'>other</span><span class='op'>.</span><span class='nam'>__dict__</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>clone</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Make a clone of these options, for further refinement.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>return</span> <span class='nam'>copy</span><span class='op'>.</span><span class='nam'>deepcopy</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>dirs</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Add directories to the include path.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>dirs</span> <span class='op'>=</span> <span class='nam'>dirs</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>pathsep</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>dirs</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Parse the command line arguments.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>opts</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>args</span> <span class='op'>=</span> <span class='nam'>getopt</span><span class='op'>.</span><span class='nam'>getopt</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>,</span> <span class='str'>'cdD:eI:o:rs:Uvw:xz'</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>except</span> <span class='nam'>getopt</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='nam'>msg</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Handle the command line arguments.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>for</span> <span class='nam'>o</span><span class='op'>,</span> <span class='nam'>a</span> <span class='key'>in</span> <span class='nam'>opts</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-c'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bHashOutput</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-d'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-D'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>a</span><span class='op'>.</span><span class='nam'>count</span><span class='op'>(</span><span class='str'>'='</span><span class='op'>)</span> <span class='op'><</span> <span class='num'>1</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>"-D takes a name=value argument"</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>value</span> <span class='op'>=</span> <span class='nam'>a</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>'='</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>defines</span><span class='op'>[</span><span class='nam'>name</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>value</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-e'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-I'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>a</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-o'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span> <span class='op'>=</span> <span class='nam'>a</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-r'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-s'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sSuffix</span> <span class='op'>=</span> <span class='nam'>a</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-U'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNewlines</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-v'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bShowVersion</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-w'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span> <span class='op'>=</span> <span class='nam'>a</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-x'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNoGenerate</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>'-z'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Since getopt.getopt is given a list of possible flags,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># this is an internal error.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogInternalError</span><span class='op'>(</span><span class='str'>"Don't understand argument %s"</span> <span class='op'>%</span> <span class='nam'>o</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>validate</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Does nothing if everything is OK, raises CogError's if it's not.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>"Can't use -d with -r (or you would delete all your source!)"</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>"Can't use -o with -r (they are opposites)"</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'><span class='key'>class</span> <span class='nam'>Cog</span><span class='op'>(</span><span class='nam'>Redirectable</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" The Cog engine.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>Redirectable</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span> <span class='op'>=</span> <span class='str'>'[[[cog'</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span> <span class='op'>=</span> <span class='str'>']]]'</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span> <span class='op'>=</span> <span class='str'>'[[[end]]]'</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reEndOutput</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>compile</span><span class='op'>(</span><span class='str'>r'\[\[\[end]]](?P<hashsect> *\(checksum: (?P<hash>[a-f0-9]+)\))'</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndFormat</span> <span class='op'>=</span> <span class='str'>'[[[end]]] (checksum: %s)'</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>'w'</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>installCogModule</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>showWarning</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>"Warning:"</span><span class='op'>,</span> <span class='nam'>msg</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span> <span class='key'>and</span> <span class='xx'>\</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>)</span> <span class='op'>>=</span> <span class='num'>0</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>installCogModule</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Magic mumbo-jumbo so that imported Python modules</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> can say "import cog" and get our state.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span> <span class='op'>=</span> <span class='nam'>imp</span><span class='op'>.</span><span class='nam'>new_module</span><span class='op'>(</span><span class='str'>'cog'</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class='op'>[</span><span class='str'>'cog'</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>fIn</span><span class='op'>,</span> <span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Process an input file object to an output file object.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> fIn and fOut can be file objects, or file names.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>sFileIn</span> <span class='op'>=</span> <span class='nam'>fname</span> <span class='key'>or</span> <span class='str'>''</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>sFileOut</span> <span class='op'>=</span> <span class='nam'>fname</span> <span class='key'>or</span> <span class='str'>''</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>fInToClose</span> <span class='op'>=</span> <span class='nam'>fOutToClose</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Convert filenames to files.</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>333</span> <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Open the input file.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>sFileIn</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>fIn</span> <span class='op'>=</span> <span class='nam'>fInToClose</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>,</span> <span class='str'>'r'</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>337</span> <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Open the output file.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>sFileOut</span> <span class='op'>=</span> <span class='nam'>fOut</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>fOut</span> <span class='op'>=</span> <span class='nam'>fOutToClose</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>fIn</span> <span class='op'>=</span> <span class='nam'>NumberedFileReader</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>bSawCog</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>inFile</span> <span class='op'>=</span> <span class='nam'>sFileIn</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>outFile</span> <span class='op'>=</span> <span class='nam'>sFileOut</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># The globals dict we'll use for this file.</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>353</span> <span class='key'>if</span> <span class='nam'>globals</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>globals</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># If there are any global defines, put them in the globals.</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>globals</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>defines</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># loop over generator chunks</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>while</span> <span class='nam'>l</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Find the next spec begin</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>361</span> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>364</span> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>break</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>374</span> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># l is the begin spec</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>gen</span> <span class='op'>=</span> <span class='nam'>CogGenerator</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>firstLineNum</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>firstLineNum</span> <span class='op'>=</span> <span class='nam'>firstLineNum</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># If the spec begin is also a spec end, then process the single</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># line of code inside.</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>beg</span> <span class='op'>=</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>end</span> <span class='op'>=</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>if</span> <span class='nam'>beg</span> <span class='op'>></span> <span class='nam'>end</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Cog code markers inverted"</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>firstLineNum</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>sCode</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>[</span><span class='nam'>beg</span><span class='op'>+</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span><span class='op'>:</span><span class='nam'>end</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>sCode</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Deal with an ordinary code block.</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Get all the lines in the spec</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>398</span> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>401</span> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>405</span> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>408</span> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>"Cog block begun but never ended."</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>firstLineNum</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>414</span> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Eat all the lines in the output section. While reading past</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># them, compute the md5 hash of the old output.</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>hasher</span> <span class='op'>=</span> <span class='nam'>hash_factory</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>423</span> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>426</span> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Unexpected '%s'"</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>curHash</span> <span class='op'>=</span> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>hexdigest</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>434</span> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># We reached end of file before we found the end output line.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Missing '%s' before end of file."</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Write the output of the spec to be the new output if we're </span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># supposed to generate code.</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>hasher</span> <span class='op'>=</span> <span class='nam'>hash_factory</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>446</span> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bNoGenerate</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>sFile</span> <span class='op'>=</span> <span class='str'>"%s+%d"</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>firstLineNum</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>sGen</span> <span class='op'>=</span> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>evaluate</span><span class='op'>(</span><span class='nam'>cog</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>=</span><span class='nam'>globals</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>sFile</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>sGen</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>suffixLines</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>newHash</span> <span class='op'>=</span> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>hexdigest</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>bSawCog</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Write the ending output line</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>hashMatch</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reEndOutput</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>453</span> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bHashOutput</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>hashMatch</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>oldHash</span> <span class='op'>=</span> <span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>groupdict</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='str'>'hash'</span><span class='op'>]</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>oldHash</span> <span class='op'>!=</span> <span class='nam'>curHash</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Output has been edited! Delete old checksum to unprotect."</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Create a new end line with the correct hash.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>endpieces</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># There was no old hash, but we want a new hash.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>endpieces</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>l</span> <span class='op'>=</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndFormat</span> <span class='op'>%</span> <span class='nam'>newHash</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>endpieces</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># We don't want hashes output, so if there was one, get rid of</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># it.</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>468</span> <span class='key'>if</span> <span class='nam'>hashMatch</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>groupdict</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='str'>'hashsect'</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>''</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>472</span> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>475</span> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>bSawCog</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>showWarning</span><span class='op'>(</span><span class='str'>"no cog code found in %s"</span> <span class='op'>%</span> <span class='nam'>sFileIn</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>finally</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>478</span> <span class='key'>if</span> <span class='nam'>fInToClose</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>fInToClose</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>480</span> <span class='key'>if</span> <span class='nam'>fOutToClose</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>fOutToClose</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># A regex for non-empty lines, used by suffixLines.</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>reNonEmptyLines</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>compile</span><span class='op'>(</span><span class='str'>"^\s*\S+.*$"</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>MULTILINE</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>suffixLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>text</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Add suffixes to the lines in text, if our options desire it.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> text is many lines, as a single string.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>492</span> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sSuffix</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Find all non-blank lines, and add the suffix to the end.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>repl</span> <span class='op'>=</span> <span class='str'>r"\g<0>"</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sSuffix</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'\\'</span><span class='op'>,</span> <span class='str'>'\\\\'</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>text</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reNonEmptyLines</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='nam'>repl</span><span class='op'>,</span> <span class='nam'>text</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>text</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>processString</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sInput</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Process sInput as the text to cog.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> Return the cogged output as a string.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>fOld</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>(</span><span class='nam'>sInput</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>fNew</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>fOld</span><span class='op'>,</span> <span class='nam'>fNew</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>fname</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>return</span> <span class='nam'>fNew</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>replaceFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>sNewText</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Replace file sOldPath with the contents sNewText</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Need to ensure we can write.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Use an external command to make the file writable.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>cmd</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>'%s'</span><span class='op'>,</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>popen</span><span class='op'>(</span><span class='nam'>cmd</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Couldn't make %s writable"</span> <span class='op'>%</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Can't write!</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>"Can't overwrite %s"</span> <span class='op'>%</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>sNewText</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>saveIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedInclude</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>[</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedSysPath</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>[</span><span class='op'>:</span><span class='op'>]</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>restoreIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedInclude</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedSysPath</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>includePath</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>includePath</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>includePath</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>processOneFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Process one filename through cog.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>saveIncludePath</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Since we know where the input file came from,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># push its directory onto the include path.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>dirname</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Set the file output mode based on whether we want \n or native</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># line endings.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>'w'</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bNewlines</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>'wb'</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># How we process the file depends on where the output is going.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>elif</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bReplace</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># We want to replace the cog file with the output,</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># but only if they differ.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>"Cogging %s"</span> <span class='op'>%</span> <span class='nam'>sFile</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>bNeedNewline</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>fOldFile</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>sOldText</span> <span class='op'>=</span> <span class='nam'>fOldFile</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>fOldFile</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>sNewText</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>sOldText</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>sFile</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>sOldText</span> <span class='op'>!=</span> <span class='nam'>sNewText</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>" (changed)"</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>bNeedNewline</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>replaceFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>sNewText</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>finally</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># The try-finally block is so we can print a partial line</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># with the name of the file, and print (changed) on the</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># same line, but also make sure to break the line before</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># any traceback.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>bNeedNewline</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>finally</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>restoreIncludePath</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>processFileList</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFileList</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Process the files in a file list.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>flist</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sFileList</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>flist</span><span class='op'>.</span><span class='nam'>readlines</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>flist</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>lines</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Use shlex to parse the line like a shell.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>lex</span> <span class='op'>=</span> <span class='nam'>shlex</span><span class='op'>.</span><span class='nam'>shlex</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>posix</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>whitespace_split</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>commenters</span> <span class='op'>=</span> <span class='str'>'#'</span><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># No escapes, so that backslash can be part of the path</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>escape</span> <span class='op'>=</span> <span class='str'>''</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>args</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>lex</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>args</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processArguments</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>processArguments</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>args</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Process one command-line.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>saved_options</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>clone</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>validate</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>==</span> <span class='str'>'@'</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>"Can't use -o with @file"</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFileList</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processOneFile</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>saved_options</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>callableMain</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" All of command-line cog, but in a callable form.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> This is used by main.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> argv is the equivalent of sys.argv.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>argv0</span> <span class='op'>=</span> <span class='nam'>argv</span><span class='op'>.</span><span class='nam'>pop</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'> <span class='com'># Provide help if asked for anywhere in the command line.</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='str'>'-?'</span> <span class='key'>in</span> <span class='nam'>argv</span> <span class='key'>or</span> <span class='str'>'-h'</span> <span class='key'>in</span> <span class='nam'>argv</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>usage</span><span class='op'>,</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>validate</span><span class='op'>(</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bShowVersion</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>"Cog version %s"</span> <span class='op'>%</span> <span class='nam'>__version__</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>return</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>args</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>for</span> <span class='nam'>a</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>args</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processArguments</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>a</span><span class='op'>]</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'> <span class='key'>else</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>"No files to process"</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm run hide_run'> <span class='key'>def</span> <span class='nam'>main</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='pln'> <span class='str'>""" Handle the command-line execution for cog.</span><span class='strut'> </span></p>
+<p class='pln'><span class='str'> """</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>try</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>return</span> <span class='num'>0</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>except</span> <span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>err</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='str'>"(for help use -?)"</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>return</span> <span class='num'>2</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>except</span> <span class='nam'>CogGeneratedError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='str'>"Error: %s"</span> <span class='op'>%</span> <span class='nam'>err</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>return</span> <span class='num'>3</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>except</span> <span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>print</span> <span class='op'>>></span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>err</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>return</span> <span class='num'>1</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>except</span><span class='op'>:</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>print_exc</span><span class='op'>(</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>)</span><span class='strut'> </span></p>
+<p class='stm mis'> <span class='key'>return</span> <span class='num'>1</span><span class='strut'> </span></p>
+<p class='pln'><span class='strut'> </span></p>
+<p class='pln'><span class='com'># History:</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20040210: First public version.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20040220: Text preceding the start and end marker are removed from Python lines.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># -v option on the command line shows the version.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20040311: Make sure the last line of output is properly ended with a newline.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20040605: Fixed some blank line handling in cog.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># Fixed problems with assigning to xml elements in handyxml.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20040621: Changed all line-ends to LF from CRLF.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20041002: Refactor some option handling to simplify unittesting the options.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20041118: cog.out and cog.outl have optional string arguments.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20041119: File names weren't being properly passed around for warnings, etc.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20041122: Added cog.firstLineNum: a property with the line number of the [[[cog line.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># Added cog.inFile and cog.outFile: the names of the input and output file.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20041218: Single-line cog generators, with start marker and end marker on</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># the same line.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20041230: Keep a single globals dict for all the code fragments in a single</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># file so they can share state.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050206: Added the -x switch to remove all generated output.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050218: Now code can be on the marker lines as well.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050219: Added -c switch to checksum the output so that edits can be</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># detected before they are obliterated.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050521: Added cog.error, contributed by Alexander Belchenko.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050720: Added code deletion and settable globals contributed by Blake Winton.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050724: Many tweaks to improve code coverage.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050726: Error messages are now printed with no traceback.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># Code can no longer appear on the marker lines,</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># except for single-line style.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># -z allows omission of the [[[end]]] marker, and it will be assumed</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># at the end of the file.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050729: Refactor option parsing into a separate class, in preparation for</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># future features.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050805: The cogmodule.path wasn't being properly maintained.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050808: Added the -D option to define a global value.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050810: The %s in the -w command is dealt with more robustly.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># Added the -s option to suffix output lines with a marker.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20050817: Now @files can have arguments on each line to change the cog's</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># behavior for that line.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20051006: Version 2.0</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20080521: -U options lets you create Unix newlines on Windows. Thanks,</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># Alexander Belchenko.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20080522: It's now ok to have -d with output to stdout, and now we validate</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># the args after each line of an @file.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># 20090520: Use hashlib where it's available, to avoid a warning.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># Use the builtin compile() instead of compiler, for Jython.</span><span class='strut'> </span></p>
+<p class='pln'><span class='com'># Explicitly close files we opened, Jython likes this.</span><span class='strut'> </span></p>
</td>
</tr>
|