@md2do/core 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +6 -6
  3. package/package.json +1 -1
  4. package/coverage/base.css +0 -224
  5. package/coverage/block-navigation.js +0 -87
  6. package/coverage/coverage-final.json +0 -11
  7. package/coverage/favicon.png +0 -0
  8. package/coverage/index.html +0 -221
  9. package/coverage/lcov-report/base.css +0 -224
  10. package/coverage/lcov-report/block-navigation.js +0 -87
  11. package/coverage/lcov-report/favicon.png +0 -0
  12. package/coverage/lcov-report/index.html +0 -221
  13. package/coverage/lcov-report/prettify.css +0 -1
  14. package/coverage/lcov-report/prettify.js +0 -2
  15. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  16. package/coverage/lcov-report/sorter.js +0 -210
  17. package/coverage/lcov-report/src/filters/index.html +0 -116
  18. package/coverage/lcov-report/src/filters/index.ts.html +0 -1156
  19. package/coverage/lcov-report/src/index.html +0 -116
  20. package/coverage/lcov-report/src/index.ts.html +0 -166
  21. package/coverage/lcov-report/src/parser/index.html +0 -131
  22. package/coverage/lcov-report/src/parser/index.ts.html +0 -1270
  23. package/coverage/lcov-report/src/parser/patterns.ts.html +0 -670
  24. package/coverage/lcov-report/src/scanner/index.html +0 -116
  25. package/coverage/lcov-report/src/scanner/index.ts.html +0 -733
  26. package/coverage/lcov-report/src/sorting/index.html +0 -116
  27. package/coverage/lcov-report/src/sorting/index.ts.html +0 -736
  28. package/coverage/lcov-report/src/utils/dates.ts.html +0 -643
  29. package/coverage/lcov-report/src/utils/id.ts.html +0 -169
  30. package/coverage/lcov-report/src/utils/index.html +0 -131
  31. package/coverage/lcov-report/src/warnings/filter.ts.html +0 -364
  32. package/coverage/lcov-report/src/warnings/index.html +0 -116
  33. package/coverage/lcov-report/src/writer/index.html +0 -116
  34. package/coverage/lcov-report/src/writer/index.ts.html +0 -1093
  35. package/coverage/lcov.info +0 -2542
  36. package/coverage/prettify.css +0 -1
  37. package/coverage/prettify.js +0 -2
  38. package/coverage/sort-arrow-sprite.png +0 -0
  39. package/coverage/sorter.js +0 -210
  40. package/coverage/src/filters/index.html +0 -116
  41. package/coverage/src/filters/index.ts.html +0 -1156
  42. package/coverage/src/index.html +0 -116
  43. package/coverage/src/index.ts.html +0 -166
  44. package/coverage/src/parser/index.html +0 -131
  45. package/coverage/src/parser/index.ts.html +0 -1270
  46. package/coverage/src/parser/patterns.ts.html +0 -670
  47. package/coverage/src/scanner/index.html +0 -116
  48. package/coverage/src/scanner/index.ts.html +0 -733
  49. package/coverage/src/sorting/index.html +0 -116
  50. package/coverage/src/sorting/index.ts.html +0 -736
  51. package/coverage/src/utils/dates.ts.html +0 -643
  52. package/coverage/src/utils/id.ts.html +0 -169
  53. package/coverage/src/utils/index.html +0 -131
  54. package/coverage/src/warnings/filter.ts.html +0 -364
  55. package/coverage/src/warnings/index.html +0 -116
  56. package/coverage/src/writer/index.html +0 -116
  57. package/coverage/src/writer/index.ts.html +0 -1093
@@ -1,1270 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/parser/index.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../prettify.css" />
9
- <link rel="stylesheet" href="../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../index.html">All files</a> / <a href="index.html">src/parser</a> index.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">96.96% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>383/395</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">93.58% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>73/78</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>8/8</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">96.96% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>383/395</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
462
- <span class="cline-any cline-yes">1x</span>
463
- <span class="cline-any cline-yes">1x</span>
464
- <span class="cline-any cline-yes">1x</span>
465
- <span class="cline-any cline-yes">1x</span>
466
- <span class="cline-any cline-yes">1x</span>
467
- <span class="cline-any cline-yes">1x</span>
468
- <span class="cline-any cline-yes">1x</span>
469
- <span class="cline-any cline-yes">1x</span>
470
- <span class="cline-any cline-yes">1x</span>
471
- <span class="cline-any cline-yes">1x</span>
472
- <span class="cline-any cline-yes">1x</span>
473
- <span class="cline-any cline-yes">1x</span>
474
- <span class="cline-any cline-yes">1x</span>
475
- <span class="cline-any cline-yes">1x</span>
476
- <span class="cline-any cline-yes">1x</span>
477
- <span class="cline-any cline-yes">1x</span>
478
- <span class="cline-any cline-yes">1x</span>
479
- <span class="cline-any cline-yes">1x</span>
480
- <span class="cline-any cline-yes">1x</span>
481
- <span class="cline-any cline-yes">1x</span>
482
- <span class="cline-any cline-yes">124x</span>
483
- <span class="cline-any cline-yes">124x</span>
484
- <span class="cline-any cline-yes">124x</span>
485
- <span class="cline-any cline-yes">1x</span>
486
- <span class="cline-any cline-yes">1x</span>
487
- <span class="cline-any cline-yes">1x</span>
488
- <span class="cline-any cline-yes">1x</span>
489
- <span class="cline-any cline-yes">1x</span>
490
- <span class="cline-any cline-yes">1x</span>
491
- <span class="cline-any cline-yes">1x</span>
492
- <span class="cline-any cline-yes">1x</span>
493
- <span class="cline-any cline-yes">1x</span>
494
- <span class="cline-any cline-yes">1x</span>
495
- <span class="cline-any cline-yes">1x</span>
496
- <span class="cline-any cline-yes">1x</span>
497
- <span class="cline-any cline-yes">1x</span>
498
- <span class="cline-any cline-yes">1x</span>
499
- <span class="cline-any cline-yes">125x</span>
500
- <span class="cline-any cline-yes">125x</span>
501
- <span class="cline-any cline-yes">125x</span>
502
- <span class="cline-any cline-yes">108x</span>
503
- <span class="cline-any cline-yes">108x</span>
504
- <span class="cline-any cline-yes">1x</span>
505
- <span class="cline-any cline-yes">1x</span>
506
- <span class="cline-any cline-yes">1x</span>
507
- <span class="cline-any cline-yes">1x</span>
508
- <span class="cline-any cline-yes">1x</span>
509
- <span class="cline-any cline-yes">1x</span>
510
- <span class="cline-any cline-yes">1x</span>
511
- <span class="cline-any cline-yes">1x</span>
512
- <span class="cline-any cline-yes">1x</span>
513
- <span class="cline-any cline-yes">1x</span>
514
- <span class="cline-any cline-yes">1x</span>
515
- <span class="cline-any cline-yes">1x</span>
516
- <span class="cline-any cline-yes">124x</span>
517
- <span class="cline-any cline-yes">124x</span>
518
- <span class="cline-any cline-yes">124x</span>
519
- <span class="cline-any cline-yes">124x</span>
520
- <span class="cline-any cline-yes">124x</span>
521
- <span class="cline-any cline-yes">1x</span>
522
- <span class="cline-any cline-yes">1x</span>
523
- <span class="cline-any cline-yes">1x</span>
524
- <span class="cline-any cline-yes">1x</span>
525
- <span class="cline-any cline-yes">1x</span>
526
- <span class="cline-any cline-yes">1x</span>
527
- <span class="cline-any cline-yes">1x</span>
528
- <span class="cline-any cline-yes">1x</span>
529
- <span class="cline-any cline-yes">1x</span>
530
- <span class="cline-any cline-yes">1x</span>
531
- <span class="cline-any cline-yes">1x</span>
532
- <span class="cline-any cline-yes">123x</span>
533
- <span class="cline-any cline-yes">123x</span>
534
- <span class="cline-any cline-yes">123x</span>
535
- <span class="cline-any cline-yes">1x</span>
536
- <span class="cline-any cline-yes">1x</span>
537
- <span class="cline-any cline-yes">1x</span>
538
- <span class="cline-any cline-yes">1x</span>
539
- <span class="cline-any cline-yes">1x</span>
540
- <span class="cline-any cline-yes">1x</span>
541
- <span class="cline-any cline-yes">1x</span>
542
- <span class="cline-any cline-yes">1x</span>
543
- <span class="cline-any cline-yes">1x</span>
544
- <span class="cline-any cline-yes">1x</span>
545
- <span class="cline-any cline-yes">1x</span>
546
- <span class="cline-any cline-yes">123x</span>
547
- <span class="cline-any cline-yes">123x</span>
548
- <span class="cline-any cline-yes">8x</span>
549
- <span class="cline-any cline-yes">8x</span>
550
- <span class="cline-any cline-yes">115x</span>
551
- <span class="cline-any cline-yes">123x</span>
552
- <span class="cline-any cline-yes">1x</span>
553
- <span class="cline-any cline-yes">1x</span>
554
- <span class="cline-any cline-yes">1x</span>
555
- <span class="cline-any cline-yes">1x</span>
556
- <span class="cline-any cline-yes">1x</span>
557
- <span class="cline-any cline-yes">1x</span>
558
- <span class="cline-any cline-yes">1x</span>
559
- <span class="cline-any cline-yes">1x</span>
560
- <span class="cline-any cline-yes">1x</span>
561
- <span class="cline-any cline-yes">1x</span>
562
- <span class="cline-any cline-yes">1x</span>
563
- <span class="cline-any cline-yes">1x</span>
564
- <span class="cline-any cline-yes">129x</span>
565
- <span class="cline-any cline-yes">129x</span>
566
- <span class="cline-any cline-yes">129x</span>
567
- <span class="cline-any cline-yes">129x</span>
568
- <span class="cline-any cline-yes">129x</span>
569
- <span class="cline-any cline-yes">129x</span>
570
- <span class="cline-any cline-yes">23x</span>
571
- <span class="cline-any cline-yes">23x</span>
572
- <span class="cline-any cline-yes">23x</span>
573
- <span class="cline-any cline-yes">23x</span>
574
- <span class="cline-any cline-yes">23x</span>
575
- <span class="cline-any cline-no">&nbsp;</span>
576
- <span class="cline-any cline-no">&nbsp;</span>
577
- <span class="cline-any cline-no">&nbsp;</span>
578
- <span class="cline-any cline-no">&nbsp;</span>
579
- <span class="cline-any cline-no">&nbsp;</span>
580
- <span class="cline-any cline-no">&nbsp;</span>
581
- <span class="cline-any cline-yes">23x</span>
582
- <span class="cline-any cline-yes">23x</span>
583
- <span class="cline-any cline-yes">23x</span>
584
- <span class="cline-any cline-yes">23x</span>
585
- <span class="cline-any cline-yes">106x</span>
586
- <span class="cline-any cline-yes">106x</span>
587
- <span class="cline-any cline-yes">106x</span>
588
- <span class="cline-any cline-yes">129x</span>
589
- <span class="cline-any cline-yes">5x</span>
590
- <span class="cline-any cline-yes">5x</span>
591
- <span class="cline-any cline-yes">5x</span>
592
- <span class="cline-any cline-yes">5x</span>
593
- <span class="cline-any cline-no">&nbsp;</span>
594
- <span class="cline-any cline-no">&nbsp;</span>
595
- <span class="cline-any cline-no">&nbsp;</span>
596
- <span class="cline-any cline-no">&nbsp;</span>
597
- <span class="cline-any cline-no">&nbsp;</span>
598
- <span class="cline-any cline-no">&nbsp;</span>
599
- <span class="cline-any cline-yes">5x</span>
600
- <span class="cline-any cline-yes">5x</span>
601
- <span class="cline-any cline-yes">5x</span>
602
- <span class="cline-any cline-yes">5x</span>
603
- <span class="cline-any cline-yes">101x</span>
604
- <span class="cline-any cline-yes">101x</span>
605
- <span class="cline-any cline-yes">101x</span>
606
- <span class="cline-any cline-yes">129x</span>
607
- <span class="cline-any cline-yes">19x</span>
608
- <span class="cline-any cline-yes">6x</span>
609
- <span class="cline-any cline-yes">6x</span>
610
- <span class="cline-any cline-yes">6x</span>
611
- <span class="cline-any cline-yes">6x</span>
612
- <span class="cline-any cline-yes">6x</span>
613
- <span class="cline-any cline-yes">6x</span>
614
- <span class="cline-any cline-yes">6x</span>
615
- <span class="cline-any cline-yes">6x</span>
616
- <span class="cline-any cline-yes">6x</span>
617
- <span class="cline-any cline-yes">6x</span>
618
- <span class="cline-any cline-yes">6x</span>
619
- <span class="cline-any cline-yes">6x</span>
620
- <span class="cline-any cline-yes">6x</span>
621
- <span class="cline-any cline-yes">6x</span>
622
- <span class="cline-any cline-yes">6x</span>
623
- <span class="cline-any cline-yes">6x</span>
624
- <span class="cline-any cline-yes">6x</span>
625
- <span class="cline-any cline-yes">13x</span>
626
- <span class="cline-any cline-yes">13x</span>
627
- <span class="cline-any cline-yes">19x</span>
628
- <span class="cline-any cline-yes">19x</span>
629
- <span class="cline-any cline-yes">82x</span>
630
- <span class="cline-any cline-yes">82x</span>
631
- <span class="cline-any cline-yes">82x</span>
632
- <span class="cline-any cline-yes">1x</span>
633
- <span class="cline-any cline-yes">1x</span>
634
- <span class="cline-any cline-yes">1x</span>
635
- <span class="cline-any cline-yes">1x</span>
636
- <span class="cline-any cline-yes">1x</span>
637
- <span class="cline-any cline-yes">1x</span>
638
- <span class="cline-any cline-yes">1x</span>
639
- <span class="cline-any cline-yes">1x</span>
640
- <span class="cline-any cline-yes">1x</span>
641
- <span class="cline-any cline-yes">1x</span>
642
- <span class="cline-any cline-yes">1x</span>
643
- <span class="cline-any cline-yes">1x</span>
644
- <span class="cline-any cline-yes">1x</span>
645
- <span class="cline-any cline-yes">1x</span>
646
- <span class="cline-any cline-yes">1x</span>
647
- <span class="cline-any cline-yes">1x</span>
648
- <span class="cline-any cline-yes">1x</span>
649
- <span class="cline-any cline-yes">1x</span>
650
- <span class="cline-any cline-yes">1x</span>
651
- <span class="cline-any cline-yes">1x</span>
652
- <span class="cline-any cline-yes">132x</span>
653
- <span class="cline-any cline-yes">132x</span>
654
- <span class="cline-any cline-yes">132x</span>
655
- <span class="cline-any cline-yes">132x</span>
656
- <span class="cline-any cline-yes">132x</span>
657
- <span class="cline-any cline-yes">132x</span>
658
- <span class="cline-any cline-yes">132x</span>
659
- <span class="cline-any cline-yes">132x</span>
660
- <span class="cline-any cline-yes">132x</span>
661
- <span class="cline-any cline-yes">132x</span>
662
- <span class="cline-any cline-yes">132x</span>
663
- <span class="cline-any cline-yes">132x</span>
664
- <span class="cline-any cline-yes">132x</span>
665
- <span class="cline-any cline-yes">132x</span>
666
- <span class="cline-any cline-yes">132x</span>
667
- <span class="cline-any cline-yes">132x</span>
668
- <span class="cline-any cline-yes">132x</span>
669
- <span class="cline-any cline-yes">132x</span>
670
- <span class="cline-any cline-yes">132x</span>
671
- <span class="cline-any cline-yes">132x</span>
672
- <span class="cline-any cline-yes">132x</span>
673
- <span class="cline-any cline-yes">1x</span>
674
- <span class="cline-any cline-yes">1x</span>
675
- <span class="cline-any cline-yes">1x</span>
676
- <span class="cline-any cline-yes">1x</span>
677
- <span class="cline-any cline-yes">1x</span>
678
- <span class="cline-any cline-yes">1x</span>
679
- <span class="cline-any cline-yes">1x</span>
680
- <span class="cline-any cline-yes">1x</span>
681
- <span class="cline-any cline-yes">1x</span>
682
- <span class="cline-any cline-yes">1x</span>
683
- <span class="cline-any cline-yes">1x</span>
684
- <span class="cline-any cline-yes">1x</span>
685
- <span class="cline-any cline-yes">1x</span>
686
- <span class="cline-any cline-yes">1x</span>
687
- <span class="cline-any cline-yes">1x</span>
688
- <span class="cline-any cline-yes">1x</span>
689
- <span class="cline-any cline-yes">1x</span>
690
- <span class="cline-any cline-yes">1x</span>
691
- <span class="cline-any cline-yes">1x</span>
692
- <span class="cline-any cline-yes">145x</span>
693
- <span class="cline-any cline-yes">145x</span>
694
- <span class="cline-any cline-yes">145x</span>
695
- <span class="cline-any cline-yes">145x</span>
696
- <span class="cline-any cline-yes">145x</span>
697
- <span class="cline-any cline-yes">145x</span>
698
- <span class="cline-any cline-yes">145x</span>
699
- <span class="cline-any cline-yes">145x</span>
700
- <span class="cline-any cline-yes">145x</span>
701
- <span class="cline-any cline-yes">145x</span>
702
- <span class="cline-any cline-yes">2x</span>
703
- <span class="cline-any cline-yes">2x</span>
704
- <span class="cline-any cline-yes">2x</span>
705
- <span class="cline-any cline-yes">2x</span>
706
- <span class="cline-any cline-yes">2x</span>
707
- <span class="cline-any cline-yes">2x</span>
708
- <span class="cline-any cline-yes">2x</span>
709
- <span class="cline-any cline-yes">2x</span>
710
- <span class="cline-any cline-yes">2x</span>
711
- <span class="cline-any cline-yes">2x</span>
712
- <span class="cline-any cline-yes">2x</span>
713
- <span class="cline-any cline-yes">2x</span>
714
- <span class="cline-any cline-yes">2x</span>
715
- <span class="cline-any cline-yes">2x</span>
716
- <span class="cline-any cline-yes">143x</span>
717
- <span class="cline-any cline-yes">143x</span>
718
- <span class="cline-any cline-yes">145x</span>
719
- <span class="cline-any cline-yes">2x</span>
720
- <span class="cline-any cline-yes">2x</span>
721
- <span class="cline-any cline-yes">2x</span>
722
- <span class="cline-any cline-yes">2x</span>
723
- <span class="cline-any cline-yes">2x</span>
724
- <span class="cline-any cline-yes">2x</span>
725
- <span class="cline-any cline-yes">2x</span>
726
- <span class="cline-any cline-yes">2x</span>
727
- <span class="cline-any cline-yes">2x</span>
728
- <span class="cline-any cline-yes">2x</span>
729
- <span class="cline-any cline-yes">2x</span>
730
- <span class="cline-any cline-yes">2x</span>
731
- <span class="cline-any cline-yes">2x</span>
732
- <span class="cline-any cline-yes">2x</span>
733
- <span class="cline-any cline-yes">141x</span>
734
- <span class="cline-any cline-yes">141x</span>
735
- <span class="cline-any cline-yes">145x</span>
736
- <span class="cline-any cline-yes">1x</span>
737
- <span class="cline-any cline-yes">1x</span>
738
- <span class="cline-any cline-yes">1x</span>
739
- <span class="cline-any cline-yes">1x</span>
740
- <span class="cline-any cline-yes">1x</span>
741
- <span class="cline-any cline-yes">1x</span>
742
- <span class="cline-any cline-yes">1x</span>
743
- <span class="cline-any cline-yes">1x</span>
744
- <span class="cline-any cline-yes">1x</span>
745
- <span class="cline-any cline-yes">1x</span>
746
- <span class="cline-any cline-yes">1x</span>
747
- <span class="cline-any cline-yes">1x</span>
748
- <span class="cline-any cline-yes">140x</span>
749
- <span class="cline-any cline-yes">140x</span>
750
- <span class="cline-any cline-yes">145x</span>
751
- <span class="cline-any cline-yes">1x</span>
752
- <span class="cline-any cline-yes">1x</span>
753
- <span class="cline-any cline-yes">1x</span>
754
- <span class="cline-any cline-yes">1x</span>
755
- <span class="cline-any cline-yes">1x</span>
756
- <span class="cline-any cline-yes">1x</span>
757
- <span class="cline-any cline-yes">1x</span>
758
- <span class="cline-any cline-yes">1x</span>
759
- <span class="cline-any cline-yes">1x</span>
760
- <span class="cline-any cline-yes">1x</span>
761
- <span class="cline-any cline-yes">1x</span>
762
- <span class="cline-any cline-yes">1x</span>
763
- <span class="cline-any cline-yes">139x</span>
764
- <span class="cline-any cline-yes">139x</span>
765
- <span class="cline-any cline-yes">139x</span>
766
- <span class="cline-any cline-yes">145x</span>
767
- <span class="cline-any cline-yes">20x</span>
768
- <span class="cline-any cline-yes">20x</span>
769
- <span class="cline-any cline-yes">119x</span>
770
- <span class="cline-any cline-yes">119x</span>
771
- <span class="cline-any cline-yes">119x</span>
772
- <span class="cline-any cline-yes">119x</span>
773
- <span class="cline-any cline-yes">119x</span>
774
- <span class="cline-any cline-yes">119x</span>
775
- <span class="cline-any cline-yes">119x</span>
776
- <span class="cline-any cline-yes">119x</span>
777
- <span class="cline-any cline-yes">119x</span>
778
- <span class="cline-any cline-yes">119x</span>
779
- <span class="cline-any cline-yes">119x</span>
780
- <span class="cline-any cline-yes">119x</span>
781
- <span class="cline-any cline-yes">119x</span>
782
- <span class="cline-any cline-yes">119x</span>
783
- <span class="cline-any cline-yes">119x</span>
784
- <span class="cline-any cline-yes">119x</span>
785
- <span class="cline-any cline-yes">145x</span>
786
- <span class="cline-any cline-yes">4x</span>
787
- <span class="cline-any cline-yes">4x</span>
788
- <span class="cline-any cline-yes">4x</span>
789
- <span class="cline-any cline-yes">4x</span>
790
- <span class="cline-any cline-yes">4x</span>
791
- <span class="cline-any cline-yes">4x</span>
792
- <span class="cline-any cline-yes">119x</span>
793
- <span class="cline-any cline-yes">119x</span>
794
- <span class="cline-any cline-yes">119x</span>
795
- <span class="cline-any cline-yes">145x</span>
796
- <span class="cline-any cline-yes">58x</span>
797
- <span class="cline-any cline-yes">58x</span>
798
- <span class="cline-any cline-yes">58x</span>
799
- <span class="cline-any cline-yes">58x</span>
800
- <span class="cline-any cline-yes">58x</span>
801
- <span class="cline-any cline-yes">58x</span>
802
- <span class="cline-any cline-yes">58x</span>
803
- <span class="cline-any cline-yes">58x</span>
804
- <span class="cline-any cline-yes">58x</span>
805
- <span class="cline-any cline-yes">58x</span>
806
- <span class="cline-any cline-yes">58x</span>
807
- <span class="cline-any cline-yes">58x</span>
808
- <span class="cline-any cline-yes">58x</span>
809
- <span class="cline-any cline-yes">119x</span>
810
- <span class="cline-any cline-yes">119x</span>
811
- <span class="cline-any cline-yes">145x</span>
812
- <span class="cline-any cline-yes">8x</span>
813
- <span class="cline-any cline-yes">8x</span>
814
- <span class="cline-any cline-yes">8x</span>
815
- <span class="cline-any cline-yes">8x</span>
816
- <span class="cline-any cline-yes">8x</span>
817
- <span class="cline-any cline-yes">8x</span>
818
- <span class="cline-any cline-yes">8x</span>
819
- <span class="cline-any cline-yes">8x</span>
820
- <span class="cline-any cline-yes">8x</span>
821
- <span class="cline-any cline-yes">8x</span>
822
- <span class="cline-any cline-yes">8x</span>
823
- <span class="cline-any cline-yes">8x</span>
824
- <span class="cline-any cline-yes">8x</span>
825
- <span class="cline-any cline-yes">119x</span>
826
- <span class="cline-any cline-yes">119x</span>
827
- <span class="cline-any cline-yes">119x</span>
828
- <span class="cline-any cline-yes">119x</span>
829
- <span class="cline-any cline-yes">119x</span>
830
- <span class="cline-any cline-yes">119x</span>
831
- <span class="cline-any cline-yes">119x</span>
832
- <span class="cline-any cline-yes">119x</span>
833
- <span class="cline-any cline-yes">119x</span>
834
- <span class="cline-any cline-yes">119x</span>
835
- <span class="cline-any cline-yes">119x</span>
836
- <span class="cline-any cline-yes">119x</span>
837
- <span class="cline-any cline-yes">119x</span>
838
- <span class="cline-any cline-yes">119x</span>
839
- <span class="cline-any cline-yes">119x</span>
840
- <span class="cline-any cline-yes">119x</span>
841
- <span class="cline-any cline-yes">119x</span>
842
- <span class="cline-any cline-yes">119x</span>
843
- <span class="cline-any cline-yes">145x</span>
844
- <span class="cline-any cline-yes">145x</span>
845
- <span class="cline-any cline-yes">145x</span>
846
- <span class="cline-any cline-yes">145x</span>
847
- <span class="cline-any cline-yes">145x</span>
848
- <span class="cline-any cline-yes">145x</span>
849
- <span class="cline-any cline-yes">145x</span>
850
- <span class="cline-any cline-yes">145x</span>
851
- <span class="cline-any cline-yes">119x</span>
852
- <span class="cline-any cline-yes">145x</span>
853
- <span class="cline-any cline-yes">119x</span>
854
- <span class="cline-any cline-yes">119x</span>
855
- <span class="cline-any cline-yes">119x</span>
856
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type {
857
- Task,
858
- ParsingContext,
859
- Priority,
860
- Warning,
861
- } from '../types/index.js';
862
- import { PATTERNS } from './patterns.js';
863
- import { parseAbsoluteDate, resolveRelativeDate } from '../utils/dates.js';
864
- import { generateTaskId } from '../utils/id.js';
865
- &nbsp;
866
- /**
867
- * Extract assignee from task text
868
- *
869
- * @param text - Task text
870
- * @returns Username without @ symbol, or undefined
871
- *
872
- * @example
873
- * extractAssignee("@nick Review PR") // =&gt; "nick"
874
- * extractAssignee("Review PR") // =&gt; undefined
875
- */
876
- export function extractAssignee(text: string): string | undefined {
877
- const match = text.match(PATTERNS.ASSIGNEE);
878
- return match?.[1];
879
- }
880
- &nbsp;
881
- /**
882
- * Extract priority level from task text
883
- *
884
- * Priority is determined by exclamation marks:
885
- * - !!! = urgent
886
- * - !! = high
887
- * - ! = normal
888
- * - (none) = low
889
- *
890
- * @param text - Task text
891
- * @returns Priority level or undefined if no priority markers
892
- */
893
- export function extractPriority(text: string): Priority | undefined {
894
- if (PATTERNS.PRIORITY_URGENT.test(text)) return 'urgent';
895
- if (PATTERNS.PRIORITY_HIGH.test(text)) return 'high';
896
- if (PATTERNS.PRIORITY_NORMAL.test(text)) return 'normal';
897
- return undefined;
898
- }
899
- &nbsp;
900
- /**
901
- * Extract all tags from task text
902
- *
903
- * @param text - Task text
904
- * @returns Array of tag names (without # symbol)
905
- *
906
- * @example
907
- * extractTags("Review PR #backend #urgent") // =&gt; ["backend", "urgent"]
908
- * extractTags("No tags here") // =&gt; []
909
- */
910
- export function extractTags(text: string): string[] {
911
- const matches = text.matchAll(PATTERNS.TAG);
912
- return Array.from(matches, (match) =&gt; match[1]).filter(
913
- (tag): tag is string =&gt; tag !== undefined,
914
- );
915
- }
916
- &nbsp;
917
- /**
918
- * Extract Todoist ID from task text
919
- *
920
- * @param text - Task text
921
- * @returns Todoist ID string or undefined
922
- *
923
- * @example
924
- * extractTodoistId("Task [todoist:123456]") // =&gt; "123456"
925
- */
926
- export function extractTodoistId(text: string): string | undefined {
927
- const match = text.match(PATTERNS.TODOIST_ID);
928
- return match?.[1];
929
- }
930
- &nbsp;
931
- /**
932
- * Extract completion date from task text
933
- *
934
- * @param text - Task text
935
- * @returns Parsed Date or undefined
936
- *
937
- * @example
938
- * extractCompletedDate("[completed: 2026-01-18]") // =&gt; Date(2026-01-18)
939
- */
940
- export function extractCompletedDate(text: string): Date | undefined {
941
- const match = text.match(PATTERNS.COMPLETED_DATE);
942
- if (!match?.[1]) return undefined;
943
- &nbsp;
944
- const date = parseAbsoluteDate(match[1]);
945
- return <span class="branch-0 cbranch-no" title="branch not covered" >date ?? undefined;</span>
946
- }
947
- &nbsp;
948
- /**
949
- * Extract due date from task text with context awareness
950
- *
951
- * Handles both absolute dates ([due: 2026-01-25]) and relative dates
952
- * ([due: tomorrow]) which require context. Supports optional time ([due: 2026-01-25 17:00]).
953
- *
954
- * @param text - Task text
955
- * @param context - Parsing context (for relative dates and workday config)
956
- * @returns Object with parsed date and optional warning
957
- */
958
- export function extractDueDate(
959
- text: string,
960
- context: ParsingContext,
961
- ): { date: Date | undefined; warning?: Warning } {
962
- // Try absolute date first (with optional time)
963
- const absoluteMatch = text.match(PATTERNS.DUE_DATE_ABSOLUTE);
964
- if (absoluteMatch?.[1]) {
965
- const dateStr = absoluteMatch[1];
966
- let timeStr = absoluteMatch[2]; // May be undefined
967
- &nbsp;
968
- // If no time specified, apply default from workday config
969
- if (!timeStr &amp;&amp; context.defaultDueTime) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
970
- <span class="cstat-no" title="statement not covered" > if (context.defaultDueTime === 'start' &amp;&amp; context.workdayStartTime) {</span>
971
- <span class="cstat-no" title="statement not covered" > timeStr = context.workdayStartTime;</span>
972
- <span class="cstat-no" title="statement not covered" > } else if (context.defaultDueTime === 'end' &amp;&amp; context.workdayEndTime) {</span>
973
- <span class="cstat-no" title="statement not covered" > timeStr = context.workdayEndTime;</span>
974
- <span class="cstat-no" title="statement not covered" > }</span>
975
- <span class="cstat-no" title="statement not covered" > }</span>
976
- &nbsp;
977
- const date = parseAbsoluteDate(dateStr, timeStr);
978
- return { date: <span class="branch-0 cbranch-no" title="branch not covered" >date ?? undefined }</span>;
979
- }
980
- &nbsp;
981
- // Try short format (M/D or M/D/YY)
982
- const shortMatch = text.match(PATTERNS.DUE_DATE_SHORT);
983
- if (shortMatch?.[1]) {
984
- let timeStr: string | undefined;
985
- &nbsp;
986
- // Apply default time from workday config
987
- if (context.defaultDueTime) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
988
- <span class="cstat-no" title="statement not covered" > if (context.defaultDueTime === 'start' &amp;&amp; context.workdayStartTime) {</span>
989
- <span class="cstat-no" title="statement not covered" > timeStr = context.workdayStartTime;</span>
990
- <span class="cstat-no" title="statement not covered" > } else if (context.defaultDueTime === 'end' &amp;&amp; context.workdayEndTime) {</span>
991
- <span class="cstat-no" title="statement not covered" > timeStr = context.workdayEndTime;</span>
992
- <span class="cstat-no" title="statement not covered" > }</span>
993
- <span class="cstat-no" title="statement not covered" > }</span>
994
- &nbsp;
995
- const date = parseAbsoluteDate(shortMatch[1], timeStr);
996
- return { date: date ?? undefined };
997
- }
998
- &nbsp;
999
- // Try relative date
1000
- const relativeMatch = text.match(PATTERNS.DUE_DATE_RELATIVE);
1001
- if (relativeMatch?.[1]) {
1002
- if (!context.currentDate) {
1003
- // Relative date without context - create warning
1004
- return {
1005
- date: undefined,
1006
- warning: {
1007
- severity: 'warning',
1008
- source: 'md2do',
1009
- ruleId: 'relative-date-no-context',
1010
- file: '', // Will be filled in by caller
1011
- line: 0, // Will be filled in by caller
1012
- text: text.trim(),
1013
- message:
1014
- 'Relative due date without context date from heading. Add a heading with a date above this task.',
1015
- reason:
1016
- 'Relative due date without context date from heading. Add a heading with a date above this task.',
1017
- },
1018
- };
1019
- }
1020
- &nbsp;
1021
- const date = resolveRelativeDate(relativeMatch[1], context.currentDate);
1022
- return { date: <span class="branch-0 cbranch-no" title="branch not covered" >date ?? undefined }</span>;
1023
- }
1024
- &nbsp;
1025
- return { date: undefined };
1026
- }
1027
- &nbsp;
1028
- /**
1029
- * Clean task text by removing metadata markers
1030
- *
1031
- * Removes:
1032
- * - Assignees (@username)
1033
- * - Due dates ([due: ...])
1034
- * - Priority markers (!, !!, !!!)
1035
- * - Tags (#tag)
1036
- * - Todoist IDs ([todoist:...])
1037
- * - Completion dates ([completed:...])
1038
- *
1039
- * @param text - Raw task text
1040
- * @returns Cleaned text for display
1041
- *
1042
- * @example
1043
- * cleanTaskText("@nick Review PR !! #backend [due: 2026-01-25]")
1044
- * // =&gt; "Review PR"
1045
- */
1046
- export function cleanTaskText(text: string): string {
1047
- return (
1048
- text
1049
- // Remove metadata in brackets
1050
- .replace(PATTERNS.DUE_DATE_ABSOLUTE, '')
1051
- .replace(PATTERNS.DUE_DATE_RELATIVE, '')
1052
- .replace(PATTERNS.DUE_DATE_SHORT, '')
1053
- .replace(PATTERNS.TODOIST_ID, '')
1054
- .replace(PATTERNS.COMPLETED_DATE, '')
1055
- // Remove assignee
1056
- .replace(PATTERNS.ASSIGNEE, '')
1057
- // Remove tags
1058
- .replace(PATTERNS.TAG, '')
1059
- // Remove priority markers
1060
- .replace(/!!!/g, '')
1061
- .replace(/!!/g, '')
1062
- .replace(/!/g, '')
1063
- // Clean up extra whitespace
1064
- .replace(/\s+/g, ' ')
1065
- .trim()
1066
- );
1067
- }
1068
- &nbsp;
1069
- /**
1070
- * Parse a single line as a task
1071
- *
1072
- * This is the main parser entry point. It:
1073
- * 1. Checks if the line is a task
1074
- * 2. Extracts completion status
1075
- * 3. Parses all metadata (assignee, priority, dates, tags)
1076
- * 4. Cleans the text
1077
- * 5. Generates a stable ID
1078
- * 6. Applies context (project, person, heading date)
1079
- *
1080
- * @param line - Line of text to parse
1081
- * @param lineNumber - Line number in file (1-indexed)
1082
- * @param file - Relative file path
1083
- * @param context - Parsing context
1084
- * @returns Parsed Task object or null if line is not a task, plus any warnings
1085
- */
1086
- export function parseTask(
1087
- line: string,
1088
- lineNumber: number,
1089
- file: string,
1090
- context: ParsingContext,
1091
- ): { task: Task | null; warnings: Warning[] } {
1092
- const warnings: Warning[] = [];
1093
- &nbsp;
1094
- // Detect malformed checkboxes and provide helpful warnings
1095
- // Check for asterisk/plus bullet markers (not supported)
1096
- if (/^\s*[*+]\s+\[[ xX]\]/.test(line)) {
1097
- warnings.push({
1098
- severity: 'warning',
1099
- source: 'md2do',
1100
- ruleId: 'unsupported-bullet',
1101
- file,
1102
- line: lineNumber,
1103
- text: line.trim(),
1104
- message:
1105
- 'Unsupported bullet marker (* or +). Use dash (-) for task lists.',
1106
- reason:
1107
- 'Unsupported bullet marker (* or +). Use dash (-) for task lists.',
1108
- });
1109
- return { task: null, warnings };
1110
- }
1111
- &nbsp;
1112
- // Check for extra spaces inside checkbox: [x ] or [ x]
1113
- if (/^\s*-\s+\[[xX]\s+\]/.test(line) || /^\s*-\s+\[\s+[xX]\]/.test(line)) {
1114
- warnings.push({
1115
- severity: 'warning',
1116
- source: 'md2do',
1117
- ruleId: 'malformed-checkbox',
1118
- file,
1119
- line: lineNumber,
1120
- text: line.trim(),
1121
- message:
1122
- 'Malformed checkbox with extra spaces. Use [x] or [ ] without extra spaces.',
1123
- reason:
1124
- 'Malformed checkbox with extra spaces. Use [x] or [ ] without extra spaces.',
1125
- });
1126
- return { task: null, warnings };
1127
- }
1128
- &nbsp;
1129
- // Check for missing space after checkbox: [x]Task
1130
- if (/^\s*-\s+\[[ xX]\][^\s]/.test(line)) {
1131
- warnings.push({
1132
- severity: 'warning',
1133
- source: 'md2do',
1134
- ruleId: 'missing-space-after',
1135
- file,
1136
- line: lineNumber,
1137
- text: line.trim(),
1138
- message: 'Missing space after checkbox. Use "- [x] Task" format.',
1139
- reason: 'Missing space after checkbox. Use "- [x] Task" format.',
1140
- });
1141
- return { task: null, warnings };
1142
- }
1143
- &nbsp;
1144
- // Check for missing space before checkbox: -[x]
1145
- if (/^\s*-\[[ xX]\]/.test(line)) {
1146
- warnings.push({
1147
- severity: 'warning',
1148
- source: 'md2do',
1149
- ruleId: 'missing-space-before',
1150
- file,
1151
- line: lineNumber,
1152
- text: line.trim(),
1153
- message: 'Missing space before checkbox. Use "- [x] Task" format.',
1154
- reason: 'Missing space before checkbox. Use "- [x] Task" format.',
1155
- });
1156
- return { task: null, warnings };
1157
- }
1158
- &nbsp;
1159
- // Check if line is a task
1160
- const taskMatch = line.match(PATTERNS.TASK_CHECKBOX);
1161
- if (!taskMatch?.[0] || !taskMatch[2]) {
1162
- return { task: null, warnings };
1163
- }
1164
- &nbsp;
1165
- // Extract completion status
1166
- const completed = taskMatch[2].toLowerCase() === 'x';
1167
- &nbsp;
1168
- // Extract text (everything after checkbox)
1169
- const fullText = line.substring(taskMatch[0].length);
1170
- &nbsp;
1171
- // Parse metadata from text
1172
- const assignee = extractAssignee(fullText);
1173
- const priority = extractPriority(fullText);
1174
- const tags = extractTags(fullText);
1175
- const todoistId = extractTodoistId(fullText);
1176
- const completedDate = extractCompletedDate(fullText);
1177
- &nbsp;
1178
- // Extract due date (may produce warning)
1179
- const dueDateResult = extractDueDate(fullText, context);
1180
- if (dueDateResult.warning) {
1181
- warnings.push({
1182
- ...dueDateResult.warning,
1183
- file,
1184
- line: lineNumber,
1185
- });
1186
- }
1187
- &nbsp;
1188
- // Warn about missing dates
1189
- // Incomplete tasks without any date (no explicit due date and no context date)
1190
- if (!completed &amp;&amp; !dueDateResult.date &amp;&amp; !context.currentDate) {
1191
- warnings.push({
1192
- severity: 'info',
1193
- source: 'md2do',
1194
- ruleId: 'missing-due-date',
1195
- file,
1196
- line: lineNumber,
1197
- text: fullText.trim(),
1198
- message:
1199
- 'Task has no due date. Add [due: YYYY-MM-DD] or place under a heading with a date.',
1200
- reason:
1201
- 'Task has no due date. Add [due: YYYY-MM-DD] or place under a heading with a date.',
1202
- });
1203
- }
1204
- &nbsp;
1205
- // Completed tasks should have completion dates
1206
- if (completed &amp;&amp; !completedDate) {
1207
- warnings.push({
1208
- severity: 'info',
1209
- source: 'md2do',
1210
- ruleId: 'missing-completed-date',
1211
- file,
1212
- line: lineNumber,
1213
- text: fullText.trim(),
1214
- message:
1215
- 'Completed task missing completion date. Add [completed: YYYY-MM-DD].',
1216
- reason:
1217
- 'Completed task missing completion date. Add [completed: YYYY-MM-DD].',
1218
- });
1219
- }
1220
- &nbsp;
1221
- // Clean text (remove metadata markers)
1222
- const cleanText = cleanTaskText(fullText);
1223
- &nbsp;
1224
- // Generate stable ID
1225
- const id = generateTaskId(file, lineNumber, cleanText);
1226
- &nbsp;
1227
- // Build task object with only defined properties
1228
- const task: Task = {
1229
- id,
1230
- text: cleanText,
1231
- completed,
1232
- file,
1233
- line: lineNumber,
1234
- tags,
1235
- };
1236
- &nbsp;
1237
- // Add optional fields only if defined
1238
- if (assignee !== undefined) task.assignee = assignee;
1239
- if (priority !== undefined) task.priority = priority;
1240
- if (dueDateResult.date !== undefined) task.dueDate = dueDateResult.date;
1241
- if (todoistId !== undefined) task.todoistId = todoistId;
1242
- if (completedDate !== undefined) task.completedDate = completedDate;
1243
- if (context.project !== undefined) task.project = context.project;
1244
- if (context.person !== undefined) task.person = context.person;
1245
- if (context.currentDate !== undefined) task.contextDate = context.currentDate;
1246
- if (context.currentHeading !== undefined)
1247
- task.contextHeading = context.currentHeading;
1248
- &nbsp;
1249
- return { task, warnings };
1250
- }
1251
- &nbsp;</pre></td></tr></table></pre>
1252
-
1253
- <div class='push'></div><!-- for sticky footer -->
1254
- </div><!-- /wrapper -->
1255
- <div class='footer quiet pad2 space-top1 center small'>
1256
- Code coverage generated by
1257
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1258
- at 2026-02-05T05:58:13.697Z
1259
- </div>
1260
- <script src="../../prettify.js"></script>
1261
- <script>
1262
- window.onload = function () {
1263
- prettyPrint();
1264
- };
1265
- </script>
1266
- <script src="../../sorter.js"></script>
1267
- <script src="../../block-navigation.js"></script>
1268
- </body>
1269
- </html>
1270
-