1## -*- coding: utf-8 -*- 2<!DOCTYPE html> 3<html> 4<!-- Copyright (C) 2012 The Android Open Source Project 5 6 Licensed under the Apache License, Version 2.0 (the "License"); 7 you may not use this file except in compliance with the License. 8 You may obtain a copy of the License at 9 10 http://www.apache.org/licenses/LICENSE-2.0 11 12 Unless required by applicable law or agreed to in writing, software 13 distributed under the License is distributed on an "AS IS" BASIS, 14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 See the License for the specific language governing permissions and 16 limitations under the License. 17--> 18<head> 19 <!-- automatically generated from html.mako. do NOT edit directly --> 20 <meta charset="utf-8" /> 21 <title>Android Camera HAL3.4 Properties</title> 22 <style type="text/css"> 23 body { background-color: #f7f7f7; font-family: Roboto, sans-serif;} 24 h1 { color: #333333; } 25 h2 { color: #333333; } 26 a:link { color: #258aaf; text-decoration: none} 27 a:hover { color: #459aaf; text-decoration: underline } 28 a:visited { color: #154a5f; text-decoration: none} 29 .section { color: #eeeeee; font-size: 1.5em; font-weight: bold; background-color: #888888; padding: 0.5em 0em 0.5em 0.5em; border-width: thick thin thin thin; border-color: #111111 #777777 #777777 #777777} 30 .kind { color: #eeeeee; font-size: 1.2em; font-weight: bold; padding-left: 1.5em; background-color: #aaaaaa } 31 .entry { background-color: #f0f0f0 } 32 .entry_cont { background-color: #f0f0f0 } 33 .entries_header { background-color: #dddddd; text-align: center} 34 35 /* toc style */ 36 .toc_section_header { font-size:1.3em; } 37 .toc_kind_header { font-size:1.2em; } 38 .toc_deprecated { text-decoration:line-through; } 39 40 /* table column sizes */ 41 table { border-collapse:collapse; table-layout: fixed; width: 100%; word-wrap: break-word } 42 td,th { border: 1px solid; border-color: #aaaaaa; padding-left: 0.5em; padding-right: 0.5em } 43 .th_name { width: 20% } 44 .th_units { width: 10% } 45 .th_tags { width: 5% } 46 .th_details { width: 25% } 47 .th_type { width: 20% } 48 .th_description { width: 20% } 49 .th_range { width: 10% } 50 td { font-size: 0.9em; } 51 52 /* hide the first thead, we need it there only to enforce column sizes */ 53 .thead_dummy { visibility: hidden; } 54 55 /* Entry flair */ 56 .entry_name { color: #333333; padding-left:1.0em; font-size:1.1em; font-family: monospace; vertical-align:top; } 57 .entry_name_deprecated { text-decoration:line-through; } 58 59 /* Entry type flair */ 60 .entry_type_name { font-size:1.1em; color: #669900; font-weight: bold;} 61 .entry_type_name_enum:after { color: #669900; font-weight: bold; content:" (enum)" } 62 .entry_type_visibility { font-weight: bolder; padding-left:1em} 63 .entry_type_synthetic { font-weight: bolder; color: #996600; } 64 .entry_type_hwlevel { font-weight: bolder; color: #000066; } 65 .entry_type_deprecated { font-weight: bolder; color: #4D4D4D; } 66 .entry_type_enum_name { font-family: monospace; font-weight: bolder; } 67 .entry_type_enum_notes:before { content:" - " } 68 .entry_type_enum_notes>p:first-child { display:inline; } 69 .entry_type_enum_value:before { content:" = " } 70 .entry_type_enum_value { font-family: monospace; } 71 .entry ul { margin: 0 0 0 0; list-style-position: inside; padding-left: 0.5em; } 72 .entry ul li { padding: 0 0 0 0; margin: 0 0 0 0;} 73 .entry_range_deprecated { font-weight: bolder; } 74 75 /* Entry tags flair */ 76 .entry_tags ul { list-style-type: none; } 77 78 /* Entry details (full docs) flair */ 79 .entry_details_header { font-weight: bold; background-color: #dddddd; 80 text-align: center; font-size: 1.1em; margin-left: 0em; margin-right: 0em; } 81 82 /* Entry spacer flair */ 83 .entry_spacer { background-color: transparent; border-style: none; height: 0.5em; } 84 85 /* TODO: generate abbr element for each tag link? */ 86 /* TODO for each x.y.z try to link it to the entry */ 87 88 </style> 89 90 <style> 91 92 { 93 /* broken... 94 supposedly there is a bug in chrome that it lays out tables before 95 it knows its being printed, so the page-break-* styles are ignored 96 */ 97 tr { page-break-after: always; page-break-inside: avoid; } 98 } 99 100 </style> 101</head> 102 103<%! 104 import re 105 from metadata_helpers import md 106 from metadata_helpers import IMAGE_SRC_METADATA 107 from metadata_helpers import filter_tags 108 from metadata_helpers import filter_links 109 from metadata_helpers import wbr 110 111 # insert line breaks after every two \n\n 112 def br(text): 113 return re.sub(r"(\r?\n)(\r?\n)", r"\1<br>\2<br>", text) 114 115 # Convert node name "x.y.z" of kind w to an HTML anchor of form 116 # <a href="#w_x.y.z">x.y.z</a> 117 def html_anchor(node): 118 return '<a href="#%s_%s">%s</a>' % (node.kind, node.name, node.name) 119 120 # Convert target "xxx.yyy#zzz" to a HTML reference to Android public developer 121 # docs with link name from shortname. 122 def html_link(target, shortname): 123 if shortname == '': 124 lastdot = target.rfind('.') 125 if lastdot == -1: 126 shortname = target 127 else: 128 shortname = target[lastdot + 1:] 129 130 target = target.replace('.','/') 131 if target.find('#') != -1: 132 target = target.replace('#','.html#') 133 else: 134 target = target + '.html' 135 136 return '<a href="https://developer.android.com/reference/%s">%s</a>' % (target, shortname) 137 138 # Render as markdown, and do HTML-doc-specific rewrites 139 def md_html(text): 140 return md(text, IMAGE_SRC_METADATA) 141 142 # linkify tag names such as "android.x.y.z" into html anchors 143 def linkify_tags(metadata): 144 def linkify_filter(text): 145 tagged_text = filter_tags(text, metadata, html_anchor) 146 return filter_links(tagged_text, html_link) 147 return linkify_filter 148 149 # Number of rows an entry will span 150 def entry_cols(prop): 151 cols = 1 152 if prop.details: cols = cols + 2 153 if prop.hal_details: cols = cols + 2 154 return cols 155%> 156 157<body> 158 <h1>Android Camera HAL3.2 Properties</h1> 159\ 160<%def name="insert_toc_body(node)"> 161 % for nested in node.namespaces: 162${ insert_toc_body(nested)} 163 % endfor 164 % for entry in node.merged_entries: 165 <li 166 % if entry.deprecated: 167 class="toc_deprecated" 168 % endif 169 >${html_anchor(entry)}</li> 170 % endfor 171</%def> 172 173 <h2>Table of Contents</h2> 174 <ul class="toc"> 175 <li><a href="#tag_index" class="toc_section_header">Tags</a></li> 176% for root in metadata.outer_namespaces: 177 % for section in root.sections: 178 <li> 179 <span class="toc_section_header"><a href="#section_${section.name}">${section.name}</a></span> 180 <ul class="toc_section"> 181 % for kind in section.merged_kinds: # dynamic,static,controls 182 <li> 183 <span class="toc_kind_header">${kind.name}</span> 184 <ul class="toc_section">\ 185${ insert_toc_body(kind)}\ 186 </ul> 187 </li> 188 % endfor 189 </ul> <!-- toc_section --> 190 </li> 191 % endfor 192% endfor 193 </ul> 194 195 196 <h1>Properties</h1> 197 <table class="properties"> 198 199 <thead class="thead_dummy"> 200 <tr> 201 <th class="th_name">Property Name</th> 202 <th class="th_type">Type</th> 203 <th class="th_description">Description</th> 204 <th class="th_units">Units</th> 205 <th class="th_range">Range</th> 206 <th class="th_tags">Tags</th> 207 </tr> 208 </thead> <!-- so that the first occurrence of thead is not 209 above the first occurrence of tr --> 210% for root in metadata.outer_namespaces: 211<!-- <namespace name="${root.name}"> --> 212 % for section in root.sections: 213 <tr><td colspan="6" id="section_${section.name}" class="section">${section.name}</td></tr> 214 215 % if section.description is not None: 216 <tr class="description"><td>${section.description}</td></tr> 217 % endif 218 219 % for kind in section.merged_kinds: # dynamic,static,controls 220 <tr><td colspan="6" class="kind">${kind.name}</td></tr> 221 222 <thead class="entries_header"> 223 <tr> 224 <th class="th_name">Property Name</th> 225 <th class="th_type">Type</th> 226 <th class="th_description">Description</th> 227 <th class="th_units">Units</th> 228 <th class="th_range">Range</th> 229 <th class="th_tags">Tags</th> 230 </tr> 231 </thead> 232 233 <tbody> 234 235 <%def name="insert_body(node)"> 236 % for nested in node.namespaces: 237 ${insert_namespace(nested)} 238 % endfor 239 240 % for entry in node.merged_entries: 241 ${insert_entry(entry)} 242 % endfor 243 </%def> 244 245 <%def name="insert_namespace(namespace)"> 246 ${insert_body(namespace)} 247 </%def> 248 249 <%def name="insert_entry(prop)"> 250 <tr class="entry" id="${prop.kind}_${prop.name}"> 251 <td class="entry_name 252 % if prop.deprecated: 253 entry_name_deprecated 254 % endif 255 " rowspan="${entry_cols(prop)}"> 256 ${prop.name | wbr} 257 </td> 258 <td class="entry_type"> 259 % if prop.enum: 260 <span class="entry_type_name entry_type_name_enum">${prop.type}</span> 261 % else: 262 <span class="entry_type_name">${prop.type}</span> 263 % endif 264 % if prop.container is not None: 265 <span class="entry_type_container">x</span> 266 % endif 267 268 % if prop.container == 'array': 269 <span class="entry_type_array"> 270 ${" x ".join(prop.container_sizes)} 271 </span> 272 % elif prop.container == 'tuple': 273 <ul class="entry_type_tuple"> 274 % for val in prop.tuple_values: 275 <li>${val}</li> 276 % endfor 277 </ul> 278 % endif 279 <span class="entry_type_visibility"> [${prop.applied_visibility}${" as %s" %prop.typedef.name if prop.typedef else ""}]</span> 280 281 % if prop.synthetic: 282 <span class="entry_type_synthetic">[synthetic] </span> 283 % endif 284 285 % if prop.hwlevel: 286 <span class="entry_type_hwlevel">[${prop.hwlevel}] </span> 287 % endif 288 289 % if prop.deprecated: 290 <span class="entry_type_deprecated">[deprecated] </span> 291 % endif 292 293 % if prop.type_notes is not None: 294 <div class="entry_type_notes">${prop.type_notes | wbr}</div> 295 % endif 296 297 % if prop.enum: 298 <ul class="entry_type_enum"> 299 % for value in prop.enum.values: 300 <li> 301 <span class="entry_type_enum_name">${value.name}</span> 302 % if value.deprecated: 303 <span class="entry_type_enum_deprecated">[deprecated]</span> 304 % endif: 305 % if value.optional: 306 <span class="entry_type_enum_optional">[optional]</span> 307 % endif: 308 % if value.hidden: 309 <span class="entry_type_enum_hidden">[hidden]</span> 310 % endif: 311 % if value.id is not None: 312 <span class="entry_type_enum_value">${value.id}</span> 313 % endif 314 % if value.notes is not None: 315 <span class="entry_type_enum_notes">${value.notes | md_html, linkify_tags(metadata), wbr}</span> 316 % endif 317 </li> 318 % endfor 319 </ul> 320 % endif 321 322 </td> <!-- entry_type --> 323 324 <td class="entry_description"> 325 % if prop.description is not None: 326 ${prop.description | md_html, linkify_tags(metadata), wbr} 327 % endif 328 </td> 329 330 <td class="entry_units"> 331 % if prop.units is not None: 332 ${prop.units | wbr} 333 % endif 334 </td> 335 336 <td class="entry_range"> 337 % if prop.deprecated: 338 <p><span class="entry_range_deprecated">Deprecated</span>. Do not use.</p> 339 % endif 340 % if prop.range is not None: 341 ${prop.range | md_html, linkify_tags(metadata), wbr} 342 % endif 343 </td> 344 345 <td class="entry_tags"> 346 % if next(prop.tags, None): 347 <ul class="entry_tags"> 348 % for tag in prop.tags: 349 <li><a href="#tag_${tag.id}">${tag.id}</a></li> 350 % endfor 351 </ul> 352 % endif 353 </td> 354 355 </tr> 356 % if prop.details is not None: 357 <tr class="entries_header"> 358 <th class="th_details" colspan="5">Details</th> 359 </tr> 360 <tr class="entry_cont"> 361 <td class="entry_details" colspan="5"> 362 ${prop.details | md_html, linkify_tags(metadata), wbr} 363 </td> 364 </tr> 365 % endif 366 367 % if prop.hal_details is not None: 368 <tr class="entries_header"> 369 <th class="th_details" colspan="5">HAL Implementation Details</th> 370 </tr> 371 <tr class="entry_cont"> 372 <td class="entry_details" colspan="5"> 373 ${prop.hal_details | md_html, linkify_tags(metadata), wbr} 374 </td> 375 </tr> 376 % endif 377 378 <tr class="entry_spacer"><td class="entry_spacer" colspan="6"></td></tr> 379 <!-- end of entry --> 380 </%def> 381 382 ${insert_body(kind)} 383 384 <!-- end of kind --> 385 </tbody> 386 % endfor # for each kind 387 388 <!-- end of section --> 389 % endfor 390<!-- </namespace> --> 391% endfor 392 </table> 393 394 <div class="tags" id="tag_index"> 395 <h2>Tags</h2> 396 <ul> 397 % for tag in metadata.tags: 398 <li id="tag_${tag.id}">${tag.id} - ${tag.description} 399 <ul class="tags_entries"> 400 % for prop in tag.entries: 401 <li>${html_anchor(prop)} (${prop.kind})</li> 402 % endfor 403 </ul> 404 </li> <!-- tag_${tag.id} --> 405 % endfor 406 </ul> 407 </div> 408 409 [ <a href="#">top</a> ] 410 411</body> 412</html> 413