xref: /aosp_15_r20/external/doclava/res/assets/templates/macros.cs (revision feeed43c7c55e85932c547a3cefc559df175227c)
1 <?cs
2 # Set global vars for template features based on site and target.
3 ?><?cs
4 if:dac ?><?cs
5   # standard devsite warns on inline js and script tags ?><?cs
6   set:enable_javascript = 1 ?><?cs
7 /if ?>
8 
9 <?cs # A link to a package ?><?cs
10 def:package_link(pkg) ?>
11   <a href="<?cs
12           if:!pkg.federatedSite ?><?cs
13             var:toroot ?><?cs
14           /if ?><?cs var:pkg.link ?>"><?cs var:pkg.name ?></a><?cs
15   /def ?><?cs
16 
17 # A link to a type, or not if it is a primitive type
18         link: whether to create a link at the top level, always creates links in
19               recursive invocations.
20               Overloaded version to support use of 'nav' parameter, which when true,
21               will not include the generics in the class name (good for sidenav lists)
22         Expects the following fields:
23             .name
24             .link
25             .isPrimitive
26             .superBounds.N.(more links)   (... super ... & ...)
27             .extendsBounds.N.(more links) (... extends ... & ...)
28             .typeArguments.N.(more links) (< ... >) ?><?cs
29 def:type_link_impl(type, link) ?><?cs call:type_link_impl2(type, link, "false") ?><?cs /def ?><?cs
30 
31 def:type_link_impl2(type, link, nav) ?><?cs
32   if:type.link && link=="true" ?><?cs
33     if:type.federated ?><a href="<?cs var:type.link ?>"><?cs
34       var:type.label ?></a><?cs
35     else ?><a href="<?cs var:toroot ?><?cs var:type.link ?>"><?cs var:type.label ?></a><?cs
36     /if ?><?cs
37   else ?><?cs var:type.label ?><?cs
38   /if ?><?cs
39   if:subcount(type.extendsBounds) ?><?cs
40       each:t=type.extendsBounds ?><?cs
41           if:first(t) ?>&nbsp;extends&nbsp;<?cs else ?>&nbsp;&amp;&nbsp;<?cs /if ?><?cs
42           call:type_link_impl(t, "true") ?><?cs
43       /each ?><?cs
44   /if ?><?cs
45   if:subcount(type.superBounds) ?><?cs
46       each:t=type.superBounds ?><?cs
47           if:first(t) ?>&nbsp;super&nbsp;<?cs else ?>&nbsp;&amp;&nbsp;<?cs /if ?><?cs
48           call:type_link_impl(t, "true") ?><?cs
49       /each ?><?cs
50   /if ?><?cs
51   if:subcount(type.typeArguments) && nav=="false"
52       ?>&lt;<?cs each:t=type.typeArguments ?><?cs call:type_link_impl(t, "true") ?><?cs
53           if:!last(t) ?>,&nbsp;<?cs /if ?><?cs
54       /each ?>&gt;<?cs
55   /if ?><?cs
56 /def ?><?cs
57 
58 def:simple_type_link(type)?><?cs
59   if:type.link?><?cs
60     if:type.federated ?><a href="<?cs var:type.link ?>"><?cs var:type.label ?></a><?cs
61     else ?><a href="<?cs var:toroot ?><?cs var:type.link ?>"><?cs var:type.label ?></a><?cs
62     /if?><?cs
63   else ?><?cs var:type.label ?><?cs
64   /if?><?cs
65   if:subcount(type.typeArguments)?>&lt;<?cs
66     each:t=type.typeArguments?><?cs
67       call:type_link_impl(t, "true")?><?cs
68       if:!last(t) ?>,&nbsp;<?cs
69       /if ?><?cs
70     /each ?>&gt;<?cs
71   /if ?><?cs
72 /def ?><?cs
73 
74 def:class_name(type) ?><?cs call:type_link_impl(type, "false") ?><?cs
75 /def ?><?cs
76 def:type_link2(type,nav) ?><?cs call:type_link_impl2(type, "true", nav) ?><?cs
77 /def ?><?cs
78 def:type_link(type) ?><?cs call:type_link2(type, "false") ?><?cs
79 /def ?><?cs
80 
81 # a conditional link.
82   if the "condition" parameter evals to true then the link is displayed
83   otherwise only the text is displayed ?><?cs
84 def:cond_link(text, root, path, condition) ?><?cs
85   if:condition ?><a href="<?cs var:root ?><?cs
86   var:path ?>"><?cs /if ?><?cs var:text ?><?cs
87   if:condition ?></a><?cs /if ?><?cs
88 /def ?><?cs
89 
90 # A comma separated parameter list ?><?cs
91 def:parameter_list(params) ?><?cs
92   each:param = params ?><?cs
93       call:simple_type_link(param.type)?> <?cs
94       var:param.name ?><?cs
95       if: name(param)!=subcount(params)-1?>, <?cs /if ?><?cs
96   /each ?><?cs
97 /def ?><?cs
98 
99 def:doc_root_override()
100   ?><?cs var:toroot ?><?cs
101 /def ?><?cs
102 # Print a list of tags (e.g. description text ?><?cs
103 def:tag_list(tags) ?><?cs
104   each:tag = tags ?><?cs
105       if:tag.name == "Text" ?><?cs var:tag.text?><?cs
106       elif:tag.kind == "@more" ?><p><?cs
107       elif:tag.kind == "@see" ?><code><a href="<?cs
108         if:!tag.federatedSite ?><?cs
109           var:toroot ?><?cs
110         /if ?><?cs var:tag.href ?>"><?cs var:tag.label ?></a></code><?cs
111       elif:tag.kind == "@linkplain" ?><a href="<?cs
112         if:!tag.federatedSite ?><?cs
113           var:toroot ?><?cs
114         /if ?><?cs var:tag.href ?>"><?cs var:tag.label ?></a></a><?cs
115       elif:tag.kind == "@seeHref" ?><a href="<?cs var:tag.href ?>"><?cs var:tag.label ?></a><?cs
116       elif:tag.kind == "@seeJustLabel" ?><?cs var:tag.label ?><?cs
117       elif:tag.kind == "@value" ?><code><a href="<?cs
118         if:!tag.federatedSite ?><?cs
119           var:toroot ?><?cs
120         /if ?><?cs var:tag.href ?>"><?cs var:tag.text ?></a></code><?cs
121       elif:tag.kind == "@code" ?><code><?cs var:tag.text ?></code><?cs
122       elif:tag.kind == "@samplecode" ?><pre><?cs var:tag.text ?></pre><?cs
123       elif:tag.name == "@sample" ?><pre><?cs var:tag.text ?></pre><?cs
124       elif:tag.name == "@include" ?><?cs var:tag.text ?><?cs
125       elif:tag.kind == "@docRoot" ?><?cs call:doc_root_override() ?><?cs
126       elif:tag.kind == "@sdkCurrent" ?><?cs var:sdk.current ?><?cs
127       elif:tag.kind == "@sdkCurrentVersion" ?><?cs var:sdk.version ?><?cs
128       elif:tag.kind == "@sdkCurrentRelId" ?><?cs var:sdk.rel.id ?><?cs
129       elif:tag.kind == "@sdkPlatformVersion" ?><?cs var:sdk.platform.version ?><?cs
130       elif:tag.kind == "@sdkPlatformApiLevel" ?><?cs var:sdk.platform.apiLevel ?><?cs
131       elif:tag.kind == "@sdkPlatformMajorMinor" ?><?cs var:sdk.platform.majorMinor ?><?cs
132       elif:tag.kind == "@sdkPlatformReleaseDate" ?><?cs var:sdk.platform.releaseDate ?><?cs
133       elif:tag.kind == "@sdkPlatformDeployableDate" ?><?cs var:sdk.platform.deployableDate ?><?cs
134       elif:tag.kind == "@adtZipVersion" ?><?cs var:adt.zip.version ?><?cs
135       elif:tag.kind == "@adtZipDownload" ?><?cs var:adt.zip.download ?><?cs
136       elif:tag.kind == "@adtZipBytes" ?><?cs var:adt.zip.bytes ?><?cs
137       elif:tag.kind == "@adtZipChecksum" ?><?cs var:adt.zip.checksum ?><?cs
138       elif:tag.kind == "@inheritDoc" ?><?cs # This is the case when @inheritDoc is in something
139                                               that does not inherit from anything?><?cs
140       elif:tag.kind == "@attr" ?><?cs
141       elif:tag.kind == "@usesMathJax" ?><?cs
142         if:devsite ?><script src="/_static/js/managed/mathjax/MathJax.js?config=TeX-AMS_SVG"></script><?cs
143         else ?><script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_SVG"></script><?cs
144         /if ?><?cs
145       else ?>{<?cs var:tag.name?> <?cs var:tag.text ?>}<?cs
146       /if ?><?cs
147   /each ?><?cs
148 /def ?><?cs
149 
150 # Print output for block tags that are not "standard" javadoc tags ?><?cs
151 def:block_tag_list(tags) ?><?cs
152   each:tag = tags ?><?cs
153       if:tag.kind == "@apiNote" ?>
154         <div class="jd-tagdata">
155           <h5 class="jd-tagtitle">API Note:</h5>
156           <ul class="nolist"><li><?cs call:tag_list(tag.commentTags) ?></li></ul>
157         </div><?cs
158       /if ?><?cs
159       if:tag.kind == "@implSpec" ?>
160         <div class="jd-tagdata">
161           <h5 class="jd-tagtitle">Implementation Requirements:</h5>
162           <ul class="nolist"><li><?cs call:tag_list(tag.commentTags) ?></li></ul>
163         </div><?cs
164       /if ?><?cs
165       if:tag.kind == "@implNote" ?>
166         <div class="jd-tagdata">
167           <h5 class="jd-tagtitle">Implementation Note:</h5>
168           <ul class="nolist"><li><?cs call:tag_list(tag.commentTags) ?></li></ul>
169         </div><?cs
170       /if ?><?cs
171   /each ?><?cs
172 /def ?><?cs
173 
174 # Print output for aux tags that are not "standard" javadoc tags ?><?cs
175 def:aux_tag_list(tags) ?><?cs
176 /def ?><?cs
177 
178 # Show the short-form description of something.  These come from shortDescr and deprecated ?><?cs
179 def:short_descr(obj) ?><?cs
180   if:subcount(obj.deprecated) ?><em><?cs
181     if:obj.deprecatedsince ?>
182       This <?cs var:obj.kind ?> was deprecated
183       in API level <?cs var:obj.deprecatedsince ?>.<?cs
184     else ?>
185       This <?cs var:obj.kind ?> is deprecated.<?cs
186     /if ?>
187     <?cs call:tag_list(obj.deprecated) ?></em><?cs
188   else ?><?cs call:tag_list(obj.shortDescr) ?><?cs
189   if:subcount(obj.annotationdocumentation)?><?cs
190     each:annodoc=obj.annotationdocumentation ?>
191     <div><?cs var:annodoc.text?></div><?cs
192     /each?><?cs /if?><?cs
193   /if ?><?cs
194 /def ?><?cs
195 
196 # Show a list of annotations associated with obj
197 #
198 # pre is an HTML string to start the list.
199 # between is an HTML string to include between each successive element.
200 # post is an HTML string to end the list.
201 # for example, call:show_annotations_list(cl, "<p>Annotations: ", "<br />", "</p>")
202 # ?><?cs
203 def:show_annotations_list(obj, pre, between, post) ?><?cs
204   each:anno = obj.showAnnotations ?><?cs
205     if:first(anno) ?><?cs
206       var:pre ?><?cs
207     /if ?>
208     @<?cs var:anno.type.label ?>(<?cs
209     each:elem = anno.elementValues ?><?cs
210       var:elem.name ?>&nbsp;=&nbsp;<?cs
211       var:elem.value ?><?cs
212       if:last(elem) == 0 ?>, <?cs
213       /if ?><?cs
214     /each ?>)<?cs
215     if:last(anno) == 0 ?><?cs
216       var:between ?><?cs
217     /if ?><?cs
218     if:last(anno) ?><?cs
219       var:post ?><?cs
220     /if ?><?cs
221   /each ?><?cs
222 /def ?><?cs
223 
224 # Show a comma-separated list of annotations associated with obj ?><?cs
225 def:show_simple_annotations_list(obj, pre, post) ?><?cs
226   call:show_annotations_list(obj, pre, ", ", post) ?><?cs
227 /def ?><?cs
228 
229 # Show the red box with the deprecated warning ?><?cs
230 def:deprecated_warning(obj) ?><?cs
231   if:subcount(obj.deprecated) ?><p>
232   <p class="caution"><strong><?cs
233     if:obj.deprecatedsince ?>
234       This <?cs var:obj.kind ?> was deprecated
235       in API level <?cs var:obj.deprecatedsince ?>.<?cs
236     else ?>
237       This <?cs var:obj.kind ?> is deprecated.<?cs
238     /if ?></strong><br/>
239     <?cs call:tag_list(obj.deprecated) ?>
240   </p><?cs
241   /if ?><?cs
242 /def ?><?cs
243 
244 # print the See Also: section ?><?cs
245 def:see_also_tags(also) ?><?cs
246   if:subcount(also) ?>
247   <div>
248       <p><b>See also:</b></p>
249       <ul class="nolist"><?cs
250         each:tag=also ?><li><?cs
251             if:tag.kind == "@see" ?><code><a href="<?cs
252                     if:!tag.federatedSite ?><?cs
253                       var:toroot ?><?cs
254                     /if ?><?cs var:tag.href ?>"><?cs
255                     var:tag.label ?></a></code><?cs
256             elif:tag.kind == "@seeHref" ?><a href="<?cs var:tag.href ?>"><?cs var:tag.label ?></a><?cs
257             elif:tag.kind == "@seeJustLabel" ?><?cs var:tag.label ?><?cs
258             else ?>[ERROR: Unknown @see kind]<?cs
259             /if ?></li><?cs
260         /each ?>
261       </ul>
262   </div><?cs
263   /if ?>
264 <?cs /def ?><?cs
265 
266 # print the API Level ?><?cs
267 def:since_tags(obj) ?><?cs
268 if:reference.apilevels && obj.since ?><?cs
269   if:string.slice(obj.since,0,1) > 0 ?>
270     Added in <?cs
271       if:string.find(obj.since,'.') > -1
272         ?><a href="<?cs var:toroot ?>topic/libraries/support-library/revisions.html">version<?cs
273       else
274         ?><a href="<?cs var:toroot ?>guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level<?cs
275       /if ?> <?cs
276     var:obj.since ?></a><?cs if:obj.sdkextsince ?><br/>Also in <a href="<?cs var:toroot ?>sdkExtensions"><?cs var:obj.sdkextsince ?></a><?cs /if ?><?cs
277   else ?><a data-version-added="<?cs var:obj.since ?>" href="<?cs var:toroot ?>preview/"><b>Added in Android <?cs
278     var:obj.since ?></b></a><?cs if:obj.sdkextsince ?><br/>Also in <a href="<?cs var:toroot ?>sdkExtensions"><?cs var:obj.sdkextsince ?></a><?cs /if ?><?cs
279   /if?><?cs
280 elif:obj.sdkextsince ?>
281   <?cs # This symbol exists in an extension SDK, but not in a finalized dessert ?>
282   Added in <a href="<?cs var:toroot ?>sdkExtensions"><?cs var:obj.sdkextsince ?></a>
283 <?cs
284 /if ?>
285   <?cs if:obj.deprecatedsince ?><?cs
286     if:class.artifact ?><br>Deprecated in version <?cs var:obj.deprecatedsince ?><?cs
287     else ?><br>Deprecated in
288     <a href="<?cs var:toroot ?>guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level
289       <?cs var:obj.deprecatedsince ?></a><?cs
290     /if ?>
291   <?cs /if ?><?cs
292 /def ?><?cs
293 
294 # print the artifact ?><?cs
295 def:artifact_tags(obj) ?><?cs
296 if:reference.artifacts && obj.artifact ?>
297   belongs to Maven artifact <?cs var:obj.artifact ?></a><?cs
298 /if ?><?cs
299 /def ?><?cs
300 
301 def:federated_refs(obj) ?>
302   <?cs if:subcount(obj.federated) ?>
303     <div>
304     Also:
305     <?cs each:federated=obj.federated ?>
306       <a href="<?cs var:federated.url ?>"><?cs var:federated.name ?></a><?cs
307       if:!last(federated) ?>,<?cs /if ?>
308     <?cs /each ?>
309     </div>
310   <?cs /if ?>
311 <?cs /def ?><?cs
312 
313 #
314 # Print the long-form description for something.
315 # Uses the following fields: deprecated descr seeAlso since
316 #
317 ?><?cs
318 def:description(obj) ?><?cs
319   call:deprecated_warning(obj) ?>
320   <p><?cs call:tag_list(obj.descr) ?></p><?cs
321   call:aux_tag_list(obj.descrAux) ?><?cs
322   if:subcount(obj.annotationdocumentation)?><?cs
323     each:annodoc=obj.annotationdocumentation ?>
324     <div><?cs var:annodoc.text?></div><?cs
325     /each?><?cs /if?><?cs
326   if:subcount(obj.attrRefs) ?>
327       <p><b>Related XML Attributes:</b></p>
328       <ul class="nolist"><?cs
329         each:attr=obj.attrRefs ?>
330             <li><a href="<?cs
331                     if:!attr.federatedSite ?><?cs
332                       var:toroot ?><?cs
333                     /if ?><?cs var:attr.href ?>"><?cs var:attr.name ?></a></li><?cs
334         /each ?>
335       </ul><?cs
336   /if ?><?cs
337   if:subcount(obj.blockTags) ?>
338     <?cs call:block_tag_list(obj.blockTags) ?><?cs
339   /if ?><?cs
340   #
341   # Print the @param tags
342   #
343   ?><?cs
344   if:subcount(obj.paramTags) ?>
345     <table class="responsive">
346     <tr><th colspan=2>Parameters</th></tr><?cs
347     each:param=obj.paramTags ?>
348       <tr>
349         <td><code><?cs
350           if:param.isTypeParameter ?>&lt;<?cs
351           /if ?><?cs var:param.name ?><?cs
352           if:param.isTypeParameter ?>&gt;<?cs
353           /if ?></code></td>
354         <td width="100%">
355           <code><?cs var:param.kind ?></code><?cs
356           if:string.find(param.comment.0.text, "<!--") != 0
357             ?>:<?cs # Do not print if param comment is an HTML comment ?><?cs
358           /if ?> <?cs
359           call:tag_list(param.comment) ?><?cs
360           call:aux_tag_list(param.commentAux) ?></td>
361       </tr><?cs
362     /each ?>
363     </table><?cs
364   /if ?><?cs
365   #
366   # Print the @return value
367   #
368   ?><?cs
369   if:subcount(obj.returns) || (subcount(method.returnType) && method.returnType.label != 'void') ?>
370     <table class="responsive">
371       <tr><th colspan=2>Returns</th></tr>
372       <tr>
373         <td><code><?cs call:type_link(method.returnType) ?></code></td>
374         <td width="100%"><?cs
375         if:subcount(obj.returns) ?><?cs
376           call:tag_list(obj.returns) ?><?cs
377         else ?><!-- no returns description in source --><?cs
378         /if ?><?cs
379         call:aux_tag_list(obj.returnsAux) ?></td>
380       </tr>
381     </table><?cs
382   /if ?><?cs
383   #
384   # Print the throwables
385   #
386   ?><?cs
387   if:subcount(obj.throws) ?>
388       <table class="responsive">
389       <tr><th colspan=2>Throws</th></tr><?cs
390       each:tag=obj.throws ?>
391         <tr>
392           <td><code><?cs call:type_link(tag.type) ?></code></td>
393           <td width="100%"><?cs call:tag_list(tag.comment) ?></td>
394         </tr><?cs
395       /each ?>
396       </table>
397   <?cs
398   /if ?><?cs
399   call:see_also_tags(obj.seeAlso) ?><?cs
400 /def ?><?cs
401 
402 # A table of links to classes with descriptions, as in a package file or the nested classes ?><?cs
403 def:class_link_table(classes) ?><?cs
404   set:count = #1 ?>
405   <table class="jd-sumtable-expando"><?cs
406       each:cl=classes ?>
407         <tr <?cs
408             if:cl.type.since
409               ?>data-version-added="<?cs var:cl.type.since ?>"<?cs
410             /if ?><?cs
411             if:cl.type.deprecatedsince
412               ?> data-version-deprecated="<?cs var:cl.type.deprecatedsince ?>"<?cs
413             /if ?> >
414               <td><?cs call:type_link(cl.type) ?></td>
415               <td width="100%"><?cs call:short_descr(cl) ?>&nbsp;</td>
416           </tr><?cs set:count = count + #1 ?><?cs
417       /each ?>
418   </table><?cs
419 /def ?><?cs
420 
421 # A list of links to classes, for use in the side navigation of classes when viewing a package (panel nav) ?><?cs
422 def:class_link_list(label, classes) ?><?cs
423   if:subcount(classes) ?>
424     <li><h2 class="hide-from-toc"><?cs var:label ?></h2>
425       <ul><?cs
426       each:cl=classes ?>
427         <li><?cs call:type_link2(cl.type,"true") ?></li><?cs
428       /each ?>
429       </ul>
430     </li><?cs
431   /if ?><?cs
432 /def ?><?cs
433 
434 # A list of links to classes, for use in the side navigation of classes when viewing a class (panel nav) ?><?cs
435 def:list(label, classes) ?><?cs
436   if:subcount(classes) ?>
437     <li><h2 class="hide-from-toc"><?cs var:label ?></h2>
438       <ul><?cs
439       each:cl=classes ?>
440           <li<?cs if:class.name == cl.label?> class="selected"<?cs /if ?>><?cs call:type_link2(cl,"true") ?></li><?cs
441       /each ?>
442       </ul>
443     </li><?cs
444   /if ?><?cs
445 /def ?><?cs
446 
447 # A list of links to packages, for use in the side navigation of packages (panel nav) ?><?cs
448 def:package_link_list(packages) ?><?cs
449   each:pkg=packages ?>
450     <li<?cs if:(class.package.name == pkg.name) || (package.name == pkg.name)?> class="selected"<?cs /if ?>><?cs call:package_link(pkg) ?></li><?cs
451   /each ?><?cs
452 /def ?>
453 
454 <?cs
455 # An expando trigger
456 ?><?cs
457 def:expando_trigger(id, default) ?>
458   <a href="#" id="<?cs var:id ?>" class="jd-expando-trigger closed"<?cs
459     if:enable_javascript ?>
460      onclick="return toggleInherited(this, null)"<?cs
461     /if ?> >
462     <img id="<?cs var:id ?>-trigger" class="jd-expando-trigger-img"
463          height="34"
464          src="<?cs var:toroot ?>assets/images/styles/disclosure_<?cs
465               if:default == 'closed' ?>down<?cs else ?>up<?cs /if ?>.png" />
466   </a><?cs
467 /def ?>
468 
469 <?cs
470 # An expandable list of classes
471 ?><?cs
472 def:expandable_class_list(id, classes, default) ?>
473   <div id="<?cs var:id ?>" class="showalways" > <?cs
474     if:subcount(classes) <= #20 ?><?cs
475       each:cl=classes ?><?cs
476         call:type_link(cl.type) ?><?cs
477         if:!last(cl)
478           ?>, <?cs
479         /if ?><?cs
480       /each ?><?cs
481     else ?><?cs
482       set:leftovers = subcount(classes) - #15 ?><?cs
483       loop:i = #0, #14, #1 ?><?cs
484         with:cl=classes[i] ?><?cs
485           call:type_link(cl.type) ?>, <?cs
486         /with ?><?cs
487         if:(#i == #14) ?> and <?cs var:leftovers ?> others.<?cs
488         /if ?><?cs
489       /loop ?><?cs
490     /if ?>
491   </div>
492   <div id="<?cs var:id ?>-summary"<?cs
493     if:default == "summary" ?>
494        class="showalways"<?cs
495     /if ?> >
496     <?cs call:class_link_table(classes) ?>
497   </div><?cs
498 /def ?>
499 
500 <?cs include:"components.cs" ?>
501