1*b9df5ad1SAndroid Build Coastguard Worker## -*- coding: utf-8 -*- 2*b9df5ad1SAndroid Build Coastguard Worker<?xml version="1.0" encoding="UTF-8"?> 3*b9df5ad1SAndroid Build Coastguard Worker<!-- Copyright (C) 2012 The Android Open Source Project 4*b9df5ad1SAndroid Build Coastguard Worker 5*b9df5ad1SAndroid Build Coastguard Worker Licensed under the Apache License, Version 2.0 (the "License"); 6*b9df5ad1SAndroid Build Coastguard Worker you may not use this file except in compliance with the License. 7*b9df5ad1SAndroid Build Coastguard Worker You may obtain a copy of the License at 8*b9df5ad1SAndroid Build Coastguard Worker 9*b9df5ad1SAndroid Build Coastguard Worker http://www.apache.org/licenses/LICENSE-2.0 10*b9df5ad1SAndroid Build Coastguard Worker 11*b9df5ad1SAndroid Build Coastguard Worker Unless required by applicable law or agreed to in writing, software 12*b9df5ad1SAndroid Build Coastguard Worker distributed under the License is distributed on an "AS IS" BASIS, 13*b9df5ad1SAndroid Build Coastguard Worker WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*b9df5ad1SAndroid Build Coastguard Worker See the License for the specific language governing permissions and 15*b9df5ad1SAndroid Build Coastguard Worker limitations under the License. 16*b9df5ad1SAndroid Build Coastguard Worker--> 17*b9df5ad1SAndroid Build Coastguard Worker<metadata 18*b9df5ad1SAndroid Build Coastguard Worker xmlns="http://schemas.android.com/service/camera/metadata/" 19*b9df5ad1SAndroid Build Coastguard Worker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 20*b9df5ad1SAndroid Build Coastguard Worker xsi:schemaLocation="http://schemas.android.com/service/camera/metadata/ metadata_definitions.xsd"> 21*b9df5ad1SAndroid Build Coastguard Worker 22*b9df5ad1SAndroid Build Coastguard Worker<tags> 23*b9df5ad1SAndroid Build Coastguard Worker% for tag in metadata.tags: 24*b9df5ad1SAndroid Build Coastguard Worker % if tag.description and tag.description.strip(): 25*b9df5ad1SAndroid Build Coastguard Worker <tag id="${tag.id}">${tag.description | x}</tag> 26*b9df5ad1SAndroid Build Coastguard Worker % else: 27*b9df5ad1SAndroid Build Coastguard Worker <tag id="${tag.id}"><!-- TODO: fill the tag description --></tag> 28*b9df5ad1SAndroid Build Coastguard Worker % endif 29*b9df5ad1SAndroid Build Coastguard Worker% endfor 30*b9df5ad1SAndroid Build Coastguard Worker</tags> 31*b9df5ad1SAndroid Build Coastguard Worker 32*b9df5ad1SAndroid Build Coastguard Worker<types> 33*b9df5ad1SAndroid Build Coastguard Worker% for typedef in metadata.types: 34*b9df5ad1SAndroid Build Coastguard Worker <typedef name="${typedef.name}"> 35*b9df5ad1SAndroid Build Coastguard Worker % for (language, klass) in typedef.languages.items(): 36*b9df5ad1SAndroid Build Coastguard Worker <language name="${language}">${klass | h}</language> 37*b9df5ad1SAndroid Build Coastguard Worker % endfor 38*b9df5ad1SAndroid Build Coastguard Worker </typedef> 39*b9df5ad1SAndroid Build Coastguard Worker% endfor 40*b9df5ad1SAndroid Build Coastguard Worker</types> 41*b9df5ad1SAndroid Build Coastguard Worker 42*b9df5ad1SAndroid Build Coastguard Worker% for root in metadata.outer_namespaces: 43*b9df5ad1SAndroid Build Coastguard Worker<namespace name="${root.name}"> 44*b9df5ad1SAndroid Build Coastguard Worker % for section in root.sections: 45*b9df5ad1SAndroid Build Coastguard Worker <section name="${section.name}"> 46*b9df5ad1SAndroid Build Coastguard Worker 47*b9df5ad1SAndroid Build Coastguard Worker % if section.description is not None: 48*b9df5ad1SAndroid Build Coastguard Worker <description>${section.description}</description> 49*b9df5ad1SAndroid Build Coastguard Worker % endif 50*b9df5ad1SAndroid Build Coastguard Worker 51*b9df5ad1SAndroid Build Coastguard Worker % for kind in section.kinds: # dynamic,static,controls 52*b9df5ad1SAndroid Build Coastguard Worker <${kind.name}> 53*b9df5ad1SAndroid Build Coastguard Worker 54*b9df5ad1SAndroid Build Coastguard Worker <%def name="insert_body(node)"> 55*b9df5ad1SAndroid Build Coastguard Worker % for nested in node.namespaces: 56*b9df5ad1SAndroid Build Coastguard Worker ${insert_namespace(nested)} 57*b9df5ad1SAndroid Build Coastguard Worker % endfor 58*b9df5ad1SAndroid Build Coastguard Worker 59*b9df5ad1SAndroid Build Coastguard Worker % for entry in node.entries: 60*b9df5ad1SAndroid Build Coastguard Worker ${insert_entry(entry)} 61*b9df5ad1SAndroid Build Coastguard Worker % endfor 62*b9df5ad1SAndroid Build Coastguard Worker </%def> 63*b9df5ad1SAndroid Build Coastguard Worker 64*b9df5ad1SAndroid Build Coastguard Worker <%def name="insert_namespace(namespace)"> 65*b9df5ad1SAndroid Build Coastguard Worker <namespace name="${namespace.name}"> 66*b9df5ad1SAndroid Build Coastguard Worker ${insert_body(namespace)} 67*b9df5ad1SAndroid Build Coastguard Worker </namespace> 68*b9df5ad1SAndroid Build Coastguard Worker </%def> 69*b9df5ad1SAndroid Build Coastguard Worker 70*b9df5ad1SAndroid Build Coastguard Worker <%def name="insert_entry(prop)"> 71*b9df5ad1SAndroid Build Coastguard Worker % if prop.is_clone(): 72*b9df5ad1SAndroid Build Coastguard Worker <clone entry="${prop.name}" kind="${prop.target_kind}" 73*b9df5ad1SAndroid Build Coastguard Worker % if ('hal_version' in prop._property_keys): 74*b9df5ad1SAndroid Build Coastguard Worker hal_version="${prop.hal_major_version}.${prop.hal_minor_version}" 75*b9df5ad1SAndroid Build Coastguard Worker % endif 76*b9df5ad1SAndroid Build Coastguard Worker > 77*b9df5ad1SAndroid Build Coastguard Worker 78*b9df5ad1SAndroid Build Coastguard Worker % if prop.details is not None: 79*b9df5ad1SAndroid Build Coastguard Worker <details>${prop.details}</details> 80*b9df5ad1SAndroid Build Coastguard Worker % endif 81*b9df5ad1SAndroid Build Coastguard Worker 82*b9df5ad1SAndroid Build Coastguard Worker % if prop.ndk_details is not None: 83*b9df5ad1SAndroid Build Coastguard Worker <ndk_details>${prop.ndk_details}</ndk_details> 84*b9df5ad1SAndroid Build Coastguard Worker % endif 85*b9df5ad1SAndroid Build Coastguard Worker 86*b9df5ad1SAndroid Build Coastguard Worker % if prop.hal_details is not None: 87*b9df5ad1SAndroid Build Coastguard Worker <hal_details>${prop.hal_details}</hal_details> 88*b9df5ad1SAndroid Build Coastguard Worker % endif 89*b9df5ad1SAndroid Build Coastguard Worker 90*b9df5ad1SAndroid Build Coastguard Worker % for tag in prop.tags: 91*b9df5ad1SAndroid Build Coastguard Worker <tag id="${tag.id}" /> 92*b9df5ad1SAndroid Build Coastguard Worker % endfor 93*b9df5ad1SAndroid Build Coastguard Worker 94*b9df5ad1SAndroid Build Coastguard Worker </clone> 95*b9df5ad1SAndroid Build Coastguard Worker % else: 96*b9df5ad1SAndroid Build Coastguard Worker <entry name="${prop.name_short}" type="${prop.type}" 97*b9df5ad1SAndroid Build Coastguard Worker % if prop.visibility: 98*b9df5ad1SAndroid Build Coastguard Worker visibility="${prop.visibility}" 99*b9df5ad1SAndroid Build Coastguard Worker % endif 100*b9df5ad1SAndroid Build Coastguard Worker % if prop.synthetic: 101*b9df5ad1SAndroid Build Coastguard Worker synthetic="true" 102*b9df5ad1SAndroid Build Coastguard Worker % endif 103*b9df5ad1SAndroid Build Coastguard Worker % if prop.deprecated: 104*b9df5ad1SAndroid Build Coastguard Worker deprecated="true" 105*b9df5ad1SAndroid Build Coastguard Worker % endif 106*b9df5ad1SAndroid Build Coastguard Worker % if prop.optional: 107*b9df5ad1SAndroid Build Coastguard Worker optional="${str(prop.optional).lower()}" 108*b9df5ad1SAndroid Build Coastguard Worker % endif 109*b9df5ad1SAndroid Build Coastguard Worker % if prop.enum: 110*b9df5ad1SAndroid Build Coastguard Worker enum="true" 111*b9df5ad1SAndroid Build Coastguard Worker % endif 112*b9df5ad1SAndroid Build Coastguard Worker % if prop.type_notes is not None: 113*b9df5ad1SAndroid Build Coastguard Worker type_notes="${prop.type_notes}" 114*b9df5ad1SAndroid Build Coastguard Worker % endif 115*b9df5ad1SAndroid Build Coastguard Worker % if prop.container is not None: 116*b9df5ad1SAndroid Build Coastguard Worker container="${prop.container}" 117*b9df5ad1SAndroid Build Coastguard Worker % endif 118*b9df5ad1SAndroid Build Coastguard Worker 119*b9df5ad1SAndroid Build Coastguard Worker % if prop.typedef is not None: 120*b9df5ad1SAndroid Build Coastguard Worker typedef="${prop.typedef.name}" 121*b9df5ad1SAndroid Build Coastguard Worker % endif 122*b9df5ad1SAndroid Build Coastguard Worker 123*b9df5ad1SAndroid Build Coastguard Worker % if prop.hwlevel: 124*b9df5ad1SAndroid Build Coastguard Worker hwlevel="${prop.hwlevel}" 125*b9df5ad1SAndroid Build Coastguard Worker % endif 126*b9df5ad1SAndroid Build Coastguard Worker 127*b9df5ad1SAndroid Build Coastguard Worker % if prop.permission_needed == "true": 128*b9df5ad1SAndroid Build Coastguard Worker permission_needed="true" 129*b9df5ad1SAndroid Build Coastguard Worker % endif 130*b9df5ad1SAndroid Build Coastguard Worker 131*b9df5ad1SAndroid Build Coastguard Worker % if prop.aconfig_flag: 132*b9df5ad1SAndroid Build Coastguard Worker aconfig_flag="${prop.aconfig_flag}" 133*b9df5ad1SAndroid Build Coastguard Worker % endif 134*b9df5ad1SAndroid Build Coastguard Worker 135*b9df5ad1SAndroid Build Coastguard Worker % if (prop.hal_major_version, prop.hal_minor_version) != (3,2): 136*b9df5ad1SAndroid Build Coastguard Worker hal_version="${prop.hal_major_version}.${prop.hal_minor_version}" 137*b9df5ad1SAndroid Build Coastguard Worker % endif 138*b9df5ad1SAndroid Build Coastguard Worker 139*b9df5ad1SAndroid Build Coastguard Worker % if prop.session_characteristics_key_since: 140*b9df5ad1SAndroid Build Coastguard Worker session_characteristics_key_since="${prop.session_characteristics_key_since}" 141*b9df5ad1SAndroid Build Coastguard Worker % endif 142*b9df5ad1SAndroid Build Coastguard Worker > 143*b9df5ad1SAndroid Build Coastguard Worker 144*b9df5ad1SAndroid Build Coastguard Worker % if prop.container == 'array': 145*b9df5ad1SAndroid Build Coastguard Worker <array> 146*b9df5ad1SAndroid Build Coastguard Worker % for size in prop.container_sizes: 147*b9df5ad1SAndroid Build Coastguard Worker <size>${size}</size> 148*b9df5ad1SAndroid Build Coastguard Worker % endfor 149*b9df5ad1SAndroid Build Coastguard Worker </array> 150*b9df5ad1SAndroid Build Coastguard Worker % elif prop.container == 'tuple': 151*b9df5ad1SAndroid Build Coastguard Worker <tuple> 152*b9df5ad1SAndroid Build Coastguard Worker % for size in prop.container_sizes: 153*b9df5ad1SAndroid Build Coastguard Worker <value /> <!-- intentionally generated empty. manually fix --> 154*b9df5ad1SAndroid Build Coastguard Worker % endfor 155*b9df5ad1SAndroid Build Coastguard Worker </tuple> 156*b9df5ad1SAndroid Build Coastguard Worker % endif 157*b9df5ad1SAndroid Build Coastguard Worker % if prop.enum: 158*b9df5ad1SAndroid Build Coastguard Worker <enum> 159*b9df5ad1SAndroid Build Coastguard Worker % for value in prop.enum.values: 160*b9df5ad1SAndroid Build Coastguard Worker <value 161*b9df5ad1SAndroid Build Coastguard Worker % if value.deprecated: 162*b9df5ad1SAndroid Build Coastguard Worker deprecated="true" 163*b9df5ad1SAndroid Build Coastguard Worker % endif: 164*b9df5ad1SAndroid Build Coastguard Worker % if value.optional: 165*b9df5ad1SAndroid Build Coastguard Worker optional="true" 166*b9df5ad1SAndroid Build Coastguard Worker % endif: 167*b9df5ad1SAndroid Build Coastguard Worker % if value.visibility is not None: 168*b9df5ad1SAndroid Build Coastguard Worker visibility="${value.visibility}" 169*b9df5ad1SAndroid Build Coastguard Worker % endif: 170*b9df5ad1SAndroid Build Coastguard Worker % if value.id is not None: 171*b9df5ad1SAndroid Build Coastguard Worker id="${value.id}" 172*b9df5ad1SAndroid Build Coastguard Worker % endif 173*b9df5ad1SAndroid Build Coastguard Worker % if not (value.hal_major_version == prop.hal_major_version and value.hal_minor_version == prop.hal_minor_version): 174*b9df5ad1SAndroid Build Coastguard Worker hal_version=${"%d.%d" % (value.hal_major_version, value.hal_minor_version)} 175*b9df5ad1SAndroid Build Coastguard Worker % endif 176*b9df5ad1SAndroid Build Coastguard Worker % if not (value.aconfig_flag == prop.aconfig_flag): 177*b9df5ad1SAndroid Build Coastguard Worker aconfig_flag="${value.aconfig_flag}" 178*b9df5ad1SAndroid Build Coastguard Worker % endif 179*b9df5ad1SAndroid Build Coastguard Worker >${value.name} 180*b9df5ad1SAndroid Build Coastguard Worker % if value.notes is not None: 181*b9df5ad1SAndroid Build Coastguard Worker <notes>${value.notes}</notes> 182*b9df5ad1SAndroid Build Coastguard Worker % endif 183*b9df5ad1SAndroid Build Coastguard Worker % if value.sdk_notes is not None: 184*b9df5ad1SAndroid Build Coastguard Worker <sdk_notes>${value.sdk_notes}</sdk_notes> 185*b9df5ad1SAndroid Build Coastguard Worker % endif 186*b9df5ad1SAndroid Build Coastguard Worker % if value.ndk_notes is not None: 187*b9df5ad1SAndroid Build Coastguard Worker <ndk_notes>${value.ndk_notes}</ndk_notes> 188*b9df5ad1SAndroid Build Coastguard Worker % endif 189*b9df5ad1SAndroid Build Coastguard Worker 190*b9df5ad1SAndroid Build Coastguard Worker </value> 191*b9df5ad1SAndroid Build Coastguard Worker % endfor 192*b9df5ad1SAndroid Build Coastguard Worker </enum> 193*b9df5ad1SAndroid Build Coastguard Worker % endif 194*b9df5ad1SAndroid Build Coastguard Worker 195*b9df5ad1SAndroid Build Coastguard Worker % if prop.description is not None: 196*b9df5ad1SAndroid Build Coastguard Worker <description>${prop.description | x}</description> 197*b9df5ad1SAndroid Build Coastguard Worker % endif 198*b9df5ad1SAndroid Build Coastguard Worker 199*b9df5ad1SAndroid Build Coastguard Worker % if prop.deprecation_description is not None: 200*b9df5ad1SAndroid Build Coastguard Worker <deprecation_description>${prop.deprecation_description | x}</deprecation_description> 201*b9df5ad1SAndroid Build Coastguard Worker % endif 202*b9df5ad1SAndroid Build Coastguard Worker 203*b9df5ad1SAndroid Build Coastguard Worker % if prop.units is not None: 204*b9df5ad1SAndroid Build Coastguard Worker <units>${prop.units | x}</units> 205*b9df5ad1SAndroid Build Coastguard Worker % endif 206*b9df5ad1SAndroid Build Coastguard Worker 207*b9df5ad1SAndroid Build Coastguard Worker % if prop.range is not None: 208*b9df5ad1SAndroid Build Coastguard Worker <range>${prop.range | x}</range> 209*b9df5ad1SAndroid Build Coastguard Worker % endif 210*b9df5ad1SAndroid Build Coastguard Worker 211*b9df5ad1SAndroid Build Coastguard Worker % if prop.details is not None: 212*b9df5ad1SAndroid Build Coastguard Worker <details>${prop.details | x}</details> 213*b9df5ad1SAndroid Build Coastguard Worker % endif 214*b9df5ad1SAndroid Build Coastguard Worker 215*b9df5ad1SAndroid Build Coastguard Worker % if prop.ndk_details is not None: 216*b9df5ad1SAndroid Build Coastguard Worker <ndk_details>${prop.ndk_details}</ndk_details> 217*b9df5ad1SAndroid Build Coastguard Worker % endif 218*b9df5ad1SAndroid Build Coastguard Worker 219*b9df5ad1SAndroid Build Coastguard Worker % if prop.hal_details is not None: 220*b9df5ad1SAndroid Build Coastguard Worker <hal_details>${prop.hal_details | x}</hal_details> 221*b9df5ad1SAndroid Build Coastguard Worker % endif 222*b9df5ad1SAndroid Build Coastguard Worker 223*b9df5ad1SAndroid Build Coastguard Worker % for tag in prop.tags: 224*b9df5ad1SAndroid Build Coastguard Worker <tag id="${tag.id}" /> 225*b9df5ad1SAndroid Build Coastguard Worker % endfor 226*b9df5ad1SAndroid Build Coastguard Worker 227*b9df5ad1SAndroid Build Coastguard Worker </entry> 228*b9df5ad1SAndroid Build Coastguard Worker % endif 229*b9df5ad1SAndroid Build Coastguard Worker </%def> 230*b9df5ad1SAndroid Build Coastguard Worker 231*b9df5ad1SAndroid Build Coastguard Worker ${insert_body(kind)} 232*b9df5ad1SAndroid Build Coastguard Worker 233*b9df5ad1SAndroid Build Coastguard Worker </${kind.name}> 234*b9df5ad1SAndroid Build Coastguard Worker % endfor # for each kind 235*b9df5ad1SAndroid Build Coastguard Worker 236*b9df5ad1SAndroid Build Coastguard Worker </section> 237*b9df5ad1SAndroid Build Coastguard Worker % endfor 238*b9df5ad1SAndroid Build Coastguard Worker</namespace> 239*b9df5ad1SAndroid Build Coastguard Worker% endfor 240*b9df5ad1SAndroid Build Coastguard Worker 241*b9df5ad1SAndroid Build Coastguard Worker</metadata> 242