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