| """ |
| pygments.lexers._lua_builtins |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| This file contains the names and modules of lua functions |
| It is able to re-generate itself, but for adding new functions you |
| probably have to add some callbacks (see function module_callbacks). |
| |
| Do not edit the MODULES dict by hand. |
| |
| Run with `python -I` to regenerate. |
| |
| :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. |
| :license: BSD, see LICENSE for details. |
| """ |
|
|
| MODULES = {'basic': ('_G', |
| '_VERSION', |
| 'assert', |
| 'collectgarbage', |
| 'dofile', |
| 'error', |
| 'getmetatable', |
| 'ipairs', |
| 'load', |
| 'loadfile', |
| 'next', |
| 'pairs', |
| 'pcall', |
| 'print', |
| 'rawequal', |
| 'rawget', |
| 'rawlen', |
| 'rawset', |
| 'select', |
| 'setmetatable', |
| 'tonumber', |
| 'tostring', |
| 'type', |
| 'warn', |
| 'xpcall'), |
| 'bit32': ('bit32.arshift', |
| 'bit32.band', |
| 'bit32.bnot', |
| 'bit32.bor', |
| 'bit32.btest', |
| 'bit32.bxor', |
| 'bit32.extract', |
| 'bit32.lrotate', |
| 'bit32.lshift', |
| 'bit32.replace', |
| 'bit32.rrotate', |
| 'bit32.rshift'), |
| 'coroutine': ('coroutine.close', |
| 'coroutine.create', |
| 'coroutine.isyieldable', |
| 'coroutine.resume', |
| 'coroutine.running', |
| 'coroutine.status', |
| 'coroutine.wrap', |
| 'coroutine.yield'), |
| 'debug': ('debug.debug', |
| 'debug.gethook', |
| 'debug.getinfo', |
| 'debug.getlocal', |
| 'debug.getmetatable', |
| 'debug.getregistry', |
| 'debug.getupvalue', |
| 'debug.getuservalue', |
| 'debug.sethook', |
| 'debug.setlocal', |
| 'debug.setmetatable', |
| 'debug.setupvalue', |
| 'debug.setuservalue', |
| 'debug.traceback', |
| 'debug.upvalueid', |
| 'debug.upvaluejoin'), |
| 'io': ('io.close', |
| 'io.flush', |
| 'io.input', |
| 'io.lines', |
| 'io.open', |
| 'io.output', |
| 'io.popen', |
| 'io.read', |
| 'io.stderr', |
| 'io.stdin', |
| 'io.stdout', |
| 'io.tmpfile', |
| 'io.type', |
| 'io.write'), |
| 'math': ('math.abs', |
| 'math.acos', |
| 'math.asin', |
| 'math.atan', |
| 'math.atan2', |
| 'math.ceil', |
| 'math.cos', |
| 'math.cosh', |
| 'math.deg', |
| 'math.exp', |
| 'math.floor', |
| 'math.fmod', |
| 'math.frexp', |
| 'math.huge', |
| 'math.ldexp', |
| 'math.log', |
| 'math.max', |
| 'math.maxinteger', |
| 'math.min', |
| 'math.mininteger', |
| 'math.modf', |
| 'math.pi', |
| 'math.pow', |
| 'math.rad', |
| 'math.random', |
| 'math.randomseed', |
| 'math.sin', |
| 'math.sinh', |
| 'math.sqrt', |
| 'math.tan', |
| 'math.tanh', |
| 'math.tointeger', |
| 'math.type', |
| 'math.ult'), |
| 'modules': ('package.config', |
| 'package.cpath', |
| 'package.loaded', |
| 'package.loadlib', |
| 'package.path', |
| 'package.preload', |
| 'package.searchers', |
| 'package.searchpath', |
| 'require'), |
| 'os': ('os.clock', |
| 'os.date', |
| 'os.difftime', |
| 'os.execute', |
| 'os.exit', |
| 'os.getenv', |
| 'os.remove', |
| 'os.rename', |
| 'os.setlocale', |
| 'os.time', |
| 'os.tmpname'), |
| 'string': ('string.byte', |
| 'string.char', |
| 'string.dump', |
| 'string.find', |
| 'string.format', |
| 'string.gmatch', |
| 'string.gsub', |
| 'string.len', |
| 'string.lower', |
| 'string.match', |
| 'string.pack', |
| 'string.packsize', |
| 'string.rep', |
| 'string.reverse', |
| 'string.sub', |
| 'string.unpack', |
| 'string.upper'), |
| 'table': ('table.concat', |
| 'table.insert', |
| 'table.move', |
| 'table.pack', |
| 'table.remove', |
| 'table.sort', |
| 'table.unpack'), |
| 'utf8': ('utf8.char', |
| 'utf8.charpattern', |
| 'utf8.codepoint', |
| 'utf8.codes', |
| 'utf8.len', |
| 'utf8.offset')} |
|
|
| if __name__ == '__main__': |
| import re |
| from urllib.request import urlopen |
| import pprint |
|
|
| |
| |
| |
| def module_callbacks(): |
| def is_in_coroutine_module(name): |
| return name.startswith('coroutine.') |
|
|
| def is_in_modules_module(name): |
| if name in ['require', 'module'] or name.startswith('package'): |
| return True |
| else: |
| return False |
|
|
| def is_in_string_module(name): |
| return name.startswith('string.') |
|
|
| def is_in_table_module(name): |
| return name.startswith('table.') |
|
|
| def is_in_math_module(name): |
| return name.startswith('math') |
|
|
| def is_in_io_module(name): |
| return name.startswith('io.') |
|
|
| def is_in_os_module(name): |
| return name.startswith('os.') |
|
|
| def is_in_debug_module(name): |
| return name.startswith('debug.') |
|
|
| return {'coroutine': is_in_coroutine_module, |
| 'modules': is_in_modules_module, |
| 'string': is_in_string_module, |
| 'table': is_in_table_module, |
| 'math': is_in_math_module, |
| 'io': is_in_io_module, |
| 'os': is_in_os_module, |
| 'debug': is_in_debug_module} |
|
|
|
|
|
|
| def get_newest_version(): |
| f = urlopen('http://www.lua.org/manual/') |
| r = re.compile(r'^<A HREF="(\d\.\d)/">(Lua )?\1</A>') |
| for line in f: |
| m = r.match(line.decode('iso-8859-1')) |
| if m is not None: |
| return m.groups()[0] |
|
|
| def get_lua_functions(version): |
| f = urlopen(f'http://www.lua.org/manual/{version}/') |
| r = re.compile(r'^<A HREF="manual.html#pdf-(?!lua|LUA)([^:]+)">\1</A>') |
| functions = [] |
| for line in f: |
| m = r.match(line.decode('iso-8859-1')) |
| if m is not None: |
| functions.append(m.groups()[0]) |
| return functions |
|
|
| def get_function_module(name): |
| for mod, cb in module_callbacks().items(): |
| if cb(name): |
| return mod |
| if '.' in name: |
| return name.split('.')[0] |
| else: |
| return 'basic' |
|
|
| def regenerate(filename, modules): |
| with open(filename, encoding='utf-8') as fp: |
| content = fp.read() |
|
|
| header = content[:content.find('MODULES = {')] |
| footer = content[content.find("if __name__ == '__main__':"):] |
|
|
|
|
| with open(filename, 'w', encoding='utf-8') as fp: |
| fp.write(header) |
| fp.write(f'MODULES = {pprint.pformat(modules)}\n\n') |
| fp.write(footer) |
|
|
| def run(): |
| version = get_newest_version() |
| functions = set() |
| for v in ('5.2', version): |
| print(f'> Downloading function index for Lua {v}') |
| f = get_lua_functions(v) |
| print('> %d functions found, %d new:' % |
| (len(f), len(set(f) - functions))) |
| functions |= set(f) |
|
|
| functions = sorted(functions) |
|
|
| modules = {} |
| for full_function_name in functions: |
| print(f'>> {full_function_name}') |
| m = get_function_module(full_function_name) |
| modules.setdefault(m, []).append(full_function_name) |
| modules = {k: tuple(v) for k, v in modules.items()} |
|
|
| regenerate(__file__, modules) |
|
|
| run() |
|
|