##// END OF EJS Templates
hgweb: move author information from left-column to hover-box in annotate view...
Denis Laxalde -
r29524:19f96077 default
parent child Browse files
Show More
@@ -1,341 +1,342 b''
1 1 default = 'summary'
2 2 mimetype = 'text/html; charset={encoding}'
3 3 header = header.tmpl
4 4 footer = footer.tmpl
5 5 search = search.tmpl
6 6 changelog = changelog.tmpl
7 7 summary = summary.tmpl
8 8 error = error.tmpl
9 9 notfound = notfound.tmpl
10 10
11 11 help = help.tmpl
12 12 helptopics = helptopics.tmpl
13 13
14 14 helpentry = '
15 15 <tr><td>
16 16 <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
17 17 {if(basename, '{basename|escape}', '{topic|escape}')}
18 18 </a>
19 19 </td><td>
20 20 {summary|escape}
21 21 </td></tr>'
22 22
23 23 naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
24 24 navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
25 25 navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
26 26 filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
27 27 filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
28 28 filenodelink = '
29 29 <tr class="parity{parity}">
30 30 <td><a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
31 31 <td></td>
32 32 <td class="link">
33 33 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
34 34 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
35 35 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
36 36 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
37 37 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
38 38 </td>
39 39 </tr>'
40 40 filenolink = '
41 41 <tr class="parity{parity}">
42 42 <td><a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
43 43 <td></td>
44 44 <td class="link">
45 45 file |
46 46 annotate |
47 47 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
48 48 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
49 49 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
50 50 </td>
51 51 </tr>'
52 52
53 53 nav = '{before%naventry} {after%naventry}'
54 54 navshort = '{before%navshortentry}{after%navshortentry}'
55 55 navgraph = '{before%navgraphentry}{after%navgraphentry}'
56 56 filenav = '{before%filenaventry}{after%filenaventry}'
57 57
58 58 fileellipses = '...'
59 59 changelogentry = changelogentry.tmpl
60 60 searchentry = changelogentry.tmpl
61 61 changeset = changeset.tmpl
62 62 manifest = manifest.tmpl
63 63 direntry = '
64 64 <tr class="parity{parity}">
65 65 <td style="font-family:monospace">drwxr-xr-x</td>
66 66 <td style="font-family:monospace"></td>
67 67 <td style="font-family:monospace"></td>
68 68 <td>
69 69 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
70 70 <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
71 71 </td>
72 72 <td class="link">
73 73 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a>
74 74 </td>
75 75 </tr>'
76 76 fileentry = '
77 77 <tr class="parity{parity}">
78 78 <td style="font-family:monospace">{permissions|permissions}</td>
79 79 <td style="font-family:monospace" align=right>{date|isodate}</td>
80 80 <td style="font-family:monospace" align=right>{size}</td>
81 81 <td class="list">
82 82 <a class="list" href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
83 83 </td>
84 84 <td class="link">
85 85 <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
86 86 <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
87 87 <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
88 88 </td>
89 89 </tr>'
90 90 filerevision = filerevision.tmpl
91 91 fileannotate = fileannotate.tmpl
92 92 filediff = filediff.tmpl
93 93 filecomparison = filecomparison.tmpl
94 94 filelog = filelog.tmpl
95 95 fileline = '
96 96 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
97 97 annotateline = '
98 98 <tr id="{lineid}" style="font-family:monospace" class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
99 99 <td class="annotate linenr" style="text-align: right;">
100 100 {if(blockhead,
101 101 '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
102 {author|user}@{rev}
102 {rev}
103 103 </a>')}
104 104 <div class="annotate-info">
105 105 <div>{node|short}: {desc|escape|firstline}</div>
106 <div><em>{author|obfuscate}</em></div>
106 107 <div>parents: {parents%annotateparent}</div>
107 108 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
108 109 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
109 110 </div>
110 111 </td>
111 112 <td><pre><a class="linenr" href="#{lineid}">{linenumber}</a></pre></td>
112 113 <td><pre>{line|escape}</pre></td>
113 114 </tr>'
114 115 annotateparent = '
115 116 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
116 117 difflineplus = '
117 118 <a href="#{lineid}"></a><span id="{lineid}" class="difflineplus">{strip(line|escape, '\r\n')}</span>'
118 119 difflineminus = '
119 120 <a href="#{lineid}"></a><span id="{lineid}" class="difflineminus">{strip(line|escape, '\r\n')}</span>'
120 121 difflineat = '
121 122 <a href="#{lineid}"></a><span id="{lineid}" class="difflineat">{strip(line|escape, '\r\n')}</span>'
122 123 diffline = '
123 124 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
124 125
125 126 comparisonblock ='
126 127 <tbody class="block">
127 128 {lines}
128 129 </tbody>'
129 130 comparisonline = '
130 131 <tr id="{lineid}" style="font-family:monospace">
131 132 <td class="{type}"><pre><a class="linenr" href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</pre></td>
132 133 <td class="{type}"><pre><a class="linenr" href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</pre></td>
133 134 </tr>'
134 135
135 136 changelogparent = '
136 137 <tr>
137 138 <th class="parent">parent {rev}:</th>
138 139 <td class="parent">
139 140 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
140 141 </td>
141 142 </tr>'
142 143 changesetlink = '<a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
143 144 changesetbranch = '<tr><td>branch</td><td>{name|escape}</td></tr>'
144 145 changesetparent = '
145 146 <tr>
146 147 <td>parent {rev}</td>
147 148 <td style="font-family:monospace">
148 149 {changesetlink}
149 150 </td>
150 151 </tr>'
151 152 changesetparentdiff = '
152 153 <tr>
153 154 <td>parent {rev}</td>
154 155 <td style="font-family:monospace">
155 156 {changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}
156 157 </td>
157 158 </tr>'
158 159 difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
159 160 filerevbranch = '<tr><td>branch</td><td>{name|escape}</td></tr>'
160 161 filerevparent = '
161 162 <tr>
162 163 <td>parent {rev}</td>
163 164 <td style="font-family:monospace">
164 165 <a class="list" href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
165 166 {rename%filerename}{node|short}
166 167 </a>
167 168 </td>
168 169 </tr>'
169 170 filerename = '{file|escape}@'
170 171 filelogrename = '| <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
171 172 fileannotateparent = '
172 173 <tr>
173 174 <td>parent {rev}</td>
174 175 <td style="font-family:monospace">
175 176 <a class="list" href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
176 177 {rename%filerename}{node|short}
177 178 </a>
178 179 </td>
179 180 </tr>'
180 181 changelogchild = '
181 182 <tr>
182 183 <th class="child">child {rev}:</th>
183 184 <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
184 185 </tr>'
185 186 changesetchild = '
186 187 <tr>
187 188 <td>child {rev}</td>
188 189 <td style="font-family:monospace">
189 190 <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
190 191 </td>
191 192 </tr>'
192 193 filerevchild = '
193 194 <tr>
194 195 <td>child {rev}</td>
195 196 <td style="font-family:monospace">
196 197 <a class="list" href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
197 198 </tr>'
198 199 fileannotatechild = '
199 200 <tr>
200 201 <td>child {rev}</td>
201 202 <td style="font-family:monospace">
202 203 <a class="list" href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
203 204 </tr>'
204 205 tags = tags.tmpl
205 206 tagentry = '
206 207 <tr class="parity{parity}">
207 208 <td class="age"><i class="age">{date|rfc822date}</i></td>
208 209 <td><a class="list" href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}"><b>{tag|escape}</b></a></td>
209 210 <td class="link">
210 211 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
211 212 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
212 213 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
213 214 </td>
214 215 </tr>'
215 216 bookmarks = bookmarks.tmpl
216 217 bookmarkentry = '
217 218 <tr class="parity{parity}">
218 219 <td class="age"><i class="age">{date|rfc822date}</i></td>
219 220 <td><a class="list" href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}"><b>{bookmark|escape}</b></a></td>
220 221 <td class="link">
221 222 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
222 223 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
223 224 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
224 225 </td>
225 226 </tr>'
226 227 branches = branches.tmpl
227 228 branchentry = '
228 229 <tr class="parity{parity}">
229 230 <td class="age"><i class="age">{date|rfc822date}</i></td>
230 231 <td class="{status}"><a class="list" href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}"><b>{branch|escape}</b></a></td>
231 232 <td class="link">
232 233 <a href="{url|urlescape}changeset/{node|short}{sessionvars%urlparameter}">changeset</a> |
233 234 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
234 235 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
235 236 </td>
236 237 </tr>'
237 238 diffblock = '<div class="diffblock"><pre class="sourcelines">{lines}</pre></div>'
238 239 filediffparent = '
239 240 <tr>
240 241 <td>parent {rev}</td>
241 242 <td style="font-family:monospace">
242 243 <a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
243 244 {node|short}
244 245 </a>
245 246 </td>
246 247 </tr>'
247 248 filecompparent = '
248 249 <tr>
249 250 <td>parent {rev}</td>
250 251 <td style="font-family:monospace">
251 252 <a class="list" href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
252 253 {node|short}
253 254 </a>
254 255 </td>
255 256 </tr>'
256 257 filelogparent = '
257 258 <tr>
258 259 <td align="right">parent {rev}:&nbsp;</td>
259 260 <td><a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
260 261 </tr>'
261 262 filediffchild = '
262 263 <tr>
263 264 <td>child {rev}</td>
264 265 <td style="font-family:monospace">
265 266 <a class="list" href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
266 267 </td>
267 268 </tr>'
268 269 filecompchild = '
269 270 <tr>
270 271 <td>child {rev}</td>
271 272 <td style="font-family:monospace">
272 273 <a class="list" href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
273 274 </td>
274 275 </tr>'
275 276 filelogchild = '
276 277 <tr>
277 278 <td align="right">child {rev}:&nbsp;</td>
278 279 <td><a href="{url|urlescape}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
279 280 </tr>'
280 281 shortlog = shortlog.tmpl
281 282 graph = graph.tmpl
282 283 tagtag = '<span class="tagtag" title="{name|escape}">{name|escape}</span> '
283 284 branchtag = '<span class="branchtag" title="{name|escape}">{name|escape}</span> '
284 285 inbranchtag = '<span class="inbranchtag" title="{name|escape}">{name|escape}</span> '
285 286 bookmarktag = '<span class="bookmarktag" title="{name|escape}">{name|escape}</span> '
286 287 shortlogentry = '
287 288 <tr class="parity{parity}">
288 289 <td class="age"><i class="age">{date|rfc822date}</i></td>
289 290 <td><i>{author|person}</i></td>
290 291 <td>
291 292 <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
292 293 <b>{desc|strip|firstline|escape|nonempty}</b>
293 294 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>
294 295 </a>
295 296 </td>
296 297 <td class="link" nowrap>
297 298 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
298 299 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
299 300 </td>
300 301 </tr>'
301 302 filelogentry = '
302 303 <tr class="parity{parity}">
303 304 <td class="age"><i class="age">{date|rfc822date}</i></td>
304 305 <td><i>{author|person}</i></td>
305 306 <td>
306 307 <a class="list" href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
307 308 <b>{desc|strip|firstline|escape|nonempty}</b>
308 309 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>
309 310 </a>
310 311 </td>
311 312 <td class="link">
312 313 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
313 314 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
314 315 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
315 316 {rename%filelogrename}
316 317 </td>
317 318 </tr>'
318 319 archiveentry = ' | <a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a> '
319 320 indexentry = '
320 321 <tr class="parity{parity}">
321 322 <td>
322 323 <a class="list" href="{url|urlescape}{sessionvars%urlparameter}">
323 324 <b>{name|escape}</b>
324 325 </a>
325 326 </td>
326 327 <td>{description}</td>
327 328 <td>{contact|obfuscate}</td>
328 329 <td class="age">{lastchange|rfc822date}</td>
329 330 <td class="indexlinks">{archives%indexarchiveentry}</td>
330 331 <td>{if(isdirectory, '',
331 332 '<div class="rss_logo">
332 333 <a href="{url|urlescape}rss-log">RSS</a> <a href="{url|urlescape}atom-log">Atom</a>
333 334 </div>'
334 335 )}
335 336 </td>
336 337 </tr>\n'
337 338 indexarchiveentry = ' <a href="{url|urlescape}archive/{node|short}{extension}">{type|escape}</a> '
338 339 index = index.tmpl
339 340 urlparameter = '{separator}{name}={value|urlescape}'
340 341 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
341 342 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
@@ -1,296 +1,297 b''
1 1 default = 'summary'
2 2 mimetype = 'text/html; charset={encoding}'
3 3 header = header.tmpl
4 4 footer = footer.tmpl
5 5 search = search.tmpl
6 6 changelog = changelog.tmpl
7 7 summary = summary.tmpl
8 8 error = error.tmpl
9 9 notfound = notfound.tmpl
10 10
11 11 help = help.tmpl
12 12 helptopics = helptopics.tmpl
13 13
14 14 helpentry = '
15 15 <tr><td>
16 16 <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
17 17 {if(basename, '{basename|escape}', '{topic|escape}')}
18 18 </a>
19 19 </td><td>
20 20 {summary|escape}
21 21 </td></tr>'
22 22
23 23 naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
24 24 navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
25 25 navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
26 26 filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
27 27 filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
28 28 filenodelink = '
29 29 <tr class="parity{parity}">
30 30 <td><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
31 31 <td></td>
32 32 <td>
33 33 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
34 34 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
35 35 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
36 36 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
37 37 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
38 38 </td>
39 39 </tr>'
40 40 filenolink = '
41 41 <tr class="parity{parity}">
42 42 <td><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
43 43 <td></td>
44 44 <td>
45 45 file |
46 46 annotate |
47 47 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
48 48 <a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">comparison</a> |
49 49 <a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
50 50 </td>
51 51 </tr>'
52 52
53 53 nav = '{before%naventry} {after%naventry}'
54 54 navshort = '{before%navshortentry}{after%navshortentry}'
55 55 navgraph = '{before%navgraphentry}{after%navgraphentry}'
56 56 filenav = '{before%filenaventry}{after%filenaventry}'
57 57
58 58 fileellipses = '...'
59 59 changelogentry = changelogentry.tmpl
60 60 searchentry = changelogentry.tmpl
61 61 changeset = changeset.tmpl
62 62 manifest = manifest.tmpl
63 63 direntry = '
64 64 <tr class="parity{parity}">
65 65 <td>drwxr-xr-x</td>
66 66 <td></td>
67 67 <td></td>
68 68 <td>
69 69 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
70 70 <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
71 71 </td>
72 72 <td><a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">files</a></td>
73 73 </tr>'
74 74 fileentry = '
75 75 <tr class="parity{parity}">
76 76 <td>{permissions|permissions}</td>
77 77 <td>{date|isodate}</td>
78 78 <td>{size}</td>
79 79 <td><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
80 80 <td>
81 81 <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
82 82 <a href="{url|urlescape}log/{symrev}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
83 83 <a href="{url|urlescape}annotate/{symrev}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
84 84 </td>
85 85 </tr>'
86 86 filerevision = filerevision.tmpl
87 87 fileannotate = fileannotate.tmpl
88 88 filediff = filediff.tmpl
89 89 filecomparison = filecomparison.tmpl
90 90 filelog = filelog.tmpl
91 91 fileline = '
92 92 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
93 93 annotateline = '
94 94 <tr id="{lineid}" class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
95 95 <td class="annotate linenr">
96 96 {if(blockhead,
97 97 '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
98 {author|user}@{rev}
98 {rev}
99 99 </a>')}
100 100 <div class="annotate-info">
101 101 <div>{node|short}: {desc|escape|firstline}</div>
102 <div><em>{author|obfuscate}</em></div>
102 103 <div>parents: {parents%annotateparent}</div>
103 104 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
104 105 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
105 106 </div>
106 107 </td>
107 108 <td class="lineno">
108 109 <a href="#{lineid}">{linenumber}</a>
109 110 </td>
110 111 <td class="source">{line|escape}</td>
111 112 </tr>'
112 113 annotateparent = '
113 114 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
114 115 difflineplus = '
115 116 <a href="#{lineid}"></a><span id="{lineid}" class="difflineplus">{strip(line|escape, '\r\n')}</span>'
116 117 difflineminus = '
117 118 <a href="#{lineid}"></a><span id="{lineid}" class="difflineminus">{strip(line|escape, '\r\n')}</span>'
118 119 difflineat = '
119 120 <a href="#{lineid}"></a><span id="{lineid}" class="difflineat">{strip(line|escape, '\r\n')}</span>'
120 121 diffline = '
121 122 <a href="#{lineid}"></a><span id="{lineid}">{strip(line|escape, '\r\n')}</span>'
122 123
123 124 comparisonblock ='
124 125 <tbody class="block">
125 126 {lines}
126 127 </tbody>'
127 128 comparisonline = '
128 129 <tr id="{lineid}">
129 130 <td class="source {type}"><a class="linenr" href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</td>
130 131 <td class="source {type}"><a class="linenr" href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</td>
131 132 </tr>'
132 133
133 134 changesetlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
134 135 changelogparent = '
135 136 <tr>
136 137 <th class="parent">parent {rev}:</th>
137 138 <td class="parent">
138 139 {changesetlink}
139 140 </td>
140 141 </tr>'
141 142 changesetbranch = '<dt>branch</dt><dd>{name|escape}</dd>'
142 143 changesetparent = '
143 144 <dt>parent {rev}</dt>
144 145 <dd>{changesetlink}</dd>'
145 146 changesetparentdiff = '
146 147 <dt>parent {rev}</dt>
147 148 <dd>{changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}</dd>'
148 149 difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
149 150 filerevbranch = '<dt>branch</dt><dd>{name|escape}</dd>'
150 151 filerevparent = '
151 152 <dt>parent {rev}</dt>
152 153 <dd>
153 154 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
154 155 {rename%filerename}{node|short}
155 156 </a>
156 157 </dd>'
157 158 filerename = '{file|escape}@'
158 159 filelogrename = '| <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
159 160 fileannotateparent = '
160 161 <dt>parent {rev}</dt>
161 162 <dd>
162 163 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
163 164 {rename%filerename}{node|short}
164 165 </a>
165 166 </dd>'
166 167 changelogchild = '
167 168 <dt>child {rev}:</dt>
168 169 <dd><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
169 170 changesetchild = '
170 171 <dt>child {rev}</dt>
171 172 <dd><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
172 173 filerevchild = '
173 174 <dt>child {rev}</dt>
174 175 <dd>
175 176 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
176 177 </dd>'
177 178 fileannotatechild = '
178 179 <dt>child {rev}</dt>
179 180 <dd>
180 181 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
181 182 </dd>'
182 183 tags = tags.tmpl
183 184 tagentry = '
184 185 <tr class="parity{parity}">
185 186 <td class="nowrap age">{date|rfc822date}</td>
186 187 <td><a href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}">{tag|escape}</a></td>
187 188 <td class="nowrap">
188 189 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
189 190 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
190 191 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
191 192 </td>
192 193 </tr>'
193 194 bookmarks = bookmarks.tmpl
194 195 bookmarkentry = '
195 196 <tr class="parity{parity}">
196 197 <td class="nowrap age">{date|rfc822date}</td>
197 198 <td><a href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}">{bookmark|escape}</a></td>
198 199 <td class="nowrap">
199 200 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
200 201 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
201 202 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
202 203 </td>
203 204 </tr>'
204 205 branches = branches.tmpl
205 206 branchentry = '
206 207 <tr class="parity{parity}">
207 208 <td class="nowrap age">{date|rfc822date}</td>
208 209 <td class="{status}"><a href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}">{branch|escape}</a></td>
209 210 <td class="nowrap">
210 211 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
211 212 <a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
212 213 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
213 214 </td>
214 215 </tr>'
215 216 diffblock = '<div class="diffblock"><pre class="sourcelines">{lines}</pre></div>'
216 217 filediffparent = '
217 218 <dt>parent {rev}</dt>
218 219 <dd><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
219 220 filecompparent = '
220 221 <dt>parent {rev}</dt>
221 222 <dd><a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
222 223 filelogparent = '
223 224 <tr>
224 225 <td align="right">parent {rev}:&nbsp;</td>
225 226 <td><a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
226 227 </tr>'
227 228 filediffchild = '
228 229 <dt>child {rev}</dt>
229 230 <dd><a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
230 231 filecompchild = '
231 232 <dt>child {rev}</dt>
232 233 <dd><a href="{url|urlescape}comparison/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
233 234 filelogchild = '
234 235 <tr>
235 236 <td align="right">child {rev}:&nbsp;</td>
236 237 <td><a href="{url|urlescape}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
237 238 </tr>'
238 239 shortlog = shortlog.tmpl
239 240 tagtag = '<span class="tagtag" title="{name|escape}">{name|escape}</span> '
240 241 branchtag = '<span class="branchtag" title="{name|escape}">{name|escape}</span> '
241 242 inbranchtag = '<span class="inbranchtag" title="{name|escape}">{name|escape}</span> '
242 243 bookmarktag = '<span class="bookmarktag" title="{name|escape}">{name|escape}</span> '
243 244 shortlogentry = '
244 245 <tr class="parity{parity}">
245 246 <td class="nowrap age">{date|rfc822date}</td>
246 247 <td>{author|person}</td>
247 248 <td>
248 249 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
249 250 {desc|strip|firstline|escape|nonempty}
250 251 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>
251 252 </a>
252 253 </td>
253 254 <td class="nowrap">
254 255 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
255 256 <a href="{url|urlescape}file/{node|short}{sessionvars%urlparameter}">files</a>
256 257 </td>
257 258 </tr>'
258 259 filelogentry = '
259 260 <tr class="parity{parity}">
260 261 <td class="nowrap age">{date|rfc822date}</td>
261 262 <td>{author|person}</td>
262 263 <td>
263 264 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
264 265 {desc|strip|firstline|escape|nonempty}
265 266 <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}{bookmarks%bookmarktag}</span>
266 267 </a>
267 268 </td>
268 269 <td class="nowrap">
269 270 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
270 271 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
271 272 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
272 273 {rename%filelogrename}
273 274 </td>
274 275 </tr>'
275 276 archiveentry = '<li><a href="{url|urlescape}archive/{symrev}{extension}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a></li>'
276 277 indexentry = '
277 278 <tr class="parity{parity}">
278 279 <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
279 280 <td>{description}</td>
280 281 <td>{contact|obfuscate}</td>
281 282 <td class="age">{lastchange|rfc822date}</td>
282 283 <td class="indexlinks">{archives%indexarchiveentry}</td>
283 284 <td>
284 285 {if(isdirectory, '',
285 286 '<div class="rss_logo">
286 287 <a href="{url|urlescape}rss-log">RSS</a> <a href="{url|urlescape}atom-log">Atom</a>
287 288 </div>'
288 289 )}
289 290 </td>
290 291 </tr>\n'
291 292 indexarchiveentry = '<a href="{url|urlescape}archive/{node|short}{extension}">{type|escape}</a> '
292 293 index = index.tmpl
293 294 urlparameter = '{separator}{name}={value|urlescape}'
294 295 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
295 296 graph = graph.tmpl
296 297 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
@@ -1,267 +1,268 b''
1 1 default = 'shortlog'
2 2
3 3 mimetype = 'text/html; charset={encoding}'
4 4 header = header.tmpl
5 5 footer = footer.tmpl
6 6 search = search.tmpl
7 7
8 8 changelog = shortlog.tmpl
9 9 shortlog = shortlog.tmpl
10 10 shortlogentry = shortlogentry.tmpl
11 11 graph = graph.tmpl
12 12 help = help.tmpl
13 13 helptopics = helptopics.tmpl
14 14
15 15 helpentry = '
16 16 <tr><td>
17 17 <a href="{url|urlescape}help/{topic|escape}{sessionvars%urlparameter}">
18 18 {if(basename, '{basename|escape}', '{topic|escape}')}
19 19 </a>
20 20 </td><td>
21 21 {summary|escape}
22 22 </td></tr>'
23 23
24 24 naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
25 25 navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
26 26 navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
27 27 filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
28 28 filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
29 29 filenodelink = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
30 30 filenolink = '{file|escape} '
31 31 fileellipses = '...'
32 32 diffstatlink = diffstat.tmpl
33 33 diffstatnolink = diffstat.tmpl
34 34 changelogentry = shortlogentry.tmpl
35 35 searchentry = shortlogentry.tmpl
36 36 changeset = changeset.tmpl
37 37 manifest = manifest.tmpl
38 38
39 39 nav = '{before%naventry} {after%naventry}'
40 40 navshort = '{before%navshortentry}{after%navshortentry}'
41 41 navgraph = '{before%navgraphentry}{after%navgraphentry}'
42 42 filenav = '{before%filenaventry}{after%filenaventry}'
43 43
44 44 direntry = '
45 45 <tr class="fileline">
46 46 <td class="name">
47 47 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">
48 48 <img src="{staticurl|urlescape}coal-folder.png" alt="dir."/> {basename|escape}/
49 49 </a>
50 50 <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
51 51 {emptydirs|escape}
52 52 </a>
53 53 </td>
54 54 <td class="size"></td>
55 55 <td class="permissions">drwxr-xr-x</td>
56 56 </tr>'
57 57
58 58 fileentry = '
59 59 <tr class="fileline">
60 60 <td class="filename">
61 61 <a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">
62 62 <img src="{staticurl|urlescape}coal-file.png" alt="file"/> {basename|escape}
63 63 </a>
64 64 </td>
65 65 <td class="size">{size}</td>
66 66 <td class="permissions">{permissions|permissions}</td>
67 67 </tr>'
68 68
69 69 filerevision = filerevision.tmpl
70 70 fileannotate = fileannotate.tmpl
71 71 filediff = filediff.tmpl
72 72 filecomparison = filecomparison.tmpl
73 73 filelog = filelog.tmpl
74 74 fileline = '
75 75 <span id="{lineid}">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
76 76 filelogentry = filelogentry.tmpl
77 77
78 78 annotateline = '
79 79 <tr id="{lineid}"{ifeq(node, originalnode, ' class="thisrev"')}>
80 80 <td class="annotate">
81 81 {if(blockhead,
82 82 '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
83 {author|user}@{rev}
83 {rev}
84 84 </a>')}
85 85 <div class="annotate-info">
86 86 <div>{node|short}: {desc|escape|firstline}</div>
87 <div><em>{author|obfuscate}</em></div>
87 88 <div>parents: {parents%annotateparent}</div>
88 89 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
89 90 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
90 91 </div>
91 92 </td>
92 93 <td class="source"><a href="#{lineid}">{linenumber}</a> {line|escape}</td>
93 94 </tr>'
94 95 annotateparent = '
95 96 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
96 97 diffblock = '<div class="bottomline inc-lineno"><pre class="sourcelines wrap">{lines}</pre></div>'
97 98 difflineplus = '
98 99 <span id="{lineid}" class="plusline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
99 100 difflineminus = '
100 101 <span id="{lineid}" class="minusline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
101 102 difflineat = '
102 103 <span id="{lineid}" class="atline">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
103 104 diffline = '
104 105 <span id="{lineid}">{strip(line|escape, '\r\n')}</span><a href="#{lineid}"></a>'
105 106
106 107 comparisonblock ='
107 108 <tbody class="block">
108 109 {lines}
109 110 </tbody>'
110 111 comparisonline = '
111 112 <tr id="{lineid}">
112 113 <td class="source {type}"><a href="#{lineid}">{leftlinenumber}</a> {leftline|escape}</td>
113 114 <td class="source {type}"><a href="#{lineid}">{rightlinenumber}</a> {rightline|escape}</td>
114 115 </tr>'
115 116
116 117 changelogparent = '
117 118 <tr>
118 119 <th class="parent">parent {rev}:</th>
119 120 <td class="parent"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
120 121 </tr>'
121 122
122 123 changesetparent = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
123 124
124 125 changesetparentdiff = '
125 126 {changesetparent}
126 127 {ifeq(node, basenode, '(current diff)', '({difffrom})')}'
127 128
128 129 difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
129 130
130 131 filerevparent = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
131 132 filerevchild = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
132 133
133 134 filerename = '{file|escape}@'
134 135 filelogrename = '
135 136 <span class="base">
136 137 base
137 138 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
138 139 {file|escape}@{node|short}
139 140 </a>
140 141 </span>'
141 142 fileannotateparent = '
142 143 <tr>
143 144 <td class="metatag">parent:</td>
144 145 <td>
145 146 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
146 147 {rename%filerename}{node|short}
147 148 </a>
148 149 </td>
149 150 </tr>'
150 151 changesetchild = ' <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
151 152 changelogchild = '
152 153 <tr>
153 154 <th class="child">child</th>
154 155 <td class="child">
155 156 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
156 157 {node|short}
157 158 </a>
158 159 </td>
159 160 </tr>'
160 161 fileannotatechild = '
161 162 <tr>
162 163 <td class="metatag">child:</td>
163 164 <td>
164 165 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
165 166 {node|short}
166 167 </a>
167 168 </td>
168 169 </tr>'
169 170 tags = tags.tmpl
170 171 tagentry = '
171 172 <tr class="tagEntry">
172 173 <td>
173 174 <a href="{url|urlescape}rev/{tag|revescape}{sessionvars%urlparameter}">
174 175 {tag|escape}
175 176 </a>
176 177 </td>
177 178 <td class="node">
178 179 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
179 180 {node|short}
180 181 </a>
181 182 </td>
182 183 </tr>'
183 184 bookmarks = bookmarks.tmpl
184 185 bookmarkentry = '
185 186 <tr class="tagEntry">
186 187 <td>
187 188 <a href="{url|urlescape}rev/{bookmark|revescape}{sessionvars%urlparameter}">
188 189 {bookmark|escape}
189 190 </a>
190 191 </td>
191 192 <td class="node">
192 193 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">
193 194 {node|short}
194 195 </a>
195 196 </td>
196 197 </tr>'
197 198 branches = branches.tmpl
198 199 branchentry = '
199 200 <tr class="tagEntry">
200 201 <td>
201 202 <a href="{url|urlescape}shortlog/{branch|revescape}{sessionvars%urlparameter}" class="{status}">
202 203 {branch|escape}
203 204 </a>
204 205 </td>
205 206 <td class="node">
206 207 <a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
207 208 {node|short}
208 209 </a>
209 210 </td>
210 211 </tr>'
211 212 changelogtag = '<span class="tag">{name|escape}</span> '
212 213 changesettag = '<span class="tag">{tag|escape}</span> '
213 214 changesetbookmark = '<span class="tag">{bookmark|escape}</span> '
214 215 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
215 216 changelogbranchname = '<span class="branchname">{name|escape}</span> '
216 217
217 218 filediffparent = '
218 219 <tr>
219 220 <th class="parent">parent {rev}:</th>
220 221 <td class="parent"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
221 222 </tr>'
222 223 filelogparent = '
223 224 <tr>
224 225 <th>parent {rev}:</th>
225 226 <td><a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
226 227 </tr>'
227 228 filediffchild = '
228 229 <tr>
229 230 <th class="child">child {rev}:</th>
230 231 <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
231 232 </td>
232 233 </tr>'
233 234 filelogchild = '
234 235 <tr>
235 236 <th>child {rev}:</th>
236 237 <td><a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
237 238 </tr>'
238 239
239 240 indexentry = '
240 241 <tr>
241 242 <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
242 243 <td>{description}</td>
243 244 <td>{contact|obfuscate}</td>
244 245 <td class="age">{lastchange|rfc822date}</td>
245 246 <td class="indexlinks">{archives%indexarchiveentry}</td>
246 247 <td>
247 248 {if(isdirectory, '',
248 249 '<a href="{url|urlescape}atom-log" title="subscribe to repository atom feed">
249 250 <img class="atom-logo" src="{staticurl|urlescape}feed-icon-14x14.png" alt="subscribe to repository atom feed">
250 251 </a>'
251 252 )}
252 253 </td>
253 254 </tr>\n'
254 255 indexarchiveentry = '<a href="{url|urlescape}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
255 256 index = index.tmpl
256 257 archiveentry = '
257 258 <li>
258 259 <a href="{url|urlescape}archive/{symrev}{extension|urlescape}{ifeq(path,'/','',path|urlescape)}">{type|escape}</a>
259 260 </li>'
260 261 notfound = notfound.tmpl
261 262 error = error.tmpl
262 263 urlparameter = '{separator}{name}={value|urlescape}'
263 264 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
264 265 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
265 266
266 267 searchhint = 'Find changesets by keywords (author, files, the commit message), revision
267 268 number or hash, or <a href="{url|urlescape}help/revsets">revset expression</a>.'
@@ -1,201 +1,202 b''
1 1 default = 'shortlog'
2 2 mimetype = 'text/html; charset={encoding}'
3 3 header = header.tmpl
4 4 footer = footer.tmpl
5 5 search = search.tmpl
6 6 changelog = changelog.tmpl
7 7 shortlog = shortlog.tmpl
8 8 shortlogentry = shortlogentry.tmpl
9 9 graph = graph.tmpl
10 10 naventry = '<a href="{url|urlescape}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
11 11 navshortentry = '<a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
12 12 navgraphentry = '<a href="{url|urlescape}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
13 13 filenaventry = '<a href="{url|urlescape}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
14 14 filedifflink = '<a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
15 15 filenodelink = '<a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
16 16 filenolink = '{file|escape} '
17 17 fileellipses = '...'
18 18 changelogentry = changelogentry.tmpl
19 19 searchentry = changelogentry.tmpl
20 20 changeset = changeset.tmpl
21 21 manifest = manifest.tmpl
22 22
23 23 nav = '{before%naventry} {after%naventry}'
24 24 navshort = '{before%navshortentry}{after%navshortentry}'
25 25 navgraph = '{before%navgraphentry}{after%navgraphentry}'
26 26 filenav = '{before%filenaventry}{after%filenaventry}'
27 27
28 28 direntry = '
29 29 <tr class="parity{parity}">
30 30 <td><tt>drwxr-xr-x</tt>&nbsp;
31 31 <td>&nbsp;
32 32 <td>&nbsp;
33 33 <td>
34 34 <a href="{url|urlescape}file/{symrev}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}/</a>
35 35 <a href="{url|urlescape}file/{symrev}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
36 36 {emptydirs|urlescape}
37 37 </a>'
38 38
39 39 fileentry = '
40 40 <tr class="parity{parity}">
41 41 <td><tt>{permissions|permissions}</tt>&nbsp;
42 42 <td align=right><tt class="date">{date|isodate}</tt>&nbsp;
43 43 <td align=right><tt>{size}</tt>&nbsp;
44 44 <td><a href="{url|urlescape}file/{symrev}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>'
45 45
46 46 filerevision = filerevision.tmpl
47 47 fileannotate = fileannotate.tmpl
48 48 filediff = filediff.tmpl
49 49 filelog = filelog.tmpl
50 50 fileline = '<div class="parity{parity}"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>&nbsp;{line|escape}</div>'
51 51 filelogentry = filelogentry.tmpl
52 52
53 53 # The &nbsp; ensures that all table cells have content (even if there
54 54 # is an empty line in the annotated file), which in turn ensures that
55 55 # all table rows have equal height.
56 56 annotateline = '
57 57 <tr class="parity{parity}{ifeq(node, originalnode, ' thisrev')}">
58 58 <td class="annotate">
59 59 {if(blockhead,
60 60 '<a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}">
61 {author|user}@{rev}
61 {rev}
62 62 </a>')}
63 63 <div class="annotate-info">
64 64 <div>{node|short}: {desc|escape|firstline}</div>
65 <div><em>{author|obfuscate}</em></div>
65 66 <div>parents: {parents%annotateparent}</div>
66 67 <a href="{url|urlescape}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>
67 68 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
68 69 </div>
69 70 </td>
70 71 <td>
71 72 <a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>
72 73 </td>
73 74 <td><pre>&nbsp;{line|escape}</pre></td>
74 75 </tr>'
75 76 annotateparent = '
76 77 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rev}</a>'
77 78 difflineplus = '<span class="plusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
78 79 difflineminus = '<span class="minusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
79 80 difflineat = '<span class="atline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
80 81 diffline = '<a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}'
81 82 changesetlink = '<a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
82 83 changelogparent = '
83 84 <tr>
84 85 <th class="parent">parent {rev}:</th>
85 86 <td class="parent">
86 87 {changesetlink}
87 88 </td>
88 89 </tr>'
89 90 changesetparent = '
90 91 <tr>
91 92 <th class="parent">parent {rev}:</th>
92 93 <td class="parent">{changesetlink}</td>
93 94 </tr>'
94 95 changesetparentdiff = '
95 96 <tr>
96 97 <th class="parent">parent {rev}:</th>
97 98 <td class="parent">{changesetlink} {ifeq(node, basenode, '(current diff)', '({difffrom})')}</td>
98 99 </tr>'
99 100 difffrom = '<a href="{url|urlescape}rev/{node|short}:{originalnode|short}{sessionvars%urlparameter}">diff</a>'
100 101 filerevparent = '
101 102 <tr>
102 103 <td class="metatag">parent:</td>
103 104 <td>
104 105 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
105 106 {rename%filerename}{node|short}
106 107 </a>
107 108 </td>
108 109 </tr>'
109 110 filerename = '{file|escape}@'
110 111 filelogrename = '
111 112 <tr>
112 113 <th>base:</th>
113 114 <td>
114 115 <a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
115 116 {file|escape}@{node|short}
116 117 </a>
117 118 </td>
118 119 </tr>'
119 120 fileannotateparent = '
120 121 <tr>
121 122 <td class="metatag">parent:</td>
122 123 <td>
123 124 <a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
124 125 {rename%filerename}{node|short}
125 126 </a>
126 127 </td>
127 128 </tr>'
128 129 changesetchild = '
129 130 <tr>
130 131 <th class="child">child {rev}:</th>
131 132 <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
132 133 </tr>'
133 134 changelogchild = '
134 135 <tr>
135 136 <th class="child">child {rev}:</th>
136 137 <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
137 138 </tr>'
138 139 filerevchild = '
139 140 <tr>
140 141 <td class="metatag">child:</td>
141 142 <td><a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
142 143 </tr>'
143 144 fileannotatechild = '
144 145 <tr>
145 146 <td class="metatag">child:</td>
146 147 <td><a href="{url|urlescape}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
147 148 </tr>'
148 149 tags = tags.tmpl
149 150 tagentry = '
150 151 <li class="tagEntry parity{parity}">
151 152 <tt class="node">{node}</tt>
152 153 <a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{tag|escape}</a>
153 154 </li>'
154 155 branches = branches.tmpl
155 156 branchentry = '
156 157 <li class="tagEntry parity{parity}">
157 158 <tt class="node">{node}</tt>
158 159 <a href="{url|urlescape}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">{branch|escape}</a>
159 160 </li>'
160 161 diffblock = '<pre class="parity{parity}">{lines}</pre>'
161 162 changelogtag = '<tr><th class="tag">tag:</th><td class="tag">{tag|escape}</td></tr>'
162 163 changesettag = '<tr><th class="tag">tag:</th><td class="tag">{tag|escape}</td></tr>'
163 164 filediffparent = '
164 165 <tr>
165 166 <th class="parent">parent {rev}:</th>
166 167 <td class="parent"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
167 168 </tr>'
168 169 filelogparent = '
169 170 <tr>
170 171 <th>parent {rev}:</th>
171 172 <td><a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
172 173 </tr>'
173 174 filediffchild = '
174 175 <tr>
175 176 <th class="child">child {rev}:</th>
176 177 <td class="child"><a href="{url|urlescape}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
177 178 </tr>'
178 179 filelogchild = '
179 180 <tr>
180 181 <th>child {rev}:</th>
181 182 <td><a href="{url|urlescape}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
182 183 </tr>'
183 184 indexentry = '
184 185 <tr class="parity{parity}">
185 186 <td><a href="{url|urlescape}{sessionvars%urlparameter}">{name|escape}</a></td>
186 187 <td>{description}</td>
187 188 <td>{contact|obfuscate}</td>
188 189 <td class="age">{lastchange|rfc822date}</td>
189 190 <td class="indexlinks">
190 191 <a href="{url|urlescape}rss-log">RSS</a>
191 192 <a href="{url|urlescape}atom-log">Atom</a>
192 193 {archives%archiveentry}
193 194 </td>
194 195 </tr>'
195 196 index = index.tmpl
196 197 archiveentry = '<a href="{url|urlescape}archive/{symrev}{extension|urlescape}">{type|escape}</a> '
197 198 notfound = notfound.tmpl
198 199 error = error.tmpl
199 200 urlparameter = '{separator}{name}={value|urlescape}'
200 201 hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
201 202 breadcrumb = '&gt; <a href="{url|urlescape}">{name|escape}</a> '
@@ -1,857 +1,890 b''
1 1 #require pygments serve
2 2
3 3 $ cat <<EOF >> $HGRCPATH
4 4 > [extensions]
5 5 > highlight =
6 6 > [web]
7 7 > pygments_style = friendly
8 8 > highlightfiles = **.py and size('<100KB')
9 9 > EOF
10 10 $ hg init test
11 11 $ cd test
12 12
13 13 $ filterhtml () {
14 14 > sed -e "s/class=\"k\"/class=\"kn\"/g" \
15 15 > -e "s/class=\"mf\"/class=\"mi\"/g" \
16 16 > -e "s/class=\"\([cs]\)[h12]\"/class=\"\1\"/g"
17 17 > }
18 18
19 19 create random Python file to exercise Pygments
20 20
21 21 $ cat <<EOF > primes.py
22 22 > #!/usr/bin/env python
23 23 >
24 24 > """Fun with generators. Corresponding Haskell implementation:
25 25 >
26 26 > primes = 2 : sieve [3, 5..]
27 27 > where sieve (p:ns) = p : sieve [n | n <- ns, mod n p /= 0]
28 28 > """
29 29 >
30 30 > from itertools import dropwhile, ifilter, islice, count, chain
31 31 >
32 32 > def primes():
33 33 > """Generate all primes."""
34 34 > def sieve(ns):
35 35 > p = ns.next()
36 36 > # It is important to yield *here* in order to stop the
37 37 > # infinite recursion.
38 38 > yield p
39 39 > ns = ifilter(lambda n: n % p != 0, ns)
40 40 > for n in sieve(ns):
41 41 > yield n
42 42 >
43 43 > odds = ifilter(lambda i: i % 2 == 1, count())
44 44 > return chain([2], sieve(dropwhile(lambda n: n < 3, odds)))
45 45 >
46 46 > if __name__ == "__main__":
47 47 > import sys
48 48 > try:
49 49 > n = int(sys.argv[1])
50 50 > except (ValueError, IndexError):
51 51 > n = 10
52 52 > p = primes()
53 53 > print "The first %d primes: %s" % (n, list(islice(p, n)))
54 54 > EOF
55 55 $ echo >> primes.py # to test html markup with an empty line just before EOF
56 56 $ hg ci -Ama
57 57 adding primes.py
58 58
59 59 hg serve
60 60
61 61 $ hg serve -p $HGPORT -d -n test --pid-file=hg.pid -A access.log -E errors.log
62 62 $ cat hg.pid >> $DAEMON_PIDS
63 63
64 64 hgweb filerevision, html
65 65
66 66 $ (get-with-headers.py localhost:$HGPORT 'file/tip/primes.py') | filterhtml
67 67 200 Script output follows
68 68
69 69 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
70 70 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
71 71 <head>
72 72 <link rel="icon" href="/static/hgicon.png" type="image/png" />
73 73 <meta name="robots" content="index, nofollow" />
74 74 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
75 75 <script type="text/javascript" src="/static/mercurial.js"></script>
76 76
77 77 <link rel="stylesheet" href="/highlightcss" type="text/css" />
78 78 <title>test: 06824edf55d0 primes.py</title>
79 79 </head>
80 80 <body>
81 81
82 82 <div class="container">
83 83 <div class="menu">
84 84 <div class="logo">
85 85 <a href="https://mercurial-scm.org/">
86 86 <img src="/static/hglogo.png" alt="mercurial" /></a>
87 87 </div>
88 88 <ul>
89 89 <li><a href="/shortlog/tip">log</a></li>
90 90 <li><a href="/graph/tip">graph</a></li>
91 91 <li><a href="/tags">tags</a></li>
92 92 <li><a href="/bookmarks">bookmarks</a></li>
93 93 <li><a href="/branches">branches</a></li>
94 94 </ul>
95 95 <ul>
96 96 <li><a href="/rev/tip">changeset</a></li>
97 97 <li><a href="/file/tip/">browse</a></li>
98 98 </ul>
99 99 <ul>
100 100 <li class="active">file</li>
101 101 <li><a href="/file/tip/primes.py">latest</a></li>
102 102 <li><a href="/diff/tip/primes.py">diff</a></li>
103 103 <li><a href="/comparison/tip/primes.py">comparison</a></li>
104 104 <li><a href="/annotate/tip/primes.py">annotate</a></li>
105 105 <li><a href="/log/tip/primes.py">file log</a></li>
106 106 <li><a href="/raw-file/tip/primes.py">raw</a></li>
107 107 </ul>
108 108 <ul>
109 109 <li><a href="/help">help</a></li>
110 110 </ul>
111 111 </div>
112 112
113 113 <div class="main">
114 114 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
115 115 <h3>
116 116 view primes.py @ 0:<a href="/rev/06824edf55d0">06824edf55d0</a>
117 117 <span class="tag">tip</span>
118 118 </h3>
119 119
120 120 <form class="search" action="/log">
121 121
122 122 <p><input name="rev" id="search1" type="text" size="30" /></p>
123 123 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
124 124 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
125 125 </form>
126 126
127 127 <div class="description">a</div>
128 128
129 129 <table id="changesetEntry">
130 130 <tr>
131 131 <th class="author">author</th>
132 132 <td class="author">&#116;&#101;&#115;&#116;</td>
133 133 </tr>
134 134 <tr>
135 135 <th class="date">date</th>
136 136 <td class="date age">Thu, 01 Jan 1970 00:00:00 +0000</td>
137 137 </tr>
138 138 <tr>
139 139 <th class="author">parents</th>
140 140 <td class="author"></td>
141 141 </tr>
142 142 <tr>
143 143 <th class="author">children</th>
144 144 <td class="author"></td>
145 145 </tr>
146 146 </table>
147 147
148 148 <div class="overflow">
149 149 <div class="sourcefirst linewraptoggle">line wrap: <a class="linewraplink" href="javascript:toggleLinewrap()">on</a></div>
150 150 <div class="sourcefirst"> line source</div>
151 151 <pre class="sourcelines stripes4 wrap bottomline">
152 152 <span id="l1"><span class="c">#!/usr/bin/env python</span></span><a href="#l1"></a>
153 153 <span id="l2"></span><a href="#l2"></a>
154 154 <span id="l3"><span class="sd">&quot;&quot;&quot;Fun with generators. Corresponding Haskell implementation:</span></span><a href="#l3"></a>
155 155 <span id="l4"></span><a href="#l4"></a>
156 156 <span id="l5"><span class="sd">primes = 2 : sieve [3, 5..]</span></span><a href="#l5"></a>
157 157 <span id="l6"><span class="sd"> where sieve (p:ns) = p : sieve [n | n &lt;- ns, mod n p /= 0]</span></span><a href="#l6"></a>
158 158 <span id="l7"><span class="sd">&quot;&quot;&quot;</span></span><a href="#l7"></a>
159 159 <span id="l8"></span><a href="#l8"></a>
160 160 <span id="l9"><span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">dropwhile</span><span class="p">,</span> <span class="n">ifilter</span><span class="p">,</span> <span class="n">islice</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="n">chain</span></span><a href="#l9"></a>
161 161 <span id="l10"></span><a href="#l10"></a>
162 162 <span id="l11"><span class="kn">def</span> <span class="nf">primes</span><span class="p">():</span></span><a href="#l11"></a>
163 163 <span id="l12"> <span class="sd">&quot;&quot;&quot;Generate all primes.&quot;&quot;&quot;</span></span><a href="#l12"></a>
164 164 <span id="l13"> <span class="kn">def</span> <span class="nf">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></span><a href="#l13"></a>
165 165 <span id="l14"> <span class="n">p</span> <span class="o">=</span> <span class="n">ns</span><span class="o">.</span><span class="n">next</span><span class="p">()</span></span><a href="#l14"></a>
166 166 <span id="l15"> <span class="c"># It is important to yield *here* in order to stop the</span></span><a href="#l15"></a>
167 167 <span id="l16"> <span class="c"># infinite recursion.</span></span><a href="#l16"></a>
168 168 <span id="l17"> <span class="kn">yield</span> <span class="n">p</span></span><a href="#l17"></a>
169 169 <span id="l18"> <span class="n">ns</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">%</span> <span class="n">p</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">ns</span><span class="p">)</span></span><a href="#l18"></a>
170 170 <span id="l19"> <span class="kn">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></span><a href="#l19"></a>
171 171 <span id="l20"> <span class="kn">yield</span> <span class="n">n</span></span><a href="#l20"></a>
172 172 <span id="l21"></span><a href="#l21"></a>
173 173 <span id="l22"> <span class="n">odds</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">i</span><span class="p">:</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="n">count</span><span class="p">())</span></span><a href="#l22"></a>
174 174 <span id="l23"> <span class="kn">return</span> <span class="n">chain</span><span class="p">([</span><span class="mi">2</span><span class="p">],</span> <span class="n">sieve</span><span class="p">(</span><span class="n">dropwhile</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">,</span> <span class="n">odds</span><span class="p">)))</span></span><a href="#l23"></a>
175 175 <span id="l24"></span><a href="#l24"></a>
176 176 <span id="l25"><span class="kn">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span></span><a href="#l25"></a>
177 177 <span id="l26"> <span class="kn">import</span> <span class="nn">sys</span></span><a href="#l26"></a>
178 178 <span id="l27"> <span class="kn">try</span><span class="p">:</span></span><a href="#l27"></a>
179 179 <span id="l28"> <span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></span><a href="#l28"></a>
180 180 <span id="l29"> <span class="kn">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">IndexError</span><span class="p">):</span></span><a href="#l29"></a>
181 181 <span id="l30"> <span class="n">n</span> <span class="o">=</span> <span class="mi">10</span></span><a href="#l30"></a>
182 182 <span id="l31"> <span class="n">p</span> <span class="o">=</span> <span class="n">primes</span><span class="p">()</span></span><a href="#l31"></a>
183 183 <span id="l32"> <span class="kn">print</span> <span class="s">&quot;The first </span><span class="si">%d</span><span class="s"> primes: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">n</span><span class="p">)))</span></span><a href="#l32"></a>
184 184 <span id="l33"></span><a href="#l33"></a></pre>
185 185 </div>
186 186 </div>
187 187 </div>
188 188
189 189 <script type="text/javascript">process_dates()</script>
190 190
191 191
192 192 </body>
193 193 </html>
194 194
195 195
196 196 hgweb fileannotate, html
197 197
198 198 $ (get-with-headers.py localhost:$HGPORT 'annotate/tip/primes.py') | filterhtml
199 199 200 Script output follows
200 200
201 201 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
202 202 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
203 203 <head>
204 204 <link rel="icon" href="/static/hgicon.png" type="image/png" />
205 205 <meta name="robots" content="index, nofollow" />
206 206 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
207 207 <script type="text/javascript" src="/static/mercurial.js"></script>
208 208
209 209 <link rel="stylesheet" href="/highlightcss" type="text/css" />
210 210 <title>test: primes.py annotate</title>
211 211 </head>
212 212 <body>
213 213
214 214 <div class="container">
215 215 <div class="menu">
216 216 <div class="logo">
217 217 <a href="https://mercurial-scm.org/">
218 218 <img src="/static/hglogo.png" alt="mercurial" /></a>
219 219 </div>
220 220 <ul>
221 221 <li><a href="/shortlog/tip">log</a></li>
222 222 <li><a href="/graph/tip">graph</a></li>
223 223 <li><a href="/tags">tags</a></li>
224 224 <li><a href="/bookmarks">bookmarks</a></li>
225 225 <li><a href="/branches">branches</a></li>
226 226 </ul>
227 227
228 228 <ul>
229 229 <li><a href="/rev/tip">changeset</a></li>
230 230 <li><a href="/file/tip/">browse</a></li>
231 231 </ul>
232 232 <ul>
233 233 <li><a href="/file/tip/primes.py">file</a></li>
234 234 <li><a href="/file/tip/primes.py">latest</a></li>
235 235 <li><a href="/diff/tip/primes.py">diff</a></li>
236 236 <li><a href="/comparison/tip/primes.py">comparison</a></li>
237 237 <li class="active">annotate</li>
238 238 <li><a href="/log/tip/primes.py">file log</a></li>
239 239 <li><a href="/raw-annotate/tip/primes.py">raw</a></li>
240 240 </ul>
241 241 <ul>
242 242 <li><a href="/help">help</a></li>
243 243 </ul>
244 244 </div>
245 245
246 246 <div class="main">
247 247 <h2 class="breadcrumb"><a href="/">Mercurial</a> </h2>
248 248 <h3>
249 249 annotate primes.py @ 0:<a href="/rev/06824edf55d0">06824edf55d0</a>
250 250 <span class="tag">tip</span>
251 251 </h3>
252 252
253 253 <form class="search" action="/log">
254 254
255 255 <p><input name="rev" id="search1" type="text" size="30" /></p>
256 256 <div id="hint">Find changesets by keywords (author, files, the commit message), revision
257 257 number or hash, or <a href="/help/revsets">revset expression</a>.</div>
258 258 </form>
259 259
260 260 <div class="description">a</div>
261 261
262 262 <table id="changesetEntry">
263 263 <tr>
264 264 <th class="author">author</th>
265 265 <td class="author">&#116;&#101;&#115;&#116;</td>
266 266 </tr>
267 267 <tr>
268 268 <th class="date">date</th>
269 269 <td class="date age">Thu, 01 Jan 1970 00:00:00 +0000</td>
270 270 </tr>
271 271 <tr>
272 272 <th class="author">parents</th>
273 273 <td class="author"></td>
274 274 </tr>
275 275 <tr>
276 276 <th class="author">children</th>
277 277 <td class="author"></td>
278 278 </tr>
279 279 </table>
280 280
281 281 <div class="overflow">
282 282 <table class="bigtable">
283 283 <thead>
284 284 <tr>
285 285 <th class="annotate">rev</th>
286 286 <th class="line">&nbsp;&nbsp;line source</th>
287 287 </tr>
288 288 </thead>
289 289 <tbody class="stripes2">
290 290
291 291 <tr id="l1" class="thisrev">
292 292 <td class="annotate">
293 293 <a href="/annotate/06824edf55d0/primes.py#l1">
294 test@0
294 0
295 295 </a>
296 296 <div class="annotate-info">
297 297 <div>06824edf55d0: a</div>
298 <div><em>&#116;&#101;&#115;&#116;</em></div>
298 299 <div>parents: </div>
299 300 <a href="/diff/06824edf55d0/primes.py">diff</a>
300 301 <a href="/rev/06824edf55d0">changeset</a>
301 302 </div>
302 303 </td>
303 304 <td class="source"><a href="#l1"> 1</a> <span class="c">#!/usr/bin/env python</span></td>
304 305 </tr>
305 306 <tr id="l2" class="thisrev">
306 307 <td class="annotate">
307 308
308 309 <div class="annotate-info">
309 310 <div>06824edf55d0: a</div>
311 <div><em>&#116;&#101;&#115;&#116;</em></div>
310 312 <div>parents: </div>
311 313 <a href="/diff/06824edf55d0/primes.py">diff</a>
312 314 <a href="/rev/06824edf55d0">changeset</a>
313 315 </div>
314 316 </td>
315 317 <td class="source"><a href="#l2"> 2</a> </td>
316 318 </tr>
317 319 <tr id="l3" class="thisrev">
318 320 <td class="annotate">
319 321
320 322 <div class="annotate-info">
321 323 <div>06824edf55d0: a</div>
324 <div><em>&#116;&#101;&#115;&#116;</em></div>
322 325 <div>parents: </div>
323 326 <a href="/diff/06824edf55d0/primes.py">diff</a>
324 327 <a href="/rev/06824edf55d0">changeset</a>
325 328 </div>
326 329 </td>
327 330 <td class="source"><a href="#l3"> 3</a> <span class="sd">&quot;&quot;&quot;Fun with generators. Corresponding Haskell implementation:</span></td>
328 331 </tr>
329 332 <tr id="l4" class="thisrev">
330 333 <td class="annotate">
331 334
332 335 <div class="annotate-info">
333 336 <div>06824edf55d0: a</div>
337 <div><em>&#116;&#101;&#115;&#116;</em></div>
334 338 <div>parents: </div>
335 339 <a href="/diff/06824edf55d0/primes.py">diff</a>
336 340 <a href="/rev/06824edf55d0">changeset</a>
337 341 </div>
338 342 </td>
339 343 <td class="source"><a href="#l4"> 4</a> </td>
340 344 </tr>
341 345 <tr id="l5" class="thisrev">
342 346 <td class="annotate">
343 347
344 348 <div class="annotate-info">
345 349 <div>06824edf55d0: a</div>
350 <div><em>&#116;&#101;&#115;&#116;</em></div>
346 351 <div>parents: </div>
347 352 <a href="/diff/06824edf55d0/primes.py">diff</a>
348 353 <a href="/rev/06824edf55d0">changeset</a>
349 354 </div>
350 355 </td>
351 356 <td class="source"><a href="#l5"> 5</a> <span class="sd">primes = 2 : sieve [3, 5..]</span></td>
352 357 </tr>
353 358 <tr id="l6" class="thisrev">
354 359 <td class="annotate">
355 360
356 361 <div class="annotate-info">
357 362 <div>06824edf55d0: a</div>
363 <div><em>&#116;&#101;&#115;&#116;</em></div>
358 364 <div>parents: </div>
359 365 <a href="/diff/06824edf55d0/primes.py">diff</a>
360 366 <a href="/rev/06824edf55d0">changeset</a>
361 367 </div>
362 368 </td>
363 369 <td class="source"><a href="#l6"> 6</a> <span class="sd"> where sieve (p:ns) = p : sieve [n | n &lt;- ns, mod n p /= 0]</span></td>
364 370 </tr>
365 371 <tr id="l7" class="thisrev">
366 372 <td class="annotate">
367 373
368 374 <div class="annotate-info">
369 375 <div>06824edf55d0: a</div>
376 <div><em>&#116;&#101;&#115;&#116;</em></div>
370 377 <div>parents: </div>
371 378 <a href="/diff/06824edf55d0/primes.py">diff</a>
372 379 <a href="/rev/06824edf55d0">changeset</a>
373 380 </div>
374 381 </td>
375 382 <td class="source"><a href="#l7"> 7</a> <span class="sd">&quot;&quot;&quot;</span></td>
376 383 </tr>
377 384 <tr id="l8" class="thisrev">
378 385 <td class="annotate">
379 386
380 387 <div class="annotate-info">
381 388 <div>06824edf55d0: a</div>
389 <div><em>&#116;&#101;&#115;&#116;</em></div>
382 390 <div>parents: </div>
383 391 <a href="/diff/06824edf55d0/primes.py">diff</a>
384 392 <a href="/rev/06824edf55d0">changeset</a>
385 393 </div>
386 394 </td>
387 395 <td class="source"><a href="#l8"> 8</a> </td>
388 396 </tr>
389 397 <tr id="l9" class="thisrev">
390 398 <td class="annotate">
391 399
392 400 <div class="annotate-info">
393 401 <div>06824edf55d0: a</div>
402 <div><em>&#116;&#101;&#115;&#116;</em></div>
394 403 <div>parents: </div>
395 404 <a href="/diff/06824edf55d0/primes.py">diff</a>
396 405 <a href="/rev/06824edf55d0">changeset</a>
397 406 </div>
398 407 </td>
399 408 <td class="source"><a href="#l9"> 9</a> <span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">dropwhile</span><span class="p">,</span> <span class="n">ifilter</span><span class="p">,</span> <span class="n">islice</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="n">chain</span></td>
400 409 </tr>
401 410 <tr id="l10" class="thisrev">
402 411 <td class="annotate">
403 412
404 413 <div class="annotate-info">
405 414 <div>06824edf55d0: a</div>
415 <div><em>&#116;&#101;&#115;&#116;</em></div>
406 416 <div>parents: </div>
407 417 <a href="/diff/06824edf55d0/primes.py">diff</a>
408 418 <a href="/rev/06824edf55d0">changeset</a>
409 419 </div>
410 420 </td>
411 421 <td class="source"><a href="#l10"> 10</a> </td>
412 422 </tr>
413 423 <tr id="l11" class="thisrev">
414 424 <td class="annotate">
415 425
416 426 <div class="annotate-info">
417 427 <div>06824edf55d0: a</div>
428 <div><em>&#116;&#101;&#115;&#116;</em></div>
418 429 <div>parents: </div>
419 430 <a href="/diff/06824edf55d0/primes.py">diff</a>
420 431 <a href="/rev/06824edf55d0">changeset</a>
421 432 </div>
422 433 </td>
423 434 <td class="source"><a href="#l11"> 11</a> <span class="kn">def</span> <span class="nf">primes</span><span class="p">():</span></td>
424 435 </tr>
425 436 <tr id="l12" class="thisrev">
426 437 <td class="annotate">
427 438
428 439 <div class="annotate-info">
429 440 <div>06824edf55d0: a</div>
441 <div><em>&#116;&#101;&#115;&#116;</em></div>
430 442 <div>parents: </div>
431 443 <a href="/diff/06824edf55d0/primes.py">diff</a>
432 444 <a href="/rev/06824edf55d0">changeset</a>
433 445 </div>
434 446 </td>
435 447 <td class="source"><a href="#l12"> 12</a> <span class="sd">&quot;&quot;&quot;Generate all primes.&quot;&quot;&quot;</span></td>
436 448 </tr>
437 449 <tr id="l13" class="thisrev">
438 450 <td class="annotate">
439 451
440 452 <div class="annotate-info">
441 453 <div>06824edf55d0: a</div>
454 <div><em>&#116;&#101;&#115;&#116;</em></div>
442 455 <div>parents: </div>
443 456 <a href="/diff/06824edf55d0/primes.py">diff</a>
444 457 <a href="/rev/06824edf55d0">changeset</a>
445 458 </div>
446 459 </td>
447 460 <td class="source"><a href="#l13"> 13</a> <span class="kn">def</span> <span class="nf">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></td>
448 461 </tr>
449 462 <tr id="l14" class="thisrev">
450 463 <td class="annotate">
451 464
452 465 <div class="annotate-info">
453 466 <div>06824edf55d0: a</div>
467 <div><em>&#116;&#101;&#115;&#116;</em></div>
454 468 <div>parents: </div>
455 469 <a href="/diff/06824edf55d0/primes.py">diff</a>
456 470 <a href="/rev/06824edf55d0">changeset</a>
457 471 </div>
458 472 </td>
459 473 <td class="source"><a href="#l14"> 14</a> <span class="n">p</span> <span class="o">=</span> <span class="n">ns</span><span class="o">.</span><span class="n">next</span><span class="p">()</span></td>
460 474 </tr>
461 475 <tr id="l15" class="thisrev">
462 476 <td class="annotate">
463 477
464 478 <div class="annotate-info">
465 479 <div>06824edf55d0: a</div>
480 <div><em>&#116;&#101;&#115;&#116;</em></div>
466 481 <div>parents: </div>
467 482 <a href="/diff/06824edf55d0/primes.py">diff</a>
468 483 <a href="/rev/06824edf55d0">changeset</a>
469 484 </div>
470 485 </td>
471 486 <td class="source"><a href="#l15"> 15</a> <span class="c"># It is important to yield *here* in order to stop the</span></td>
472 487 </tr>
473 488 <tr id="l16" class="thisrev">
474 489 <td class="annotate">
475 490
476 491 <div class="annotate-info">
477 492 <div>06824edf55d0: a</div>
493 <div><em>&#116;&#101;&#115;&#116;</em></div>
478 494 <div>parents: </div>
479 495 <a href="/diff/06824edf55d0/primes.py">diff</a>
480 496 <a href="/rev/06824edf55d0">changeset</a>
481 497 </div>
482 498 </td>
483 499 <td class="source"><a href="#l16"> 16</a> <span class="c"># infinite recursion.</span></td>
484 500 </tr>
485 501 <tr id="l17" class="thisrev">
486 502 <td class="annotate">
487 503
488 504 <div class="annotate-info">
489 505 <div>06824edf55d0: a</div>
506 <div><em>&#116;&#101;&#115;&#116;</em></div>
490 507 <div>parents: </div>
491 508 <a href="/diff/06824edf55d0/primes.py">diff</a>
492 509 <a href="/rev/06824edf55d0">changeset</a>
493 510 </div>
494 511 </td>
495 512 <td class="source"><a href="#l17"> 17</a> <span class="kn">yield</span> <span class="n">p</span></td>
496 513 </tr>
497 514 <tr id="l18" class="thisrev">
498 515 <td class="annotate">
499 516
500 517 <div class="annotate-info">
501 518 <div>06824edf55d0: a</div>
519 <div><em>&#116;&#101;&#115;&#116;</em></div>
502 520 <div>parents: </div>
503 521 <a href="/diff/06824edf55d0/primes.py">diff</a>
504 522 <a href="/rev/06824edf55d0">changeset</a>
505 523 </div>
506 524 </td>
507 525 <td class="source"><a href="#l18"> 18</a> <span class="n">ns</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">%</span> <span class="n">p</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">ns</span><span class="p">)</span></td>
508 526 </tr>
509 527 <tr id="l19" class="thisrev">
510 528 <td class="annotate">
511 529
512 530 <div class="annotate-info">
513 531 <div>06824edf55d0: a</div>
532 <div><em>&#116;&#101;&#115;&#116;</em></div>
514 533 <div>parents: </div>
515 534 <a href="/diff/06824edf55d0/primes.py">diff</a>
516 535 <a href="/rev/06824edf55d0">changeset</a>
517 536 </div>
518 537 </td>
519 538 <td class="source"><a href="#l19"> 19</a> <span class="kn">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></td>
520 539 </tr>
521 540 <tr id="l20" class="thisrev">
522 541 <td class="annotate">
523 542
524 543 <div class="annotate-info">
525 544 <div>06824edf55d0: a</div>
545 <div><em>&#116;&#101;&#115;&#116;</em></div>
526 546 <div>parents: </div>
527 547 <a href="/diff/06824edf55d0/primes.py">diff</a>
528 548 <a href="/rev/06824edf55d0">changeset</a>
529 549 </div>
530 550 </td>
531 551 <td class="source"><a href="#l20"> 20</a> <span class="kn">yield</span> <span class="n">n</span></td>
532 552 </tr>
533 553 <tr id="l21" class="thisrev">
534 554 <td class="annotate">
535 555
536 556 <div class="annotate-info">
537 557 <div>06824edf55d0: a</div>
558 <div><em>&#116;&#101;&#115;&#116;</em></div>
538 559 <div>parents: </div>
539 560 <a href="/diff/06824edf55d0/primes.py">diff</a>
540 561 <a href="/rev/06824edf55d0">changeset</a>
541 562 </div>
542 563 </td>
543 564 <td class="source"><a href="#l21"> 21</a> </td>
544 565 </tr>
545 566 <tr id="l22" class="thisrev">
546 567 <td class="annotate">
547 568
548 569 <div class="annotate-info">
549 570 <div>06824edf55d0: a</div>
571 <div><em>&#116;&#101;&#115;&#116;</em></div>
550 572 <div>parents: </div>
551 573 <a href="/diff/06824edf55d0/primes.py">diff</a>
552 574 <a href="/rev/06824edf55d0">changeset</a>
553 575 </div>
554 576 </td>
555 577 <td class="source"><a href="#l22"> 22</a> <span class="n">odds</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">i</span><span class="p">:</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="n">count</span><span class="p">())</span></td>
556 578 </tr>
557 579 <tr id="l23" class="thisrev">
558 580 <td class="annotate">
559 581
560 582 <div class="annotate-info">
561 583 <div>06824edf55d0: a</div>
584 <div><em>&#116;&#101;&#115;&#116;</em></div>
562 585 <div>parents: </div>
563 586 <a href="/diff/06824edf55d0/primes.py">diff</a>
564 587 <a href="/rev/06824edf55d0">changeset</a>
565 588 </div>
566 589 </td>
567 590 <td class="source"><a href="#l23"> 23</a> <span class="kn">return</span> <span class="n">chain</span><span class="p">([</span><span class="mi">2</span><span class="p">],</span> <span class="n">sieve</span><span class="p">(</span><span class="n">dropwhile</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">,</span> <span class="n">odds</span><span class="p">)))</span></td>
568 591 </tr>
569 592 <tr id="l24" class="thisrev">
570 593 <td class="annotate">
571 594
572 595 <div class="annotate-info">
573 596 <div>06824edf55d0: a</div>
597 <div><em>&#116;&#101;&#115;&#116;</em></div>
574 598 <div>parents: </div>
575 599 <a href="/diff/06824edf55d0/primes.py">diff</a>
576 600 <a href="/rev/06824edf55d0">changeset</a>
577 601 </div>
578 602 </td>
579 603 <td class="source"><a href="#l24"> 24</a> </td>
580 604 </tr>
581 605 <tr id="l25" class="thisrev">
582 606 <td class="annotate">
583 607
584 608 <div class="annotate-info">
585 609 <div>06824edf55d0: a</div>
610 <div><em>&#116;&#101;&#115;&#116;</em></div>
586 611 <div>parents: </div>
587 612 <a href="/diff/06824edf55d0/primes.py">diff</a>
588 613 <a href="/rev/06824edf55d0">changeset</a>
589 614 </div>
590 615 </td>
591 616 <td class="source"><a href="#l25"> 25</a> <span class="kn">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span></td>
592 617 </tr>
593 618 <tr id="l26" class="thisrev">
594 619 <td class="annotate">
595 620
596 621 <div class="annotate-info">
597 622 <div>06824edf55d0: a</div>
623 <div><em>&#116;&#101;&#115;&#116;</em></div>
598 624 <div>parents: </div>
599 625 <a href="/diff/06824edf55d0/primes.py">diff</a>
600 626 <a href="/rev/06824edf55d0">changeset</a>
601 627 </div>
602 628 </td>
603 629 <td class="source"><a href="#l26"> 26</a> <span class="kn">import</span> <span class="nn">sys</span></td>
604 630 </tr>
605 631 <tr id="l27" class="thisrev">
606 632 <td class="annotate">
607 633
608 634 <div class="annotate-info">
609 635 <div>06824edf55d0: a</div>
636 <div><em>&#116;&#101;&#115;&#116;</em></div>
610 637 <div>parents: </div>
611 638 <a href="/diff/06824edf55d0/primes.py">diff</a>
612 639 <a href="/rev/06824edf55d0">changeset</a>
613 640 </div>
614 641 </td>
615 642 <td class="source"><a href="#l27"> 27</a> <span class="kn">try</span><span class="p">:</span></td>
616 643 </tr>
617 644 <tr id="l28" class="thisrev">
618 645 <td class="annotate">
619 646
620 647 <div class="annotate-info">
621 648 <div>06824edf55d0: a</div>
649 <div><em>&#116;&#101;&#115;&#116;</em></div>
622 650 <div>parents: </div>
623 651 <a href="/diff/06824edf55d0/primes.py">diff</a>
624 652 <a href="/rev/06824edf55d0">changeset</a>
625 653 </div>
626 654 </td>
627 655 <td class="source"><a href="#l28"> 28</a> <span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></td>
628 656 </tr>
629 657 <tr id="l29" class="thisrev">
630 658 <td class="annotate">
631 659
632 660 <div class="annotate-info">
633 661 <div>06824edf55d0: a</div>
662 <div><em>&#116;&#101;&#115;&#116;</em></div>
634 663 <div>parents: </div>
635 664 <a href="/diff/06824edf55d0/primes.py">diff</a>
636 665 <a href="/rev/06824edf55d0">changeset</a>
637 666 </div>
638 667 </td>
639 668 <td class="source"><a href="#l29"> 29</a> <span class="kn">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">IndexError</span><span class="p">):</span></td>
640 669 </tr>
641 670 <tr id="l30" class="thisrev">
642 671 <td class="annotate">
643 672
644 673 <div class="annotate-info">
645 674 <div>06824edf55d0: a</div>
675 <div><em>&#116;&#101;&#115;&#116;</em></div>
646 676 <div>parents: </div>
647 677 <a href="/diff/06824edf55d0/primes.py">diff</a>
648 678 <a href="/rev/06824edf55d0">changeset</a>
649 679 </div>
650 680 </td>
651 681 <td class="source"><a href="#l30"> 30</a> <span class="n">n</span> <span class="o">=</span> <span class="mi">10</span></td>
652 682 </tr>
653 683 <tr id="l31" class="thisrev">
654 684 <td class="annotate">
655 685
656 686 <div class="annotate-info">
657 687 <div>06824edf55d0: a</div>
688 <div><em>&#116;&#101;&#115;&#116;</em></div>
658 689 <div>parents: </div>
659 690 <a href="/diff/06824edf55d0/primes.py">diff</a>
660 691 <a href="/rev/06824edf55d0">changeset</a>
661 692 </div>
662 693 </td>
663 694 <td class="source"><a href="#l31"> 31</a> <span class="n">p</span> <span class="o">=</span> <span class="n">primes</span><span class="p">()</span></td>
664 695 </tr>
665 696 <tr id="l32" class="thisrev">
666 697 <td class="annotate">
667 698
668 699 <div class="annotate-info">
669 700 <div>06824edf55d0: a</div>
701 <div><em>&#116;&#101;&#115;&#116;</em></div>
670 702 <div>parents: </div>
671 703 <a href="/diff/06824edf55d0/primes.py">diff</a>
672 704 <a href="/rev/06824edf55d0">changeset</a>
673 705 </div>
674 706 </td>
675 707 <td class="source"><a href="#l32"> 32</a> <span class="kn">print</span> <span class="s">&quot;The first </span><span class="si">%d</span><span class="s"> primes: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">n</span><span class="p">)))</span></td>
676 708 </tr>
677 709 <tr id="l33" class="thisrev">
678 710 <td class="annotate">
679 711
680 712 <div class="annotate-info">
681 713 <div>06824edf55d0: a</div>
714 <div><em>&#116;&#101;&#115;&#116;</em></div>
682 715 <div>parents: </div>
683 716 <a href="/diff/06824edf55d0/primes.py">diff</a>
684 717 <a href="/rev/06824edf55d0">changeset</a>
685 718 </div>
686 719 </td>
687 720 <td class="source"><a href="#l33"> 33</a> </td>
688 721 </tr>
689 722 </tbody>
690 723 </table>
691 724 </div>
692 725 </div>
693 726 </div>
694 727
695 728 <script type="text/javascript">process_dates()</script>
696 729
697 730
698 731 </body>
699 732 </html>
700 733
701 734
702 735 hgweb fileannotate, raw
703 736
704 737 $ (get-with-headers.py localhost:$HGPORT 'annotate/tip/primes.py?style=raw') \
705 738 > | sed "s/test@//" > a
706 739 $ echo "200 Script output follows" > b
707 740 $ echo "" >> b
708 741 $ echo "" >> b
709 742 $ hg annotate "primes.py" >> b
710 743 $ echo "" >> b
711 744 $ echo "" >> b
712 745 $ echo "" >> b
713 746 $ echo "" >> b
714 747 $ cmp b a || diff -u b a
715 748
716 749 hgweb filerevision, raw
717 750
718 751 $ (get-with-headers.py localhost:$HGPORT 'file/tip/primes.py?style=raw') \
719 752 > > a
720 753 $ echo "200 Script output follows" > b
721 754 $ echo "" >> b
722 755 $ hg cat primes.py >> b
723 756 $ cmp b a || diff -u b a
724 757
725 758 hgweb highlightcss friendly
726 759
727 760 $ get-with-headers.py localhost:$HGPORT 'highlightcss' > out
728 761 $ head -n 4 out
729 762 200 Script output follows
730 763
731 764 /* pygments_style = friendly */
732 765
733 766 $ rm out
734 767
735 768 errors encountered
736 769
737 770 $ cat errors.log
738 771 $ killdaemons.py
739 772
740 773 Change the pygments style
741 774
742 775 $ cat > .hg/hgrc <<EOF
743 776 > [web]
744 777 > pygments_style = fruity
745 778 > EOF
746 779
747 780 hg serve again
748 781
749 782 $ hg serve -p $HGPORT -d -n test --pid-file=hg.pid -A access.log -E errors.log
750 783 $ cat hg.pid >> $DAEMON_PIDS
751 784
752 785 hgweb highlightcss fruity
753 786
754 787 $ get-with-headers.py localhost:$HGPORT 'highlightcss' > out
755 788 $ head -n 4 out
756 789 200 Script output follows
757 790
758 791 /* pygments_style = fruity */
759 792
760 793 $ rm out
761 794
762 795 errors encountered
763 796
764 797 $ cat errors.log
765 798 $ killdaemons.py
766 799
767 800 only highlight C source files
768 801
769 802 $ cat > .hg/hgrc <<EOF
770 803 > [web]
771 804 > highlightfiles = **.c
772 805 > EOF
773 806
774 807 hg serve again
775 808
776 809 $ hg serve -p $HGPORT -d -n test --pid-file=hg.pid -A access.log -E errors.log
777 810 $ cat hg.pid >> $DAEMON_PIDS
778 811
779 812 test that fileset in highlightfiles works and primes.py is not highlighted
780 813
781 814 $ get-with-headers.py localhost:$HGPORT 'file/tip/primes.py' | grep 'id="l11"'
782 815 <span id="l11">def primes():</span><a href="#l11"></a>
783 816
784 817 errors encountered
785 818
786 819 $ cat errors.log
787 820 $ cd ..
788 821 $ hg init eucjp
789 822 $ cd eucjp
790 823 $ $PYTHON -c 'print("\265\376")' >> eucjp.txt # Japanese kanji "Kyo"
791 824 $ hg ci -Ama
792 825 adding eucjp.txt
793 826 $ hgserveget () {
794 827 > killdaemons.py
795 828 > echo % HGENCODING="$1" hg serve
796 829 > HGENCODING="$1" hg serve -p $HGPORT -d -n test --pid-file=hg.pid -E errors.log
797 830 > cat hg.pid >> $DAEMON_PIDS
798 831 >
799 832 > echo % hgweb filerevision, html
800 833 > get-with-headers.py localhost:$HGPORT "file/tip/$2" \
801 834 > | grep '<div class="parity0 source">'
802 835 > echo % errors encountered
803 836 > cat errors.log
804 837 > }
805 838 $ hgserveget euc-jp eucjp.txt
806 839 % HGENCODING=euc-jp hg serve
807 840 % hgweb filerevision, html
808 841 % errors encountered
809 842 $ hgserveget utf-8 eucjp.txt
810 843 % HGENCODING=utf-8 hg serve
811 844 % hgweb filerevision, html
812 845 % errors encountered
813 846 $ hgserveget us-ascii eucjp.txt
814 847 % HGENCODING=us-ascii hg serve
815 848 % hgweb filerevision, html
816 849 % errors encountered
817 850
818 851 We attempt to highlight unknown files by default
819 852
820 853 $ killdaemons.py
821 854
822 855 $ cat > .hg/hgrc << EOF
823 856 > [web]
824 857 > highlightfiles = **
825 858 > EOF
826 859
827 860 $ cat > unknownfile << EOF
828 861 > #!/usr/bin/python
829 862 > def foo():
830 863 > pass
831 864 > EOF
832 865
833 866 $ hg add unknownfile
834 867 $ hg commit -m unknown unknownfile
835 868
836 869 $ hg serve -p $HGPORT -d -n test --pid-file=hg.pid
837 870 $ cat hg.pid >> $DAEMON_PIDS
838 871
839 872 $ get-with-headers.py localhost:$HGPORT 'file/tip/unknownfile' | grep l2
840 873 <span id="l2"><span class="k">def</span> <span class="nf">foo</span><span class="p">():</span></span><a href="#l2"></a>
841 874
842 875 We can prevent Pygments from falling back to a non filename-based
843 876 detection mode
844 877
845 878 $ cat > .hg/hgrc << EOF
846 879 > [web]
847 880 > highlightfiles = **
848 881 > highlightonlymatchfilename = true
849 882 > EOF
850 883
851 884 $ killdaemons.py
852 885 $ hg serve -p $HGPORT -d -n test --pid-file=hg.pid
853 886 $ cat hg.pid >> $DAEMON_PIDS
854 887 $ get-with-headers.py localhost:$HGPORT 'file/tip/unknownfile' | grep l2
855 888 <span id="l2">def foo():</span><a href="#l2"></a>
856 889
857 890 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now