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