gl_enums.py revision f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505
178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul#!/usr/bin/python2 278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# -*- Mode: Python; py-indent-offset: 8 -*- 378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# (C) Copyright Zack Rusin 2005 578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# All Rights Reserved. 678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# 778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# Permission is hereby granted, free of charge, to any person obtaining a 878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# copy of this software and associated documentation files (the "Software"), 978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# to deal in the Software without restriction, including without limitation 1078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# on the rights to use, copy, modify, merge, publish, distribute, sub 1178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# license, and/or sell copies of the Software, and to permit persons to whom 1278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# the Software is furnished to do so, subject to the following conditions: 1378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# 1478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# The above copyright notice and this permission notice (including the next 1578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# paragraph) shall be included in all copies or substantial portions of the 1678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# Software. 1778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# 1878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 2078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 2178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 2278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 2478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# IN THE SOFTWARE. 2578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# 2678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# Authors: 2778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# Zack Rusin <zack@kde.org> 2878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 2978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulfrom xml.sax import saxutils 3078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulfrom xml.sax import make_parser 3178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulfrom xml.sax.handler import feature_namespaces 3278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 3378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulimport license 3478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulimport gl_XML 3578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulimport sys, getopt 3678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 3778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulclass PrintGlEnums(gl_XML.FilterGLAPISpecBase): 3878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul name = "gl_enums.py (from Mesa)" 3978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 4078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul def __init__(self): 4178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul gl_XML.FilterGLAPISpecBase.__init__(self) 4278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul self.license = license.bsd_license_template % ( \ 4378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul"""Copyright (C) 1999-2005 Brian Paul All Rights Reserved.""", "BRIAN PAUL") 44f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick self.enum_table = {} 4578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 4678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 4778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul def printRealHeader(self): 4878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print '#include "glheader.h"' 4978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print '#include "enums.h"' 5078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print '#include "imports.h"' 5178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print '' 5278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print 'typedef struct {' 53f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print ' size_t offset;' 5478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print ' int n;' 5578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print '} enum_elt;' 5678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print '' 5778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul return 5878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 598f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul def printBody(self): 6078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print """ 6178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul#define Elements(x) sizeof(x)/sizeof(*x) 6278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 6378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paultypedef int (*cfunc)(const void *, const void *); 6478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 65f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick/** 66f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * Compare a key name to an element in the \c all_enums array. 67f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * 68f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \c bsearch always passes the key as the first parameter and the pointer 69f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * to the array element as the second parameter. We can elimiate some 70f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * extra work by taking advantage of that fact. 71f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * 72f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \param a Pointer to the desired enum name. 73f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \param b Pointer to an element of the \c all_enums array. 7478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul */ 75f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanickstatic int compar_name( const char *a, const enum_elt *b ) 7678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul{ 77f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick return _mesa_strcmp( a, & enum_string_table[ b->offset ] ); 7878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul} 7978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 80f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick/** 81f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * Compare a key enum value to an element in the \c all_enums array. 82f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * 83f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \c bsearch always passes the key as the first parameter and the pointer 84f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * to the array element as the second parameter. We can elimiate some 85f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * extra work by taking advantage of that fact. 86f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * 87f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \param a Pointer to the desired enum name. 88f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \param b Pointer to an index into the \c all_enums array. 89f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick */ 90f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanickstatic int compar_nr( const int *a, const unsigned *b ) 9178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul{ 92f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick return a[0] - all_enums[*b].n; 9378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul} 9478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 9578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 968f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paulstatic char token_tmp[20]; 9778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 988f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paulconst char *_mesa_lookup_enum_by_nr( int nr ) 9978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul{ 100f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick unsigned * i; 10178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 102f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick i = (unsigned *)bsearch( & nr, reduced_enums, Elements(reduced_enums), 103f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick sizeof(reduced_enums[0]), (cfunc) compar_nr ); 10478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 105f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if ( i != NULL ) { 106f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick return & enum_string_table[ all_enums[ *i ].offset ]; 1078f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul } 1088f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul else { 109f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick /* this is not re-entrant safe, no big deal here */ 1108f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul _mesa_sprintf(token_tmp, "0x%x", nr); 1118f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul return token_tmp; 1128f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul } 11378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul} 11478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 1158f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paulint _mesa_lookup_enum_by_name( const char *symbol ) 11678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul{ 117f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick enum_elt * f = NULL; 11878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 119f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if ( symbol != NULL ) { 120f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick f = (enum_elt *)bsearch( symbol, all_enums, Elements(all_enums), 121f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick sizeof( enum_elt ), (cfunc) compar_name ); 122f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick } 12378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 124f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick return (f != NULL) ? f->n : -1; 12578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul} 1268f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul 12778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul""" 12878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul return 12978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 13078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul def printFunctions(self): 131f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick keys = self.enum_table.keys() 132f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick keys.sort() 133f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 134f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick name_table = [] 135f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick enum_table = {} 136f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 137f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick for enum in keys: 138f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick low_pri = 9 139f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick for [name, pri] in self.enum_table[ enum ]: 140f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick name_table.append( [name, enum] ) 141f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 142f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if pri < low_pri: 143f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick low_pri = pri 144f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick enum_table[enum] = name 145f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 146f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 147f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick name_table.sort() 148f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 149f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick string_offsets = {} 150f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick i = 0; 151f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print 'static const char enum_string_table[] = ' 152f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick for [name, enum] in name_table: 153f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print ' "%s\\0"' % (name) 154f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick string_offsets[ name ] = i 155f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick i += len(name) + 1 156f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 157f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print ' ;' 158f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '' 159f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 160f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 161f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print 'static const enum_elt all_enums[%u] =' % (len(name_table)) 162f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '{' 163f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick for [name, enum] in name_table: 164f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print ' { % 5u, 0x%08X }, /* %s */' % (string_offsets[name], enum, name) 165f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '};' 166f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '' 167f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 168f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print 'static const unsigned reduced_enums[%u] =' % (len(keys)) 169f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '{' 170f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick for enum in keys: 171f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick name = enum_table[ enum ] 172f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if [name, enum] not in name_table: 173f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print ' /* Error! %s, 0x%04x */ 0,' % (name, enum) 174f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick else: 175f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick i = name_table.index( [name, enum] ) 176f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 177f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print ' % 4u, /* %s */' % (i, name) 178f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '};' 179f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 180f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 1818f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul self.printBody(); 18278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul return 18378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 18478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 185f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick def append(self, object_type, obj): 186f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if object_type == "enum": 187f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if obj.value not in self.enum_table: 188f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick self.enum_table[ obj.value ] = [] 189f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 190f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 191f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick # Prevent duplicate names in the enum table. 192f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 193f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if obj.name not in self.enum_table[ obj.value ]: 194f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 195f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick # Calculate a "priority" for this enum name. 196f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick # When we lookup an enum by number, there may 197f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick # be many possible names, but only one can be 198f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick # returned. The priority is used by this 199f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick # script to select which name is the "best". 200f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick # 201f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick # Highest precedence is given to "core" name. 202f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick # ARB extension names have the next highest, 203f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick # followed by EXT extension names. Vendor 204f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick # extension names are the lowest. 205f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 206f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if obj.category.startswith( "GL_VERSION_" ): 207f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick priority = 0 208f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick elif obj.category.startswith( "GL_ARB_" ): 209f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick priority = 1 210f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick elif obj.category.startswith( "GL_EXT_" ): 211f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick priority = 2 212f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick else: 213f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick priority = 3 214f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 215f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick self.enum_table[ obj.value ].append( [obj.name, priority] ) 216f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 217f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick else: 218f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick gl_XML.FilterGLAPISpecBase.append(self, object_type, obj) 219f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 220f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 22178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Pauldef show_usage(): 22278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print "Usage: %s [-f input_file_name]" % sys.argv[0] 22378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul sys.exit(1) 22478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 22578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulif __name__ == '__main__': 22678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul file_name = "gl_API.xml" 227f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 22878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul try: 22978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul (args, trail) = getopt.getopt(sys.argv[1:], "f:") 23078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul except Exception,e: 23178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul show_usage() 23278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 23378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul for (arg,val) in args: 23478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul if arg == "-f": 23578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul file_name = val 23678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 23778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul dh = PrintGlEnums() 23878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 23978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul parser = make_parser() 24078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul parser.setFeature(feature_namespaces, 0) 24178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul parser.setContentHandler(dh) 24278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 24378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul f = open(file_name) 24478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 24578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul dh.printHeader() 24678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul parser.parse(f) 24778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul dh.printFooter() 248