15bd8deadSopenharmony_ci#!/usr/bin/python3 25bd8deadSopenharmony_ci# 35bd8deadSopenharmony_ci# Copyright 2017-2021 The Khronos Group Inc. 45bd8deadSopenharmony_ci# SPDX-License-Identifier: Apache-2.0 55bd8deadSopenharmony_ci 65bd8deadSopenharmony_ci# makeindex.py - create HTML indices for the OpenGL extension registry 75bd8deadSopenharmony_ci# 85bd8deadSopenharmony_ci# Use: makeindex.py key 95bd8deadSopenharmony_ci# where 'key' is 'arbnumber', 'number', 'esnumber', or 'scnumber' for ARB 105bd8deadSopenharmony_ci# OpenGL, Vendor OpenGL, OpenGL ES, and OpenGL SC extensions, respectively. 115bd8deadSopenharmony_ci# 125bd8deadSopenharmony_ci# Only extensions marked 'public' will be included in the index. 135bd8deadSopenharmony_ci 145bd8deadSopenharmony_ciimport copy, os, re, string, sys 155bd8deadSopenharmony_ci 165bd8deadSopenharmony_ci# Keys in glregistry: 175bd8deadSopenharmony_ci# arbnumber OpenGL ARB extension # (if present) 185bd8deadSopenharmony_ci# number OpenGL vendor/EXT extension # (if present) 195bd8deadSopenharmony_ci# esnumber OpenGL ES extension # (if present) 205bd8deadSopenharmony_ci# scregistry OpenGL SC extension # (if present) 215bd8deadSopenharmony_ci# flags Set containing one or more of 'public' 'private' 'obsolete' 'incomplete' 225bd8deadSopenharmony_ci# url Relative URL to extension spec 235bd8deadSopenharmony_ci# esurl Relative URL to ES-specific extension spec (if present) 245bd8deadSopenharmony_ci# alias Set of additional extension strings defined in the same document 255bd8deadSopenharmony_ci# comments Arbitrary string with metainformation about the extension 265bd8deadSopenharmony_ci# supporters Set of strings with supporting vendor names (both obsolete 275bd8deadSopenharmony_ci# and incomplete - useless save for historical purposes) 285bd8deadSopenharmony_ci 295bd8deadSopenharmony_cidef makeLink(name, link): 305bd8deadSopenharmony_ci return '<a href="' + url + '">' + name + '</a>' 315bd8deadSopenharmony_ci 325bd8deadSopenharmony_ci# See if the specified key of the extension has the specified flag 335bd8deadSopenharmony_cidef hasFlag(extension, key, flag): 345bd8deadSopenharmony_ci return (key in extension and flag in extension[key]) 355bd8deadSopenharmony_ci 365bd8deadSopenharmony_ciif __name__ == '__main__': 375bd8deadSopenharmony_ci if (len(sys.argv) > 1): 385bd8deadSopenharmony_ci key = sys.argv[1] 395bd8deadSopenharmony_ci else: 405bd8deadSopenharmony_ci key = 'number' 415bd8deadSopenharmony_ci 425bd8deadSopenharmony_ci isGLES = (key == 'esnumber') 435bd8deadSopenharmony_ci 445bd8deadSopenharmony_ci # print('makeindex: key =', key) 455bd8deadSopenharmony_ci 465bd8deadSopenharmony_ci # Load the registry 475bd8deadSopenharmony_ci file = 'registry.py' 485bd8deadSopenharmony_ci exec(open(file).read()) 495bd8deadSopenharmony_ci 505bd8deadSopenharmony_ci # Select extensions with the matching key 515bd8deadSopenharmony_ci dict = { k : v for k,v in registry.items() if key in v.keys()} 525bd8deadSopenharmony_ci 535bd8deadSopenharmony_ci # print('Filtered', len(dict), 'extensions') 545bd8deadSopenharmony_ci 555bd8deadSopenharmony_ci # Sort matching extensions by the key value 565bd8deadSopenharmony_ci sortext = sorted(dict.items(), key = lambda kv : kv[1].get(key)) 575bd8deadSopenharmony_ci 585bd8deadSopenharmony_ci # Generate the HTML ordered list of extensions (selecting only public ones) 595bd8deadSopenharmony_ci print('<ol>') 605bd8deadSopenharmony_ci for (name,ext) in sortext: 615bd8deadSopenharmony_ci index = ext.get(key) 625bd8deadSopenharmony_ci 635bd8deadSopenharmony_ci if hasFlag(ext, 'flags', 'public'): 645bd8deadSopenharmony_ci # Only select the alternate ES path if we're generating the ES index 655bd8deadSopenharmony_ci if (isGLES and 'esurl' in ext): 665bd8deadSopenharmony_ci url = ext['esurl'] 675bd8deadSopenharmony_ci else: 685bd8deadSopenharmony_ci url = ext['url'] 695bd8deadSopenharmony_ci 705bd8deadSopenharmony_ci # Create the main indexed link 715bd8deadSopenharmony_ci print('<li value=', index, '>', makeLink(name, url), sep='') 725bd8deadSopenharmony_ci 735bd8deadSopenharmony_ci if ('alias' in ext): 745bd8deadSopenharmony_ci for alias in sorted(ext['alias']): 755bd8deadSopenharmony_ci print('\n <br> ', makeLink(alias, url), sep='') 765bd8deadSopenharmony_ci 775bd8deadSopenharmony_ci print('</li>') 785bd8deadSopenharmony_ci print('</ol>') 79