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