1 |
<?xml version="1.0"?> |
2 |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
3 |
xmlns="http://www.w3.org/1999/xhtml" |
4 |
version="1.0"> |
5 |
|
6 |
<!-- The parameter docbase is the location where the final document |
7 |
will be served from. This will always have the following value |
8 |
in final versions, but draft versions may appear for a while at |
9 |
a different location, and this can be parameterised when this |
10 |
stylesheet is invoked. --> |
11 |
<xsl:param name='docbase'>http://www.ivoa.net/documents/</xsl:param> |
12 |
|
13 |
<xsl:param name="CSS_HREF" select="''"/> |
14 |
|
15 |
<xsl:output method="xml" encoding="utf-8"/> |
16 |
<xsl:output cdata-section-elements="pre"/> |
17 |
|
18 |
<xsl:template match="*"> |
19 |
<xsl:copy> |
20 |
<xsl:apply-templates select="*|@*|text()"/> |
21 |
</xsl:copy> |
22 |
</xsl:template> |
23 |
|
24 |
<xsl:template match="@*"> |
25 |
<xsl:copy/> |
26 |
</xsl:template> |
27 |
|
28 |
<xsl:template match="head"> |
29 |
<xsl:copy> |
30 |
<title><xsl:value-of select="//h1[1]"/></title> |
31 |
<xsl:element name="link"> |
32 |
<xsl:attribute name="rel">stylesheet</xsl:attribute> |
33 |
<xsl:attribute name="type">text/css</xsl:attribute> |
34 |
<xsl:attribute name="href"> |
35 |
<xsl:value-of select="$CSS_HREF"/> |
36 |
</xsl:attribute> |
37 |
</xsl:element> |
38 |
<xsl:call-template name="selectDoctypeStyle"/> |
39 |
|
40 |
<xsl:apply-templates select="//span[@class='customcss']"/> |
41 |
|
42 |
<style type="text/css"> |
43 |
<xsl:text disable-output-escaping="yes"> |
44 |
div#versionstatement, div#dateline { |
45 |
color: #005A9C; |
46 |
font-size: 150%; |
47 |
} |
48 |
|
49 |
p.parsep { |
50 |
overflow: hidden; |
51 |
height: 0pt; |
52 |
margin-top:0.5ex; |
53 |
margin-bottom:0.5ex; |
54 |
} |
55 |
|
56 |
div.generated { |
57 |
padding-left: 5mm; |
58 |
border-left: 4pt solid #dddddd; |
59 |
} |
60 |
|
61 |
div.admonition { |
62 |
width: 30em; |
63 |
position: relative; |
64 |
float: right; |
65 |
background-color: #dddddd; |
66 |
font-size: 80%; |
67 |
margin: 1ex; |
68 |
padding: 3pt; |
69 |
overflow: auto; |
70 |
} |
71 |
|
72 |
p.admonition-type { |
73 |
background-color: #444444; |
74 |
color: #ffffff; |
75 |
margin-top: 0px; |
76 |
padding-left: 5pt; |
77 |
padding-top: 5pt; |
78 |
padding-bottom: 5pt; |
79 |
font-weight: bold; |
80 |
} |
81 |
|
82 |
a.tth_citation, a.tth_citeref { |
83 |
color: #002A5C; |
84 |
text-decoration: none; |
85 |
} |
86 |
|
87 |
.xmlel { |
88 |
font-family: monospace; |
89 |
font-style: italic; |
90 |
} |
91 |
|
92 |
.vorent { |
93 |
font-variant: small-caps; |
94 |
} |
95 |
|
96 |
table { |
97 |
border-collapse: collapse; |
98 |
border-spacing: 0px; |
99 |
} |
100 |
|
101 |
table.tabular { |
102 |
margin-top: 2ex; |
103 |
margin-bottom: 1ex; |
104 |
margin-left: 0.5em; |
105 |
} |
106 |
|
107 |
table.tabular > * > tr > td, table.tabular > tr > td { |
108 |
border-top: 1pt solid gray; |
109 |
border-bottom: 1pt solid gray; |
110 |
padding: 2pt; |
111 |
} |
112 |
|
113 |
dt { |
114 |
margin-top: 0.5ex; |
115 |
} |
116 |
|
117 |
.redaction { |
118 |
background-color: #ffff33; |
119 |
} |
120 |
|
121 |
span.nolinkurl { |
122 |
font-family: monospace; |
123 |
} |
124 |
|
125 |
.basicstyle__footnotesize { |
126 |
font-size: 80%; |
127 |
} |
128 |
|
129 |
pre { |
130 |
counter-reset: pre_line; |
131 |
} |
132 |
|
133 |
pre span { |
134 |
counter-increment: pre_line; |
135 |
} |
136 |
|
137 |
div.numbers_left pre span:before { |
138 |
content: counter(pre_line); |
139 |
text-align: right; |
140 |
user-select: none; |
141 |
min-width: 1.5em; |
142 |
display: inline-block; |
143 |
padding-right: 1em; |
144 |
} |
145 |
|
146 |
img.archdiag { |
147 |
display: block; |
148 |
width: 90%; |
149 |
margin-left: auto; |
150 |
margin-right: auto; |
151 |
max-width: 19cm; |
152 |
} |
153 |
|
154 |
ul.authors, ul.previousversions, ul.editors { |
155 |
list-style-type: none; |
156 |
padding-left: 0pt; |
157 |
margin-top: 2pt; |
158 |
margin-bottom: 2pt; |
159 |
} |
160 |
|
161 |
body div { |
162 |
max-width: 21cm; |
163 |
} |
164 |
</xsl:text></style> |
165 |
|
166 |
<xsl:apply-templates/> |
167 |
</xsl:copy> |
168 |
</xsl:template> |
169 |
|
170 |
<xsl:template match="div[@id='titlepage']"> |
171 |
<xsl:copy> |
172 |
<table cellspacing="0" cellpadding="0" width="450"> |
173 |
<tr> |
174 |
<td><a href="http://www.ivoa.net/"><img height="169" alt="IVOA" src="http://www.ivoa.net/icons/IVOA_wb_300.jpg" width="300" border="0"/></a></td> |
175 |
<td> |
176 |
<div style="padding: 3.6pt 7.2pt;"> |
177 |
<p><b><i><span style="font-size: 14pt; color: rgb(0, 90, 156);"><span> </span>I</span></i></b><i><span style="font-size: 14pt; color: rgb(0, 90, 156);">nternational</span></i></p> |
178 |
<p><b><i><span style="font-size: 14pt; color: rgb(0, 90, 156);"><span>   </span>V</span></i></b><i><span style="font-size: 14pt; color: rgb(0, 90, 156);">irtual</span></i></p> |
179 |
<p><b><i><span style="font-size: 14pt; color: rgb(0, 90, 156);"><span> </span><span>  </span>O</span></i></b><i><span style="font-size: 14pt; color: rgb(0, 90, 156);">bservatory</span></i></p> |
180 |
<p><b><i><span style="font-size: 14pt; color: rgb(0, 90, 156);">A</span></i></b><i><span style="font-size: 14pt; color: rgb(0, 90, 156);">lliance</span></i><i> |
181 |
</i></p> |
182 |
</div> |
183 |
<i></i></td> |
184 |
</tr> |
185 |
</table> |
186 |
<br/> |
187 |
</xsl:copy> |
188 |
|
189 |
<h1><xsl:value-of select="h1[@align='center']"/></h1> |
190 |
<div id="versionstatement"> |
191 |
Version <xsl:value-of select="span[@id='version']"/> |
192 |
</div> |
193 |
<div id="dateline"> |
194 |
<xsl:apply-templates select="span[@id='doctype']" mode="humanreadable"/> |
195 |
<xsl:text> </xsl:text> |
196 |
<xsl:apply-templates select="span[@id='docdate']"/> |
197 |
</div> |
198 |
<dl id="docmeta"> |
199 |
|
200 |
<dt>Working Group</dt> |
201 |
<xsl:copy-of select="dd[@id='ivoagroup']"/> |
202 |
|
203 |
<dt>This Version</dt> |
204 |
<dd> |
205 |
<xsl:call-template name="currentlink"/> |
206 |
</dd> |
207 |
|
208 |
<dt>Latest Version</dt> |
209 |
<dd> |
210 |
<xsl:call-template name="latestlink"/> |
211 |
</dd> |
212 |
|
213 |
<dt>Previous Versions</dt> |
214 |
<dd> |
215 |
<ul class="previousversions"> |
216 |
<xsl:apply-templates select="li[@class='previousversion']"/> |
217 |
</ul> |
218 |
</dd> |
219 |
|
220 |
<dt>Author(s)</dt> |
221 |
<dd> |
222 |
<ul class="authors"> |
223 |
<xsl:apply-templates select="li[@class='author']"/> |
224 |
</ul> |
225 |
</dd> |
226 |
|
227 |
<dt>Editor(s)</dt> |
228 |
<dd> |
229 |
<ul class="editors"> |
230 |
<xsl:apply-templates select="li[@class='editor']"/> |
231 |
</ul> |
232 |
</dd> |
233 |
|
234 |
<xsl:if test="span[@id='vcsRev']"> |
235 |
<dt>Version Control</dt> |
236 |
<dd>Revision <xsl:value-of select="span[@id='vcsRev']" |
237 |
/><xsl:if test="span[@id='vcsDate']">, last change |
238 |
<xsl:value-of select="span[@id='vcsDate']"/> |
239 |
</xsl:if> |
240 |
<xsl:if test="span[@id='vcsURL']"><br/> |
241 |
<a> |
242 |
<xsl:attribute name="href"> |
243 |
<xsl:value-of select="span[@id='vcsURL']"/> |
244 |
</xsl:attribute>Source file in VCS</a> |
245 |
</xsl:if> |
246 |
</dd> |
247 |
</xsl:if> |
248 |
</dl> |
249 |
</xsl:template> |
250 |
|
251 |
<xsl:template match="a/@name"> |
252 |
<xsl:if test="not(starts-with(., 'CITE'))"> |
253 |
<xsl:copy/> |
254 |
</xsl:if> |
255 |
</xsl:template> |
256 |
|
257 |
<xsl:template match="a/@href"> |
258 |
<xsl:if test="not(starts-with(., '#CITE'))"> |
259 |
<xsl:copy/> |
260 |
</xsl:if> |
261 |
</xsl:template> |
262 |
|
263 |
<xsl:template match="style[./@type='text/css']"> |
264 |
</xsl:template> |
265 |
|
266 |
<xsl:template match="span[@class='customcss']"> |
267 |
<link type="text/css" rel="stylesheet"> |
268 |
<xsl:attribute name="href"><xsl:value-of select="@ref"/></xsl:attribute> |
269 |
</link> |
270 |
</xsl:template> |
271 |
|
272 |
<xsl:template match="dd/div[./@class='p']"> |
273 |
</xsl:template> |
274 |
|
275 |
<xsl:template match="span[@id='doctype']" mode="humanreadable"> |
276 |
<xsl:variable name="doctype" select="."/> |
277 |
<xsl:choose> |
278 |
<xsl:when test="$doctype='WD'"> |
279 |
<xsl:text>IVOA Working Draft </xsl:text> |
280 |
</xsl:when> |
281 |
<xsl:when test="$doctype='PR'"> |
282 |
<xsl:text>IVOA Proposed Recommendation </xsl:text> |
283 |
</xsl:when> |
284 |
<xsl:when test="$doctype='REC'"> |
285 |
<xsl:text>IVOA Recommendation </xsl:text> |
286 |
</xsl:when> |
287 |
<xsl:when test="$doctype='NOTE'"> |
288 |
<xsl:text>IVOA Note </xsl:text> |
289 |
</xsl:when> |
290 |
<xsl:when test="$doctype='PEN'"> |
291 |
<xsl:text>Proposed Endorsed Note </xsl:text> |
292 |
</xsl:when> |
293 |
<xsl:when test="$doctype='EN'"> |
294 |
<xsl:text>Endorsed Note </xsl:text> |
295 |
</xsl:when> |
296 |
<xsl:otherwise> |
297 |
<xsl:message terminate='yes'>doctype must be one of |
298 |
WD, PR, REC, NOTE, EN, PEN not |
299 |
'<xsl:value-of select="$doctype"/>'</xsl:message> |
300 |
</xsl:otherwise> |
301 |
</xsl:choose> |
302 |
</xsl:template> |
303 |
|
304 |
<xsl:template match="div[@id='statusOfThisDocument']"> |
305 |
<xsl:variable name="doctype" select="."/> |
306 |
<p id="statusdecl"><em> |
307 |
<xsl:choose> |
308 |
<xsl:when test="$doctype='NOTE'"> |
309 |
This is an IVOA Note expressing suggestions from and |
310 |
opinions of the authors. It is intended to share best |
311 |
practices, possible approaches, or other perspectives on |
312 |
interoperability with the Virtual Observatory. It should |
313 |
not be referenced or otherwise interpreted as a standard |
314 |
specification. |
315 |
</xsl:when> |
316 |
<xsl:when test="$doctype='WD'"> |
317 |
This is an IVOA Working Draft for review by IVOA members |
318 |
and other interested parties. It is a draft document and |
319 |
may be updated, replaced, or obsoleted by other documents |
320 |
at any time. It is inappropriate to use IVOA Working Drafts |
321 |
as reference materials or to cite them as other than "work |
322 |
in progress". |
323 |
</xsl:when> |
324 |
<xsl:when test="$doctype='PR'"> |
325 |
This is an IVOA Proposed Recommendation made available for |
326 |
public review. It is appropriate to reference this document |
327 |
only as a recommended standard that is under review and |
328 |
which may be changed before it is accepted as a full |
329 |
Recommendation. |
330 |
</xsl:when> |
331 |
<xsl:when test="$doctype='REC'"> |
332 |
This document has been reviewed by IVOA Members and other |
333 |
interested parties, and has been endorsed by the IVOA |
334 |
Executive Committee as an IVOA Recommendation. It is a |
335 |
stable document and may be used as reference material or |
336 |
cited as a normative reference from another document. |
337 |
IVOA's role in making the Recommendation is to draw |
338 |
attention to the specification and to promote its |
339 |
widespread deployment. This enhances the functionality and |
340 |
interoperability inside the Astronomical Community. |
341 |
</xsl:when> |
342 |
<xsl:when test="$doctype='PEN'"> |
343 |
This is an IVOA Proposed Endorsed Note for review by IVOA |
344 |
members and other interested parties. It is appropriate to |
345 |
reference this document only as a Proposed Endorsed Note that |
346 |
is under review and may change before it is endorsed or may |
347 |
not be endorsed. |
348 |
</xsl:when> |
349 |
<xsl:when test="$doctype='EN'"> |
350 |
This document is an IVOA Endorsed Note. It has been reviewed |
351 |
and endorsed by the IVOA Technical Coordination Group as a |
352 |
stable, citable document which constitutes valuable information |
353 |
for the IVOA community and beyond. |
354 |
</xsl:when> |
355 |
<xsl:otherwise> |
356 |
<xsl:message terminate='yes'>Invalid document |
357 |
status (this cannot happen).</xsl:message> |
358 |
</xsl:otherwise> |
359 |
</xsl:choose> |
360 |
</em></p> |
361 |
|
362 |
<p>A list of current IVOA Recommendations and other technical documents |
363 |
can be found in the <a href="http://www.ivoa.net/documents">IVOA |
364 |
document repository</a>.</p> |
365 |
</xsl:template> |
366 |
|
367 |
<xsl:template name="selectDoctypeStyle"> |
368 |
<xsl:variable name="doctype" select="//span[@id='doctype']"/> |
369 |
<link rel="stylesheet" type="text/css"> |
370 |
<xsl:attribute name="href"> |
371 |
<xsl:choose> |
372 |
<xsl:when test="$doctype='WD'" |
373 |
>http://www.ivoa.net/misc/ivoa_wd.css</xsl:when> |
374 |
<xsl:when test="$doctype='PR'" |
375 |
>http://www.ivoa.net/misc/ivoa_pr.css</xsl:when> |
376 |
<xsl:when test="$doctype='REC'" |
377 |
>http://www.ivoa.net/misc/ivoa_rec.css</xsl:when> |
378 |
<xsl:when test="$doctype='NOTE'" |
379 |
>http://www.ivoa.net/misc/ivoa_note.css</xsl:when> |
380 |
<xsl:when test="$doctype='PEN'" |
381 |
>http://www.ivoa.net/misc/ivoa_note.css</xsl:when> |
382 |
<xsl:when test="$doctype='EN'" |
383 |
>http://www.ivoa.net/misc/ivoa_note.css</xsl:when> |
384 |
</xsl:choose> |
385 |
</xsl:attribute> |
386 |
</link> |
387 |
</xsl:template> |
388 |
|
389 |
<!-- To somewhat support keyval-style arguments (as in, e.g., listings) |
390 |
this allows translating them into css classes. Essentially, |
391 |
generate a div with a keyvals attribute; see lstlisting in tthdefs --> |
392 |
|
393 |
<xsl:template match="*[@keyvals]"> |
394 |
<div> |
395 |
<xsl:attribute name="class"> |
396 |
<xsl:value-of select="translate(@keyvals, ',=\\', ' __')"/> |
397 |
</xsl:attribute> |
398 |
<xsl:apply-templates/> |
399 |
</div> |
400 |
</xsl:template> |
401 |
|
402 |
<!-- In verbatim listings, we may want to play tricks with lines. |
403 |
So, let's mark them up with spans. --> |
404 |
|
405 |
<xsl:template name="split-into-lines"> |
406 |
<xsl:param name="arg"/> |
407 |
<span class="verbline"><xsl:value-of |
408 |
select="substring-before($arg, '
')"/> |
409 |
<xsl:text>
</xsl:text> |
410 |
</span> |
411 |
|
412 |
<xsl:if test="substring-after($arg, '
')"> |
413 |
<xsl:call-template name="split-into-lines"> |
414 |
<xsl:with-param name="arg" select="substring-after($arg, '
')"/> |
415 |
</xsl:call-template> |
416 |
</xsl:if> |
417 |
</xsl:template> |
418 |
|
419 |
<xsl:template match="pre"> |
420 |
<pre> |
421 |
<xsl:copy-of select="@*"/> |
422 |
<xsl:call-template name="split-into-lines"> |
423 |
<xsl:with-param name="arg" select="."/> |
424 |
</xsl:call-template> |
425 |
</pre> |
426 |
</xsl:template> |
427 |
|
428 |
<!-- Make a link to the current version on the ivoa doc server. |
429 |
The format of the URI here is as mandated by the IVOA |
430 |
Document Standards Standard Document (ahem). --> |
431 |
<xsl:template name="currentlink"> |
432 |
<xsl:variable name="docdate" select="span[@id='docdate']"/> |
433 |
<xsl:variable name="currenturl"> |
434 |
<xsl:value-of select="$docbase"/> |
435 |
<xsl:value-of select="//span[@id='docname']"/> |
436 |
<xsl:text>/</xsl:text> |
437 |
<xsl:value-of select="concat( |
438 |
substring($docdate, 1, 4), |
439 |
substring($docdate, 6, 2), |
440 |
substring($docdate, 9, 2))"/> |
441 |
</xsl:variable> |
442 |
<xsl:element name="a"> |
443 |
<xsl:attribute name="class">currentlink</xsl:attribute> |
444 |
<xsl:attribute name="href"> |
445 |
<xsl:value-of select="$currenturl"/> |
446 |
</xsl:attribute> |
447 |
<xsl:value-of select="$currenturl"/> |
448 |
</xsl:element> |
449 |
</xsl:template> |
450 |
|
451 |
<!-- Make a link to the LATEST version on the ivoa doc server. |
452 |
This is a URL without a version, which will redirect, on the |
453 |
doc server, to the versioned URL. --> |
454 |
<xsl:template name="latestlink"> |
455 |
<xsl:variable name="currenturl"> |
456 |
<xsl:value-of select="$docbase"/> |
457 |
<xsl:value-of select="//span[@id='docname']"/> |
458 |
</xsl:variable> |
459 |
<xsl:element name="a"> |
460 |
<xsl:attribute name="class">latestlink</xsl:attribute> |
461 |
<xsl:attribute name="href"> |
462 |
<xsl:value-of select="$currenturl"/> |
463 |
</xsl:attribute> |
464 |
<xsl:value-of select="$currenturl"/> |
465 |
</xsl:element> |
466 |
</xsl:template> |
467 |
|
468 |
<!-- I want to style the role diagram; ideally, we'd add a class |
469 |
through LaTeX, but TTH doesn't have a straightforward facility |
470 |
for doing this. Hence, I'm adding a class manually. --> |
471 |
<xsl:template match="img[@src='role_diagram.svg']"> |
472 |
<xsl:copy> |
473 |
<xsl:attribute name="class">archdiag</xsl:attribute> |
474 |
<xsl:apply-templates select="@*|node()"/> |
475 |
</xsl:copy> |
476 |
</xsl:template> |
477 |
|
478 |
<!-- tth has given up detecting p elements in TeX source and hacks in |
479 |
div class="p" elements as paragraph separators. These |
480 |
are potentially very confusing to browsers. We hence |
481 |
replace them with hopefully less confusing constructs --> |
482 |
<xsl:template match="div[@class='p']"> |
483 |
<p class="parsep"><span> </span></p> |
484 |
</xsl:template> |
485 |
|
486 |
<xsl:template match="body"> |
487 |
<xsl:apply-templates/> |
488 |
</xsl:template> |
489 |
|
490 |
</xsl:stylesheet> |