Showing preview only (5,886K chars total). Download the full file or copy to clipboard to get everything.
Repository: rxi/lite
Branch: master
Commit: 38bd9b3326c0
Files: 429
Total size: 18.6 MB
Directory structure:
gitextract_u_nu9sbi/
├── .gitattributes
├── .github/
│ └── FUNDING.yml
├── LICENSE
├── README.md
├── build.bat
├── build.sh
├── build_release.sh
├── data/
│ ├── core/
│ │ ├── command.lua
│ │ ├── commands/
│ │ │ ├── command.lua
│ │ │ ├── core.lua
│ │ │ ├── doc.lua
│ │ │ ├── findreplace.lua
│ │ │ └── root.lua
│ │ ├── commandview.lua
│ │ ├── common.lua
│ │ ├── config.lua
│ │ ├── doc/
│ │ │ ├── highlighter.lua
│ │ │ ├── init.lua
│ │ │ ├── search.lua
│ │ │ └── translate.lua
│ │ ├── docview.lua
│ │ ├── init.lua
│ │ ├── keymap.lua
│ │ ├── logview.lua
│ │ ├── object.lua
│ │ ├── rootview.lua
│ │ ├── statusview.lua
│ │ ├── strict.lua
│ │ ├── style.lua
│ │ ├── syntax.lua
│ │ ├── tokenizer.lua
│ │ └── view.lua
│ ├── plugins/
│ │ ├── autocomplete.lua
│ │ ├── autoreload.lua
│ │ ├── language_c.lua
│ │ ├── language_css.lua
│ │ ├── language_js.lua
│ │ ├── language_lua.lua
│ │ ├── language_md.lua
│ │ ├── language_python.lua
│ │ ├── language_xml.lua
│ │ ├── macro.lua
│ │ ├── projectsearch.lua
│ │ ├── quote.lua
│ │ ├── reflow.lua
│ │ ├── tabularize.lua
│ │ ├── treeview.lua
│ │ └── trimwhitespace.lua
│ └── user/
│ ├── colors/
│ │ ├── fall.lua
│ │ └── summer.lua
│ └── init.lua
├── doc/
│ └── usage.md
├── icon.inl
├── res.rc
├── src/
│ ├── api/
│ │ ├── api.c
│ │ ├── api.h
│ │ ├── renderer.c
│ │ ├── renderer_font.c
│ │ └── system.c
│ ├── lib/
│ │ ├── lua52/
│ │ │ ├── lapi.c
│ │ │ ├── lapi.h
│ │ │ ├── lauxlib.c
│ │ │ ├── lauxlib.h
│ │ │ ├── lbaselib.c
│ │ │ ├── lbitlib.c
│ │ │ ├── lcode.c
│ │ │ ├── lcode.h
│ │ │ ├── lcorolib.c
│ │ │ ├── lctype.c
│ │ │ ├── lctype.h
│ │ │ ├── ldblib.c
│ │ │ ├── ldebug.c
│ │ │ ├── ldebug.h
│ │ │ ├── ldo.c
│ │ │ ├── ldo.h
│ │ │ ├── ldump.c
│ │ │ ├── lfunc.c
│ │ │ ├── lfunc.h
│ │ │ ├── lgc.c
│ │ │ ├── lgc.h
│ │ │ ├── linit.c
│ │ │ ├── liolib.c
│ │ │ ├── llex.c
│ │ │ ├── llex.h
│ │ │ ├── llimits.h
│ │ │ ├── lmathlib.c
│ │ │ ├── lmem.c
│ │ │ ├── lmem.h
│ │ │ ├── loadlib.c
│ │ │ ├── lobject.c
│ │ │ ├── lobject.h
│ │ │ ├── lopcodes.c
│ │ │ ├── lopcodes.h
│ │ │ ├── loslib.c
│ │ │ ├── lparser.c
│ │ │ ├── lparser.h
│ │ │ ├── lstate.c
│ │ │ ├── lstate.h
│ │ │ ├── lstring.c
│ │ │ ├── lstring.h
│ │ │ ├── lstrlib.c
│ │ │ ├── ltable.c
│ │ │ ├── ltable.h
│ │ │ ├── ltablib.c
│ │ │ ├── ltm.c
│ │ │ ├── ltm.h
│ │ │ ├── lua.c_
│ │ │ ├── lua.h
│ │ │ ├── lua.hpp
│ │ │ ├── luac.c_
│ │ │ ├── luaconf.h
│ │ │ ├── lualib.h
│ │ │ ├── lundump.c
│ │ │ ├── lundump.h
│ │ │ ├── lvm.c
│ │ │ ├── lvm.h
│ │ │ ├── lzio.c
│ │ │ └── lzio.h
│ │ └── stb/
│ │ ├── stb_truetype.c
│ │ └── stb_truetype.h
│ ├── main.c
│ ├── rencache.c
│ ├── rencache.h
│ ├── renderer.c
│ └── renderer.h
└── winlib/
└── SDL2-2.0.10/
├── BUGS.txt
├── COPYING.txt
├── CREDITS.txt
├── INSTALL.txt
├── Makefile
├── README-SDL.txt
├── README.txt
├── WhatsNew.txt
├── docs/
│ ├── README-android.md
│ ├── README-cmake.md
│ ├── README-directfb.md
│ ├── README-dynapi.md
│ ├── README-emscripten.md
│ ├── README-gesture.md
│ ├── README-hg.md
│ ├── README-ios.md
│ ├── README-linux.md
│ ├── README-macosx.md
│ ├── README-nacl.md
│ ├── README-pandora.md
│ ├── README-platforms.md
│ ├── README-porting.md
│ ├── README-psp.md
│ ├── README-raspberrypi.md
│ ├── README-touch.md
│ ├── README-wince.md
│ ├── README-windows.md
│ ├── README-winrt.md
│ ├── README.md
│ └── doxyfile
├── i686-w64-mingw32/
│ ├── bin/
│ │ └── sdl2-config
│ ├── include/
│ │ └── SDL2/
│ │ ├── SDL.h
│ │ ├── SDL_assert.h
│ │ ├── SDL_atomic.h
│ │ ├── SDL_audio.h
│ │ ├── SDL_bits.h
│ │ ├── SDL_blendmode.h
│ │ ├── SDL_clipboard.h
│ │ ├── SDL_config.h
│ │ ├── SDL_cpuinfo.h
│ │ ├── SDL_egl.h
│ │ ├── SDL_endian.h
│ │ ├── SDL_error.h
│ │ ├── SDL_events.h
│ │ ├── SDL_filesystem.h
│ │ ├── SDL_gamecontroller.h
│ │ ├── SDL_gesture.h
│ │ ├── SDL_haptic.h
│ │ ├── SDL_hints.h
│ │ ├── SDL_joystick.h
│ │ ├── SDL_keyboard.h
│ │ ├── SDL_keycode.h
│ │ ├── SDL_loadso.h
│ │ ├── SDL_log.h
│ │ ├── SDL_main.h
│ │ ├── SDL_messagebox.h
│ │ ├── SDL_mouse.h
│ │ ├── SDL_mutex.h
│ │ ├── SDL_name.h
│ │ ├── SDL_opengl.h
│ │ ├── SDL_opengl_glext.h
│ │ ├── SDL_opengles.h
│ │ ├── SDL_opengles2.h
│ │ ├── SDL_opengles2_gl2.h
│ │ ├── SDL_opengles2_gl2ext.h
│ │ ├── SDL_opengles2_gl2platform.h
│ │ ├── SDL_opengles2_khrplatform.h
│ │ ├── SDL_pixels.h
│ │ ├── SDL_platform.h
│ │ ├── SDL_power.h
│ │ ├── SDL_quit.h
│ │ ├── SDL_rect.h
│ │ ├── SDL_render.h
│ │ ├── SDL_revision.h
│ │ ├── SDL_rwops.h
│ │ ├── SDL_scancode.h
│ │ ├── SDL_sensor.h
│ │ ├── SDL_shape.h
│ │ ├── SDL_stdinc.h
│ │ ├── SDL_surface.h
│ │ ├── SDL_system.h
│ │ ├── SDL_syswm.h
│ │ ├── SDL_test.h
│ │ ├── SDL_test_assert.h
│ │ ├── SDL_test_common.h
│ │ ├── SDL_test_compare.h
│ │ ├── SDL_test_crc32.h
│ │ ├── SDL_test_font.h
│ │ ├── SDL_test_fuzzer.h
│ │ ├── SDL_test_harness.h
│ │ ├── SDL_test_images.h
│ │ ├── SDL_test_log.h
│ │ ├── SDL_test_md5.h
│ │ ├── SDL_test_memory.h
│ │ ├── SDL_test_random.h
│ │ ├── SDL_thread.h
│ │ ├── SDL_timer.h
│ │ ├── SDL_touch.h
│ │ ├── SDL_types.h
│ │ ├── SDL_version.h
│ │ ├── SDL_video.h
│ │ ├── SDL_vulkan.h
│ │ ├── begin_code.h
│ │ └── close_code.h
│ ├── lib/
│ │ ├── cmake/
│ │ │ └── SDL2/
│ │ │ └── sdl2-config.cmake
│ │ ├── libSDL2.a
│ │ ├── libSDL2.dll.a
│ │ ├── libSDL2.la
│ │ ├── libSDL2_test.a
│ │ ├── libSDL2_test.la
│ │ ├── libSDL2main.a
│ │ ├── libSDL2main.la
│ │ └── pkgconfig/
│ │ └── sdl2.pc
│ └── share/
│ └── aclocal/
│ └── sdl2.m4
├── test/
│ ├── CMakeLists.txt
│ ├── COPYING
│ ├── Makefile.in
│ ├── Makefile.os2
│ ├── README
│ ├── acinclude.m4
│ ├── aclocal.m4
│ ├── autogen.sh
│ ├── checkkeys.c
│ ├── configure
│ ├── configure.ac
│ ├── controllermap.c
│ ├── emscripten/
│ │ └── joystick-pre.js
│ ├── gcc-fat.sh
│ ├── loopwave.c
│ ├── loopwavequeue.c
│ ├── nacl/
│ │ ├── Makefile
│ │ ├── background.js
│ │ ├── common.js
│ │ ├── index.html
│ │ └── manifest.json
│ ├── picture.xbm
│ ├── relative_mode.markdown
│ ├── testatomic.c
│ ├── testaudiocapture.c
│ ├── testaudiohotplug.c
│ ├── testaudioinfo.c
│ ├── testautomation.c
│ ├── testautomation_audio.c
│ ├── testautomation_clipboard.c
│ ├── testautomation_events.c
│ ├── testautomation_hints.c
│ ├── testautomation_keyboard.c
│ ├── testautomation_main.c
│ ├── testautomation_mouse.c
│ ├── testautomation_pixels.c
│ ├── testautomation_platform.c
│ ├── testautomation_rect.c
│ ├── testautomation_render.c
│ ├── testautomation_rwops.c
│ ├── testautomation_sdltest.c
│ ├── testautomation_stdlib.c
│ ├── testautomation_suites.h
│ ├── testautomation_surface.c
│ ├── testautomation_syswm.c
│ ├── testautomation_timer.c
│ ├── testautomation_video.c
│ ├── testbounds.c
│ ├── testcustomcursor.c
│ ├── testdisplayinfo.c
│ ├── testdraw2.c
│ ├── testdrawchessboard.c
│ ├── testdropfile.c
│ ├── testerror.c
│ ├── testfile.c
│ ├── testfilesystem.c
│ ├── testgamecontroller.c
│ ├── testgesture.c
│ ├── testgl2.c
│ ├── testgles.c
│ ├── testgles2.c
│ ├── testhaptic.c
│ ├── testhittesting.c
│ ├── testhotplug.c
│ ├── testiconv.c
│ ├── testime.c
│ ├── testintersections.c
│ ├── testjoystick.c
│ ├── testkeys.c
│ ├── testloadso.c
│ ├── testlock.c
│ ├── testmessage.c
│ ├── testmultiaudio.c
│ ├── testnative.c
│ ├── testnative.h
│ ├── testnativecocoa.m
│ ├── testnativew32.c
│ ├── testnativex11.c
│ ├── testoverlay2.c
│ ├── testplatform.c
│ ├── testpower.c
│ ├── testqsort.c
│ ├── testrelative.c
│ ├── testrendercopyex.c
│ ├── testrendertarget.c
│ ├── testresample.c
│ ├── testrumble.c
│ ├── testscale.c
│ ├── testsem.c
│ ├── testsensor.c
│ ├── testshader.c
│ ├── testshape.c
│ ├── testsprite2.c
│ ├── testspriteminimal.c
│ ├── teststreaming.c
│ ├── testthread.c
│ ├── testtimer.c
│ ├── testver.c
│ ├── testviewport.c
│ ├── testvulkan.c
│ ├── testwm2.c
│ ├── testyuv.c
│ ├── testyuv_cvt.c
│ ├── testyuv_cvt.h
│ ├── torturethread.c
│ └── utf8.txt
└── x86_64-w64-mingw32/
├── bin/
│ └── sdl2-config
├── include/
│ └── SDL2/
│ ├── SDL.h
│ ├── SDL_assert.h
│ ├── SDL_atomic.h
│ ├── SDL_audio.h
│ ├── SDL_bits.h
│ ├── SDL_blendmode.h
│ ├── SDL_clipboard.h
│ ├── SDL_config.h
│ ├── SDL_cpuinfo.h
│ ├── SDL_egl.h
│ ├── SDL_endian.h
│ ├── SDL_error.h
│ ├── SDL_events.h
│ ├── SDL_filesystem.h
│ ├── SDL_gamecontroller.h
│ ├── SDL_gesture.h
│ ├── SDL_haptic.h
│ ├── SDL_hints.h
│ ├── SDL_joystick.h
│ ├── SDL_keyboard.h
│ ├── SDL_keycode.h
│ ├── SDL_loadso.h
│ ├── SDL_log.h
│ ├── SDL_main.h
│ ├── SDL_messagebox.h
│ ├── SDL_mouse.h
│ ├── SDL_mutex.h
│ ├── SDL_name.h
│ ├── SDL_opengl.h
│ ├── SDL_opengl_glext.h
│ ├── SDL_opengles.h
│ ├── SDL_opengles2.h
│ ├── SDL_opengles2_gl2.h
│ ├── SDL_opengles2_gl2ext.h
│ ├── SDL_opengles2_gl2platform.h
│ ├── SDL_opengles2_khrplatform.h
│ ├── SDL_pixels.h
│ ├── SDL_platform.h
│ ├── SDL_power.h
│ ├── SDL_quit.h
│ ├── SDL_rect.h
│ ├── SDL_render.h
│ ├── SDL_revision.h
│ ├── SDL_rwops.h
│ ├── SDL_scancode.h
│ ├── SDL_sensor.h
│ ├── SDL_shape.h
│ ├── SDL_stdinc.h
│ ├── SDL_surface.h
│ ├── SDL_system.h
│ ├── SDL_syswm.h
│ ├── SDL_test.h
│ ├── SDL_test_assert.h
│ ├── SDL_test_common.h
│ ├── SDL_test_compare.h
│ ├── SDL_test_crc32.h
│ ├── SDL_test_font.h
│ ├── SDL_test_fuzzer.h
│ ├── SDL_test_harness.h
│ ├── SDL_test_images.h
│ ├── SDL_test_log.h
│ ├── SDL_test_md5.h
│ ├── SDL_test_memory.h
│ ├── SDL_test_random.h
│ ├── SDL_thread.h
│ ├── SDL_timer.h
│ ├── SDL_touch.h
│ ├── SDL_types.h
│ ├── SDL_version.h
│ ├── SDL_video.h
│ ├── SDL_vulkan.h
│ ├── begin_code.h
│ └── close_code.h
├── lib/
│ ├── cmake/
│ │ └── SDL2/
│ │ └── sdl2-config.cmake
│ ├── libSDL2.a
│ ├── libSDL2.dll.a
│ ├── libSDL2.la
│ ├── libSDL2_test.a
│ ├── libSDL2_test.la
│ ├── libSDL2main.a
│ ├── libSDL2main.la
│ └── pkgconfig/
│ └── sdl2.pc
└── share/
└── aclocal/
└── sdl2.m4
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
winlib/* linguist-vendored
src/lib/* linguist-vendored
icon.inl linguist-vendored
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: rxi
================================================
FILE: LICENSE
================================================
Copyright (c) 2020 rxi
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# lite

A lightweight text editor written in Lua
* **[Get lite](https://github.com/rxi/lite/releases/latest)** — Download
for Windows and Linux
* **[Get started](doc/usage.md)** — A quick overview on how to get started
* **[Get plugins](https://github.com/rxi/lite-plugins)** — Add additional
functionality
* **[Get color themes](https://github.com/rxi/lite-colors)** — Add additional colors
themes
## Overview
lite is a lightweight text editor written mostly in Lua — it aims to provide
something practical, pretty, *small* and fast, implemented as simply as
possible; easy to modify and extend, or to use without doing either.
## Customization
Additional functionality can be added through plugins which are available from
the [plugins repository](https://github.com/rxi/lite-plugins); additional color
themes can be found in the [colors repository](https://github.com/rxi/lite-colors).
The editor can be customized by making changes to the
[user module](data/user/init.lua).
## Building
You can build the project yourself on Linux using the `build.sh` script
or on Windows using the `build.bat` script *([MinGW](https://nuwen.net/mingw.html) is required)*.
Note that the project does not need to be rebuilt if you are only making changes
to the Lua portion of the code.
## Contributing
Any additional functionality that can be added through a plugin should be done
so as a plugin, after which a pull request to the
[plugins repository](https://github.com/rxi/lite-plugins) can be made. In hopes
of remaining lightweight, pull requests adding additional functionality to the
core will likely not be merged. Bug reports and bug fixes are welcome.
## License
This project is free software; you can redistribute it and/or modify it under
the terms of the MIT license. See [LICENSE](LICENSE) for details.
================================================
FILE: build.bat
================================================
@echo off
rem download this:
rem https://nuwen.net/mingw.html
echo compiling (windows)...
windres res.rc -O coff -o res.res
gcc src/*.c src/api/*.c src/lib/lua52/*.c src/lib/stb/*.c^
-O3 -s -std=gnu11 -fno-strict-aliasing -Isrc -DLUA_USE_POPEN^
-Iwinlib/SDL2-2.0.10/x86_64-w64-mingw32/include^
-lmingw32 -lm -lSDL2main -lSDL2 -Lwinlib/SDL2-2.0.10/x86_64-w64-mingw32/lib^
-mwindows res.res^
-o lite.exe
echo done
================================================
FILE: build.sh
================================================
#!/bin/bash
cflags="-Wall -O3 -g -std=gnu11 -fno-strict-aliasing -Isrc"
lflags="-lSDL2 -lm"
if [[ $* == *windows* ]]; then
platform="windows"
outfile="lite.exe"
compiler="x86_64-w64-mingw32-gcc"
cflags="$cflags -DLUA_USE_POPEN -Iwinlib/SDL2-2.0.10/x86_64-w64-mingw32/include"
lflags="$lflags -Lwinlib/SDL2-2.0.10/x86_64-w64-mingw32/lib"
lflags="-lmingw32 -lSDL2main $lflags -mwindows -o $outfile res.res"
x86_64-w64-mingw32-windres res.rc -O coff -o res.res
else
platform="unix"
outfile="lite"
compiler="gcc"
cflags="$cflags -DLUA_USE_POSIX"
lflags="$lflags -o $outfile"
fi
if command -v ccache >/dev/null; then
compiler="ccache $compiler"
fi
echo "compiling ($platform)..."
for f in `find src -name "*.c"`; do
$compiler -c $cflags $f -o "${f//\//_}.o"
if [[ $? -ne 0 ]]; then
got_error=true
fi
done
if [[ ! $got_error ]]; then
echo "linking..."
$compiler *.o $lflags
fi
echo "cleaning up..."
rm *.o
rm res.res 2>/dev/null
echo "done"
================================================
FILE: build_release.sh
================================================
#!/bin/bash
./build.sh release windows
./build.sh release
rm lite.zip 2>/dev/null
cp winlib/SDL2-2.0.10/x86_64-w64-mingw32/bin/SDL2.dll SDL2.dll
strip lite
strip lite.exe
strip SDL2.dll
zip lite.zip lite lite.exe SDL2.dll data -r
================================================
FILE: data/core/command.lua
================================================
local core = require "core"
local command = {}
command.map = {}
local always_true = function() return true end
function command.add(predicate, map)
predicate = predicate or always_true
if type(predicate) == "string" then
predicate = require(predicate)
end
if type(predicate) == "table" then
local class = predicate
predicate = function() return core.active_view:is(class) end
end
for name, fn in pairs(map) do
assert(not command.map[name], "command already exists: " .. name)
command.map[name] = { predicate = predicate, perform = fn }
end
end
local function capitalize_first(str)
return str:sub(1, 1):upper() .. str:sub(2)
end
function command.prettify_name(name)
return name:gsub(":", ": "):gsub("-", " "):gsub("%S+", capitalize_first)
end
function command.get_all_valid()
local res = {}
for name, cmd in pairs(command.map) do
if cmd.predicate() then
table.insert(res, name)
end
end
return res
end
local function perform(name)
local cmd = command.map[name]
if cmd and cmd.predicate() then
cmd.perform()
return true
end
return false
end
function command.perform(...)
local ok, res = core.try(perform, ...)
return not ok or res
end
function command.add_defaults()
local reg = { "core", "root", "command", "doc", "findreplace" }
for _, name in ipairs(reg) do
require("core.commands." .. name)
end
end
return command
================================================
FILE: data/core/commands/command.lua
================================================
local core = require "core"
local command = require "core.command"
local CommandView = require "core.commandview"
local function has_commandview()
return core.active_view:is(CommandView)
end
command.add(has_commandview, {
["command:submit"] = function()
core.active_view:submit()
end,
["command:complete"] = function()
core.active_view:complete()
end,
["command:escape"] = function()
core.active_view:exit()
end,
["command:select-previous"] = function()
core.active_view:move_suggestion_idx(1)
end,
["command:select-next"] = function()
core.active_view:move_suggestion_idx(-1)
end,
})
================================================
FILE: data/core/commands/core.lua
================================================
local core = require "core"
local common = require "core.common"
local command = require "core.command"
local keymap = require "core.keymap"
local LogView = require "core.logview"
local fullscreen = false
command.add(nil, {
["core:quit"] = function()
core.quit()
end,
["core:force-quit"] = function()
core.quit(true)
end,
["core:toggle-fullscreen"] = function()
fullscreen = not fullscreen
system.set_window_mode(fullscreen and "fullscreen" or "normal")
end,
["core:reload-module"] = function()
core.command_view:enter("Reload Module", function(text, item)
local text = item and item.text or text
core.reload_module(text)
core.log("Reloaded module %q", text)
end, function(text)
local items = {}
for name in pairs(package.loaded) do
table.insert(items, name)
end
return common.fuzzy_match(items, text)
end)
end,
["core:find-command"] = function()
local commands = command.get_all_valid()
core.command_view:enter("Do Command", function(text, item)
if item then
command.perform(item.command)
end
end, function(text)
local res = common.fuzzy_match(commands, text)
for i, name in ipairs(res) do
res[i] = {
text = command.prettify_name(name),
info = keymap.get_binding(name),
command = name,
}
end
return res
end)
end,
["core:find-file"] = function()
core.command_view:enter("Open File From Project", function(text, item)
text = item and item.text or text
core.root_view:open_doc(core.open_doc(text))
end, function(text)
local files = {}
for _, item in pairs(core.project_files) do
if item.type == "file" then
table.insert(files, item.filename)
end
end
return common.fuzzy_match(files, text)
end)
end,
["core:new-doc"] = function()
core.root_view:open_doc(core.open_doc())
end,
["core:open-file"] = function()
core.command_view:enter("Open File", function(text)
core.root_view:open_doc(core.open_doc(text))
end, common.path_suggest)
end,
["core:open-log"] = function()
local node = core.root_view:get_active_node()
node:add_view(LogView())
end,
["core:open-user-module"] = function()
core.root_view:open_doc(core.open_doc(EXEDIR .. "/data/user/init.lua"))
end,
["core:open-project-module"] = function()
local filename = ".lite_project.lua"
if system.get_file_info(filename) then
core.root_view:open_doc(core.open_doc(filename))
else
local doc = core.open_doc()
core.root_view:open_doc(doc)
doc:save(filename)
end
end,
})
================================================
FILE: data/core/commands/doc.lua
================================================
local core = require "core"
local command = require "core.command"
local common = require "core.common"
local config = require "core.config"
local translate = require "core.doc.translate"
local DocView = require "core.docview"
local function dv()
return core.active_view
end
local function doc()
return core.active_view.doc
end
local function get_indent_string()
if config.tab_type == "hard" then
return "\t"
end
return string.rep(" ", config.indent_size)
end
local function insert_at_start_of_selected_lines(text, skip_empty)
local line1, col1, line2, col2, swap = doc():get_selection(true)
for line = line1, line2 do
local line_text = doc().lines[line]
if (not skip_empty or line_text:find("%S")) then
doc():insert(line, 1, text)
end
end
doc():set_selection(line1, col1 + #text, line2, col2 + #text, swap)
end
local function remove_from_start_of_selected_lines(text, skip_empty)
local line1, col1, line2, col2, swap = doc():get_selection(true)
for line = line1, line2 do
local line_text = doc().lines[line]
if line_text:sub(1, #text) == text
and (not skip_empty or line_text:find("%S"))
then
doc():remove(line, 1, line, #text + 1)
end
end
doc():set_selection(line1, col1 - #text, line2, col2 - #text, swap)
end
local function append_line_if_last_line(line)
if line >= #doc().lines then
doc():insert(line, math.huge, "\n")
end
end
local function save(filename)
doc():save(filename)
core.log("Saved \"%s\"", doc().filename)
end
local commands = {
["doc:undo"] = function()
doc():undo()
end,
["doc:redo"] = function()
doc():redo()
end,
["doc:cut"] = function()
if doc():has_selection() then
local text = doc():get_text(doc():get_selection())
system.set_clipboard(text)
doc():delete_to(0)
end
end,
["doc:copy"] = function()
if doc():has_selection() then
local text = doc():get_text(doc():get_selection())
system.set_clipboard(text)
end
end,
["doc:paste"] = function()
doc():text_input(system.get_clipboard():gsub("\r", ""))
end,
["doc:newline"] = function()
local line, col = doc():get_selection()
local indent = doc().lines[line]:match("^[\t ]*")
if col <= #indent then
indent = indent:sub(#indent + 2 - col)
end
doc():text_input("\n" .. indent)
end,
["doc:newline-below"] = function()
local line = doc():get_selection()
local indent = doc().lines[line]:match("^[\t ]*")
doc():insert(line, math.huge, "\n" .. indent)
doc():set_selection(line + 1, math.huge)
end,
["doc:newline-above"] = function()
local line = doc():get_selection()
local indent = doc().lines[line]:match("^[\t ]*")
doc():insert(line, 1, indent .. "\n")
doc():set_selection(line, math.huge)
end,
["doc:delete"] = function()
local line, col = doc():get_selection()
if not doc():has_selection() and doc().lines[line]:find("^%s*$", col) then
doc():remove(line, col, line, math.huge)
end
doc():delete_to(translate.next_char)
end,
["doc:backspace"] = function()
local line, col = doc():get_selection()
if not doc():has_selection() then
local text = doc():get_text(line, 1, line, col)
if #text >= config.indent_size and text:find("^ *$") then
doc():delete_to(0, -config.indent_size)
return
end
end
doc():delete_to(translate.previous_char)
end,
["doc:select-all"] = function()
doc():set_selection(1, 1, math.huge, math.huge)
end,
["doc:select-none"] = function()
local line, col = doc():get_selection()
doc():set_selection(line, col)
end,
["doc:select-lines"] = function()
local line1, _, line2, _, swap = doc():get_selection(true)
append_line_if_last_line(line2)
doc():set_selection(line1, 1, line2 + 1, 1, swap)
end,
["doc:select-word"] = function()
local line1, col1 = doc():get_selection(true)
local line1, col1 = translate.start_of_word(doc(), line1, col1)
local line2, col2 = translate.end_of_word(doc(), line1, col1)
doc():set_selection(line2, col2, line1, col1)
end,
["doc:join-lines"] = function()
local line1, _, line2 = doc():get_selection(true)
if line1 == line2 then line2 = line2 + 1 end
local text = doc():get_text(line1, 1, line2, math.huge)
text = text:gsub("(.-)\n[\t ]*", function(x)
return x:find("^%s*$") and x or x .. " "
end)
doc():insert(line1, 1, text)
doc():remove(line1, #text + 1, line2, math.huge)
if doc():has_selection() then
doc():set_selection(line1, math.huge)
end
end,
["doc:indent"] = function()
local text = get_indent_string()
if doc():has_selection() then
insert_at_start_of_selected_lines(text)
else
doc():text_input(text)
end
end,
["doc:unindent"] = function()
local text = get_indent_string()
remove_from_start_of_selected_lines(text)
end,
["doc:duplicate-lines"] = function()
local line1, col1, line2, col2, swap = doc():get_selection(true)
append_line_if_last_line(line2)
local text = doc():get_text(line1, 1, line2 + 1, 1)
doc():insert(line2 + 1, 1, text)
local n = line2 - line1 + 1
doc():set_selection(line1 + n, col1, line2 + n, col2, swap)
end,
["doc:delete-lines"] = function()
local line1, col1, line2 = doc():get_selection(true)
append_line_if_last_line(line2)
doc():remove(line1, 1, line2 + 1, 1)
doc():set_selection(line1, col1)
end,
["doc:move-lines-up"] = function()
local line1, col1, line2, col2, swap = doc():get_selection(true)
append_line_if_last_line(line2)
if line1 > 1 then
local text = doc().lines[line1 - 1]
doc():insert(line2 + 1, 1, text)
doc():remove(line1 - 1, 1, line1, 1)
doc():set_selection(line1 - 1, col1, line2 - 1, col2, swap)
end
end,
["doc:move-lines-down"] = function()
local line1, col1, line2, col2, swap = doc():get_selection(true)
append_line_if_last_line(line2 + 1)
if line2 < #doc().lines then
local text = doc().lines[line2 + 1]
doc():remove(line2 + 1, 1, line2 + 2, 1)
doc():insert(line1, 1, text)
doc():set_selection(line1 + 1, col1, line2 + 1, col2, swap)
end
end,
["doc:toggle-line-comments"] = function()
local comment = doc().syntax.comment
if not comment then return end
local comment_text = comment .. " "
local line1, _, line2 = doc():get_selection(true)
local uncomment = true
for line = line1, line2 do
local text = doc().lines[line]
if text:find("%S") and text:find(comment_text, 1, true) ~= 1 then
uncomment = false
end
end
if uncomment then
remove_from_start_of_selected_lines(comment_text, true)
else
insert_at_start_of_selected_lines(comment_text, true)
end
end,
["doc:upper-case"] = function()
doc():replace(string.upper)
end,
["doc:lower-case"] = function()
doc():replace(string.lower)
end,
["doc:go-to-line"] = function()
local dv = dv()
local items
local function init_items()
if items then return end
items = {}
local mt = { __tostring = function(x) return x.text end }
for i, line in ipairs(dv.doc.lines) do
local item = { text = line:sub(1, -2), line = i, info = "line: " .. i }
table.insert(items, setmetatable(item, mt))
end
end
core.command_view:enter("Go To Line", function(text, item)
local line = item and item.line or tonumber(text)
if not line then
core.error("Invalid line number or unmatched string")
return
end
dv.doc:set_selection(line, 1 )
dv:scroll_to_line(line, true)
end, function(text)
if not text:find("^%d*$") then
init_items()
return common.fuzzy_match(items, text)
end
end)
end,
["doc:toggle-line-ending"] = function()
doc().crlf = not doc().crlf
end,
["doc:save-as"] = function()
if doc().filename then
core.command_view:set_text(doc().filename)
end
core.command_view:enter("Save As", function(filename)
save(filename)
end, common.path_suggest)
end,
["doc:save"] = function()
if doc().filename then
save()
else
command.perform("doc:save-as")
end
end,
["doc:rename"] = function()
local old_filename = doc().filename
if not old_filename then
core.error("Cannot rename unsaved doc")
return
end
core.command_view:set_text(old_filename)
core.command_view:enter("Rename", function(filename)
doc():save(filename)
core.log("Renamed \"%s\" to \"%s\"", old_filename, filename)
if filename ~= old_filename then
os.remove(old_filename)
end
end, common.path_suggest)
end,
}
local translations = {
["previous-char"] = translate.previous_char,
["next-char"] = translate.next_char,
["previous-word-start"] = translate.previous_word_start,
["next-word-end"] = translate.next_word_end,
["previous-block-start"] = translate.previous_block_start,
["next-block-end"] = translate.next_block_end,
["start-of-doc"] = translate.start_of_doc,
["end-of-doc"] = translate.end_of_doc,
["start-of-line"] = translate.start_of_line,
["end-of-line"] = translate.end_of_line,
["start-of-word"] = translate.start_of_word,
["end-of-word"] = translate.end_of_word,
["previous-line"] = DocView.translate.previous_line,
["next-line"] = DocView.translate.next_line,
["previous-page"] = DocView.translate.previous_page,
["next-page"] = DocView.translate.next_page,
}
for name, fn in pairs(translations) do
commands["doc:move-to-" .. name] = function() doc():move_to(fn, dv()) end
commands["doc:select-to-" .. name] = function() doc():select_to(fn, dv()) end
commands["doc:delete-to-" .. name] = function() doc():delete_to(fn, dv()) end
end
commands["doc:move-to-previous-char"] = function()
if doc():has_selection() then
local line, col = doc():get_selection(true)
doc():set_selection(line, col)
else
doc():move_to(translate.previous_char)
end
end
commands["doc:move-to-next-char"] = function()
if doc():has_selection() then
local _, _, line, col = doc():get_selection(true)
doc():set_selection(line, col)
else
doc():move_to(translate.next_char)
end
end
command.add("core.docview", commands)
================================================
FILE: data/core/commands/findreplace.lua
================================================
local core = require "core"
local command = require "core.command"
local config = require "core.config"
local search = require "core.doc.search"
local DocView = require "core.docview"
local max_previous_finds = 50
local function doc()
return core.active_view.doc
end
local previous_finds
local last_doc
local last_fn, last_text
local function push_previous_find(doc, sel)
if last_doc ~= doc then
last_doc = doc
previous_finds = {}
end
if #previous_finds >= max_previous_finds then
table.remove(previous_finds, 1)
end
table.insert(previous_finds, sel or { doc:get_selection() })
end
local function find(label, search_fn)
local dv = core.active_view
local sel = { dv.doc:get_selection() }
local text = dv.doc:get_text(table.unpack(sel))
local found = false
core.command_view:set_text(text, true)
core.command_view:enter(label, function(text)
if found then
last_fn, last_text = search_fn, text
previous_finds = {}
push_previous_find(dv.doc, sel)
else
core.error("Couldn't find %q", text)
dv.doc:set_selection(table.unpack(sel))
dv:scroll_to_make_visible(sel[1], sel[2])
end
end, function(text)
local ok, line1, col1, line2, col2 = pcall(search_fn, dv.doc, sel[1], sel[2], text)
if ok and line1 and text ~= "" then
dv.doc:set_selection(line2, col2, line1, col1)
dv:scroll_to_line(line2, true)
found = true
else
dv.doc:set_selection(table.unpack(sel))
found = false
end
end, function(explicit)
if explicit then
dv.doc:set_selection(table.unpack(sel))
dv:scroll_to_make_visible(sel[1], sel[2])
end
end)
end
local function replace(kind, default, fn)
core.command_view:set_text(default, true)
core.command_view:enter("Find To Replace " .. kind, function(old)
core.command_view:set_text(old, true)
local s = string.format("Replace %s %q With", kind, old)
core.command_view:enter(s, function(new)
local n = doc():replace(function(text)
return fn(text, old, new)
end)
core.log("Replaced %d instance(s) of %s %q with %q", n, kind, old, new)
end)
end)
end
local function has_selection()
return core.active_view:is(DocView)
and core.active_view.doc:has_selection()
end
command.add(has_selection, {
["find-replace:select-next"] = function()
local l1, c1, l2, c2 = doc():get_selection(true)
local text = doc():get_text(l1, c1, l2, c2)
local l1, c1, l2, c2 = search.find(doc(), l2, c2, text, { wrap = true })
if l2 then doc():set_selection(l2, c2, l1, c1) end
end
})
command.add("core.docview", {
["find-replace:find"] = function()
find("Find Text", function(doc, line, col, text)
local opt = { wrap = true, no_case = true }
return search.find(doc, line, col, text, opt)
end)
end,
["find-replace:find-pattern"] = function()
find("Find Text Pattern", function(doc, line, col, text)
local opt = { wrap = true, no_case = true, pattern = true }
return search.find(doc, line, col, text, opt)
end)
end,
["find-replace:repeat-find"] = function()
if not last_fn then
core.error("No find to continue from")
else
local line, col = doc():get_selection()
local line1, col1, line2, col2 = last_fn(doc(), line, col, last_text)
if line1 then
push_previous_find(doc())
doc():set_selection(line2, col2, line1, col1)
core.active_view:scroll_to_line(line2, true)
end
end
end,
["find-replace:previous-find"] = function()
local sel = table.remove(previous_finds)
if not sel or doc() ~= last_doc then
core.error("No previous finds")
return
end
doc():set_selection(table.unpack(sel))
core.active_view:scroll_to_line(sel[3], true)
end,
["find-replace:replace"] = function()
replace("Text", "", function(text, old, new)
return text:gsub(old:gsub("%W", "%%%1"), new:gsub("%%", "%%%%"), nil)
end)
end,
["find-replace:replace-pattern"] = function()
replace("Pattern", "", function(text, old, new)
return text:gsub(old, new)
end)
end,
["find-replace:replace-symbol"] = function()
local first = ""
if doc():has_selection() then
local text = doc():get_text(doc():get_selection())
first = text:match(config.symbol_pattern) or ""
end
replace("Symbol", first, function(text, old, new)
local n = 0
local res = text:gsub(config.symbol_pattern, function(sym)
if old == sym then
n = n + 1
return new
end
end)
return res, n
end)
end,
})
================================================
FILE: data/core/commands/root.lua
================================================
local core = require "core"
local style = require "core.style"
local DocView = require "core.docview"
local command = require "core.command"
local common = require "core.common"
local t = {
["root:close"] = function()
local node = core.root_view:get_active_node()
node:close_active_view(core.root_view.root_node)
end,
["root:switch-to-previous-tab"] = function()
local node = core.root_view:get_active_node()
local idx = node:get_view_idx(core.active_view)
idx = idx - 1
if idx < 1 then idx = #node.views end
node:set_active_view(node.views[idx])
end,
["root:switch-to-next-tab"] = function()
local node = core.root_view:get_active_node()
local idx = node:get_view_idx(core.active_view)
idx = idx + 1
if idx > #node.views then idx = 1 end
node:set_active_view(node.views[idx])
end,
["root:move-tab-left"] = function()
local node = core.root_view:get_active_node()
local idx = node:get_view_idx(core.active_view)
if idx > 1 then
table.remove(node.views, idx)
table.insert(node.views, idx - 1, core.active_view)
end
end,
["root:move-tab-right"] = function()
local node = core.root_view:get_active_node()
local idx = node:get_view_idx(core.active_view)
if idx < #node.views then
table.remove(node.views, idx)
table.insert(node.views, idx + 1, core.active_view)
end
end,
["root:shrink"] = function()
local node = core.root_view:get_active_node()
local parent = node:get_parent_node(core.root_view.root_node)
local n = (parent.a == node) and -0.1 or 0.1
parent.divider = common.clamp(parent.divider + n, 0.1, 0.9)
end,
["root:grow"] = function()
local node = core.root_view:get_active_node()
local parent = node:get_parent_node(core.root_view.root_node)
local n = (parent.a == node) and 0.1 or -0.1
parent.divider = common.clamp(parent.divider + n, 0.1, 0.9)
end,
}
for i = 1, 9 do
t["root:switch-to-tab-" .. i] = function()
local node = core.root_view:get_active_node()
local view = node.views[i]
if view then
node:set_active_view(view)
end
end
end
for _, dir in ipairs { "left", "right", "up", "down" } do
t["root:split-" .. dir] = function()
local node = core.root_view:get_active_node()
local av = node.active_view
node:split(dir)
if av:is(DocView) then
core.root_view:open_doc(av.doc)
end
end
t["root:switch-to-" .. dir] = function()
local node = core.root_view:get_active_node()
local x, y
if dir == "left" or dir == "right" then
y = node.position.y + node.size.y / 2
x = node.position.x + (dir == "left" and -1 or node.size.x + style.divider_size)
else
x = node.position.x + node.size.x / 2
y = node.position.y + (dir == "up" and -1 or node.size.y + style.divider_size)
end
local node = core.root_view.root_node:get_child_overlapping_point(x, y)
if not node:get_locked_size() then
core.set_active_view(node.active_view)
end
end
end
command.add(function()
local node = core.root_view:get_active_node()
return not node:get_locked_size()
end, t)
================================================
FILE: data/core/commandview.lua
================================================
local core = require "core"
local common = require "core.common"
local style = require "core.style"
local Doc = require "core.doc"
local DocView = require "core.docview"
local View = require "core.view"
local SingleLineDoc = Doc:extend()
function SingleLineDoc:insert(line, col, text)
SingleLineDoc.super.insert(self, line, col, text:gsub("\n", ""))
end
local CommandView = DocView:extend()
local max_suggestions = 10
local noop = function() end
local default_state = {
submit = noop,
suggest = noop,
cancel = noop,
}
function CommandView:new()
CommandView.super.new(self, SingleLineDoc())
self.suggestion_idx = 1
self.suggestions = {}
self.suggestions_height = 0
self.last_change_id = 0
self.gutter_width = 0
self.gutter_text_brightness = 0
self.selection_offset = 0
self.state = default_state
self.font = "font"
self.size.y = 0
self.label = ""
end
function CommandView:get_name()
return View.get_name(self)
end
function CommandView:get_line_screen_position()
local x = CommandView.super.get_line_screen_position(self, 1)
local _, y = self:get_content_offset()
local lh = self:get_line_height()
return x, y + (self.size.y - lh) / 2
end
function CommandView:get_scrollable_size()
return 0
end
function CommandView:scroll_to_make_visible()
-- no-op function to disable this functionality
end
function CommandView:get_text()
return self.doc:get_text(1, 1, 1, math.huge)
end
function CommandView:set_text(text, select)
self.doc:remove(1, 1, math.huge, math.huge)
self.doc:text_input(text)
if select then
self.doc:set_selection(math.huge, math.huge, 1, 1)
end
end
function CommandView:move_suggestion_idx(dir)
local n = self.suggestion_idx + dir
self.suggestion_idx = common.clamp(n, 1, #self.suggestions)
self:complete()
self.last_change_id = self.doc:get_change_id()
end
function CommandView:complete()
if #self.suggestions > 0 then
self:set_text(self.suggestions[self.suggestion_idx].text)
end
end
function CommandView:submit()
local suggestion = self.suggestions[self.suggestion_idx]
local text = self:get_text()
local submit = self.state.submit
self:exit(true)
submit(text, suggestion)
end
function CommandView:enter(text, submit, suggest, cancel)
if self.state ~= default_state then
return
end
self.state = {
submit = submit or noop,
suggest = suggest or noop,
cancel = cancel or noop,
}
core.set_active_view(self)
self:update_suggestions()
self.gutter_text_brightness = 100
self.label = text .. ": "
end
function CommandView:exit(submitted, inexplicit)
if core.active_view == self then
core.set_active_view(core.last_active_view)
end
local cancel = self.state.cancel
self.state = default_state
self.doc:reset()
self.suggestions = {}
if not submitted then cancel(not inexplicit) end
end
function CommandView:get_gutter_width()
return self.gutter_width
end
function CommandView:get_suggestion_line_height()
return self:get_font():get_height() + style.padding.y
end
function CommandView:update_suggestions()
local t = self.state.suggest(self:get_text()) or {}
local res = {}
for i, item in ipairs(t) do
if i == max_suggestions then
break
end
if type(item) == "string" then
item = { text = item }
end
res[i] = item
end
self.suggestions = res
self.suggestion_idx = 1
end
function CommandView:update()
CommandView.super.update(self)
if core.active_view ~= self and self.state ~= default_state then
self:exit(false, true)
end
-- update suggestions if text has changed
if self.last_change_id ~= self.doc:get_change_id() then
self:update_suggestions()
self.last_change_id = self.doc:get_change_id()
end
-- update gutter text color brightness
self:move_towards("gutter_text_brightness", 0, 0.1)
-- update gutter width
local dest = self:get_font():get_width(self.label) + style.padding.x
if self.size.y <= 0 then
self.gutter_width = dest
else
self:move_towards("gutter_width", dest)
end
-- update suggestions box height
local lh = self:get_suggestion_line_height()
local dest = #self.suggestions * lh
self:move_towards("suggestions_height", dest)
-- update suggestion cursor offset
local dest = self.suggestion_idx * self:get_suggestion_line_height()
self:move_towards("selection_offset", dest)
-- update size based on whether this is the active_view
local dest = 0
if self == core.active_view then
dest = style.font:get_height() + style.padding.y * 2
end
self:move_towards(self.size, "y", dest)
end
function CommandView:draw_line_highlight()
-- no-op function to disable this functionality
end
function CommandView:draw_line_gutter(idx, x, y)
local yoffset = self:get_line_text_y_offset()
local pos = self.position
local color = common.lerp(style.text, style.accent, self.gutter_text_brightness / 100)
core.push_clip_rect(pos.x, pos.y, self:get_gutter_width(), self.size.y)
x = x + style.padding.x
renderer.draw_text(self:get_font(), self.label, x, y + yoffset, color)
core.pop_clip_rect()
end
local function draw_suggestions_box(self)
local lh = self:get_suggestion_line_height()
local dh = style.divider_size
local x, _ = self:get_line_screen_position()
local h = math.ceil(self.suggestions_height)
local rx, ry, rw, rh = self.position.x, self.position.y - h - dh, self.size.x, h
-- draw suggestions background
if #self.suggestions > 0 then
renderer.draw_rect(rx, ry, rw, rh, style.background3)
renderer.draw_rect(rx, ry - dh, rw, dh, style.divider)
local y = self.position.y - self.selection_offset - dh
renderer.draw_rect(rx, y, rw, lh, style.line_highlight)
end
-- draw suggestion text
core.push_clip_rect(rx, ry, rw, rh)
for i, item in ipairs(self.suggestions) do
local color = (i == self.suggestion_idx) and style.accent or style.text
local y = self.position.y - i * lh - dh
common.draw_text(self:get_font(), color, item.text, nil, x, y, 0, lh)
if item.info then
local w = self.size.x - x - style.padding.x
common.draw_text(self:get_font(), style.dim, item.info, "right", x, y, w, lh)
end
end
core.pop_clip_rect()
end
function CommandView:draw()
CommandView.super.draw(self)
core.root_view:defer_draw(draw_suggestions_box, self)
end
return CommandView
================================================
FILE: data/core/common.lua
================================================
local common = {}
function common.is_utf8_cont(char)
local byte = char:byte()
return byte >= 0x80 and byte < 0xc0
end
function common.utf8_chars(text)
return text:gmatch("[\0-\x7f\xc2-\xf4][\x80-\xbf]*")
end
function common.clamp(n, lo, hi)
return math.max(math.min(n, hi), lo)
end
function common.round(n)
return n >= 0 and math.floor(n + 0.5) or math.ceil(n - 0.5)
end
function common.lerp(a, b, t)
if type(a) ~= "table" then
return a + (b - a) * t
end
local res = {}
for k, v in pairs(b) do
res[k] = common.lerp(a[k], v, t)
end
return res
end
function common.color(str)
local r, g, b, a = str:match("#(%x%x)(%x%x)(%x%x)")
if r then
r = tonumber(r, 16)
g = tonumber(g, 16)
b = tonumber(b, 16)
a = 1
elseif str:match("rgba?%s*%([%d%s%.,]+%)") then
local f = str:gmatch("[%d.]+")
r = (f() or 0)
g = (f() or 0)
b = (f() or 0)
a = f() or 1
else
error(string.format("bad color string '%s'", str))
end
return r, g, b, a * 0xff
end
local function compare_score(a, b)
return a.score > b.score
end
local function fuzzy_match_items(items, needle)
local res = {}
for _, item in ipairs(items) do
local score = system.fuzzy_match(tostring(item), needle)
if score then
table.insert(res, { text = item, score = score })
end
end
table.sort(res, compare_score)
for i, item in ipairs(res) do
res[i] = item.text
end
return res
end
function common.fuzzy_match(haystack, needle)
if type(haystack) == "table" then
return fuzzy_match_items(haystack, needle)
end
return system.fuzzy_match(haystack, needle)
end
function common.path_suggest(text)
local path, name = text:match("^(.-)([^/\\]*)$")
local files = system.list_dir(path == "" and "." or path) or {}
local res = {}
for _, file in ipairs(files) do
file = path .. file
local info = system.get_file_info(file)
if info then
if info.type == "dir" then
file = file .. PATHSEP
end
if file:lower():find(text:lower(), nil, true) == 1 then
table.insert(res, file)
end
end
end
return res
end
function common.match_pattern(text, pattern, ...)
if type(pattern) == "string" then
return text:find(pattern, ...)
end
for _, p in ipairs(pattern) do
local s, e = common.match_pattern(text, p, ...)
if s then return s, e end
end
return false
end
function common.draw_text(font, color, text, align, x,y,w,h)
local tw, th = font:get_width(text), font:get_height(text)
if align == "center" then
x = x + (w - tw) / 2
elseif align == "right" then
x = x + (w - tw)
end
y = common.round(y + (h - th) / 2)
return renderer.draw_text(font, text, x, y, color), y + th
end
function common.bench(name, fn, ...)
local start = system.get_time()
local res = fn(...)
local t = system.get_time() - start
local ms = t * 1000
local per = (t / (1 / 60)) * 100
print(string.format("*** %-16s : %8.3fms %6.2f%%", name, ms, per))
return res
end
return common
================================================
FILE: data/core/config.lua
================================================
local config = {}
config.project_scan_rate = 5
config.fps = 60
config.max_log_items = 80
config.message_timeout = 3
config.mouse_wheel_scroll = 50 * SCALE
config.file_size_limit = 10
config.ignore_files = "^%."
config.symbol_pattern = "[%a_][%w_]*"
config.non_word_chars = " \t\n/\\()\"':,.;<>~!@#$%^&*|+=[]{}`?-"
config.undo_merge_timeout = 0.3
config.max_undos = 10000
config.highlight_current_line = true
config.line_height = 1.2
config.indent_size = 2
config.tab_type = "soft"
config.line_limit = 80
return config
================================================
FILE: data/core/doc/highlighter.lua
================================================
local core = require "core"
local config = require "core.config"
local tokenizer = require "core.tokenizer"
local Object = require "core.object"
local Highlighter = Object:extend()
function Highlighter:new(doc)
self.doc = doc
self:reset()
-- init incremental syntax highlighting
core.add_thread(function()
while true do
if self.first_invalid_line > self.max_wanted_line then
self.max_wanted_line = 0
coroutine.yield(1 / config.fps)
else
local max = math.min(self.first_invalid_line + 40, self.max_wanted_line)
for i = self.first_invalid_line, max do
local state = (i > 1) and self.lines[i - 1].state
local line = self.lines[i]
if not (line and line.init_state == state) then
self.lines[i] = self:tokenize_line(i, state)
end
end
self.first_invalid_line = max + 1
core.redraw = true
coroutine.yield()
end
end
end, self)
end
function Highlighter:reset()
self.lines = {}
self.first_invalid_line = 1
self.max_wanted_line = 0
end
function Highlighter:invalidate(idx)
self.first_invalid_line = math.min(self.first_invalid_line, idx)
self.max_wanted_line = math.min(self.max_wanted_line, #self.doc.lines)
end
function Highlighter:tokenize_line(idx, state)
local res = {}
res.init_state = state
res.text = self.doc.lines[idx]
res.tokens, res.state = tokenizer.tokenize(self.doc.syntax, res.text, state)
return res
end
function Highlighter:get_line(idx)
local line = self.lines[idx]
if not line or line.text ~= self.doc.lines[idx] then
local prev = self.lines[idx - 1]
line = self:tokenize_line(idx, prev and prev.state)
self.lines[idx] = line
end
self.max_wanted_line = math.max(self.max_wanted_line, idx)
return line
end
function Highlighter:each_token(idx)
return tokenizer.each_token(self:get_line(idx).tokens)
end
return Highlighter
================================================
FILE: data/core/doc/init.lua
================================================
local Object = require "core.object"
local Highlighter = require "core.doc.highlighter"
local syntax = require "core.syntax"
local config = require "core.config"
local common = require "core.common"
local Doc = Object:extend()
local function split_lines(text)
local res = {}
for line in (text .. "\n"):gmatch("(.-)\n") do
table.insert(res, line)
end
return res
end
local function splice(t, at, remove, insert)
insert = insert or {}
local offset = #insert - remove
local old_len = #t
if offset < 0 then
for i = at - offset, old_len - offset do
t[i + offset] = t[i]
end
elseif offset > 0 then
for i = old_len, at, -1 do
t[i + offset] = t[i]
end
end
for i, item in ipairs(insert) do
t[at + i - 1] = item
end
end
function Doc:new(filename)
self:reset()
if filename then
self:load(filename)
end
end
function Doc:reset()
self.lines = { "\n" }
self.selection = { a = { line=1, col=1 }, b = { line=1, col=1 } }
self.undo_stack = { idx = 1 }
self.redo_stack = { idx = 1 }
self.clean_change_id = 1
self.highlighter = Highlighter(self)
self:reset_syntax()
end
function Doc:reset_syntax()
local header = self:get_text(1, 1, self:position_offset(1, 1, 128))
local syn = syntax.get(self.filename or "", header)
if self.syntax ~= syn then
self.syntax = syn
self.highlighter:reset()
end
end
function Doc:load(filename)
local fp = assert( io.open(filename, "rb") )
self:reset()
self.filename = filename
self.lines = {}
for line in fp:lines() do
if line:byte(-1) == 13 then
line = line:sub(1, -2)
self.crlf = true
end
table.insert(self.lines, line .. "\n")
end
if #self.lines == 0 then
table.insert(self.lines, "\n")
end
fp:close()
self:reset_syntax()
end
function Doc:save(filename)
filename = filename or assert(self.filename, "no filename set to default to")
local fp = assert( io.open(filename, "wb") )
for _, line in ipairs(self.lines) do
if self.crlf then line = line:gsub("\n", "\r\n") end
fp:write(line)
end
fp:close()
self.filename = filename or self.filename
self:reset_syntax()
self:clean()
end
function Doc:get_name()
return self.filename or "unsaved"
end
function Doc:is_dirty()
return self.clean_change_id ~= self:get_change_id()
end
function Doc:clean()
self.clean_change_id = self:get_change_id()
end
function Doc:get_change_id()
return self.undo_stack.idx
end
function Doc:set_selection(line1, col1, line2, col2, swap)
assert(not line2 == not col2, "expected 2 or 4 arguments")
if swap then line1, col1, line2, col2 = line2, col2, line1, col1 end
line1, col1 = self:sanitize_position(line1, col1)
line2, col2 = self:sanitize_position(line2 or line1, col2 or col1)
self.selection.a.line, self.selection.a.col = line1, col1
self.selection.b.line, self.selection.b.col = line2, col2
end
local function sort_positions(line1, col1, line2, col2)
if line1 > line2
or line1 == line2 and col1 > col2 then
return line2, col2, line1, col1, true
end
return line1, col1, line2, col2, false
end
function Doc:get_selection(sort)
local a, b = self.selection.a, self.selection.b
if sort then
return sort_positions(a.line, a.col, b.line, b.col)
end
return a.line, a.col, b.line, b.col
end
function Doc:has_selection()
local a, b = self.selection.a, self.selection.b
return not (a.line == b.line and a.col == b.col)
end
function Doc:sanitize_selection()
self:set_selection(self:get_selection())
end
function Doc:sanitize_position(line, col)
line = common.clamp(line, 1, #self.lines)
col = common.clamp(col, 1, #self.lines[line])
return line, col
end
local function position_offset_func(self, line, col, fn, ...)
line, col = self:sanitize_position(line, col)
return fn(self, line, col, ...)
end
local function position_offset_byte(self, line, col, offset)
line, col = self:sanitize_position(line, col)
col = col + offset
while line > 1 and col < 1 do
line = line - 1
col = col + #self.lines[line]
end
while line < #self.lines and col > #self.lines[line] do
col = col - #self.lines[line]
line = line + 1
end
return self:sanitize_position(line, col)
end
local function position_offset_linecol(self, line, col, lineoffset, coloffset)
return self:sanitize_position(line + lineoffset, col + coloffset)
end
function Doc:position_offset(line, col, ...)
if type(...) ~= "number" then
return position_offset_func(self, line, col, ...)
elseif select("#", ...) == 1 then
return position_offset_byte(self, line, col, ...)
elseif select("#", ...) == 2 then
return position_offset_linecol(self, line, col, ...)
else
error("bad number of arguments")
end
end
function Doc:get_text(line1, col1, line2, col2)
line1, col1 = self:sanitize_position(line1, col1)
line2, col2 = self:sanitize_position(line2, col2)
line1, col1, line2, col2 = sort_positions(line1, col1, line2, col2)
if line1 == line2 then
return self.lines[line1]:sub(col1, col2 - 1)
end
local lines = { self.lines[line1]:sub(col1) }
for i = line1 + 1, line2 - 1 do
table.insert(lines, self.lines[i])
end
table.insert(lines, self.lines[line2]:sub(1, col2 - 1))
return table.concat(lines)
end
function Doc:get_char(line, col)
line, col = self:sanitize_position(line, col)
return self.lines[line]:sub(col, col)
end
local function push_undo(undo_stack, time, type, ...)
undo_stack[undo_stack.idx] = { type = type, time = time, ... }
undo_stack[undo_stack.idx - config.max_undos] = nil
undo_stack.idx = undo_stack.idx + 1
end
local function pop_undo(self, undo_stack, redo_stack)
-- pop command
local cmd = undo_stack[undo_stack.idx - 1]
if not cmd then return end
undo_stack.idx = undo_stack.idx - 1
-- handle command
if cmd.type == "insert" then
local line, col, text = table.unpack(cmd)
self:raw_insert(line, col, text, redo_stack, cmd.time)
elseif cmd.type == "remove" then
local line1, col1, line2, col2 = table.unpack(cmd)
self:raw_remove(line1, col1, line2, col2, redo_stack, cmd.time)
elseif cmd.type == "selection" then
self.selection.a.line, self.selection.a.col = cmd[1], cmd[2]
self.selection.b.line, self.selection.b.col = cmd[3], cmd[4]
end
-- if next undo command is within the merge timeout then treat as a single
-- command and continue to execute it
local next = undo_stack[undo_stack.idx - 1]
if next and math.abs(cmd.time - next.time) < config.undo_merge_timeout then
return pop_undo(self, undo_stack, redo_stack)
end
end
function Doc:raw_insert(line, col, text, undo_stack, time)
-- split text into lines and merge with line at insertion point
local lines = split_lines(text)
local before = self.lines[line]:sub(1, col - 1)
local after = self.lines[line]:sub(col)
for i = 1, #lines - 1 do
lines[i] = lines[i] .. "\n"
end
lines[1] = before .. lines[1]
lines[#lines] = lines[#lines] .. after
-- splice lines into line array
splice(self.lines, line, 1, lines)
-- push undo
local line2, col2 = self:position_offset(line, col, #text)
push_undo(undo_stack, time, "selection", self:get_selection())
push_undo(undo_stack, time, "remove", line, col, line2, col2)
-- update highlighter and assure selection is in bounds
self.highlighter:invalidate(line)
self:sanitize_selection()
end
function Doc:raw_remove(line1, col1, line2, col2, undo_stack, time)
-- push undo
local text = self:get_text(line1, col1, line2, col2)
push_undo(undo_stack, time, "selection", self:get_selection())
push_undo(undo_stack, time, "insert", line1, col1, text)
-- get line content before/after removed text
local before = self.lines[line1]:sub(1, col1 - 1)
local after = self.lines[line2]:sub(col2)
-- splice line into line array
splice(self.lines, line1, line2 - line1 + 1, { before .. after })
-- update highlighter and assure selection is in bounds
self.highlighter:invalidate(line1)
self:sanitize_selection()
end
function Doc:insert(line, col, text)
self.redo_stack = { idx = 1 }
line, col = self:sanitize_position(line, col)
self:raw_insert(line, col, text, self.undo_stack, system.get_time())
end
function Doc:remove(line1, col1, line2, col2)
self.redo_stack = { idx = 1 }
line1, col1 = self:sanitize_position(line1, col1)
line2, col2 = self:sanitize_position(line2, col2)
line1, col1, line2, col2 = sort_positions(line1, col1, line2, col2)
self:raw_remove(line1, col1, line2, col2, self.undo_stack, system.get_time())
end
function Doc:undo()
pop_undo(self, self.undo_stack, self.redo_stack)
end
function Doc:redo()
pop_undo(self, self.redo_stack, self.undo_stack)
end
function Doc:text_input(text)
if self:has_selection() then
self:delete_to()
end
local line, col = self:get_selection()
self:insert(line, col, text)
self:move_to(#text)
end
function Doc:replace(fn)
local line1, col1, line2, col2, swap
local had_selection = self:has_selection()
if had_selection then
line1, col1, line2, col2, swap = self:get_selection(true)
else
line1, col1, line2, col2 = 1, 1, #self.lines, #self.lines[#self.lines]
end
local old_text = self:get_text(line1, col1, line2, col2)
local new_text, n = fn(old_text)
if old_text ~= new_text then
self:insert(line2, col2, new_text)
self:remove(line1, col1, line2, col2)
if had_selection then
line2, col2 = self:position_offset(line1, col1, #new_text)
self:set_selection(line1, col1, line2, col2, swap)
end
end
return n
end
function Doc:delete_to(...)
local line, col = self:get_selection(true)
if self:has_selection() then
self:remove(self:get_selection())
else
local line2, col2 = self:position_offset(line, col, ...)
self:remove(line, col, line2, col2)
line, col = sort_positions(line, col, line2, col2)
end
self:set_selection(line, col)
end
function Doc:move_to(...)
local line, col = self:get_selection()
self:set_selection(self:position_offset(line, col, ...))
end
function Doc:select_to(...)
local line, col, line2, col2 = self:get_selection()
line, col = self:position_offset(line, col, ...)
self:set_selection(line, col, line2, col2)
end
return Doc
================================================
FILE: data/core/doc/search.lua
================================================
local search = {}
local default_opt = {}
local function pattern_lower(str)
if str:sub(1, 1) == "%" then
return str
end
return str:lower()
end
local function init_args(doc, line, col, text, opt)
opt = opt or default_opt
line, col = doc:sanitize_position(line, col)
if opt.no_case then
if opt.pattern then
text = text:gsub("%%?.", pattern_lower)
else
text = text:lower()
end
end
return doc, line, col, text, opt
end
function search.find(doc, line, col, text, opt)
doc, line, col, text, opt = init_args(doc, line, col, text, opt)
for line = line, #doc.lines do
local line_text = doc.lines[line]
if opt.no_case then
line_text = line_text:lower()
end
local s, e = line_text:find(text, col, not opt.pattern)
if s then
return line, s, line, e + 1
end
col = 1
end
if opt.wrap then
opt = { no_case = opt.no_case, pattern = opt.pattern }
return search.find(doc, 1, 1, text, opt)
end
end
return search
================================================
FILE: data/core/doc/translate.lua
================================================
local common = require "core.common"
local config = require "core.config"
-- functions for translating a Doc position to another position these functions
-- can be passed to Doc:move_to|select_to|delete_to()
local translate = {}
local function is_non_word(char)
return config.non_word_chars:find(char, nil, true)
end
function translate.previous_char(doc, line, col)
repeat
line, col = doc:position_offset(line, col, -1)
until not common.is_utf8_cont(doc:get_char(line, col))
return line, col
end
function translate.next_char(doc, line, col)
repeat
line, col = doc:position_offset(line, col, 1)
until not common.is_utf8_cont(doc:get_char(line, col))
return line, col
end
function translate.previous_word_start(doc, line, col)
local prev
while line > 1 or col > 1 do
local l, c = doc:position_offset(line, col, -1)
local char = doc:get_char(l, c)
if prev and prev ~= char or not is_non_word(char) then
break
end
prev, line, col = char, l, c
end
return translate.start_of_word(doc, line, col)
end
function translate.next_word_end(doc, line, col)
local prev
local end_line, end_col = translate.end_of_doc(doc, line, col)
while line < end_line or col < end_col do
local char = doc:get_char(line, col)
if prev and prev ~= char or not is_non_word(char) then
break
end
line, col = doc:position_offset(line, col, 1)
prev = char
end
return translate.end_of_word(doc, line, col)
end
function translate.start_of_word(doc, line, col)
while true do
local line2, col2 = doc:position_offset(line, col, -1)
local char = doc:get_char(line2, col2)
if is_non_word(char)
or line == line2 and col == col2 then
break
end
line, col = line2, col2
end
return line, col
end
function translate.end_of_word(doc, line, col)
while true do
local line2, col2 = doc:position_offset(line, col, 1)
local char = doc:get_char(line, col)
if is_non_word(char)
or line == line2 and col == col2 then
break
end
line, col = line2, col2
end
return line, col
end
function translate.previous_block_start(doc, line, col)
while true do
line = line - 1
if line <= 1 then
return 1, 1
end
if doc.lines[line-1]:find("^%s*$")
and not doc.lines[line]:find("^%s*$") then
return line, (doc.lines[line]:find("%S"))
end
end
end
function translate.next_block_end(doc, line, col)
while true do
if line >= #doc.lines then
return #doc.lines, 1
end
if doc.lines[line+1]:find("^%s*$")
and not doc.lines[line]:find("^%s*$") then
return line+1, #doc.lines[line+1]
end
line = line + 1
end
end
function translate.start_of_line(doc, line, col)
return line, 1
end
function translate.end_of_line(doc, line, col)
return line, math.huge
end
function translate.start_of_doc(doc, line, col)
return 1, 1
end
function translate.end_of_doc(doc, line, col)
return #doc.lines, #doc.lines[#doc.lines]
end
return translate
================================================
FILE: data/core/docview.lua
================================================
local core = require "core"
local common = require "core.common"
local config = require "core.config"
local style = require "core.style"
local keymap = require "core.keymap"
local translate = require "core.doc.translate"
local View = require "core.view"
local DocView = View:extend()
local function move_to_line_offset(dv, line, col, offset)
local xo = dv.last_x_offset
if xo.line ~= line or xo.col ~= col then
xo.offset = dv:get_col_x_offset(line, col)
end
xo.line = line + offset
xo.col = dv:get_x_offset_col(line + offset, xo.offset)
return xo.line, xo.col
end
DocView.translate = {
["previous_page"] = function(doc, line, col, dv)
local min, max = dv:get_visible_line_range()
return line - (max - min), 1
end,
["next_page"] = function(doc, line, col, dv)
local min, max = dv:get_visible_line_range()
return line + (max - min), 1
end,
["previous_line"] = function(doc, line, col, dv)
if line == 1 then
return 1, 1
end
return move_to_line_offset(dv, line, col, -1)
end,
["next_line"] = function(doc, line, col, dv)
if line == #doc.lines then
return #doc.lines, math.huge
end
return move_to_line_offset(dv, line, col, 1)
end,
}
local blink_period = 0.8
function DocView:new(doc)
DocView.super.new(self)
self.cursor = "ibeam"
self.scrollable = true
self.doc = assert(doc)
self.font = "code_font"
self.last_x_offset = {}
self.blink_timer = 0
end
function DocView:try_close(do_close)
if self.doc:is_dirty()
and #core.get_views_referencing_doc(self.doc) == 1 then
core.command_view:enter("Unsaved Changes; Confirm Close", function(_, item)
if item.text:match("^[cC]") then
do_close()
elseif item.text:match("^[sS]") then
self.doc:save()
do_close()
end
end, function(text)
local items = {}
if not text:find("^[^cC]") then table.insert(items, "Close Without Saving") end
if not text:find("^[^sS]") then table.insert(items, "Save And Close") end
return items
end)
else
do_close()
end
end
function DocView:get_name()
local post = self.doc:is_dirty() and "*" or ""
local name = self.doc:get_name()
return name:match("[^/%\\]*$") .. post
end
function DocView:get_scrollable_size()
return self:get_line_height() * (#self.doc.lines - 1) + self.size.y
end
function DocView:get_font()
return style[self.font]
end
function DocView:get_line_height()
return math.floor(self:get_font():get_height() * config.line_height)
end
function DocView:get_gutter_width()
return self:get_font():get_width(#self.doc.lines) + style.padding.x * 2
end
function DocView:get_line_screen_position(idx)
local x, y = self:get_content_offset()
local lh = self:get_line_height()
local gw = self:get_gutter_width()
return x + gw, y + (idx-1) * lh + style.padding.y
end
function DocView:get_line_text_y_offset()
local lh = self:get_line_height()
local th = self:get_font():get_height()
return (lh - th) / 2
end
function DocView:get_visible_line_range()
local x, y, x2, y2 = self:get_content_bounds()
local lh = self:get_line_height()
local minline = math.max(1, math.floor(y / lh))
local maxline = math.min(#self.doc.lines, math.floor(y2 / lh) + 1)
return minline, maxline
end
function DocView:get_col_x_offset(line, col)
local text = self.doc.lines[line]
if not text then return 0 end
return self:get_font():get_width(text:sub(1, col - 1))
end
function DocView:get_x_offset_col(line, x)
local text = self.doc.lines[line]
local xoffset, last_i, i = 0, 1, 1
for char in common.utf8_chars(text) do
local w = self:get_font():get_width(char)
if xoffset >= x then
return (xoffset - x > w / 2) and last_i or i
end
xoffset = xoffset + w
last_i = i
i = i + #char
end
return #text
end
function DocView:resolve_screen_position(x, y)
local ox, oy = self:get_line_screen_position(1)
local line = math.floor((y - oy) / self:get_line_height()) + 1
line = common.clamp(line, 1, #self.doc.lines)
local col = self:get_x_offset_col(line, x - ox)
return line, col
end
function DocView:scroll_to_line(line, ignore_if_visible, instant)
local min, max = self:get_visible_line_range()
if not (ignore_if_visible and line > min and line < max) then
local lh = self:get_line_height()
self.scroll.to.y = math.max(0, lh * (line - 1) - self.size.y / 2)
if instant then
self.scroll.y = self.scroll.to.y
end
end
end
function DocView:scroll_to_make_visible(line, col)
local min = self:get_line_height() * (line - 1)
local max = self:get_line_height() * (line + 2) - self.size.y
self.scroll.to.y = math.min(self.scroll.to.y, min)
self.scroll.to.y = math.max(self.scroll.to.y, max)
local gw = self:get_gutter_width()
local xoffset = self:get_col_x_offset(line, col)
local max = xoffset - self.size.x + gw + self.size.x / 5
self.scroll.to.x = math.max(0, max)
end
local function mouse_selection(doc, clicks, line1, col1, line2, col2)
local swap = line2 < line1 or line2 == line1 and col2 <= col1
if swap then
line1, col1, line2, col2 = line2, col2, line1, col1
end
if clicks == 2 then
line1, col1 = translate.start_of_word(doc, line1, col1)
line2, col2 = translate.end_of_word(doc, line2, col2)
elseif clicks == 3 then
if line2 == #doc.lines and doc.lines[#doc.lines] ~= "\n" then
doc:insert(math.huge, math.huge, "\n")
end
line1, col1, line2, col2 = line1, 1, line2 + 1, 1
end
if swap then
return line2, col2, line1, col1
end
return line1, col1, line2, col2
end
function DocView:on_mouse_pressed(button, x, y, clicks)
local caught = DocView.super.on_mouse_pressed(self, button, x, y, clicks)
if caught then
return
end
if keymap.modkeys["shift"] then
if clicks == 1 then
local line1, col1 = select(3, self.doc:get_selection())
local line2, col2 = self:resolve_screen_position(x, y)
self.doc:set_selection(line2, col2, line1, col1)
end
else
local line, col = self:resolve_screen_position(x, y)
self.doc:set_selection(mouse_selection(self.doc, clicks, line, col, line, col))
self.mouse_selecting = { line, col, clicks = clicks }
end
self.blink_timer = 0
end
function DocView:on_mouse_moved(x, y, ...)
DocView.super.on_mouse_moved(self, x, y, ...)
if self:scrollbar_overlaps_point(x, y) or self.dragging_scrollbar then
self.cursor = "arrow"
else
self.cursor = "ibeam"
end
if self.mouse_selecting then
local l1, c1 = self:resolve_screen_position(x, y)
local l2, c2 = table.unpack(self.mouse_selecting)
local clicks = self.mouse_selecting.clicks
self.doc:set_selection(mouse_selection(self.doc, clicks, l1, c1, l2, c2))
end
end
function DocView:on_mouse_released(button)
DocView.super.on_mouse_released(self, button)
self.mouse_selecting = nil
end
function DocView:on_text_input(text)
self.doc:text_input(text)
end
function DocView:update()
-- scroll to make caret visible and reset blink timer if it moved
local line, col = self.doc:get_selection()
if (line ~= self.last_line or col ~= self.last_col) and self.size.x > 0 then
if core.active_view == self then
self:scroll_to_make_visible(line, col)
end
self.blink_timer = 0
self.last_line, self.last_col = line, col
end
-- update blink timer
if self == core.active_view and not self.mouse_selecting then
local n = blink_period / 2
local prev = self.blink_timer
self.blink_timer = (self.blink_timer + 1 / config.fps) % blink_period
if (self.blink_timer > n) ~= (prev > n) then
core.redraw = true
end
end
DocView.super.update(self)
end
function DocView:draw_line_highlight(x, y)
local lh = self:get_line_height()
renderer.draw_rect(x, y, self.size.x, lh, style.line_highlight)
end
function DocView:draw_line_text(idx, x, y)
local tx, ty = x, y + self:get_line_text_y_offset()
local font = self:get_font()
for _, type, text in self.doc.highlighter:each_token(idx) do
local color = style.syntax[type]
tx = renderer.draw_text(font, text, tx, ty, color)
end
end
function DocView:draw_line_body(idx, x, y)
local line, col = self.doc:get_selection()
-- draw selection if it overlaps this line
local line1, col1, line2, col2 = self.doc:get_selection(true)
if idx >= line1 and idx <= line2 then
local text = self.doc.lines[idx]
if line1 ~= idx then col1 = 1 end
if line2 ~= idx then col2 = #text + 1 end
local x1 = x + self:get_col_x_offset(idx, col1)
local x2 = x + self:get_col_x_offset(idx, col2)
local lh = self:get_line_height()
renderer.draw_rect(x1, y, x2 - x1, lh, style.selection)
end
-- draw line highlight if caret is on this line
if config.highlight_current_line and not self.doc:has_selection()
and line == idx and core.active_view == self then
self:draw_line_highlight(x + self.scroll.x, y)
end
-- draw line's text
self:draw_line_text(idx, x, y)
-- draw caret if it overlaps this line
if line == idx and core.active_view == self
and self.blink_timer < blink_period / 2
and system.window_has_focus() then
local lh = self:get_line_height()
local x1 = x + self:get_col_x_offset(line, col)
renderer.draw_rect(x1, y, style.caret_width, lh, style.caret)
end
end
function DocView:draw_line_gutter(idx, x, y)
local color = style.line_number
local line1, _, line2, _ = self.doc:get_selection(true)
if idx >= line1 and idx <= line2 then
color = style.line_number2
end
local yoffset = self:get_line_text_y_offset()
x = x + style.padding.x
renderer.draw_text(self:get_font(), idx, x, y + yoffset, color)
end
function DocView:draw()
self:draw_background(style.background)
local font = self:get_font()
font:set_tab_width(font:get_width(" ") * config.indent_size)
local minline, maxline = self:get_visible_line_range()
local lh = self:get_line_height()
local _, y = self:get_line_screen_position(minline)
local x = self.position.x
for i = minline, maxline do
self:draw_line_gutter(i, x, y)
y = y + lh
end
local x, y = self:get_line_screen_position(minline)
local gw = self:get_gutter_width()
local pos = self.position
core.push_clip_rect(pos.x + gw, pos.y, self.size.x, self.size.y)
for i = minline, maxline do
self:draw_line_body(i, x, y)
y = y + lh
end
core.pop_clip_rect()
self:draw_scrollbar()
end
return DocView
================================================
FILE: data/core/init.lua
================================================
require "core.strict"
local common = require "core.common"
local config = require "core.config"
local style = require "core.style"
local command
local keymap
local RootView
local StatusView
local CommandView
local Doc
local core = {}
local function project_scan_thread()
local function diff_files(a, b)
if #a ~= #b then return true end
for i, v in ipairs(a) do
if b[i].filename ~= v.filename
or b[i].modified ~= v.modified then
return true
end
end
end
local function compare_file(a, b)
return a.filename < b.filename
end
local function get_files(path, t)
coroutine.yield()
t = t or {}
local size_limit = config.file_size_limit * 10e5
local all = system.list_dir(path) or {}
local dirs, files = {}, {}
for _, file in ipairs(all) do
if not common.match_pattern(file, config.ignore_files) then
local file = (path ~= "." and path .. PATHSEP or "") .. file
local info = system.get_file_info(file)
if info and info.size < size_limit then
info.filename = file
table.insert(info.type == "dir" and dirs or files, info)
end
end
end
table.sort(dirs, compare_file)
for _, f in ipairs(dirs) do
table.insert(t, f)
get_files(f.filename, t)
end
table.sort(files, compare_file)
for _, f in ipairs(files) do
table.insert(t, f)
end
return t
end
while true do
-- get project files and replace previous table if the new table is
-- different
local t = get_files(".")
if diff_files(core.project_files, t) then
core.project_files = t
core.redraw = true
end
-- wait for next scan
coroutine.yield(config.project_scan_rate)
end
end
function core.init()
command = require "core.command"
keymap = require "core.keymap"
RootView = require "core.rootview"
StatusView = require "core.statusview"
CommandView = require "core.commandview"
Doc = require "core.doc"
local project_dir = EXEDIR
local files = {}
for i = 2, #ARGS do
local info = system.get_file_info(ARGS[i]) or {}
if info.type == "file" then
table.insert(files, system.absolute_path(ARGS[i]))
elseif info.type == "dir" then
project_dir = ARGS[i]
end
end
system.chdir(project_dir)
core.frame_start = 0
core.clip_rect_stack = {{ 0,0,0,0 }}
core.log_items = {}
core.docs = {}
core.threads = setmetatable({}, { __mode = "k" })
core.project_files = {}
core.redraw = true
core.root_view = RootView()
core.command_view = CommandView()
core.status_view = StatusView()
core.root_view.root_node:split("down", core.command_view, true)
core.root_view.root_node.b:split("down", core.status_view, true)
core.add_thread(project_scan_thread)
command.add_defaults()
local got_plugin_error = not core.load_plugins()
local got_user_error = not core.try(require, "user")
local got_project_error = not core.load_project_module()
for _, filename in ipairs(files) do
core.root_view:open_doc(core.open_doc(filename))
end
if got_plugin_error or got_user_error or got_project_error then
command.perform("core:open-log")
end
end
local temp_uid = (system.get_time() * 1000) % 0xffffffff
local temp_file_prefix = string.format(".lite_temp_%08x", temp_uid)
local temp_file_counter = 0
local function delete_temp_files()
for _, filename in ipairs(system.list_dir(EXEDIR)) do
if filename:find(temp_file_prefix, 1, true) == 1 then
os.remove(EXEDIR .. PATHSEP .. filename)
end
end
end
function core.temp_filename(ext)
temp_file_counter = temp_file_counter + 1
return EXEDIR .. PATHSEP .. temp_file_prefix
.. string.format("%06x", temp_file_counter) .. (ext or "")
end
function core.quit(force)
if force then
delete_temp_files()
os.exit()
end
local dirty_count = 0
local dirty_name
for _, doc in ipairs(core.docs) do
if doc:is_dirty() then
dirty_count = dirty_count + 1
dirty_name = doc:get_name()
end
end
if dirty_count > 0 then
local text
if dirty_count == 1 then
text = string.format("\"%s\" has unsaved changes. Quit anyway?", dirty_name)
else
text = string.format("%d docs have unsaved changes. Quit anyway?", dirty_count)
end
local confirm = system.show_confirm_dialog("Unsaved Changes", text)
if not confirm then return end
end
core.quit(true)
end
function core.load_plugins()
local no_errors = true
local files = system.list_dir(EXEDIR .. "/data/plugins")
for _, filename in ipairs(files) do
local modname = "plugins." .. filename:gsub(".lua$", "")
local ok = core.try(require, modname)
if ok then
core.log_quiet("Loaded plugin %q", modname)
else
no_errors = false
end
end
return no_errors
end
function core.load_project_module()
local filename = ".lite_project.lua"
if system.get_file_info(filename) then
return core.try(function()
local fn, err = loadfile(filename)
if not fn then error("Error when loading project module:\n\t" .. err) end
fn()
core.log_quiet("Loaded project module")
end)
end
return true
end
function core.reload_module(name)
local old = package.loaded[name]
package.loaded[name] = nil
local new = require(name)
if type(old) == "table" then
for k, v in pairs(new) do old[k] = v end
package.loaded[name] = old
end
end
function core.set_active_view(view)
assert(view, "Tried to set active view to nil")
if view ~= core.active_view then
core.last_active_view = core.active_view
core.active_view = view
end
end
function core.add_thread(f, weak_ref)
local key = weak_ref or #core.threads + 1
local fn = function() return core.try(f) end
core.threads[key] = { cr = coroutine.create(fn), wake = 0 }
end
function core.push_clip_rect(x, y, w, h)
local x2, y2, w2, h2 = table.unpack(core.clip_rect_stack[#core.clip_rect_stack])
local r, b, r2, b2 = x+w, y+h, x2+w2, y2+h2
x, y = math.max(x, x2), math.max(y, y2)
b, r = math.min(b, b2), math.min(r, r2)
w, h = r-x, b-y
table.insert(core.clip_rect_stack, { x, y, w, h })
renderer.set_clip_rect(x, y, w, h)
end
function core.pop_clip_rect()
table.remove(core.clip_rect_stack)
local x, y, w, h = table.unpack(core.clip_rect_stack[#core.clip_rect_stack])
renderer.set_clip_rect(x, y, w, h)
end
function core.open_doc(filename)
if filename then
-- try to find existing doc for filename
local abs_filename = system.absolute_path(filename)
for _, doc in ipairs(core.docs) do
if doc.filename
and abs_filename == system.absolute_path(doc.filename) then
return doc
end
end
end
-- no existing doc for filename; create new
local doc = Doc(filename)
table.insert(core.docs, doc)
core.log_quiet(filename and "Opened doc \"%s\"" or "Opened new doc", filename)
return doc
end
function core.get_views_referencing_doc(doc)
local res = {}
local views = core.root_view.root_node:get_children()
for _, view in ipairs(views) do
if view.doc == doc then table.insert(res, view) end
end
return res
end
local function log(icon, icon_color, fmt, ...)
local text = string.format(fmt, ...)
if icon then
core.status_view:show_message(icon, icon_color, text)
end
local info = debug.getinfo(2, "Sl")
local at = string.format("%s:%d", info.short_src, info.currentline)
local item = { text = text, time = os.time(), at = at }
table.insert(core.log_items, item)
if #core.log_items > config.max_log_items then
table.remove(core.log_items, 1)
end
return item
end
function core.log(...)
return log("i", style.text, ...)
end
function core.log_quiet(...)
return log(nil, nil, ...)
end
function core.error(...)
return log("!", style.accent, ...)
end
function core.try(fn, ...)
local err
local ok, res = xpcall(fn, function(msg)
local item = core.error("%s", msg)
item.info = debug.traceback(nil, 2):gsub("\t", "")
err = msg
end, ...)
if ok then
return true, res
end
return false, err
end
function core.on_event(type, ...)
local did_keymap = false
if type == "textinput" then
core.root_view:on_text_input(...)
elseif type == "keypressed" then
did_keymap = keymap.on_key_pressed(...)
elseif type == "keyreleased" then
keymap.on_key_released(...)
elseif type == "mousemoved" then
core.root_view:on_mouse_moved(...)
elseif type == "mousepressed" then
core.root_view:on_mouse_pressed(...)
elseif type == "mousereleased" then
core.root_view:on_mouse_released(...)
elseif type == "mousewheel" then
core.root_view:on_mouse_wheel(...)
elseif type == "filedropped" then
local filename, mx, my = ...
local info = system.get_file_info(filename)
if info and info.type == "dir" then
system.exec(string.format("%q %q", EXEFILE, filename))
else
local ok, doc = core.try(core.open_doc, filename)
if ok then
local node = core.root_view.root_node:get_child_overlapping_point(mx, my)
node:set_active_view(node.active_view)
core.root_view:open_doc(doc)
end
end
elseif type == "quit" then
core.quit()
end
return did_keymap
end
function core.step()
-- handle events
local did_keymap = false
local mouse_moved = false
local mouse = { x = 0, y = 0, dx = 0, dy = 0 }
for type, a,b,c,d in system.poll_event do
if type == "mousemoved" then
mouse_moved = true
mouse.x, mouse.y = a, b
mouse.dx, mouse.dy = mouse.dx + c, mouse.dy + d
elseif type == "textinput" and did_keymap then
did_keymap = false
else
local _, res = core.try(core.on_event, type, a, b, c, d)
did_keymap = res or did_keymap
end
core.redraw = true
end
if mouse_moved then
core.try(core.on_event, "mousemoved", mouse.x, mouse.y, mouse.dx, mouse.dy)
end
local width, height = renderer.get_size()
-- update
core.root_view.size.x, core.root_view.size.y = width, height
core.root_view:update()
if not core.redraw then return false end
core.redraw = false
-- close unreferenced docs
for i = #core.docs, 1, -1 do
local doc = core.docs[i]
if #core.get_views_referencing_doc(doc) == 0 then
table.remove(core.docs, i)
core.log_quiet("Closed doc \"%s\"", doc:get_name())
end
end
-- update window title
local name = core.active_view:get_name()
local title = (name ~= "---") and (name .. " - lite") or "lite"
if title ~= core.window_title then
system.set_window_title(title)
core.window_title = title
end
-- draw
renderer.begin_frame()
core.clip_rect_stack[1] = { 0, 0, width, height }
renderer.set_clip_rect(table.unpack(core.clip_rect_stack[1]))
core.root_view:draw()
renderer.end_frame()
return true
end
local run_threads = coroutine.wrap(function()
while true do
local max_time = 1 / config.fps - 0.004
local ran_any_threads = false
for k, thread in pairs(core.threads) do
-- run thread
if thread.wake < system.get_time() then
local _, wait = assert(coroutine.resume(thread.cr))
if coroutine.status(thread.cr) == "dead" then
if type(k) == "number" then
table.remove(core.threads, k)
else
core.threads[k] = nil
end
elseif wait then
thread.wake = system.get_time() + wait
end
ran_any_threads = true
end
-- stop running threads if we're about to hit the end of frame
if system.get_time() - core.frame_start > max_time then
coroutine.yield()
end
end
if not ran_any_threads then coroutine.yield() end
end
end)
function core.run()
while true do
core.frame_start = system.get_time()
local did_redraw = core.step()
run_threads()
if not did_redraw and not system.window_has_focus() then
system.wait_event(0.25)
end
local elapsed = system.get_time() - core.frame_start
system.sleep(math.max(0, 1 / config.fps - elapsed))
end
end
function core.on_error(err)
-- write error to file
local fp = io.open(EXEDIR .. "/error.txt", "wb")
fp:write("Error: " .. tostring(err) .. "\n")
fp:write(debug.traceback(nil, 4))
fp:close()
-- save copy of all unsaved documents
for _, doc in ipairs(core.docs) do
if doc:is_dirty() and doc.filename then
doc:save(doc.filename .. "~")
end
end
end
return core
================================================
FILE: data/core/keymap.lua
================================================
local command = require "core.command"
local keymap = {}
keymap.modkeys = {}
keymap.map = {}
keymap.reverse_map = {}
local modkey_map = {
["left ctrl"] = "ctrl",
["right ctrl"] = "ctrl",
["left shift"] = "shift",
["right shift"] = "shift",
["left alt"] = "alt",
["right alt"] = "altgr",
}
local modkeys = { "ctrl", "alt", "altgr", "shift" }
local function key_to_stroke(k)
local stroke = ""
for _, mk in ipairs(modkeys) do
if keymap.modkeys[mk] then
stroke = stroke .. mk .. "+"
end
end
return stroke .. k
end
function keymap.add(map, overwrite)
for stroke, commands in pairs(map) do
if type(commands) == "string" then
commands = { commands }
end
if overwrite then
keymap.map[stroke] = commands
else
keymap.map[stroke] = keymap.map[stroke] or {}
for i = #commands, 1, -1 do
table.insert(keymap.map[stroke], 1, commands[i])
end
end
for _, cmd in ipairs(commands) do
keymap.reverse_map[cmd] = stroke
end
end
end
function keymap.get_binding(cmd)
return keymap.reverse_map[cmd]
end
function keymap.on_key_pressed(k)
local mk = modkey_map[k]
if mk then
keymap.modkeys[mk] = true
-- work-around for windows where `altgr` is treated as `ctrl+alt`
if mk == "altgr" then
keymap.modkeys["ctrl"] = false
end
else
local stroke = key_to_stroke(k)
local commands = keymap.map[stroke]
if commands then
for _, cmd in ipairs(commands) do
local performed = command.perform(cmd)
if performed then break end
end
return true
end
end
return false
end
function keymap.on_key_released(k)
local mk = modkey_map[k]
if mk then
keymap.modkeys[mk] = false
end
end
keymap.add {
["ctrl+shift+p"] = "core:find-command",
["ctrl+p"] = "core:find-file",
["ctrl+o"] = "core:open-file",
["ctrl+n"] = "core:new-doc",
["alt+return"] = "core:toggle-fullscreen",
["alt+shift+j"] = "root:split-left",
["alt+shift+l"] = "root:split-right",
["alt+shift+i"] = "root:split-up",
["alt+shift+k"] = "root:split-down",
["alt+j"] = "root:switch-to-left",
["alt+l"] = "root:switch-to-right",
["alt+i"] = "root:switch-to-up",
["alt+k"] = "root:switch-to-down",
["ctrl+w"] = "root:close",
["ctrl+tab"] = "root:switch-to-next-tab",
["ctrl+shift+tab"] = "root:switch-to-previous-tab",
["ctrl+pageup"] = "root:move-tab-left",
["ctrl+pagedown"] = "root:move-tab-right",
["alt+1"] = "root:switch-to-tab-1",
["alt+2"] = "root:switch-to-tab-2",
["alt+3"] = "root:switch-to-tab-3",
["alt+4"] = "root:switch-to-tab-4",
["alt+5"] = "root:switch-to-tab-5",
["alt+6"] = "root:switch-to-tab-6",
["alt+7"] = "root:switch-to-tab-7",
["alt+8"] = "root:switch-to-tab-8",
["alt+9"] = "root:switch-to-tab-9",
["ctrl+f"] = "find-replace:find",
["ctrl+r"] = "find-replace:replace",
["f3"] = "find-replace:repeat-find",
["shift+f3"] = "find-replace:previous-find",
["ctrl+g"] = "doc:go-to-line",
["ctrl+s"] = "doc:save",
["ctrl+shift+s"] = "doc:save-as",
["ctrl+z"] = "doc:undo",
["ctrl+y"] = "doc:redo",
["ctrl+x"] = "doc:cut",
["ctrl+c"] = "doc:copy",
["ctrl+v"] = "doc:paste",
["escape"] = { "command:escape", "doc:select-none" },
["tab"] = { "command:complete", "doc:indent" },
["shift+tab"] = "doc:unindent",
["backspace"] = "doc:backspace",
["shift+backspace"] = "doc:backspace",
["ctrl+backspace"] = "doc:delete-to-previous-word-start",
["ctrl+shift+backspace"] = "doc:delete-to-previous-word-start",
["delete"] = "doc:delete",
["shift+delete"] = "doc:delete",
["ctrl+delete"] = "doc:delete-to-next-word-end",
["ctrl+shift+delete"] = "doc:delete-to-next-word-end",
["return"] = { "command:submit", "doc:newline" },
["keypad enter"] = { "command:submit", "doc:newline" },
["ctrl+return"] = "doc:newline-below",
["ctrl+shift+return"] = "doc:newline-above",
["ctrl+j"] = "doc:join-lines",
["ctrl+a"] = "doc:select-all",
["ctrl+d"] = { "find-replace:select-next", "doc:select-word" },
["ctrl+l"] = "doc:select-lines",
["ctrl+/"] = "doc:toggle-line-comments",
["ctrl+up"] = "doc:move-lines-up",
["ctrl+down"] = "doc:move-lines-down",
["ctrl+shift+d"] = "doc:duplicate-lines",
["ctrl+shift+k"] = "doc:delete-lines",
["left"] = "doc:move-to-previous-char",
["right"] = "doc:move-to-next-char",
["up"] = { "command:select-previous", "doc:move-to-previous-line" },
["down"] = { "command:select-next", "doc:move-to-next-line" },
["ctrl+left"] = "doc:move-to-previous-word-start",
["ctrl+right"] = "doc:move-to-next-word-end",
["ctrl+["] = "doc:move-to-previous-block-start",
["ctrl+]"] = "doc:move-to-next-block-end",
["home"] = "doc:move-to-start-of-line",
["end"] = "doc:move-to-end-of-line",
["ctrl+home"] = "doc:move-to-start-of-doc",
["ctrl+end"] = "doc:move-to-end-of-doc",
["pageup"] = "doc:move-to-previous-page",
["pagedown"] = "doc:move-to-next-page",
["shift+left"] = "doc:select-to-previous-char",
["shift+right"] = "doc:select-to-next-char",
["shift+up"] = "doc:select-to-previous-line",
["shift+down"] = "doc:select-to-next-line",
["ctrl+shift+left"] = "doc:select-to-previous-word-start",
["ctrl+shift+right"] = "doc:select-to-next-word-end",
["ctrl+shift+["] = "doc:select-to-previous-block-start",
["ctrl+shift+]"] = "doc:select-to-next-block-end",
["shift+home"] = "doc:select-to-start-of-line",
["shift+end"] = "doc:select-to-end-of-line",
["ctrl+shift+home"] = "doc:select-to-start-of-doc",
["ctrl+shift+end"] = "doc:select-to-end-of-doc",
["shift+pageup"] = "doc:select-to-previous-page",
["shift+pagedown"] = "doc:select-to-next-page",
}
return keymap
================================================
FILE: data/core/logview.lua
================================================
local core = require "core"
local style = require "core.style"
local View = require "core.view"
local LogView = View:extend()
function LogView:new()
LogView.super.new(self)
self.last_item = core.log_items[#core.log_items]
self.scrollable = true
self.yoffset = 0
end
function LogView:get_name()
return "Log"
end
function LogView:update()
local item = core.log_items[#core.log_items]
if self.last_item ~= item then
self.last_item = item
self.scroll.to.y = 0
self.yoffset = -(style.font:get_height() + style.padding.y)
end
self:move_towards("yoffset", 0)
LogView.super.update(self)
end
local function draw_text_multiline(font, text, x, y, color)
local th = font:get_height()
local resx, resy = x, y
for line in text:gmatch("[^\n]+") do
resy = y
resx = renderer.draw_text(style.font, line, x, y, color)
y = y + th
end
return resx, resy
end
function LogView:draw()
self:draw_background(style.background)
local ox, oy = self:get_content_offset()
local th = style.font:get_height()
local y = oy + style.padding.y + self.yoffset
for i = #core.log_items, 1, -1 do
local x = ox + style.padding.x
local item = core.log_items[i]
local time = os.date(nil, item.time)
x = renderer.draw_text(style.font, time, x, y, style.dim)
x = x + style.padding.x
local subx = x
x, y = draw_text_multiline(style.font, item.text, x, y, style.text)
renderer.draw_text(style.font, " at " .. item.at, x, y, style.dim)
y = y + th
if item.info then
subx, y = draw_text_multiline(style.font, item.info, subx, y, style.dim)
y = y + th
end
y = y + style.padding.y
end
end
return LogView
================================================
FILE: data/core/object.lua
================================================
local Object = {}
Object.__index = Object
function Object:new()
end
function Object:extend()
local cls = {}
for k, v in pairs(self) do
if k:find("__") == 1 then
cls[k] = v
end
end
cls.__index = cls
cls.super = self
setmetatable(cls, self)
return cls
end
function Object:implement(...)
for _, cls in pairs({...}) do
for k, v in pairs(cls) do
if self[k] == nil and type(v) == "function" then
self[k] = v
end
end
end
end
function Object:is(T)
local mt = getmetatable(self)
while mt do
if mt == T then
return true
end
mt = getmetatable(mt)
end
return false
end
function Object:__tostring()
return "Object"
end
function Object:__call(...)
local obj = setmetatable({}, self)
obj:new(...)
return obj
end
return Object
================================================
FILE: data/core/rootview.lua
================================================
local core = require "core"
local common = require "core.common"
local style = require "core.style"
local keymap = require "core.keymap"
local Object = require "core.object"
local View = require "core.view"
local DocView = require "core.docview"
local EmptyView = View:extend()
local function draw_text(x, y, color)
local th = style.big_font:get_height()
local dh = th + style.padding.y * 2
x = renderer.draw_text(style.big_font, "lite", x, y + (dh - th) / 2, color)
x = x + style.padding.x
renderer.draw_rect(x, y, math.ceil(1 * SCALE), dh, color)
local lines = {
{ fmt = "%s to run a command", cmd = "core:find-command" },
{ fmt = "%s to open a file from the project", cmd = "core:find-file" },
}
th = style.font:get_height()
y = y + (dh - th * 2 - style.padding.y) / 2
local w = 0
for _, line in ipairs(lines) do
local text = string.format(line.fmt, keymap.get_binding(line.cmd))
w = math.max(w, renderer.draw_text(style.font, text, x + style.padding.x, y, color))
y = y + th + style.padding.y
end
return w, dh
end
function EmptyView:draw()
self:draw_background(style.background)
local w, h = draw_text(0, 0, { 0, 0, 0, 0 })
local x = self.position.x + math.max(style.padding.x, (self.size.x - w) / 2)
local y = self.position.y + (self.size.y - h) / 2
draw_text(x, y, style.dim)
end
local Node = Object:extend()
function Node:new(type)
self.type = type or "leaf"
self.position = { x = 0, y = 0 }
self.size = { x = 0, y = 0 }
self.views = {}
self.divider = 0.5
if self.type == "leaf" then
self:add_view(EmptyView())
end
end
function Node:propagate(fn, ...)
self.a[fn](self.a, ...)
self.b[fn](self.b, ...)
end
function Node:on_mouse_moved(x, y, ...)
self.hovered_tab = self:get_tab_overlapping_point(x, y)
if self.type == "leaf" then
self.active_view:on_mouse_moved(x, y, ...)
else
self:propagate("on_mouse_moved", x, y, ...)
end
end
function Node:on_mouse_released(...)
if self.type == "leaf" then
self.active_view:on_mouse_released(...)
else
self:propagate("on_mouse_released", ...)
end
end
function Node:consume(node)
for k, _ in pairs(self) do self[k] = nil end
for k, v in pairs(node) do self[k] = v end
end
local type_map = { up="vsplit", down="vsplit", left="hsplit", right="hsplit" }
function Node:split(dir, view, locked)
assert(self.type == "leaf", "Tried to split non-leaf node")
local type = assert(type_map[dir], "Invalid direction")
local last_active = core.active_view
local child = Node()
child:consume(self)
self:consume(Node(type))
self.a = child
self.b = Node()
if view then self.b:add_view(view) end
if locked then
self.b.locked = locked
core.set_active_view(last_active)
end
if dir == "up" or dir == "left" then
self.a, self.b = self.b, self.a
end
return child
end
function Node:close_active_view(root)
local do_close = function()
if #self.views > 1 then
local idx = self:get_view_idx(self.active_view)
table.remove(self.views, idx)
self:set_active_view(self.views[idx] or self.views[#self.views])
else
local parent = self:get_parent_node(root)
local is_a = (parent.a == self)
local other = parent[is_a and "b" or "a"]
if other:get_locked_size() then
self.views = {}
self:add_view(EmptyView())
else
parent:consume(other)
local p = parent
while p.type ~= "leaf" do
p = p[is_a and "a" or "b"]
end
p:set_active_view(p.active_view)
end
end
core.last_active_view = nil
end
self.active_view:try_close(do_close)
end
function Node:add_view(view)
assert(self.type == "leaf", "Tried to add view to non-leaf node")
assert(not self.locked, "Tried to add view to locked node")
if self.views[1] and self.views[1]:is(EmptyView) then
table.remove(self.views)
end
table.insert(self.views, view)
self:set_active_view(view)
end
function Node:set_active_view(view)
assert(self.type == "leaf", "Tried to set active view on non-leaf node")
self.active_view = view
core.set_active_view(view)
end
function Node:get_view_idx(view)
for i, v in ipairs(self.views) do
if v == view then return i end
end
end
function Node:get_node_for_view(view)
for _, v in ipairs(self.views) do
if v == view then return self end
end
if self.type ~= "leaf" then
return self.a:get_node_for_view(view) or self.b:get_node_for_view(view)
end
end
function Node:get_parent_node(root)
if root.a == self or root.b == self then
return root
elseif root.type ~= "leaf" then
return self:get_parent_node(root.a) or self:get_parent_node(root.b)
end
end
function Node:get_children(t)
t = t or {}
for _, view in ipairs(self.views) do
table.insert(t, view)
end
if self.a then self.a:get_children(t) end
if self.b then self.b:get_children(t) end
return t
end
function Node:get_divider_overlapping_point(px, py)
if self.type ~= "leaf" then
local p = 6
local x, y, w, h = self:get_divider_rect()
x, y = x - p, y - p
w, h = w + p * 2, h + p * 2
if px > x and py > y and px < x + w and py < y + h then
return self
end
return self.a:get_divider_overlapping_point(px, py)
or self.b:get_divider_overlapping_point(px, py)
end
end
function Node:get_tab_overlapping_point(px, py)
if #self.views == 1 then return nil end
local x, y, w, h = self:get_tab_rect(1)
if px >= x and py >= y and px < x + w * #self.views and py < y + h then
return math.floor((px - x) / w) + 1
end
end
function Node:get_child_overlapping_point(x, y)
local child
if self.type == "leaf" then
return self
elseif self.type == "hsplit" then
child = (x < self.b.position.x) and self.a or self.b
elseif self.type == "vsplit" then
child = (y < self.b.position.y) and self.a or self.b
end
return child:get_child_overlapping_point(x, y)
end
function Node:get_tab_rect(idx)
local tw = math.min(style.tab_width, math.ceil(self.size.x / #self.views))
local h = style.font:get_height() + style.padding.y * 2
return self.position.x + (idx-1) * tw, self.position.y, tw, h
end
function Node:get_divider_rect()
local x, y = self.position.x, self.position.y
if self.type == "hsplit" then
return x + self.a.size.x, y, style.divider_size, self.size.y
elseif self.type == "vsplit" then
return x, y + self.a.size.y, self.size.x, style.divider_size
end
end
function Node:get_locked_size()
if self.type == "leaf" then
if self.locked then
local size = self.active_view.size
return size.x, size.y
end
else
local x1, y1 = self.a:get_locked_size()
local x2, y2 = self.b:get_locked_size()
if x1 and x2 then
local dsx = (x1 < 1 or x2 < 1) and 0 or style.divider_size
local dsy = (y1 < 1 or y2 < 1) and 0 or style.divider_size
return x1 + x2 + dsx, y1 + y2 + dsy
end
end
end
local function copy_position_and_size(dst, src)
dst.position.x, dst.position.y = src.position.x, src.position.y
dst.size.x, dst.size.y = src.size.x, src.size.y
end
-- calculating the sizes is the same for hsplits and vsplits, except the x/y
-- axis are swapped; this function lets us use the same code for both
local function calc_split_sizes(self, x, y, x1, x2)
local n
local ds = (x1 and x1 < 1 or x2 and x2 < 1) and 0 or style.divider_size
if x1 then
n = x1 + ds
elseif x2 then
n = self.size[x] - x2
else
n = math.floor(self.size[x] * self.divider)
end
self.a.position[x] = self.position[x]
self.a.position[y] = self.position[y]
self.a.size[x] = n - ds
self.a.size[y] = self.size[y]
self.b.position[x] = self.position[x] + n
self.b.position[y] = self.position[y]
self.b.size[x] = self.size[x] - n
self.b.size[y] = self.size[y]
end
function Node:update_layout()
if self.type == "leaf" then
local av = self.active_view
if #self.views > 1 then
local _, _, _, th = self:get_tab_rect(1)
av.position.x, av.position.y = self.position.x, self.position.y + th
av.size.x, av.size.y = self.size.x, self.size.y - th
else
copy_position_and_size(av, self)
end
else
local x1, y1 = self.a:get_locked_size()
local x2, y2 = self.b:get_locked_size()
if self.type == "hsplit" then
calc_split_sizes(self, "x", "y", x1, x2)
elseif self.type == "vsplit" then
calc_split_sizes(self, "y", "x", y1, y2)
end
self.a:update_layout()
self.b:update_layout()
end
end
function Node:update()
if self.type == "leaf" then
for _, view in ipairs(self.views) do
view:update()
end
else
self.a:update()
self.b:update()
end
end
function Node:draw_tabs()
local x, y, _, h = self:get_tab_rect(1)
local ds = style.divider_size
core.push_clip_rect(x, y, self.size.x, h)
renderer.draw_rect(x, y, self.size.x, h, style.background2)
renderer.draw_rect(x, y + h - ds, self.size.x, ds, style.divider)
for i, view in ipairs(self.views) do
local x, y, w, h = self:get_tab_rect(i)
local text = view:get_name()
local color = style.dim
if view == self.active_view then
color = style.text
renderer.draw_rect(x, y, w, h, style.background)
renderer.draw_rect(x + w, y, ds, h, style.divider)
renderer.draw_rect(x - ds, y, ds, h, style.divider)
end
if i == self.hovered_tab then
color = style.text
end
core.push_clip_rect(x, y, w, h)
x, w = x + style.padding.x, w - style.padding.x * 2
local align = style.font:get_width(text) > w and "left" or "center"
common.draw_text(style.font, color, text, align, x, y, w, h)
core.pop_clip_rect()
end
core.pop_clip_rect()
end
function Node:draw()
if self.type == "leaf" then
if #self.views > 1 then
self:draw_tabs()
end
local pos, size = self.active_view.position, self.active_view.size
core.push_clip_rect(pos.x, pos.y, size.x + pos.x % 1, size.y + pos.y % 1)
self.active_view:draw()
core.pop_clip_rect()
else
local x, y, w, h = self:get_divider_rect()
renderer.draw_rect(x, y, w, h, style.divider)
self:propagate("draw")
end
end
local RootView = View:extend()
function RootView:new()
RootView.super.new(self)
self.root_node = Node()
self.deferred_draws = {}
self.mouse = { x = 0, y = 0 }
end
function RootView:defer_draw(fn, ...)
table.insert(self.deferred_draws, 1, { fn = fn, ... })
end
function RootView:get_active_node()
return self.root_node:get_node_for_view(core.active_view)
end
function RootView:open_doc(doc)
local node = self:get_active_node()
if node.locked and core.last_active_view then
core.set_active_view(core.last_active_view)
node = self:get_active_node()
end
assert(not node.locked, "Cannot open doc on locked node")
for i, view in ipairs(node.views) do
if view.doc == doc then
node:set_active_view(node.views[i])
return view
end
end
local view = DocView(doc)
node:add_view(view)
self.root_node:update_layout()
view:scroll_to_line(view.doc:get_selection(), true, true)
return view
end
function RootView:on_mouse_pressed(button, x, y, clicks)
local div = self.root_node:get_divider_overlapping_point(x, y)
if div then
self.dragged_divider = div
return
end
local node = self.root_node:get_child_overlapping_point(x, y)
local idx = node:get_tab_overlapping_point(x, y)
if idx then
node:set_active_view(node.views[idx])
if button == "middle" then
node:close_active_view(self.root_node)
end
else
core.set_active_view(node.active_view)
node.active_view:on_mouse_pressed(button, x, y, clicks)
end
end
function RootView:on_mouse_released(...)
if self.dragged_divider then
self.dragged_divider = nil
end
self.root_node:on_mouse_released(...)
end
function RootView:on_mouse_moved(x, y, dx, dy)
if self.dragged_divider then
local node = self.dragged_divider
if node.type == "hsplit" then
node.divider = node.divider + dx / node.size.x
else
node.divider = node.divider + dy / node.size.y
end
node.divider = common.clamp(node.divider, 0.01, 0.99)
return
end
self.mouse.x, self.mouse.y = x, y
self.root_node:on_mouse_moved(x, y, dx, dy)
local node = self.root_node:get_child_overlapping_point(x, y)
local div = self.root_node:get_divider_overlapping_point(x, y)
if div then
system.set_cursor(div.type == "hsplit" and "sizeh" or "sizev")
elseif node:get_tab_overlapping_point(x, y) then
system.set_cursor("arrow")
else
system.set_cursor(node.active_view.cursor)
end
end
function RootView:on_mouse_wheel(...)
local x, y = self.mouse.x, self.mouse.y
local node = self.root_node:get_child_overlapping_point(x, y)
node.active_view:on_mouse_wheel(...)
end
function RootView:on_text_input(...)
core.active_view:on_text_input(...)
end
function RootView:update()
copy_position_and_size(self.root_node, self)
self.root_node:update()
self.root_node:update_layout()
end
function RootView:draw()
self.root_node:draw()
while #self.deferred_draws > 0 do
local t = table.remove(self.deferred_draws)
t.fn(table.unpack(t))
end
end
return RootView
================================================
FILE: data/core/statusview.lua
================================================
local core = require "core"
local common = require "core.common"
local command = require "core.command"
local config = require "core.config"
local style = require "core.style"
local DocView = require "core.docview"
local LogView = require "core.logview"
local View = require "core.view"
local StatusView = View:extend()
StatusView.separator = " "
StatusView.separator2 = " | "
function StatusView:new()
StatusView.super.new(self)
self.message_timeout = 0
self.message = {}
end
function StatusView:on_mouse_pressed()
core.set_active_view(core.last_active_view)
if system.get_time() < self.message_timeout
and not core.active_view:is(LogView) then
command.perform "core:open-log"
end
end
function StatusView:show_message(icon, icon_color, text)
self.message = {
icon_color, style.icon_font, icon,
style.dim, style.font, StatusView.separator2, style.text, text
}
self.message_timeout = system.get_time() + config.message_timeout
end
function StatusView:update()
self.size.y = style.font:get_height() + style.padding.y * 2
if system.get_time() < self.message_timeout then
self.scroll.to.y = self.size.y
else
self.scroll.to.y = 0
end
StatusView.super.update(self)
end
local function draw_items(self, items, x, y, draw_fn)
local font = style.font
local color = style.text
for _, item in ipairs(items) do
if type(item) == "userdata" then
font = item
elseif type(item) == "table" then
color = item
else
x = draw_fn(font, color, item, nil, x, y, 0, self.size.y)
end
end
return x
end
local function text_width(font, _, text, _, x)
return x + font:get_width(text)
end
function StatusView:draw_items(items, right_align, yoffset)
local x, y = self:get_content_offset()
y = y + (yoffset or 0)
if right_align then
local w = draw_items(self, items, 0, 0, text_width)
x = x + self.size.x - w - style.padding.x
draw_items(self, items, x, y, common.draw_text)
else
x = x + style.padding.x
draw_items(self, items, x, y, common.draw_text)
end
end
function StatusView:get_items()
if getmetatable(core.active_view) == DocView then
local dv = core.active_view
local line, col = dv.doc:get_selection()
local dirty = dv.doc:is_dirty()
return {
dirty and style.accent or style.text, style.icon_font, "f",
style.dim, style.font, self.separator2, style.text,
dv.doc.filename and style.text or style.dim, dv.doc:get_name(),
style.text,
self.separator,
"line: ", line,
self.separator,
col > config.line_limit and style.accent or style.text, "col: ", col,
style.text,
self.separator,
string.format("%d%%", line / #dv.doc.lines * 100),
}, {
style.icon_font, "g",
style.font, style.dim, self.separator2, style.text,
#dv.doc.lines, " lines",
self.separator,
dv.doc.crlf and "CRLF" or "LF"
}
end
return {}, {
style.icon_font, "g",
style.font, style.dim, self.separator2,
#core.docs, style.text, " / ",
#core.project_files, " files"
}
end
function StatusView:draw()
self:draw_background(style.background2)
if self.message then
self:draw_items(self.message, false, self.size.y)
end
local left, right = self:get_items()
self:draw_items(left)
self:draw_items(right, true)
end
return StatusView
================================================
FILE: data/core/strict.lua
================================================
local strict = {}
strict.defined = {}
-- used to define a global variable
function global(t)
for k, v in pairs(t) do
strict.defined[k] = true
rawset(_G, k, v)
end
end
function strict.__newindex(t, k, v)
error("cannot set undefined variable: " .. k, 2)
end
function strict.__index(t, k)
if not strict.defined[k] then
error("cannot get undefined variable: " .. k, 2)
end
end
setmetatable(_G, strict)
================================================
FILE: data/core/style.lua
================================================
local common = require "core.common"
local style = {}
style.padding = { x = common.round(14 * SCALE), y = common.round(7 * SCALE) }
style.divider_size = common.round(1 * SCALE)
style.scrollbar_size = common.round(4 * SCALE)
style.caret_width = common.round(2 * SCALE)
style.tab_width = common.round(170 * SCALE)
style.font = renderer.font.load(EXEDIR .. "/data/fonts/font.ttf", 14 * SCALE)
style.big_font = renderer.font.load(EXEDIR .. "/data/fonts/font.ttf", 34 * SCALE)
style.icon_font = renderer.font.load(EXEDIR .. "/data/fonts/icons.ttf", 14 * SCALE)
style.code_font = renderer.font.load(EXEDIR .. "/data/fonts/monospace.ttf", 13.5 * SCALE)
style.background = { common.color "#2e2e32" }
style.background2 = { common.color "#252529" }
style.background3 = { common.color "#252529" }
style.text = { common.color "#97979c" }
style.caret = { common.color "#93DDFA" }
style.accent = { common.color "#e1e1e6" }
style.dim = { common.color "#525257" }
style.divider = { common.color "#202024" }
style.selection = { common.color "#48484f" }
style.line_number = { common.color "#525259" }
style.line_number2 = { common.color "#83838f" }
style.line_highlight = { common.color "#343438" }
style.scrollbar = { common.color "#414146" }
style.scrollbar2 = { common.color "#4b4b52" }
style.syntax = {}
style.syntax["normal"] = { common.color "#e1e1e6" }
style.syntax["symbol"] = { common.color "#e1e1e6" }
style.syntax["comment"] = { common.color "#676b6f" }
style.syntax["keyword"] = { common.color "#E58AC9" }
style.syntax["keyword2"] = { common.color "#F77483" }
style.syntax["number"] = { common.color "#FFA94D" }
style.syntax["literal"] = { common.color "#FFA94D" }
style.syntax["string"] = { common.color "#f7c95c" }
style.syntax["operator"] = { common.color "#93DDFA" }
style.syntax["function"] = { common.color "#93DDFA" }
return style
================================================
FILE: data/core/syntax.lua
================================================
local common = require "core.common"
local syntax = {}
syntax.items = {}
local plain_text_syntax = { patterns = {}, symbols = {} }
function syntax.add(t)
table.insert(syntax.items, t)
end
local function find(string, field)
for i = #syntax.items, 1, -1 do
local t = syntax.items[i]
if common.match_pattern(string, t[field] or {}) then
return t
end
end
end
function syntax.get(filename, header)
return find(filename, "files")
or find(header, "headers")
or plain_text_syntax
end
return syntax
================================================
FILE: data/core/tokenizer.lua
================================================
local tokenizer = {}
local function push_token(t, type, text)
local prev_type = t[#t-1]
local prev_text = t[#t]
if prev_type and (prev_type == type or prev_text:find("^%s*$")) then
t[#t-1] = type
t[#t] = prev_text .. text
else
table.insert(t, type)
table.insert(t, text)
end
end
local function is_escaped(text, idx, esc)
local byte = esc:byte()
local count = 0
for i = idx - 1, 1, -1 do
if text:byte(i) ~= byte then break end
count = count + 1
end
return count % 2 == 1
end
local function find_non_escaped(text, pattern, offset, esc)
while true do
local s, e = text:find(pattern, offset)
if not s then break end
if esc and is_escaped(text, s, esc) then
offset = e + 1
else
return s, e
end
end
end
function tokenizer.tokenize(syntax, text, state)
local res = {}
local i = 1
if #syntax.patterns == 0 then
return { "normal", text }
end
while i <= #text do
-- continue trying to match the end pattern of a pair if we have a state set
if state then
local p = syntax.patterns[state]
local s, e = find_non_escaped(text, p.pattern[2], i, p.pattern[3])
if s then
push_token(res, p.type, text:sub(i, e))
state = nil
i = e + 1
else
push_token(res, p.type, text:sub(i))
break
end
end
-- find matching pattern
local matched = false
for n, p in ipairs(syntax.patterns) do
local pattern = (type(p.pattern) == "table") and p.pattern[1] or p.pattern
local s, e = text:find("^" .. pattern, i)
if s then
-- matched pattern; make and add token
local t = text:sub(s, e)
push_token(res, syntax.symbols[t] or p.type, t)
-- update state if this was a start|end pattern pair
if type(p.pattern) == "table" then
state = n
end
-- move cursor past this token
i = e + 1
matched = true
break
end
end
-- consume character if we didn't match
if not matched then
push_token(res, "normal", text:sub(i, i))
i = i + 1
end
end
return res, state
end
local function iter(t, i)
i = i + 2
local type, text = t[i], t[i+1]
if type then
return i, type, text
end
end
function tokenizer.each_token(t)
return iter, t, -1
end
return tokenizer
================================================
FILE: data/core/view.lua
================================================
local core = require "core"
local config = require "core.config"
local style = require "core.style"
local common = require "core.common"
local Object = require "core.object"
local View = Object:extend()
function View:new()
self.position = { x = 0, y = 0 }
self.size = { x = 0, y = 0 }
self.scroll = { x = 0, y = 0, to = { x = 0, y = 0 } }
self.cursor = "arrow"
self.scrollable = false
end
function View:move_towards(t, k, dest, rate)
if type(t) ~= "table" then
return self:move_towards(self, t, k, dest, rate)
end
local val = t[k]
if math.abs(val - dest) < 0.5 then
t[k] = dest
else
t[k] = common.lerp(val, dest, rate or 0.5)
end
if val ~= dest then
core.redraw = true
end
end
function View:try_close(do_close)
do_close()
end
function View:get_name()
return "---"
end
function View:get_scrollable_size()
return math.huge
end
function View:get_scrollbar_rect()
local sz = self:get_scrollable_size()
if sz <= self.size.y or sz == math.huge then
return 0, 0, 0, 0
end
local h = math.max(20, self.size.y * self.size.y / sz)
return
self.position.x + self.size.x - style.scrollbar_size,
self.position.y + self.scroll.y * (self.size.y - h) / (sz - self.size.y),
style.scrollbar_size,
h
end
function View:scrollbar_overlaps_point(x, y)
local sx, sy, sw, sh = self:get_scrollbar_rect()
return x >= sx - sw * 3 and x < sx + sw and y >= sy and y < sy + sh
end
function View:on_mouse_pressed(button, x, y, clicks)
if self:scrollbar_overlaps_point(x, y) then
self.dragging_scrollbar = true
return true
end
end
function View:on_mouse_released(button, x, y)
self.dragging_scrollbar = false
end
function View:on_mouse_moved(x, y, dx, dy)
if self.dragging_scrollbar then
local delta = self:get_scrollable_size() / self.size.y * dy
self.scroll.to.y = self.scroll.to.y + delta
end
self.hovered_scrollbar = self:scrollbar_overlaps_point(x, y)
end
function View:on_text_input(text)
-- no-op
end
function View:on_mouse_wheel(y)
if self.scrollable then
self.scroll.to.y = self.scroll.to.y + y * -config.mouse_wheel_scroll
end
end
function View:get_content_bounds()
local x = self.scroll.x
local y = self.scroll.y
return x, y, x + self.size.x, y + self.size.y
end
function View:get_content_offset()
local x = common.round(self.position.x - self.scroll.x)
local y = common.round(self.position.y - self.scroll.y)
return x, y
end
function View:clamp_scroll_position()
local max = self:get_scrollable_size() - self.size.y
self.scroll.to.y = common.clamp(self.scroll.to.y, 0, max)
end
function View:update()
self:clamp_scroll_position()
self:move_towards(self.scroll, "x", self.scroll.to.x, 0.3)
self:move_towards(self.scroll, "y", self.scroll.to.y, 0.3)
end
function View:draw_background(color)
local x, y = self.position.x, self.position.y
local w, h = self.size.x, self.size.y
renderer.draw_rect(x, y, w + x % 1, h + y % 1, color)
end
function View:draw_scrollbar()
local x, y, w, h = self:get_scrollbar_rect()
local highlight = self.hovered_scrollbar or self.dragging_scrollbar
local color = highlight and style.scrollbar2 or style.scrollbar
renderer.draw_rect(x, y, w, h, color)
end
function View:draw()
end
return View
================================================
FILE: data/plugins/autocomplete.lua
================================================
local core = require "core"
local common = require "core.common"
local config = require "core.config"
local command = require "core.command"
local style = require "core.style"
local keymap = require "core.keymap"
local translate = require "core.doc.translate"
local RootView = require "core.rootview"
local DocView = require "core.docview"
config.autocomplete_max_suggestions = 6
local autocomplete = {}
autocomplete.map = {}
local mt = { __tostring = function(t) return t.text end }
function autocomplete.add(t)
local items = {}
for text, info in pairs(t.items) do
info = (type(info) == "string") and info
table.insert(items, setmetatable({ text = text, info = info }, mt))
end
autocomplete.map[t.name] = { files = t.files or ".*", items = items }
end
core.add_thread(function()
local cache = setmetatable({}, { __mode = "k" })
local function get_symbols(doc)
local i = 1
local s = {}
while i < #doc.lines do
for sym in doc.lines[i]:gmatch(config.symbol_pattern) do
s[sym] = true
end
i = i + 1
if i % 100 == 0 then coroutine.yield() end
end
return s
end
local function cache_is_valid(doc)
local c = cache[doc]
return c and c.last_change_id == doc:get_change_id()
end
while true do
local symbols = {}
-- lift all symbols from all docs
for _, doc in ipairs(core.docs) do
-- update the cache if the doc has changed since the last iteration
if not cache_is_valid(doc) then
cache[doc] = {
last_change_id = doc:get_change_id(),
symbols = get_symbols(doc)
}
end
-- update symbol set with doc's symbol set
for sym in pairs(cache[doc].symbols) do
symbols[sym] = true
end
coroutine.yield()
end
-- update symbols list
autocomplete.add { name = "open-docs", items = symbols }
-- wait for next scan
local valid = true
while valid do
coroutine.yield(1)
for _, doc in ipairs(core.docs) do
if not cache_is_valid(doc) then
valid = false
end
end
end
end
end)
local partial = ""
local suggestions_idx = 1
local suggestions = {}
local last_line, last_col
local function reset_suggestions()
suggestions_idx = 1
suggestions = {}
end
local function update_suggestions()
local doc = core.active_view.doc
local filename = doc and doc.filename or ""
-- get all relevant suggestions for given filename
local items = {}
for _, v in pairs(autocomplete.map) do
if common.match_pattern(filename, v.files) then
for _, item in pairs(v.items) do
table.insert(items, item)
end
end
end
-- fuzzy match, remove duplicates and store
items = common.fuzzy_match(items, partial)
local j = 1
for i = 1, config.autocomplete_max_suggestions do
suggestions[i] = items[j]
while items[j] and items[i].text == items[j].text do
items[i].info = items[i].info or items[j].info
j = j + 1
end
end
end
local function get_partial_symbol()
local doc = core.active_view.doc
local line2, col2 = doc:get_selection()
local line1, col1 = doc:position_offset(line2, col2, translate.start_of_word)
return doc:get_text(line1, col1, line2, col2)
end
local function get_active_view()
if getmetatable(core.active_view) == DocView then
return core.active_view
end
end
local function get_suggestions_rect(av)
if #suggestions == 0 then
return 0, 0, 0, 0
end
local line, col = av.doc:get_selection()
local x, y = av:get_line_screen_position(line)
x = x + av:get_col_x_offset(line, col - #partial)
y = y + av:get_line_height() + style.padding.y
local font = av:get_font()
local th = font:get_height()
local max_width = 0
for _, s in ipairs(suggestions) do
local w = font:get_width(s.text)
if s.info then
w = w + style.font:get_width(s.info) + style.padding.x
end
max_width = math.max(max_width, w)
end
return
x - style.padding.x,
y - style.padding.y,
max_width + style.padding.x * 2,
#suggestions * (th + style.padding.y) + style.padding.y
end
local function draw_suggestions_box(av)
-- draw background rect
local rx, ry, rw, rh = get_suggestions_rect(av)
renderer.draw_rect(rx, ry, rw, rh, style.background3)
-- draw text
local font = av:get_font()
local lh = font:get_height() + style.padding.y
local y = ry + style.padding.y / 2
for i, s in ipairs(suggestions) do
local color = (i == suggestions_idx) and style.accent or style.text
common.draw_text(font, color, s.text, "left", rx + style.padding.x, y, rw, lh)
if s.info then
color = (i == suggestions_idx) and style.text or style.dim
common.draw_text(style.font, color, s.info, "right", rx, y, rw - style.padding.x, lh)
end
y = y + lh
end
end
-- patch event logic into RootView
local on_text_input = RootView.on_text_input
local update = RootView.update
local draw = RootView.draw
RootView.on_text_input = function(...)
on_text_input(...)
local av = get_active_view()
if av then
-- update partial symbol and suggestions
partial = get_partial_symbol()
if #partial >= 3 then
update_suggestions()
last_line, last_col = av.doc:get_selection()
else
reset_suggestions()
end
-- scroll if rect is out of bounds of view
local _, y, _, h = get_suggestions_rect(av)
local limit = av.position.y + av.size.y
if y + h > limit then
av.scroll.to.y = av.scroll.y + y + h - limit
end
end
end
RootView.update = function(...)
update(...)
local av = get_active_view()
if av then
-- reset suggestions if caret was moved
local line, col = av.doc:get_selection()
if line ~= last_line or col ~= last_col then
reset_suggestions()
end
end
end
RootView.draw = function(...)
draw(...)
local av = get_active_view()
if av then
-- draw suggestions box after everything else
core.root_view:defer_draw(draw_suggestions_box, av)
end
end
local function predicate()
return get_active_view() and #suggestions > 0
end
command.add(predicate, {
["autocomplete:complete"] = function()
local doc = core.active_view.doc
local line, col = doc:get_selection()
local text = suggestions[suggestions_idx].text
doc:insert(line, col, text)
doc:remove(line, col, line, col - #partial)
doc:set_selection(line, col + #text - #partial)
reset_suggestions()
end,
["autocomplete:previous"] = function()
suggestions_idx = math.max(suggestions_idx - 1, 1)
end,
["autocomplete:next"] = function()
suggestions_idx = math.min(suggestions_idx + 1, #suggestions)
end,
["autocomplete:cancel"] = function()
reset_suggestions()
end,
})
keymap.add {
["tab"] = "autocomplete:complete",
["up"] = "autocomplete:previous",
["down"] = "autocomplete:next",
["escape"] = "autocomplete:cancel",
}
return autocomplete
================================================
FILE: data/plugins/autoreload.lua
================================================
local core = require "core"
local config = require "core.config"
local Doc = require "core.doc"
local times = setmetatable({}, { __mode = "k" })
local function update_time(doc)
local info = system.get_file_info(doc.filename)
times[doc] = info.modified
end
local function reload_doc(doc)
local fp = io.open(doc.filename, "r")
local text = fp:read("*a")
fp:close()
local sel = { doc:get_selection() }
doc:remove(1, 1, math.huge, math.huge)
doc:insert(1, 1, text:gsub("\r", ""):gsub("\n$", ""))
doc:set_selection(table.unpack(sel))
update_time(doc)
doc:clean()
core.log_quiet("Auto-reloaded doc \"%s\"", doc.filename)
end
core.add_thread(function()
while true do
-- check all doc modified times
for _, doc in ipairs(core.docs) do
local info = system.get_file_info(doc.filename or "")
if info and times[doc] ~= info.modified then
reload_doc(doc)
end
coroutine.yield()
end
-- wait for next scan
coroutine.yield(config.project_scan_rate)
end
end)
-- patch `Doc.save|load` to store modified time
local load = Doc.load
local save = Doc.save
Doc.load = function(self, ...)
local res = load(self, ...)
update_time(self)
return res
end
Doc.save = function(self, ...)
local res = save(self, ...)
update_time(self)
return res
end
================================================
FILE: data/plugins/language_c.lua
================================================
local syntax = require "core.syntax"
syntax.add {
files = { "%.c$", "%.h$", "%.inl$", "%.cpp$", "%.hpp$" },
comment = "//",
patterns = {
{ pattern = "//.-\n", type = "comment" },
{ pattern = { "/%*", "%*/" }, type = "comment" },
{ pattern = { "#", "[^\\]\n" }, type = "comment" },
{ pattern = { '"', '"', '\\' }, type = "string" },
{ pattern = { "'", "'", '\\' }, type = "string" },
{ pattern = "-?0x%x+", type = "number" },
{ pattern = "-?%d+[%d%.eE]*f?", type = "number" },
{ pattern = "-?%.?%d+f?", type = "number" },
{ pattern = "[%+%-=/%*%^%%<>!~|&]", type = "operator" },
{ pattern = "[%a_][%w_]*%f[(]", type = "function" },
{ pattern = "[%a_][%w_]*", type = "symbol" },
},
symbols = {
["if"] = "keyword",
["then"] = "keyword",
["else"] = "keyword",
["elseif"] = "keyword",
["do"] = "keyword",
["while"] = "keyword",
["for"] = "keyword",
["break"] = "keyword",
["continue"] = "keyword",
["return"] = "keyword",
["goto"] = "keyword",
["struct"] = "keyword",
["union"] = "keyword",
["typedef"] = "keyword",
["enum"] = "keyword",
["extern"] = "keyword",
["static"] = "keyword",
["volatile"] = "keyword",
["const"] = "keyword",
["inline"] = "keyword",
["switch"] = "keyword",
["case"] = "keyword",
["default"] = "keyword",
["auto"] = "keyword",
["const"] = "keyword",
["void"] = "keyword",
["int"] = "keyword2",
["short"] = "keyword2",
["long"] = "keyword2",
["float"] = "keyword2",
["double"] = "keyword2",
["char"] = "keyword2",
["unsigned"] = "keyword2",
["bool"] = "keyword2",
["true"] = "literal",
["false"] = "literal",
["NULL"] = "literal",
},
}
================================================
FILE: data/plugins/language_css.lua
================================================
local syntax = require "core.syntax"
syntax.add {
files = { "%.css$" },
patterns = {
{ pattern = "\\.", type = "normal" },
{ pattern = "//.-\n", type = "comment" },
{ pattern = { "/%*", "%*/" }, type = "comment" },
{ pattern = { '"', '"', '\\' }, type = "string" },
{ pattern = { "'", "'", '\\' }, type = "string" },
{ pattern = "[%a][%w-]*%s*%f[:]", type = "keyword" },
{ pattern = "#%x+", type = "string" },
{ pattern = "-?%d+[%d%.]*p[xt]", type = "number" },
{ pattern = "-?%d+[%d%.]*deg", type = "number" },
{ pattern = "-?%d+[%d%.]*", type = "number" },
{ pattern = "[%a_][%w_]*", type = "symbol" },
{ pattern = "#[%a][%w_-]*", type = "keyword2" },
{ pattern = "@[%a][%w_-]*", type = "keyword2" },
{ pattern = "%.[%a][%w_-]*", type = "keyword2" },
{ pattern = "[{}:]", type = "operator" },
},
symbols = {},
}
================================================
FILE: data/plugins/language_js.lua
================================================
local syntax = require "core.syntax"
syntax.add {
files = { "%.js$", "%.json$", "%.cson$" },
comment = "//",
patterns = {
{ pattern = "//.-\n", type = "comment" },
{ pattern = { "/%*", "%*/" }, type = "comment" },
{ pattern = { '"', '"', '\\' }, type = "string" },
{ pattern = { "'", "'", '\\' }, type = "string" },
{ pattern = { "`", "`", '\\' }, type = "string" },
{ pattern = "0x[%da-fA-F]+", type = "number" },
{ pattern = "-?%d+[%d%.eE]*", type = "number" },
{ pattern = "-?%.?%d+", type = "number" },
{ pattern = "[%+%-=/%*%^%%<>!~|&]", type = "operator" },
{ pattern = "[%a_][%w_]*%f[(]", type = "function" },
{ pattern = "[%a_][%w_]*", type = "symbol" },
},
symbols = {
["async"] = "keyword",
["await"] = "keyword",
["break"] = "keyword",
["case"] = "keyword",
["catch"] = "keyword",
["class"] = "keyword",
["const"] = "keyword",
["continue"] = "keyword",
["debugger"] = "keyword",
["default"] = "keyword",
["delete"] = "keyword",
["do"] = "keyword",
["else"] = "keyword",
["export"] = "keyword",
["extends"] = "keyword",
["finally"] = "keyword",
["for"] = "keyword",
["function"] = "keyword",
["get"] = "keyword",
["if"] = "keyword",
["import"] = "keyword",
["in"] = "keyword",
["instanceof"] = "keyword",
["let"] = "keyword",
["new"] = "keyword",
["return"] = "keyword",
["set"] = "keyword",
["static"] = "keyword",
["super"] = "keyword",
["switch"] = "keyword",
["throw"] = "keyword",
["try"] = "keyword",
["typeof"] = "keyword",
["var"] = "keyword",
["void"] = "keyword",
["while"] = "keyword",
["with"] = "keyword",
["yield"] = "keyword",
["true"] = "literal",
["false"] = "literal",
["null"] = "literal",
["undefined"] = "literal",
["arguments"] = "keyword2",
["Infinity"] = "keyword2",
["NaN"] = "keyword2",
["this"] = "keyword2",
},
}
================================================
FILE: data/plugins/language_lua.lua
================================================
local syntax = require "core.syntax"
syntax.add {
files = "%.lua$",
headers = "^#!.*[ /]lua",
comment = "--",
patterns = {
{ pattern = { '"', '"', '\\' }, type = "string" },
{ pattern = { "'", "'", '\\' }, type = "string" },
{ pattern = { "%[%[", "%]%]" }, type = "string" },
{ pattern = { "%-%-%[%[", "%]%]"}, type = "comment" },
{ pattern = "%-%-.-\n", type = "comment" },
{ pattern = "-?0x%x+", type = "number" },
{ pattern = "-?%d+[%d%.eE]*", type = "number" },
{ pattern = "-?%.?%d+", type = "number" },
{ pattern = "<%a+>", type = "keyword2" },
{ pattern = "%.%.%.?", type = "operator" },
{ pattern = "[<>~=]=", type = "operator" },
{ pattern = "[%+%-=/%*%^%%#<>]", type = "operator" },
{ pattern = "[%a_][%w_]*%s*%f[(\"{]", type = "function" },
{ pattern = "[%a_][%w_]*", type = "symbol" },
{ pattern = "::[%a_][%w_]*::", type = "function" },
},
symbols = {
["if"] = "keyword",
["then"] = "keyword",
["else"] = "keyword",
["elseif"] = "keyword",
["end"] = "keyword",
["do"] = "keyword",
["function"] = "keyword",
["repeat"] = "keyword",
["until"] = "keyword",
["while"] = "keyword",
["for"] = "keyword",
["break"] = "keyword",
["return"] = "keyword",
["local"] = "keyword",
["in"] = "keyword",
["not"] = "keyword",
["and"] = "keyword",
["or"] = "keyword",
["goto"] = "keyword",
["self"] = "keyword2",
["true"] = "literal",
["false"] = "literal",
["nil"] = "literal",
},
}
================================================
FILE: data/plugins/language_md.lua
================================================
local syntax = require "core.syntax"
syntax.add {
files = { "%.md$", "%.markdown$" },
patterns = {
{ pattern = "\\.", type = "normal" },
{ pattern = { "<!%-%-", "%-%->" }, type = "comment" },
{ pattern = { "```", "```" }, type = "string" },
{ pattern = { "``", "``", "\\" }, type = "string" },
{ pattern = { "`", "`", "\\" }, type = "string" },
{ pattern = { "~~", "~~", "\\" }, type = "keyword2" },
{ pattern = "%-%-%-+", type = "comment" },
{ pattern = "%*%s+", type = "operator" },
{ pattern = { "%*", "[%*\n]", "\\" }, type = "operator" },
{ pattern = { "%_", "[%_\n]", "\\" }, type = "keyword2" },
{ pattern = "#.-\n", type = "keyword" },
{ pattern = "!?%[.-%]%(.-%)", type = "function" },
{ pattern = "https?://%S+", type = "function" },
},
symbols = { },
}
================================================
FILE: data/plugins/language_python.lua
================================================
local syntax = require "core.syntax"
syntax.add {
files = { "%.py$", "%.pyw$" },
headers = "^#!.*[ /]python",
comment = "#",
patterns = {
{ pattern = { "#", "\n" }, type = "comment" },
{ pattern = { '[ruU]?"', '"', '\\' }, type = "string" },
{ pattern = { "[ruU]?'", "'", '\\' }, type = "string" },
{ pattern = { '"""', '"""' }, type = "string" },
{ pattern = "0x[%da-fA-F]+", type = "number" },
{ pattern = "-?%d+[%d%.eE]*", type = "number" },
{ pattern = "-?%.?%d+", type = "number" },
{ pattern = "[%+%-=/%*%^%%<>!~|&]", type = "operator" },
{ pattern = "[%a_][%w_]*%f[(]", type = "function" },
{ pattern = "[%a_][%w_]*", type = "symbol" },
},
symbols = {
["class"] = "keyword",
["finally"] = "keyword",
["is"] = "keyword",
["return"] = "keyword",
["continue"] = "keyword",
["for"] = "keyword",
["lambda"] = "keyword",
["try"] = "keyword",
["def"] = "keyword",
["from"] = "keyword",
["nonlocal"] = "keyword",
["while"] = "keyword",
["and"] = "keyword",
["global"] = "keyword",
["not"] = "keyword",
["with"] = "keyword",
["as"] = "keyword",
["elif"] = "keyword",
["if"] = "keyword",
["or"] = "keyword",
["else"] = "keyword",
["import"] = "keyword",
["pass"] = "keyword",
["break"] = "keyword",
["except"] = "keyword",
["in"] = "keyword",
["del"] = "keyword",
["raise"] = "keyword",
["yield"] = "keyword",
["assert"] = "keyword",
["self"] = "keyword2",
["None"] = "literal",
["True"] = "literal",
["False"] = "literal",
}
}
================================================
FILE: data/plugins/language_xml.lua
================================================
local syntax = require "core.syntax"
syntax.add {
files = { "%.xml$", "%.html?$" },
headers = "<%?xml",
patterns = {
{ pattern = { "<!%-%-", "%-%->" }, type = "comment" },
{ pattern = { '%f[^>][^<]', '%f[<]' }, type = "normal" },
{ pattern = { '"', '"', '\\' }, type = "string" },
{ pattern = { "'", "'", '\\' }, type = "string" },
{ pattern = "0x[%da-fA-F]+", type = "number" },
{ pattern = "-?%d+[%d%.]*f?", type = "number" },
{ pattern = "-?%.?%d+f?", type = "number" },
{ pattern = "%f[^<]![%a_][%w_]*", type = "keyword2" },
{ pattern = "%f[^<][%a_][%w_]*", type = "function" },
{ pattern = "%f[^<]/[%a_][%w_]*", type = "function" },
{ pattern = "[%a_][%w_]*", type = "keyword" },
{ pattern = "[/<>=]", type = "operator" },
},
symbols = {},
}
================================================
FILE: data/plugins/macro.lua
================================================
local core = require "core"
local command = require "core.command"
local keymap = require "core.keymap"
local handled_events = {
["keypressed"] = true,
["keyreleased"] = true,
["textinput"] = true,
}
local state = "stopped"
local event_buffer = {}
local modkeys = {}
local on_event = core.on_event
core.on_event = function(type, ...)
local res = on_event(type, ...)
if state == "recording" and handled_events[type] then
table.insert(event_buffer, { type, ... })
end
return res
end
local function clone(t)
local res = {}
for k, v in pairs(t) do res[k] = v end
return res
end
local function predicate()
return state ~= "playing"
end
command.add(predicate, {
["macro:toggle-record"] = function()
if state == "stopped" then
state = "recording"
event_buffer = {}
modkeys = clone(keymap.modkeys)
core.log("Recording macro...")
else
state = "stopped"
core.log("Stopped recording macro (%d events)", #event_buffer)
end
end,
["macro:play"] = function()
state = "playing"
core.log("Playing macro... (%d events)", #event_buffer)
local mk = keymap.modkeys
keymap.modkeys = clone(modkeys)
for _, ev in ipairs(event_buffer) do
on_event(table.unpack(ev))
core.root_view:update()
end
keymap.modkeys = mk
state = "stopped"
end,
})
keymap.add {
["ctrl+shift+;"] = "macro:toggle-record",
["ctrl+;"] = "macro:play",
}
================================================
FILE: data/plugins/projectsearch.lua
================================================
local core = require "core"
local common = require "core.common"
local keymap = require "core.keymap"
local command = require "core.command"
local style = require "core.style"
local View = require "core.view"
local ResultsView = View:extend()
function ResultsView:new(text, fn)
ResultsView.super.new(self)
self.scrollable = true
self.brightness = 0
self:begin_search(text, fn)
end
function ResultsView:get_name()
return "Search Results"
end
local function find_all_matches_in_file(t, filename, fn)
local fp = io.open(filename)
if not fp then return t end
local n = 1
for line in fp:lines() do
local s = fn(line)
if s then
table.insert(t, { file = filename, text = line, line = n, col = s })
core.redraw = true
end
if n % 100 == 0 then coroutine.yield() end
n = n + 1
core.redraw = true
end
fp:close()
end
function ResultsView:begin_search(text, fn)
self.search_args = { text, fn }
self.results = {}
self.last_file_idx = 1
self.query = text
self.searching = true
self.selected_idx = 0
core.add_thread(function()
for i, file in ipairs(core.project_files) do
if file.type == "file" then
find_all_matches_in_file(self.results, file.filename, fn)
end
self.last_file_idx = i
end
self.searching = false
self.brightness = 100
core.redraw = true
end, self.results)
self.scroll.to.y = 0
end
function ResultsView:refresh()
self:begin_search(table.unpack(self.search_args))
end
function ResultsView:on_mouse_moved(mx, my, ...)
ResultsView.super.on_mouse_moved(self, mx, my, ...)
self.selected_idx = 0
for i, item, x,y,w,h in self:each_visible_result() do
if mx >= x and my >= y and mx < x + w and my < y + h then
self.selected_idx = i
break
end
end
end
function ResultsView:on_mouse_pressed(...)
local caught = ResultsView.super.on_mouse_pressed(self, ...)
if not caught then
self:open_selected_result()
end
end
function ResultsView:open_selected_result()
local res = self.results[self.selected_idx]
if not res then
return
end
core.try(function()
local dv = core.root_view:open_doc(core.open_doc(res.file))
core.root_view.root_node:update_layout()
dv.doc:set_selection(res.line, res.col)
dv:scroll_to_line(res.line, false, true)
end)
end
function ResultsView:update()
self:move_towards("brightness", 0, 0.1)
ResultsView.super.update(self)
end
function ResultsView:get_results_yoffset()
return style.font:get_height() + style.padding.y * 3
end
function ResultsView:get_line_height()
return style.padding.y + style.font:get_height()
end
function ResultsView:get_scrollable_size()
return self:get_results_yoffset() + #self.results * self:get_line_height()
end
function ResultsView:get_visible_results_range()
local lh = self:get_line_height()
local oy = self:get_results_yoffset()
local min = math.max(1, math.floor((self.scroll.y - oy) / lh))
return min, min + math.floor(self.size.y / lh) + 1
end
function ResultsView:each_visible_result()
return coroutine.wrap(function()
local lh = self:get_line_height()
local x, y = self:get_content_offset()
local min, max = self:get_visible_results_range()
y = y + self:get_results_yoffset() + lh * (min - 1)
for i = min, max do
local item = self.results[i]
if not item then break end
coroutine.yield(i, item, x, y, self.size.x, lh)
y = y + lh
end
end)
end
function ResultsView:scroll_to_make_selected_visible()
local h = self:get_line_height()
local y = self:get_results_yoffset() + h * (self.selected_idx - 1)
self.scroll.to.y = math.min(self.scroll.to.y, y)
self.scroll.to.y = math.max(self.scroll.to.y, y + h - self.size.y)
end
function ResultsView:draw()
self:draw_background(style.background)
-- status
local ox, oy = self:get_content_offset()
local x, y = ox + style.padding.x, oy + style.padding.y
local per = self.last_file_idx / #core.project_files
local text
if self.searching then
text = string.format("Searching %d%% (%d of %d files, %d matches) for %q...",
per * 100, self.last_file_idx, #core.project_files,
#self.results, self.query)
else
text = string.format("Found %d matches for %q",
#self.results, self.query)
end
local color = common.lerp(style.text, style.accent, self.brightness / 100)
renderer.draw_text(style.font, text, x, y, color)
-- horizontal line
local yoffset = self:get_results_yoffset()
local x = ox + style.padding.x
local w = self.size.x - style.padding.x * 2
local h = style.divider_size
local color = common.lerp(style.dim, style.text, self.brightness / 100)
renderer.draw_rect(x, oy + yoffset - style.padding.y, w, h, color)
if self.searching then
renderer.draw_rect(x, oy + yoffset - style.padding.y, w * per, h, style.text)
end
-- results
local y1, y2 = self.position.y, self.position.y + self.size.y
for i, item, x,y,w,h in self:each_visible_result() do
local color = style.text
if i == self.selected_idx then
color = style.accent
renderer.draw_rect(x, y, w, h, style.line_highlight)
end
x = x + style.padding.x
local text = string.format("%s at line %d (col %d): ", item.file, item.line, item.col)
x = common.draw_text(style.font, style.dim, text, "left", x, y, w, h)
x = common.draw_text(style.code_font, color, item.text, "left", x, y, w, h)
end
self:draw_scrollbar()
end
local function begin_search(text, fn)
if text == "" then
core.error("Expected non-empty string")
return
end
local rv = ResultsView(text, fn)
core.root_view:get_active_node():add_view(rv)
end
command.add(nil, {
["project-search:find"] = function()
core.command_view:enter("Find Text In Project", function(text)
text = text:lower()
begin_search(text, function(line_text)
return line_text:lower():find(text, nil, true)
end)
end)
end,
["project-search:find-pattern"] = function()
core.command_view:enter("Find Pattern In Project", function(text)
begin_search(text, function(line_text) return line_text:find(text) end)
end)
end,
["project-search:fuzzy-find"] = function()
core.command_view:enter("Fuzzy Find Text In Project", function(text)
begin_search(text, function(line_text)
return common.fuzzy_match(line_text, text) and 1
end)
end)
end,
})
command.add(ResultsView, {
["project-search:select-previous"] = function()
local view = core.active_view
view.selected_idx = math.max(view.selected_idx - 1, 1)
view:scroll_to_make_selected_visible()
end,
["project-search:select-next"] = function()
local view = core.active_view
view.selected_idx = math.min(view.selected_idx + 1, #view.results)
view:scroll_to_make_selected_visible()
end,
["project-search:open-selected"] = function()
core.active_view:open_selected_result()
end,
["project-search:refresh"] = function()
core.active_view:refresh()
end,
})
keymap.add {
["f5"] = "project-search:refresh",
["ctrl+shift+f"] = "project-search:find",
["up"] = "project-search:select-previous",
["down"] = "project-search:select-next",
["return"] = "project-search:open-selected",
}
================================================
FILE: data/plugins/quote.lua
================================================
local core = require "core"
local command = require "core.command"
local keymap = require "core.keymap"
local escapes = {
["\\"] = "\\\\",
["\""] = "\\\"",
["\n"] = "\\n",
["\r"] = "\\r",
["\t"] = "\\t",
["\b"] = "\\b",
}
local function replace(chr)
return escapes[chr] or string.format("\\x%02x", chr:byte())
end
command.add("core.docview", {
["quote:quote"] = function()
core.active_view.doc:replace(function(text)
return '"' .. text:gsub("[\0-\31\\\"]", replace) .. '"'
end)
end,
})
keymap.add {
["ctrl+'"] = "quote:quote",
}
================================================
FILE: data/plugins/reflow.lua
================================================
local core = require "core"
local config = require "core.config"
local command = require "core.command"
local keymap = require "core.keymap"
local function wordwrap_text(text, limit)
local t = {}
local n = 0
for word in text:gmatch("%S+") do
if n + #word > limit then
table.insert(t, "\n")
n = 0
elseif #t > 0 then
table.insert(t, " ")
end
table.insert(t, word)
n = n + #word + 1
end
return table.concat(t)
end
command.add("core.docview", {
["reflow:reflow"] = function()
local doc = core.active_view.doc
doc:replace(function(text)
local prefix_set = "[^%w\n%[%](){}`'\"]*"
-- get line prefix and trailing whitespace
local prefix1 = text:match("^\n*" .. prefix_set)
local prefix2 = text:match("\n(" .. prefix_set .. ")", #prefix1+1)
local trailing = text:match("%s*$")
if not prefix2 or prefix2 == "" then
prefix2 = prefix1
end
-- strip all line prefixes and trailing whitespace
text = text:sub(#prefix1+1, -#trailing - 1):gsub("\n" .. prefix_set, "\n")
-- split into blocks, wordwrap and join
local line_limit = config.line_limit - #prefix1
local blocks = {}
text = text:gsub("\n\n", "\0")
for block in text:gmatch("%Z+") do
table.insert(blocks, wordwrap_text(block, line_limit))
end
text = table.concat(blocks, "\n\n")
-- add prefix to start of lines
text = prefix1 .. text:gsub("\n", "\n" .. prefix2) .. trailing
return text
end)
end,
})
keymap.add {
["ctrl+shift+q"] = "reflow:reflow"
}
================================================
FILE: data/plugins/tabularize.lua
================================================
local core = require "core"
local command = require "core.command"
local translate = require "core.doc.translate"
local function gmatch_to_array(text, ptn)
local res = {}
for x in text:gmatch(ptn) do
table.insert(res, x)
end
return res
end
local function tabularize_lines(lines, delim)
local rows = {}
local cols = {}
-- split lines at delimiters and get maximum width of columns
local ptn = "[^" .. delim:sub(1,1):gsub("%W", "%%%1") .. "]+"
for i, line in ipairs(lines) do
rows[i] = gmatch_to_array(line, ptn)
for j, col in ipairs(rows[i]) do
cols[j] = math.max(#col, cols[j] or 0)
end
end
-- pad columns with space
for _, row in ipairs(rows) do
for i = 1, #row - 1 do
row[i] = row[i] .. string.rep(" ", cols[i] - #row[i])
end
end
-- write columns back to lines array
for i, line in ipairs(lines) do
lines[i] = table.concat(rows[i], delim)
end
end
command.add("core.docview", {
["tabularize:tabularize"] = function()
core.command_view:enter("Tabularize On Delimiter", function(delim)
if delim == "" then delim = " " end
local doc = core.active_view.doc
local line1, col1, line2, col2, swap = doc:get_selection(true)
line1, col1 = doc:position_offset(line1, col1, translate.start_of_line)
line2, col2 = doc:position_offset(line2, col2, translate.end_of_line)
doc:set_selection(line1, col1, line2, col2, swap)
doc:replace(function(text)
local lines = gmatch_to_array(text, "[^\n]*\n?")
tabularize_lines(lines, delim)
return table.concat(lines)
end)
end)
end,
})
================================================
FILE: data/plugins/treeview.lua
================================================
local core = require "core"
local common = require "core.common"
local command = require "core.command"
local config = require "core.config"
local keymap = require "core.keymap"
local style = require "core.style"
local View = require "core.view"
config.treeview_size = 200 * SCALE
local function get_depth(filename)
local n = 0
for sep in filename:gmatch("[\\/]") do
n = n + 1
end
return n
end
local TreeView = View:extend()
function TreeView:new()
TreeView.super.new(self)
self.scrollable = true
self.visible = true
self.init_size = true
self.cache = {}
end
function TreeView:get_cached(item)
local t = self.cache[item.filename]
if not t then
t = {}
t.filename = item.filename
t.abs_filename = system.absolute_path(item.filename)
t.name = t.filename:match("[^\\/]+$")
t.depth = get_depth(t.filename)
t.type = item.type
self.cache[t.filename] = t
end
return t
end
function TreeView:get_name()
return "Project"
end
function TreeView:get_item_height()
return style.font:get_height() + style.padding.y
end
function TreeView:check_cache()
-- invalidate cache's skip values if project_files has changed
if core.project_files ~= self.last_project_files then
for _, v in pairs(self.cache) do
v.skip = nil
end
self.last_project_files = core.project_files
end
end
function TreeView:each_item()
return coroutine.wrap(function()
self:check_cache()
local ox, oy = self:get_content_offset()
local y = oy + style.padding.y
local w = self.size.x
local h = self:get_item_height()
local i = 1
while i <= #core.project_files do
local item = core.project_files[i]
local cached = self:get_cached(item)
coroutine.yield(cached, ox, y, w, h)
y = y + h
i = i + 1
if not cached.expanded then
if cached.skip then
i = cached.skip
else
local depth = cached.depth
while i <= #core.project_files do
local filename = core.project_files[i].filename
if get_depth(filename) <= depth then break end
i = i + 1
end
cached.skip = i
end
end
end
end)
end
function TreeView:on_mouse_moved(px, py)
self.hovered_item = nil
for item, x,y,w,h in self:each_item() do
if px > x and py > y and px <= x + w and py <= y + h then
self.hovered_item = item
break
end
end
end
function TreeView:on_mouse_pressed(button, x, y)
if not self.hovered_item then
return
elseif self.hovered_item.type == "dir" then
self.hovered_item.expanded = not self.hovered_item.expanded
else
core.try(function()
core.root_view:open_doc(core.open_doc(self.hovered_item.filename))
end)
end
end
function TreeView:update()
-- update width
local dest = self.visible and config.treeview_size or 0
if self.init_size then
self.size.x = dest
self.init_size = false
else
self:move_towards(self.size, "x", dest)
end
TreeView.super.update(self)
end
function TreeView:draw()
self:draw_background(style.background2)
local icon_width = style.icon_font:get_width("D")
local spacing = style.font:get_width(" ") * 2
local doc = core.active_view.doc
local active_filename = doc and system.absolute_path(doc.filename or "")
for item, x,y,w,h in self:each_item() do
local color = style.text
-- highlight active_view doc
if item.abs_filename == active_filename then
color = style.accent
end
-- hovered item background
if item == self.hovered_item then
renderer.draw_rect(x, y, w, h, style.line_highlight)
color = style.accent
end
-- icons
x = x + item.depth * style.padding.x + style.padding.x
if item.type == "dir" then
local icon1 = item.expanded and "-" or "+"
local icon2 = item.expanded and "D" or "d"
common.draw_text(style.icon_font, color, icon1, nil, x, y, 0, h)
x = x + style.padding.x
common.draw_text(style.icon_font, color, icon2, nil, x, y, 0, h)
x = x + icon_width
else
x = x + style.padding.x
common.draw_text(style.icon_font, color, "f", nil, x, y, 0, h)
x = x + icon_width
end
-- text
x = x + spacing
x = common.draw_text(style.font, color, item.name, nil, x, y, 0, h)
end
end
-- init
local view = TreeView()
local node = core.root_view:get_active_node()
node:split("left", view, true)
-- register commands and keymap
command.add(nil, {
["treeview:toggle"] = function()
view.visible = not view.visible
end,
})
keymap.add { ["ctrl+\\"] = "treeview:toggle" }
================================================
FILE: data/plugins/trimwhitespace.lua
================================================
local core = require "core"
local command = require "core.command"
local Doc = require "core.doc"
local function trim_trailing_whitespace(doc)
local cline, ccol = doc:get_selection()
for i = 1, #doc.lines do
local old_text = doc:get_text(i, 1, i, math.huge)
local new_text = old_text:gsub("%s*$", "")
-- don't remove whitespace which would cause the caret to reposition
if cline == i and ccol > #new_text then
new_text = old_text:sub(1, ccol - 1)
end
if old_text ~= new_text then
doc:insert(i, 1, new_text)
doc:remove(i, #new_text + 1, i, math.huge)
end
end
end
command.add("core.docview", {
["trim-whitespace:trim-trailing-whitespace"] = function()
trim_trailing_whitespace(core.active_view.doc)
end,
})
local save = Doc.save
Doc.save = function(self, ...)
trim_trailing_whitespace(self)
save(self, ...)
end
================================================
FILE: data/user/colors/fall.lua
================================================
local style = require "core.style"
local common = require "core.common"
style.background = { common.color "#343233" }
style.background2 = { common.color "#2c2a2b" }
style.background3 = { common.color "#2c2a2b" }
style.text = { common.color "#c4b398" }
style.caret = { common.color "#61efce" }
style.accent = { common.color "#ffd152" }
style.dim = { common.color "#615d5f" }
style.divider = { common.color "#242223" }
style.selection = { common.color "#454244" }
style.line_number = { common.color "#454244" }
style.line_number2 = { common.color "#615d5f" }
style.line_highlight = { common.color "#383637" }
style.scrollbar = { common.color "#454344" }
style.scrollbar2 = { common.color "#524F50" }
style.syntax["normal"] = { common.color "#efdab9" }
style.syntax["symbol"] = { common.color "#efdab9" }
style.syntax["comment"] = { common.color "#615d5f" }
style.syntax["keyword"] = { common.color "#d36e2d" }
style.syntax["keyword2"] = { common.color "#ef6179" }
style.syntax["number"] = { common.color "#ffd152" }
style.syntax["literal"] = { common.color "#ffd152" }
style.syntax["string"] = { common.color "#ffd152" }
style.syntax["operator"] = { common.color "#efdab9" }
style.syntax["function"] = { common.color "#61efce" }
================================================
FILE: data/user/colors/summer.lua
================================================
local style = require "core.style"
local common = require "core.common"
style.background = { common.color "#fbfbfb" }
style.background2 = { common.color "#f2f2f2" }
style.background3 = { common.color "#f2f2f2" }
style.text = { common.color "#404040" }
style.caret = { common.color "#fc1785" }
style.accent = { common.color "#fc1785" }
style.dim = { common.color "#b0b0b0" }
style.divider = { common.color "#e8e8e8" }
style.selection = { common.color "#b7dce8" }
style.line_number = { common.color "#d0d0d0" }
style.line_number2 = { common.color "#808080" }
style.line_highlight = { common.color "#f2f2f2" }
style.scrollbar = { common.color "#e0e0e0" }
style.scrollbar2 = { common.color "#c0c0c0" }
style.syntax["normal"] = { common.color "#181818" }
style.syntax["symbol"] = { common.color "#181818" }
style.syntax["comment"] = { common.color "#22a21f" }
style.syntax["keyword"] = { common.color "#fb6620" }
style.syntax["keyword2"] = { common.color "#fc1785" }
style.syntax["number"] = { common.color "#1586d2" }
style.syntax["literal"] = { common.color "#1586d2" }
style.syntax["string"] = { common.color "#1586d2" }
style.syntax["operator"] = { common.color "#fb6620" }
style.syntax["function"] = { common.color "#fc1785" }
================================================
FILE: data/user/init.lua
================================================
-- put user settings here
-- this module will be loaded after everything else when the application starts
local keymap = require "core.keymap"
local config = require "core.config"
local style = require "core.style"
-- light theme:
-- require "user.colors.summer"
-- key binding:
-- keymap.add { ["ctrl+escape"] = "core:quit" }
================================================
FILE: doc/usage.md
================================================
# lite

## Overview
lite is a lightweight text editor written mostly in Lua — it aims to provide
something practical, pretty, *small* and fast, implemented as simply as
possible; easy to modify and extend, or to use without doing either.
## Getting Started
When lite is started it's typically opened with a *project directory* — this
is the directory where your project's code and other data resides. The project
directory is set once when lite is started and, for the duration of the
session, cannot be changed.
To open lite with a specific project directory the directory name can be passed
as a command-line argument *(`.` can be passed to use the current directory)* or
the directory can be dragged onto either the lite executable or a running
instance of lite.
The main way of opening files in lite is through the `core:find-file` command
— this provides a fuzzy finder over all of the project's files and can be
opened using the **`ctrl+p`** shortcut by default.
Commands can be run using keyboard shortcuts, or by using the `core:find-command`
command bound to **`ctrl+shift+p`** by default. For example, pressing
`ctrl+shift+p` and typing `newdoc` then pressing `return` would open a new
document. The current keyboard shortcut for a command can be seen to the right
of the command name on the command finder, thus to find the shortcut for a command
`ctrl+shift+p` can be pressed and the command name typed.
## User Module
lite can be configured through use of the user module. The user module can be
used for changing options in the config module, adding additional key bindings,
loading custom color themes, modifying the style or changing any other part of
lite to your personal preference.
The user module is loaded by lite when the application starts, after the plugins
have been loaded.
The user module can be modified by running the `core:open-user-module` command
or otherwise directly opening the `data/user/init.lua` file.
## Project Module
The project module is an optional module which is loaded from the current
project's directory when lite is started. Project modules can be useful for
things like adding custom commands for project-specific build systems, or
loading project-specific plugins.
The project module is loaded by lite when the application starts, after both the
plugins and user module have been loaded.
The project module can be edited by running the `core:open-project-module`
command — if the module does not exist for the current project when the
command is run it will be created.
## Commands
Commands in lite are used both through the command finder (`ctrl+shift+p`) and
by lite's keyboard shortcut system. Commands consist of 3 components:
* **Name** — The command name in the form of `namespace:action-name`, for
example: `doc:select-all`
* **Predicate** — A function that returns true if the command can be ran, for
example, for any document commands the predicate checks whether the active
view is a document
* **Function** — The function which performs the command itself
Commands can be added using the `command.add` function provided by the
`core.command` module:
```lua
local core = require "core"
local command = require "core.command"
command.add("core.docview", {
["doc:save"] = function()
core.active_view.doc:save()
core.log("Saved '%s', core.active_view.doc.filename)
end
})
```
Commands can be performed programatically (eg. from another command or by your
user module) by calling the `command.perform` function after requiring the
`command` module:
```lua
local command = require "core.command"
command.perform "core:quit"
```
## Keymap
All keyboard shortcuts in lite are handled by the `core.keymap` module. A key
binding in lite maps a "stroke" (eg. `ctrl+q`) to one or more commands (eg.
`core:quit`). When the shortcut is pressed lite will iterate each command
assigned to that key and run the *predicate function* for that command — if the
predicate passes it stops iterating and runs the command.
An example of where this used is the default binding of the `tab` key:
``` lua
["tab"] = { "command:complete", "doc:indent" },
```
When tab is pressed the `command:complete` command is attempted which will only
succeed if the command-input at the bottom of the window is active. Otherwise
the `doc:indent` command is attempted which will only succeed if we have a
document as our active view.
A new mapping can be added by your user module as follows:
```lua
local keymap = require "core.keymap"
keymap.add { ["ctrl+q"] = "core:quit" }
```
## Plugins
Plugins in lite are normal lua modules and are treated as such — no
complicated plugin manager is provided, and, once a plugin is loaded, it is never
expected be to have to unload itself.
To install a plugin simply drop it in the `data/plugins` directory — installed
plugins will be automatically loaded when lite starts. To uninstall a plugin the
plugin file can be deleted — any plugin (including those included with lite's
default installation) can be deleted to remove its functionality.
If you want to load a plugin only under a certain circumstance (for example,
only on a given project) the plugin can be placed somewhere other than the
`data/plugins` directory so that it is not automatically loaded. The plugin can
then be loaded manually as needed by using the `require` function.
Plugins can be downloaded from the [plugins repository](https://github.com/rxi/lite-plugins).
## Color Themes
Colors themes in lite are lua modules which overwrite the color fields of lite's
`core.style` module. Color themes should be placed in the `data/user/colors`
directory.
A color theme can be set by requiring it in your user module:
```lua
require "user.colors.winter"
```
Color themes can be downloaded from the [color themes repository](https://github.com/rxi/lite-colors).
================================================
FILE: icon.inl
================================================
static unsigned char icon_rgba[] = {
0x2e, 0x2e, 0x32, 0x6d, 0x2e, 0x2e, 0x32, 0xe4, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xe4,
0x2e, 0x2e, 0x32, 0x6d, 0x2e, 0x2e, 0x32, 0xe4, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xe4, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2d, 0x2e, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2d, 0x2e, 0x32, 0xff, 0x2c, 0x2d, 0x32, 0xff, 0x2c, 0x2d, 0x32, 0xff,
0x2c, 0x2d, 0x32, 0xff, 0x2c, 0x2d, 0x32, 0xff, 0x2c, 0x2d, 0x32, 0xff,
0x2c, 0x2d, 0x32, 0xff, 0x2d, 0x2d, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x31, 0x31, 0x36, 0xff,
0x32, 0x32, 0x36, 0xff, 0x32, 0x32, 0x36, 0xff, 0x32, 0x32, 0x36, 0xff,
0x30, 0x30, 0x34, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x30, 0x2f, 0x33, 0xff, 0x42, 0x35, 0x3a, 0xff, 0x44, 0x36, 0x3b, 0xff,
0x44, 0x36, 0x3b, 0xff, 0x44, 0x36, 0x3b, 0xff, 0x44, 0x36, 0x3b, 0xff,
0x44, 0x36, 0x3b, 0xff, 0x44, 0x37, 0x3c, 0xff, 0x42, 0x40, 0x44, 0xff,
0x41, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff,
0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff,
0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff,
0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff,
0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff, 0x38, 0x38, 0x3c, 0xff,
0x2f, 0x30, 0x34, 0xff, 0x38, 0x3f, 0x46, 0xff, 0x38, 0x3f, 0x46, 0xff,
0x2f, 0x30, 0x34, 0xff, 0x39, 0x35, 0x33, 0xff, 0x45, 0x3c, 0x35, 0xff,
0x45, 0x3b, 0x35, 0xff, 0x45, 0x3b, 0x35, 0xff, 0x45, 0x3b, 0x35, 0xff,
0x45, 0x3b, 0x35, 0xff, 0x45, 0x3b, 0x35, 0xff, 0x42, 0x3a, 0x35, 0xff,
0x30, 0x2f, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x31, 0x31, 0x36, 0xff,
0x4b, 0x4b, 0x51, 0xff, 0x4e, 0x4e, 0x55, 0xff, 0x4e, 0x4e, 0x55, 0xff,
0x4f, 0x4f, 0x55, 0xff, 0x3e, 0x3e, 0x43, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2e, 0x31, 0xff, 0x42, 0x35, 0x3a, 0xff, 0xce, 0x66, 0x72, 0xff,
0xe2, 0x6d, 0x7b, 0xff, 0xe1, 0x6c, 0x7a, 0xff, 0xe1, 0x6c, 0x7a, 0xff,
0xe1, 0x6c, 0x7a, 0xff, 0xe1, 0x6c, 0x7a, 0xff, 0xdf, 0x77, 0x84, 0xff,
0xd0, 0xc3, 0xc9, 0xff, 0xcd, 0xce, 0xd3, 0xff, 0xcd, 0xcd, 0xd2, 0xff,
0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff,
0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff,
0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff,
0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff, 0xd1, 0xd1, 0xd5, 0xff,
0x7d, 0x7d, 0x81, 0xff, 0x35, 0x3c, 0x42, 0xff, 0x7f, 0xba, 0xd2, 0xff,
0x7f, 0xba, 0xd2, 0xff, 0x34, 0x3d, 0x45, 0xff, 0x8a, 0x64, 0x3d, 0xff,
0xec, 0x9e, 0x4b, 0xff, 0xe8, 0x9c, 0x4a, 0xff, 0xe8, 0x9c, 0x4a, 0xff,
0xe8, 0x9c, 0x4a, 0xff, 0xe8, 0x9c, 0x4a, 0xff, 0xea, 0x9c, 0x4a, 0xff,
0xd4, 0x90, 0x47, 0xff, 0x42, 0x3a, 0x35, 0xff, 0x2d, 0x2d, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x32, 0x32, 0x36, 0xff, 0x4f, 0x4f, 0x55, 0xff, 0x53, 0x53, 0x5a, 0xff,
0x53, 0x53, 0x5a, 0xff, 0x53, 0x53, 0x5a, 0xff, 0x40, 0x40, 0x46, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2c, 0x2d, 0x31, 0xff, 0x44, 0x36, 0x3b, 0xff,
0xe4, 0x6d, 0x7b, 0xff, 0xfb, 0x76, 0x85, 0xff, 0xfa, 0x75, 0x84, 0xff,
0xfa, 0x75, 0x84, 0xff, 0xfa, 0x75, 0x84, 0xff, 0xfa, 0x74, 0x83, 0xff,
0xf8, 0x81, 0x8f, 0xff, 0xe6, 0xd8, 0xde, 0xff, 0xe3, 0xe4, 0xe9, 0xff,
0xe4, 0xe4, 0xe9, 0xff, 0xe4, 0xe4, 0xe9, 0xff, 0xe4, 0xe4, 0xe9, 0xff,
0xe4, 0xe4, 0xe9, 0xff, 0xe4, 0xe4, 0xe9, 0xff, 0xe4, 0xe4, 0xe9, 0xff,
0xe4, 0xe4, 0xe9, 0xff, 0xe4, 0xe4, 0xe9, 0xff, 0xe4, 0xe4, 0xe9, 0xff,
0xe4, 0xe4, 0xe9, 0xff, 0xe4, 0xe4, 0xe9, 0xff, 0xe4, 0xe4, 0xe9, 0xff,
0xe7, 0xe7, 0xec, 0xff, 0x88, 0x88, 0x8c, 0xff, 0x36, 0x3e, 0x45, 0xff,
0x8a, 0xce, 0xe8, 0xff, 0x8a, 0xce, 0xe8, 0xff, 0x35, 0x3f, 0x48, 0xff,
0x96, 0x6b, 0x3e, 0xff, 0xff, 0xad, 0x4e, 0xff, 0xff, 0xab, 0x4d, 0xff,
0xff, 0xab, 0x4d, 0xff, 0xff, 0xab, 0x4d, 0xff, 0xff, 0xab, 0x4d, 0xff,
0xff, 0xac, 0x4e, 0xff, 0xe8, 0x9d, 0x4a, 0xff, 0x45, 0x3c, 0x35, 0xff,
0x2c, 0x2d, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x31, 0x31, 0x36, 0xff, 0x4b, 0x4b, 0x51, 0xff,
0x4e, 0x4e, 0x55, 0xff, 0x4e, 0x4e, 0x55, 0xff, 0x4f, 0x4f, 0x55, 0xff,
0x3e, 0x3e, 0x43, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2e, 0x31, 0xff,
0x42, 0x35, 0x3a, 0xff, 0xce, 0x66, 0x72, 0xff, 0xe2, 0x6d, 0x7b, 0xff,
0xe1, 0x6c, 0x7a, 0xff, 0xe1, 0x6c, 0x7a, 0xff, 0xe1, 0x6c, 0x7a, 0xff,
0xe1, 0x6c, 0x7a, 0xff, 0xdf, 0x77, 0x84, 0xff, 0xd0, 0xc3, 0xc9, 0xff,
0xcd, 0xce, 0xd3, 0xff, 0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff,
0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff,
0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff,
0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff, 0xcd, 0xcd, 0xd2, 0xff,
0xcd, 0xcd, 0xd2, 0xff, 0xd1, 0xd1, 0xd5, 0xff, 0x7d, 0x7d, 0x81, 0xff,
0x35, 0x3c, 0x42, 0xff, 0x7f, 0xba, 0xd2, 0xff, 0x7f, 0xba, 0xd2, 0xff,
0x34, 0x3d, 0x45, 0xff, 0x8a, 0x64, 0x3d, 0xff, 0xec, 0x9e, 0x4b, 0xff,
0xe8, 0x9c, 0x4a, 0xff, 0xe8, 0x9c, 0x4a, 0xff, 0xe8, 0x9c, 0x4a, 0xff,
0xe8, 0x9c, 0x4a, 0xff, 0xea, 0x9c, 0x4a, 0xff, 0xd4, 0x90, 0x47, 0xff,
0x42, 0x3a, 0x35, 0xff, 0x2d, 0x2d, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x31, 0x31, 0x36, 0xff, 0x32, 0x32, 0x36, 0xff, 0x32, 0x32, 0x36, 0xff,
0x32, 0x32, 0x36, 0xff, 0x30, 0x30, 0x34, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x30, 0x2f, 0x33, 0xff, 0x42, 0x35, 0x3a, 0xff,
0x44, 0x36, 0x3b, 0xff, 0x44, 0x36, 0x3b, 0xff, 0x44, 0x36, 0x3b, 0xff,
0x44, 0x36, 0x3b, 0xff, 0x44, 0x36, 0x3b, 0xff, 0x44, 0x37, 0x3c, 0xff,
0x42, 0x40, 0x44, 0xff, 0x41, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff,
0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff,
0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff,
0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff,
0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff, 0x42, 0x42, 0x46, 0xff,
0x38, 0x38, 0x3c, 0xff, 0x2f, 0x30, 0x34, 0xff, 0x38, 0x3f, 0x46, 0xff,
0x38, 0x3f, 0x46, 0xff, 0x2f, 0x30, 0x34, 0xff, 0x39, 0x35, 0x33, 0xff,
0x45, 0x3c, 0x35, 0xff, 0x45, 0x3b, 0x35, 0xff, 0x45, 0x3b, 0x35, 0xff,
0x45, 0x3b, 0x35, 0xff, 0x45, 0x3b, 0x35, 0xff, 0x45, 0x3b, 0x35, 0xff,
0x42, 0x3a, 0x35, 0xff, 0x30, 0x2f, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x31, 0x31, 0x36, 0xff, 0x32, 0x32, 0x36, 0xff,
0x32, 0x32, 0x36, 0xff, 0x32, 0x32, 0x36, 0xff, 0x30, 0x30, 0x34, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2d, 0x2e, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2d, 0x2e, 0x32, 0xff, 0x2c, 0x2d, 0x32, 0xff, 0x2c, 0x2d, 0x32, 0xff,
0x2c, 0x2d, 0x32, 0xff, 0x2c, 0x2d, 0x32, 0xff, 0x2c, 0x2d, 0x32, 0xff,
0x2c, 0x2d, 0x32, 0xff, 0x2d, 0x2d, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x31, 0x31, 0x36, 0xff, 0x4b, 0x4b, 0x51, 0xff,
0x4e, 0x4e, 0x55, 0xff, 0x4e, 0x4e, 0x55, 0xff, 0x4f, 0x4f, 0x55, 0xff,
0x3e, 0x3e, 0x43, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x32, 0x32, 0x36, 0xff,
0x4f, 0x4f, 0x55, 0xff, 0x53, 0x53, 0x5a, 0xff, 0x53, 0x53, 0x5a, 0xff,
0x53, 0x53, 0x5a, 0xff, 0x40, 0x40, 0x46, 0xff, 0x2d, 0x2d, 0x31, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x31, 0x31, 0x36, 0xff, 0x4b, 0x4b, 0x51, 0xff, 0x4e, 0x4e, 0x55, 0xff,
0x4e, 0x4e, 0x55, 0xff, 0x4f, 0x4f, 0x55, 0xff, 0x3e, 0x3e, 0x43, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x31, 0x31, 0x36, 0xff,
0x32, 0x32, 0x36, 0xff, 0x32, 0x32, 0x36, 0xff, 0x32, 0x32, 0x36, 0xff,
0x30, 0x30, 0x34, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x31, 0x31, 0x36, 0xff, 0x32, 0x32, 0x36, 0xff, 0x32, 0x32, 0x36, 0xff,
0x32, 0x32, 0x36, 0xff, 0x30, 0x30, 0x34, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x31, 0x31, 0x35, 0xff, 0x34, 0x35, 0x39, 0xff,
0x34, 0x35, 0x39, 0xff, 0x34, 0x35, 0x39, 0xff, 0x31, 0x31, 0x35, 0xff,
0x2f, 0x2f, 0x33, 0xff, 0x33, 0x34, 0x38, 0xff, 0x34, 0x35, 0x39, 0xff,
0x34, 0x35, 0x39, 0xff, 0x34, 0x35, 0x39, 0xff, 0x34, 0x35, 0x39, 0xff,
0x34, 0x35, 0x39, 0xff, 0x31, 0x31, 0x35, 0xff, 0x2f, 0x2f, 0x33, 0xff,
0x33, 0x34, 0x38, 0xff, 0x34, 0x35, 0x39, 0xff, 0x34, 0x35, 0x39, 0xff,
0x34, 0x35, 0x39, 0xff, 0x34, 0x35, 0x39, 0xff, 0x34, 0x35, 0x39, 0xff,
0x34, 0x35, 0x39, 0xff, 0x33, 0x34, 0x38, 0xff, 0x2f, 0x2f, 0x33, 0xff,
0x31, 0x31, 0x35, 0xff, 0x34, 0x35, 0x39, 0xff, 0x34, 0x35, 0x39, 0xff,
0x34, 0x35, 0x39, 0xff, 0x34, 0x35, 0x39, 0xff, 0x31, 0x31, 0x35, 0xff,
0x2f, 0x2f, 0x33, 0xff, 0x33, 0x34, 0x38, 0xff, 0x34, 0x35, 0x39, 0xff,
0x34, 0x35, 0x39, 0xff, 0x34, 0x35, 0x39, 0xff, 0x34, 0x35, 0x39, 0xff,
0x33, 0x34, 0x38, 0xff, 0x2f, 0x2f, 0x33, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff, 0x2e, 0x2e, 0x32, 0xff,
0x31, 0x31, 0x36, 0xff, 0x4b, 0x4b, 0x51, 0xff, 0x4e, 0x4e, 0x55, 0xff,
0x4e, 0x4e, 0x55, 0xff, 0x4f, 0x4f, 0x55, 0xff, 0x3e, 0x3e, 0x43, 0xff,
0x2d, 0x2d, 0x31, 0xff, 0x2d, 0x2d, 0x31, 0xff, 0x47, 0x49, 0x4d, 0xff,
0x61, 0x64, 0x68, 0xff, 0x60, 0x63, 0x67, 0xff, 0x61, 0x64, 0x68, 0xff,
0x47, 0x48, 0x4c, 0xff, 0x32, 0x33, 0x37, 0xff, 0x5a, 0x5e, 0x62, 0xff,
0x60, 0x64, 0x68, 0xff, 0x60, 0x63, 0x67, 0xff, 0x60, 0x63, 0x67, 0xff,
0x60, 0x63, 0x67, 0xff, 0x61, 0x64, 0x68, 0xff, 0x47, 0x48, 0x4c, 0xff,
0x32, 0x33, 0x37, 0xff, 0x5a, 0x5e, 0x62, 0xff, 0x60, 0x64, 0x68, 0xff,
0x60, 0x63, 0x67, 0xff, 0x60, 0x63, 0x67, 0xff, 0x60, 0x63, 0x67, 0xff,
0x60, 0x63, 0x67, 0xff, 0x60, 0x64, 0x68, 0xff, 0x5a, 0x5e, 0x62, 0xff,
0x32, 0x33, 0x37, 0xff, 0x47, 0x48, 0x4c, 0xff, 0x61, 0x64, 0x68, 0xff,
0x60, 0x63, 0x67, 0xff
gitextract_u_nu9sbi/
├── .gitattributes
├── .github/
│ └── FUNDING.yml
├── LICENSE
├── README.md
├── build.bat
├── build.sh
├── build_release.sh
├── data/
│ ├── core/
│ │ ├── command.lua
│ │ ├── commands/
│ │ │ ├── command.lua
│ │ │ ├── core.lua
│ │ │ ├── doc.lua
│ │ │ ├── findreplace.lua
│ │ │ └── root.lua
│ │ ├── commandview.lua
│ │ ├── common.lua
│ │ ├── config.lua
│ │ ├── doc/
│ │ │ ├── highlighter.lua
│ │ │ ├── init.lua
│ │ │ ├── search.lua
│ │ │ └── translate.lua
│ │ ├── docview.lua
│ │ ├── init.lua
│ │ ├── keymap.lua
│ │ ├── logview.lua
│ │ ├── object.lua
│ │ ├── rootview.lua
│ │ ├── statusview.lua
│ │ ├── strict.lua
│ │ ├── style.lua
│ │ ├── syntax.lua
│ │ ├── tokenizer.lua
│ │ └── view.lua
│ ├── plugins/
│ │ ├── autocomplete.lua
│ │ ├── autoreload.lua
│ │ ├── language_c.lua
│ │ ├── language_css.lua
│ │ ├── language_js.lua
│ │ ├── language_lua.lua
│ │ ├── language_md.lua
│ │ ├── language_python.lua
│ │ ├── language_xml.lua
│ │ ├── macro.lua
│ │ ├── projectsearch.lua
│ │ ├── quote.lua
│ │ ├── reflow.lua
│ │ ├── tabularize.lua
│ │ ├── treeview.lua
│ │ └── trimwhitespace.lua
│ └── user/
│ ├── colors/
│ │ ├── fall.lua
│ │ └── summer.lua
│ └── init.lua
├── doc/
│ └── usage.md
├── icon.inl
├── res.rc
├── src/
│ ├── api/
│ │ ├── api.c
│ │ ├── api.h
│ │ ├── renderer.c
│ │ ├── renderer_font.c
│ │ └── system.c
│ ├── lib/
│ │ ├── lua52/
│ │ │ ├── lapi.c
│ │ │ ├── lapi.h
│ │ │ ├── lauxlib.c
│ │ │ ├── lauxlib.h
│ │ │ ├── lbaselib.c
│ │ │ ├── lbitlib.c
│ │ │ ├── lcode.c
│ │ │ ├── lcode.h
│ │ │ ├── lcorolib.c
│ │ │ ├── lctype.c
│ │ │ ├── lctype.h
│ │ │ ├── ldblib.c
│ │ │ ├── ldebug.c
│ │ │ ├── ldebug.h
│ │ │ ├── ldo.c
│ │ │ ├── ldo.h
│ │ │ ├── ldump.c
│ │ │ ├── lfunc.c
│ │ │ ├── lfunc.h
│ │ │ ├── lgc.c
│ │ │ ├── lgc.h
│ │ │ ├── linit.c
│ │ │ ├── liolib.c
│ │ │ ├── llex.c
│ │ │ ├── llex.h
│ │ │ ├── llimits.h
│ │ │ ├── lmathlib.c
│ │ │ ├── lmem.c
│ │ │ ├── lmem.h
│ │ │ ├── loadlib.c
│ │ │ ├── lobject.c
│ │ │ ├── lobject.h
│ │ │ ├── lopcodes.c
│ │ │ ├── lopcodes.h
│ │ │ ├── loslib.c
│ │ │ ├── lparser.c
│ │ │ ├── lparser.h
│ │ │ ├── lstate.c
│ │ │ ├── lstate.h
│ │ │ ├── lstring.c
│ │ │ ├── lstring.h
│ │ │ ├── lstrlib.c
│ │ │ ├── ltable.c
│ │ │ ├── ltable.h
│ │ │ ├── ltablib.c
│ │ │ ├── ltm.c
│ │ │ ├── ltm.h
│ │ │ ├── lua.c_
│ │ │ ├── lua.h
│ │ │ ├── lua.hpp
│ │ │ ├── luac.c_
│ │ │ ├── luaconf.h
│ │ │ ├── lualib.h
│ │ │ ├── lundump.c
│ │ │ ├── lundump.h
│ │ │ ├── lvm.c
│ │ │ ├── lvm.h
│ │ │ ├── lzio.c
│ │ │ └── lzio.h
│ │ └── stb/
│ │ ├── stb_truetype.c
│ │ └── stb_truetype.h
│ ├── main.c
│ ├── rencache.c
│ ├── rencache.h
│ ├── renderer.c
│ └── renderer.h
└── winlib/
└── SDL2-2.0.10/
├── BUGS.txt
├── COPYING.txt
├── CREDITS.txt
├── INSTALL.txt
├── Makefile
├── README-SDL.txt
├── README.txt
├── WhatsNew.txt
├── docs/
│ ├── README-android.md
│ ├── README-cmake.md
│ ├── README-directfb.md
│ ├── README-dynapi.md
│ ├── README-emscripten.md
│ ├── README-gesture.md
│ ├── README-hg.md
│ ├── README-ios.md
│ ├── README-linux.md
│ ├── README-macosx.md
│ ├── README-nacl.md
│ ├── README-pandora.md
│ ├── README-platforms.md
│ ├── README-porting.md
│ ├── README-psp.md
│ ├── README-raspberrypi.md
│ ├── README-touch.md
│ ├── README-wince.md
│ ├── README-windows.md
│ ├── README-winrt.md
│ ├── README.md
│ └── doxyfile
├── i686-w64-mingw32/
│ ├── bin/
│ │ └── sdl2-config
│ ├── include/
│ │ └── SDL2/
│ │ ├── SDL.h
│ │ ├── SDL_assert.h
│ │ ├── SDL_atomic.h
│ │ ├── SDL_audio.h
│ │ ├── SDL_bits.h
│ │ ├── SDL_blendmode.h
│ │ ├── SDL_clipboard.h
│ │ ├── SDL_config.h
│ │ ├── SDL_cpuinfo.h
│ │ ├── SDL_egl.h
│ │ ├── SDL_endian.h
│ │ ├── SDL_error.h
│ │ ├── SDL_events.h
│ │ ├── SDL_filesystem.h
│ │ ├── SDL_gamecontroller.h
│ │ ├── SDL_gesture.h
│ │ ├── SDL_haptic.h
│ │ ├── SDL_hints.h
│ │ ├── SDL_joystick.h
│ │ ├── SDL_keyboard.h
│ │ ├── SDL_keycode.h
│ │ ├── SDL_loadso.h
│ │ ├── SDL_log.h
│ │ ├── SDL_main.h
│ │ ├── SDL_messagebox.h
│ │ ├── SDL_mouse.h
│ │ ├── SDL_mutex.h
│ │ ├── SDL_name.h
│ │ ├── SDL_opengl.h
│ │ ├── SDL_opengl_glext.h
│ │ ├── SDL_opengles.h
│ │ ├── SDL_opengles2.h
│ │ ├── SDL_opengles2_gl2.h
│ │ ├── SDL_opengles2_gl2ext.h
│ │ ├── SDL_opengles2_gl2platform.h
│ │ ├── SDL_opengles2_khrplatform.h
│ │ ├── SDL_pixels.h
│ │ ├── SDL_platform.h
│ │ ├── SDL_power.h
│ │ ├── SDL_quit.h
│ │ ├── SDL_rect.h
│ │ ├── SDL_render.h
│ │ ├── SDL_revision.h
│ │ ├── SDL_rwops.h
│ │ ├── SDL_scancode.h
│ │ ├── SDL_sensor.h
│ │ ├── SDL_shape.h
│ │ ├── SDL_stdinc.h
│ │ ├── SDL_surface.h
│ │ ├── SDL_system.h
│ │ ├── SDL_syswm.h
│ │ ├── SDL_test.h
│ │ ├── SDL_test_assert.h
│ │ ├── SDL_test_common.h
│ │ ├── SDL_test_compare.h
│ │ ├── SDL_test_crc32.h
│ │ ├── SDL_test_font.h
│ │ ├── SDL_test_fuzzer.h
│ │ ├── SDL_test_harness.h
│ │ ├── SDL_test_images.h
│ │ ├── SDL_test_log.h
│ │ ├── SDL_test_md5.h
│ │ ├── SDL_test_memory.h
│ │ ├── SDL_test_random.h
│ │ ├── SDL_thread.h
│ │ ├── SDL_timer.h
│ │ ├── SDL_touch.h
│ │ ├── SDL_types.h
│ │ ├── SDL_version.h
│ │ ├── SDL_video.h
│ │ ├── SDL_vulkan.h
│ │ ├── begin_code.h
│ │ └── close_code.h
│ ├── lib/
│ │ ├── cmake/
│ │ │ └── SDL2/
│ │ │ └── sdl2-config.cmake
│ │ ├── libSDL2.a
│ │ ├── libSDL2.dll.a
│ │ ├── libSDL2.la
│ │ ├── libSDL2_test.a
│ │ ├── libSDL2_test.la
│ │ ├── libSDL2main.a
│ │ ├── libSDL2main.la
│ │ └── pkgconfig/
│ │ └── sdl2.pc
│ └── share/
│ └── aclocal/
│ └── sdl2.m4
├── test/
│ ├── CMakeLists.txt
│ ├── COPYING
│ ├── Makefile.in
│ ├── Makefile.os2
│ ├── README
│ ├── acinclude.m4
│ ├── aclocal.m4
│ ├── autogen.sh
│ ├── checkkeys.c
│ ├── configure
│ ├── configure.ac
│ ├── controllermap.c
│ ├── emscripten/
│ │ └── joystick-pre.js
│ ├── gcc-fat.sh
│ ├── loopwave.c
│ ├── loopwavequeue.c
│ ├── nacl/
│ │ ├── Makefile
│ │ ├── background.js
│ │ ├── common.js
│ │ ├── index.html
│ │ └── manifest.json
│ ├── picture.xbm
│ ├── relative_mode.markdown
│ ├── testatomic.c
│ ├── testaudiocapture.c
│ ├── testaudiohotplug.c
│ ├── testaudioinfo.c
│ ├── testautomation.c
│ ├── testautomation_audio.c
│ ├── testautomation_clipboard.c
│ ├── testautomation_events.c
│ ├── testautomation_hints.c
│ ├── testautomation_keyboard.c
│ ├── testautomation_main.c
│ ├── testautomation_mouse.c
│ ├── testautomation_pixels.c
│ ├── testautomation_platform.c
│ ├── testautomation_rect.c
│ ├── testautomation_render.c
│ ├── testautomation_rwops.c
│ ├── testautomation_sdltest.c
│ ├── testautomation_stdlib.c
│ ├── testautomation_suites.h
│ ├── testautomation_surface.c
│ ├── testautomation_syswm.c
│ ├── testautomation_timer.c
│ ├── testautomation_video.c
│ ├── testbounds.c
│ ├── testcustomcursor.c
│ ├── testdisplayinfo.c
│ ├── testdraw2.c
│ ├── testdrawchessboard.c
│ ├── testdropfile.c
│ ├── testerror.c
│ ├── testfile.c
│ ├── testfilesystem.c
│ ├── testgamecontroller.c
│ ├── testgesture.c
│ ├── testgl2.c
│ ├── testgles.c
│ ├── testgles2.c
│ ├── testhaptic.c
│ ├── testhittesting.c
│ ├── testhotplug.c
│ ├── testiconv.c
│ ├── testime.c
│ ├── testintersections.c
│ ├── testjoystick.c
│ ├── testkeys.c
│ ├── testloadso.c
│ ├── testlock.c
│ ├── testmessage.c
│ ├── testmultiaudio.c
│ ├── testnative.c
│ ├── testnative.h
│ ├── testnativecocoa.m
│ ├── testnativew32.c
│ ├── testnativex11.c
│ ├── testoverlay2.c
│ ├── testplatform.c
│ ├── testpower.c
│ ├── testqsort.c
│ ├── testrelative.c
│ ├── testrendercopyex.c
│ ├── testrendertarget.c
│ ├── testresample.c
│ ├── testrumble.c
│ ├── testscale.c
│ ├── testsem.c
│ ├── testsensor.c
│ ├── testshader.c
│ ├── testshape.c
│ ├── testsprite2.c
│ ├── testspriteminimal.c
│ ├── teststreaming.c
│ ├── testthread.c
│ ├── testtimer.c
│ ├── testver.c
│ ├── testviewport.c
│ ├── testvulkan.c
│ ├── testwm2.c
│ ├── testyuv.c
│ ├── testyuv_cvt.c
│ ├── testyuv_cvt.h
│ ├── torturethread.c
│ └── utf8.txt
└── x86_64-w64-mingw32/
├── bin/
│ └── sdl2-config
├── include/
│ └── SDL2/
│ ├── SDL.h
│ ├── SDL_assert.h
│ ├── SDL_atomic.h
│ ├── SDL_audio.h
│ ├── SDL_bits.h
│ ├── SDL_blendmode.h
│ ├── SDL_clipboard.h
│ ├── SDL_config.h
│ ├── SDL_cpuinfo.h
│ ├── SDL_egl.h
│ ├── SDL_endian.h
│ ├── SDL_error.h
│ ├── SDL_events.h
│ ├── SDL_filesystem.h
│ ├── SDL_gamecontroller.h
│ ├── SDL_gesture.h
│ ├── SDL_haptic.h
│ ├── SDL_hints.h
│ ├── SDL_joystick.h
│ ├── SDL_keyboard.h
│ ├── SDL_keycode.h
│ ├── SDL_loadso.h
│ ├── SDL_log.h
│ ├── SDL_main.h
│ ├── SDL_messagebox.h
│ ├── SDL_mouse.h
│ ├── SDL_mutex.h
│ ├── SDL_name.h
│ ├── SDL_opengl.h
│ ├── SDL_opengl_glext.h
│ ├── SDL_opengles.h
│ ├── SDL_opengles2.h
│ ├── SDL_opengles2_gl2.h
│ ├── SDL_opengles2_gl2ext.h
│ ├── SDL_opengles2_gl2platform.h
│ ├── SDL_opengles2_khrplatform.h
│ ├── SDL_pixels.h
│ ├── SDL_platform.h
│ ├── SDL_power.h
│ ├── SDL_quit.h
│ ├── SDL_rect.h
│ ├── SDL_render.h
│ ├── SDL_revision.h
│ ├── SDL_rwops.h
│ ├── SDL_scancode.h
│ ├── SDL_sensor.h
│ ├── SDL_shape.h
│ ├── SDL_stdinc.h
│ ├── SDL_surface.h
│ ├── SDL_system.h
│ ├── SDL_syswm.h
│ ├── SDL_test.h
│ ├── SDL_test_assert.h
│ ├── SDL_test_common.h
│ ├── SDL_test_compare.h
│ ├── SDL_test_crc32.h
│ ├── SDL_test_font.h
│ ├── SDL_test_fuzzer.h
│ ├── SDL_test_harness.h
│ ├── SDL_test_images.h
│ ├── SDL_test_log.h
│ ├── SDL_test_md5.h
│ ├── SDL_test_memory.h
│ ├── SDL_test_random.h
│ ├── SDL_thread.h
│ ├── SDL_timer.h
│ ├── SDL_touch.h
│ ├── SDL_types.h
│ ├── SDL_version.h
│ ├── SDL_video.h
│ ├── SDL_vulkan.h
│ ├── begin_code.h
│ └── close_code.h
├── lib/
│ ├── cmake/
│ │ └── SDL2/
│ │ └── sdl2-config.cmake
│ ├── libSDL2.a
│ ├── libSDL2.dll.a
│ ├── libSDL2.la
│ ├── libSDL2_test.a
│ ├── libSDL2_test.la
│ ├── libSDL2main.a
│ ├── libSDL2main.la
│ └── pkgconfig/
│ └── sdl2.pc
└── share/
└── aclocal/
└── sdl2.m4
SYMBOL INDEX (2474 symbols across 233 files)
FILE: src/api/api.c
function api_load_libs (line 14) | void api_load_libs(lua_State *L) {
FILE: src/api/renderer.c
function RenColor (line 6) | static RenColor checkcolor(lua_State *L, int idx, int def) {
function f_show_debug (line 24) | static int f_show_debug(lua_State *L) {
function f_get_size (line 31) | static int f_get_size(lua_State *L) {
function f_begin_frame (line 40) | static int f_begin_frame(lua_State *L) {
function f_end_frame (line 46) | static int f_end_frame(lua_State *L) {
function f_set_clip_rect (line 52) | static int f_set_clip_rect(lua_State *L) {
function f_draw_rect (line 63) | static int f_draw_rect(lua_State *L) {
function f_draw_text (line 75) | static int f_draw_text(lua_State *L) {
function luaopen_renderer (line 101) | int luaopen_renderer(lua_State *L) {
FILE: src/api/renderer_font.c
function f_load (line 6) | static int f_load(lua_State *L) {
function f_set_tab_width (line 17) | static int f_set_tab_width(lua_State *L) {
function f_gc (line 25) | static int f_gc(lua_State *L) {
function f_get_width (line 32) | static int f_get_width(lua_State *L) {
function f_get_height (line 40) | static int f_get_height(lua_State *L) {
function luaopen_renderer_font (line 56) | int luaopen_renderer_font(lua_State *L) {
FILE: src/api/system.c
function f_poll_event (line 38) | static int f_poll_event(lua_State *L) {
function f_wait_event (line 135) | static int f_wait_event(lua_State *L) {
function f_set_cursor (line 161) | static int f_set_cursor(lua_State *L) {
function f_set_window_title (line 174) | static int f_set_window_title(lua_State *L) {
function f_set_window_mode (line 184) | static int f_set_window_mode(lua_State *L) {
function f_window_has_focus (line 194) | static int f_window_has_focus(lua_State *L) {
function f_show_confirm_dialog (line 201) | static int f_show_confirm_dialog(lua_State *L) {
function f_chdir (line 228) | static int f_chdir(lua_State *L) {
function f_list_dir (line 236) | static int f_list_dir(lua_State *L) {
function f_absolute_path (line 267) | static int f_absolute_path(lua_State *L) {
function f_get_file_info (line 277) | static int f_get_file_info(lua_State *L) {
function f_get_clipboard (line 308) | static int f_get_clipboard(lua_State *L) {
function f_set_clipboard (line 317) | static int f_set_clipboard(lua_State *L) {
function f_get_time (line 324) | static int f_get_time(lua_State *L) {
function f_sleep (line 331) | static int f_sleep(lua_State *L) {
function f_exec (line 338) | static int f_exec(lua_State *L) {
function f_fuzzy_match (line 356) | static int f_fuzzy_match(lua_State *L) {
function luaopen_system (line 404) | int luaopen_system(lua_State *L) {
FILE: src/lib/lua52/lapi.c
function TValue (line 55) | static TValue *index2addr (lua_State *L, int idx) {
function growstack (line 86) | static void growstack (lua_State *L, void *ud) {
function LUA_API (line 92) | LUA_API int lua_checkstack (lua_State *L, int size) {
function LUA_API (line 112) | LUA_API void lua_xmove (lua_State *from, lua_State *to, int n) {
function LUA_API (line 127) | LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) {
function LUA_API (line 137) | LUA_API const lua_Number *lua_version (lua_State *L) {
function LUA_API (line 153) | LUA_API int lua_absindex (lua_State *L, int idx) {
function LUA_API (line 160) | LUA_API int lua_gettop (lua_State *L) {
function LUA_API (line 165) | LUA_API void lua_settop (lua_State *L, int idx) {
function LUA_API (line 182) | LUA_API void lua_remove (lua_State *L, int idx) {
function LUA_API (line 193) | LUA_API void lua_insert (lua_State *L, int idx) {
function moveto (line 206) | static void moveto (lua_State *L, TValue *fr, int idx) {
function LUA_API (line 217) | LUA_API void lua_replace (lua_State *L, int idx) {
function LUA_API (line 226) | LUA_API void lua_copy (lua_State *L, int fromidx, int toidx) {
function LUA_API (line 235) | LUA_API void lua_pushvalue (lua_State *L, int idx) {
function LUA_API (line 249) | LUA_API int lua_type (lua_State *L, int idx) {
function LUA_API (line 255) | LUA_API const char *lua_typename (lua_State *L, int t) {
function LUA_API (line 261) | LUA_API int lua_iscfunction (lua_State *L, int idx) {
function LUA_API (line 267) | LUA_API int lua_isnumber (lua_State *L, int idx) {
function LUA_API (line 274) | LUA_API int lua_isstring (lua_State *L, int idx) {
function LUA_API (line 280) | LUA_API int lua_isuserdata (lua_State *L, int idx) {
function LUA_API (line 286) | LUA_API int lua_rawequal (lua_State *L, int index1, int index2) {
function LUA_API (line 293) | LUA_API void lua_arith (lua_State *L, int op) {
function LUA_API (line 316) | LUA_API int lua_compare (lua_State *L, int index1, int index2, int op) {
function LUA_API (line 335) | LUA_API lua_Number lua_tonumberx (lua_State *L, int idx, int *isnum) {
function LUA_API (line 349) | LUA_API lua_Integer lua_tointegerx (lua_State *L, int idx, int *isnum) {
function LUA_API (line 366) | LUA_API lua_Unsigned lua_tounsignedx (lua_State *L, int idx, int *isnum) {
function LUA_API (line 383) | LUA_API int lua_toboolean (lua_State *L, int idx) {
function LUA_API (line 389) | LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) {
function LUA_API (line 407) | LUA_API size_t lua_rawlen (lua_State *L, int idx) {
function LUA_API (line 418) | LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) {
function LUA_API (line 427) | LUA_API void *lua_touserdata (lua_State *L, int idx) {
function LUA_API (line 437) | LUA_API lua_State *lua_tothread (lua_State *L, int idx) {
function LUA_API (line 443) | LUA_API const void *lua_topointer (lua_State *L, int idx) {
function LUA_API (line 465) | LUA_API void lua_pushnil (lua_State *L) {
function LUA_API (line 473) | LUA_API void lua_pushnumber (lua_State *L, lua_Number n) {
function LUA_API (line 483) | LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) {
function LUA_API (line 491) | LUA_API void lua_pushunsigned (lua_State *L, lua_Unsigned u) {
function LUA_API (line 501) | LUA_API const char *lua_pushlstring (lua_State *L, const char *s, size_t...
function LUA_API (line 513) | LUA_API const char *lua_pushstring (lua_State *L, const char *s) {
function LUA_API (line 531) | LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt,
function LUA_API (line 542) | LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) {
function LUA_API (line 555) | LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) {
function LUA_API (line 577) | LUA_API void lua_pushboolean (lua_State *L, int b) {
function LUA_API (line 585) | LUA_API void lua_pushlightuserdata (lua_State *L, void *p) {
function LUA_API (line 593) | LUA_API int lua_pushthread (lua_State *L) {
function LUA_API (line 608) | LUA_API void lua_getglobal (lua_State *L, const char *var) {
function LUA_API (line 619) | LUA_API void lua_gettable (lua_State *L, int idx) {
function LUA_API (line 628) | LUA_API void lua_getfield (lua_State *L, int idx, const char *k) {
function LUA_API (line 639) | LUA_API void lua_rawget (lua_State *L, int idx) {
function LUA_API (line 649) | LUA_API void lua_rawgeti (lua_State *L, int idx, int n) {
function LUA_API (line 660) | LUA_API void lua_rawgetp (lua_State *L, int idx, const void *p) {
function LUA_API (line 673) | LUA_API void lua_createtable (lua_State *L, int narray, int nrec) {
function LUA_API (line 686) | LUA_API int lua_getmetatable (lua_State *L, int objindex) {
function LUA_API (line 715) | LUA_API void lua_getuservalue (lua_State *L, int idx) {
function LUA_API (line 734) | LUA_API void lua_setglobal (lua_State *L, const char *var) {
function LUA_API (line 747) | LUA_API void lua_settable (lua_State *L, int idx) {
function LUA_API (line 758) | LUA_API void lua_setfield (lua_State *L, int idx, const char *k) {
function LUA_API (line 770) | LUA_API void lua_rawset (lua_State *L, int idx) {
function LUA_API (line 784) | LUA_API void lua_rawseti (lua_State *L, int idx, int n) {
function LUA_API (line 797) | LUA_API void lua_rawsetp (lua_State *L, int idx, const void *p) {
function LUA_API (line 812) | LUA_API int lua_setmetatable (lua_State *L, int objindex) {
function LUA_API (line 852) | LUA_API void lua_setuservalue (lua_State *L, int idx) {
function LUA_API (line 880) | LUA_API int lua_getctx (lua_State *L, int *ctx) {
function LUA_API (line 889) | LUA_API void lua_callk (lua_State *L, int nargs, int nresults, int ctx,
type CallS (line 915) | struct CallS { /* data to `f_call' */
function f_call (line 921) | static void f_call (lua_State *L, void *ud) {
function LUA_API (line 928) | LUA_API int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc,
function LUA_API (line 973) | LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data,
function LUA_API (line 997) | LUA_API int lua_dump (lua_State *L, lua_Writer writer, void *data) {
function LUA_API (line 1012) | LUA_API int lua_status (lua_State *L) {
function LUA_API (line 1021) | LUA_API int lua_gc (lua_State *L, int what, int data) {
function LUA_API (line 1105) | LUA_API int lua_error (lua_State *L) {
function LUA_API (line 1114) | LUA_API int lua_next (lua_State *L, int idx) {
function LUA_API (line 1131) | LUA_API void lua_concat (lua_State *L, int n) {
function LUA_API (line 1147) | LUA_API void lua_len (lua_State *L, int idx) {
function LUA_API (line 1157) | LUA_API lua_Alloc lua_getallocf (lua_State *L, void **ud) {
function LUA_API (line 1167) | LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud) {
function LUA_API (line 1175) | LUA_API void *lua_newuserdata (lua_State *L, size_t size) {
function LUA_API (line 1213) | LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) {
function LUA_API (line 1227) | LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) {
function UpVal (line 1246) | static UpVal **getupvalref (lua_State *L, int fidx, int n, LClosure **pf) {
function LUA_API (line 1257) | LUA_API void *lua_upvalueid (lua_State *L, int fidx, int n) {
function LUA_API (line 1276) | LUA_API void lua_upvaluejoin (lua_State *L, int fidx1, int n1,
FILE: src/lib/lua52/lauxlib.c
function findfield (line 43) | static int findfield (lua_State *L, int objidx, int level) {
function pushglobalfuncname (line 67) | static int pushglobalfuncname (lua_State *L, lua_Debug *ar) {
function pushfuncname (line 83) | static void pushfuncname (lua_State *L, lua_Debug *ar) {
function countlevels (line 101) | static int countlevels (lua_State *L) {
function LUALIB_API (line 116) | LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1,
function LUALIB_API (line 153) | LUALIB_API int luaL_argerror (lua_State *L, int narg, const char *extram...
function typeerror (line 171) | static int typeerror (lua_State *L, int narg, const char *tname) {
function tag_error (line 178) | static void tag_error (lua_State *L, int narg, int tag) {
function LUALIB_API (line 183) | LUALIB_API void luaL_where (lua_State *L, int level) {
function LUALIB_API (line 196) | LUALIB_API int luaL_error (lua_State *L, const char *fmt, ...) {
function LUALIB_API (line 207) | LUALIB_API int luaL_fileresult (lua_State *L, int stat, const char *fnam...
function LUALIB_API (line 247) | LUALIB_API int luaL_execresult (lua_State *L, int stat) {
function LUALIB_API (line 272) | LUALIB_API int luaL_newmetatable (lua_State *L, const char *tname) {
function LUALIB_API (line 284) | LUALIB_API void luaL_setmetatable (lua_State *L, const char *tname) {
function LUALIB_API (line 290) | LUALIB_API void *luaL_testudata (lua_State *L, int ud, const char *tname) {
function LUALIB_API (line 305) | LUALIB_API void *luaL_checkudata (lua_State *L, int ud, const char *tnam...
function LUALIB_API (line 320) | LUALIB_API int luaL_checkoption (lua_State *L, int narg, const char *def,
function LUALIB_API (line 333) | LUALIB_API void luaL_checkstack (lua_State *L, int space, const char *ms...
function LUALIB_API (line 345) | LUALIB_API void luaL_checktype (lua_State *L, int narg, int t) {
function LUALIB_API (line 351) | LUALIB_API void luaL_checkany (lua_State *L, int narg) {
function LUALIB_API (line 357) | LUALIB_API const char *luaL_checklstring (lua_State *L, int narg, size_t...
function LUALIB_API (line 364) | LUALIB_API const char *luaL_optlstring (lua_State *L, int narg,
function LUALIB_API (line 375) | LUALIB_API lua_Number luaL_checknumber (lua_State *L, int narg) {
function LUALIB_API (line 384) | LUALIB_API lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number...
function LUALIB_API (line 389) | LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int narg) {
function LUALIB_API (line 398) | LUALIB_API lua_Unsigned luaL_checkunsigned (lua_State *L, int narg) {
function LUALIB_API (line 407) | LUALIB_API lua_Integer luaL_optinteger (lua_State *L, int narg,
function LUALIB_API (line 413) | LUALIB_API lua_Unsigned luaL_optunsigned (lua_State *L, int narg,
function LUALIB_API (line 437) | LUALIB_API char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz) {
function LUALIB_API (line 459) | LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) {
function LUALIB_API (line 466) | LUALIB_API void luaL_addstring (luaL_Buffer *B, const char *s) {
function LUALIB_API (line 471) | LUALIB_API void luaL_pushresult (luaL_Buffer *B) {
function LUALIB_API (line 479) | LUALIB_API void luaL_pushresultsize (luaL_Buffer *B, size_t sz) {
function LUALIB_API (line 485) | LUALIB_API void luaL_addvalue (luaL_Buffer *B) {
function LUALIB_API (line 496) | LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B) {
function LUALIB_API (line 504) | LUALIB_API char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t...
function LUALIB_API (line 522) | LUALIB_API int luaL_ref (lua_State *L, int t) {
function LUALIB_API (line 543) | LUALIB_API void luaL_unref (lua_State *L, int t, int ref) {
type LoadF (line 562) | typedef struct LoadF {
function errfile (line 587) | static int errfile (lua_State *L, const char *what, int fnameindex) {
function skipBOM (line 596) | static int skipBOM (LoadF *lf) {
function skipcomment (line 617) | static int skipcomment (LoadF *lf, int *cp) {
function LUALIB_API (line 630) | LUALIB_API int luaL_loadfilex (lua_State *L, const char *filename,
type LoadS (line 666) | typedef struct LoadS {
function LUALIB_API (line 682) | LUALIB_API int luaL_loadbufferx (lua_State *L, const char *buff, size_t ...
function LUALIB_API (line 691) | LUALIB_API int luaL_loadstring (lua_State *L, const char *s) {
function LUALIB_API (line 699) | LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *eve...
function LUALIB_API (line 715) | LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) {
function LUALIB_API (line 725) | LUALIB_API int luaL_len (lua_State *L, int idx) {
function LUALIB_API (line 737) | LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *le...
function libsize (line 797) | static int libsize (const luaL_Reg *l) {
function LUALIB_API (line 810) | LUALIB_API void luaL_pushmodule (lua_State *L, const char *modname,
function LUALIB_API (line 827) | LUALIB_API void luaL_openlib (lua_State *L, const char *libname,
function LUALIB_API (line 848) | LUALIB_API void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) {
function LUALIB_API (line 866) | LUALIB_API int luaL_getsubtable (lua_State *L, int idx, const char *fnam...
function LUALIB_API (line 886) | LUALIB_API void luaL_requiref (lua_State *L, const char *modname,
function LUALIB_API (line 902) | LUALIB_API const char *luaL_gsub (lua_State *L, const char *s, const cha...
function panic (line 930) | static int panic (lua_State *L) {
function LUALIB_API (line 937) | LUALIB_API lua_State *luaL_newstate (void) {
function LUALIB_API (line 944) | LUALIB_API void luaL_checkversion_ (lua_State *L, lua_Number ver) {
FILE: src/lib/lua52/lauxlib.h
type luaL_Reg (line 23) | typedef struct luaL_Reg {
type luaL_Buffer (line 143) | typedef struct luaL_Buffer {
type luaL_Stream (line 188) | typedef struct luaL_Stream {
FILE: src/lib/lua52/lbaselib.c
function luaB_print (line 23) | static int luaB_print (lua_State *L) {
function luaB_tonumber (line 48) | static int luaB_tonumber (lua_State *L) {
function luaB_error (line 89) | static int luaB_error (lua_State *L) {
function luaB_getmetatable (line 101) | static int luaB_getmetatable (lua_State *L) {
function luaB_setmetatable (line 112) | static int luaB_setmetatable (lua_State *L) {
function luaB_rawequal (line 125) | static int luaB_rawequal (lua_State *L) {
function luaB_rawlen (line 133) | static int luaB_rawlen (lua_State *L) {
function luaB_rawget (line 142) | static int luaB_rawget (lua_State *L) {
function luaB_rawset (line 150) | static int luaB_rawset (lua_State *L) {
function luaB_collectgarbage (line 160) | static int luaB_collectgarbage (lua_State *L) {
function luaB_type (line 189) | static int luaB_type (lua_State *L) {
function pairsmeta (line 196) | static int pairsmeta (lua_State *L, const char *method, int iszero,
function luaB_next (line 213) | static int luaB_next (lua_State *L) {
function luaB_pairs (line 225) | static int luaB_pairs (lua_State *L) {
function ipairsaux (line 230) | static int ipairsaux (lua_State *L) {
function luaB_ipairs (line 240) | static int luaB_ipairs (lua_State *L) {
function load_aux (line 245) | static int load_aux (lua_State *L, int status, int envidx) {
function luaB_loadfile (line 262) | static int luaB_loadfile (lua_State *L) {
function luaB_load (line 309) | static int luaB_load (lua_State *L) {
function dofilecont (line 331) | static int dofilecont (lua_State *L) {
function luaB_dofile (line 336) | static int luaB_dofile (lua_State *L) {
function luaB_assert (line 346) | static int luaB_assert (lua_State *L) {
function luaB_select (line 353) | static int luaB_select (lua_State *L) {
function finishpcall (line 369) | static int finishpcall (lua_State *L, int status) {
function pcallcont (line 382) | static int pcallcont (lua_State *L) {
function luaB_pcall (line 388) | static int luaB_pcall (lua_State *L) {
function luaB_xpcall (line 398) | static int luaB_xpcall (lua_State *L) {
function luaB_tostring (line 410) | static int luaB_tostring (lua_State *L) {
function LUAMOD_API (line 447) | LUAMOD_API int luaopen_base (lua_State *L) {
FILE: src/lib/lua52/lbitlib.c
type lua_Unsigned (line 32) | typedef lua_Unsigned b_uint;
function b_uint (line 36) | static b_uint andaux (lua_State *L) {
function b_and (line 45) | static int b_and (lua_State *L) {
function b_test (line 52) | static int b_test (lua_State *L) {
function b_or (line 59) | static int b_or (lua_State *L) {
function b_xor (line 69) | static int b_xor (lua_State *L) {
function b_not (line 79) | static int b_not (lua_State *L) {
function b_shift (line 86) | static int b_shift (lua_State *L, b_uint r, int i) {
function b_lshift (line 103) | static int b_lshift (lua_State *L) {
function b_rshift (line 108) | static int b_rshift (lua_State *L) {
function b_arshift (line 113) | static int b_arshift (lua_State *L) {
function b_rot (line 128) | static int b_rot (lua_State *L, int i) {
function b_lrot (line 139) | static int b_lrot (lua_State *L) {
function b_rrot (line 144) | static int b_rrot (lua_State *L) {
function fieldargs (line 155) | static int fieldargs (lua_State *L, int farg, int *width) {
function b_extract (line 167) | static int b_extract (lua_State *L) {
function b_replace (line 177) | static int b_replace (lua_State *L) {
function LUAMOD_API (line 208) | LUAMOD_API int luaopen_bit32 (lua_State *L) {
FILE: src/lib/lua52/lcode.c
function isnumeral (line 32) | static int isnumeral(expdesc *e) {
function luaK_nil (line 37) | void luaK_nil (FuncState *fs, int from, int n) {
function luaK_jump (line 59) | int luaK_jump (FuncState *fs) {
function luaK_ret (line 69) | void luaK_ret (FuncState *fs, int first, int nret) {
function condjump (line 74) | static int condjump (FuncState *fs, OpCode op, int A, int B, int C) {
function fixjump (line 80) | static void fixjump (FuncState *fs, int pc, int dest) {
function luaK_getlabel (line 94) | int luaK_getlabel (FuncState *fs) {
function getjump (line 100) | static int getjump (FuncState *fs, int pc) {
function Instruction (line 109) | static Instruction *getjumpcontrol (FuncState *fs, int pc) {
function need_value (line 122) | static int need_value (FuncState *fs, int list) {
function patchtestreg (line 131) | static int patchtestreg (FuncState *fs, int node, int reg) {
function removevalues (line 144) | static void removevalues (FuncState *fs, int list) {
function patchlistaux (line 150) | static void patchlistaux (FuncState *fs, int list, int vtarget, int reg,
function dischargejpc (line 163) | static void dischargejpc (FuncState *fs) {
function luaK_patchlist (line 169) | void luaK_patchlist (FuncState *fs, int list, int target) {
function LUAI_FUNC (line 179) | LUAI_FUNC void luaK_patchclose (FuncState *fs, int list, int level) {
function luaK_patchtohere (line 192) | void luaK_patchtohere (FuncState *fs, int list) {
function luaK_concat (line 198) | void luaK_concat (FuncState *fs, int *l1, int l2) {
function luaK_code (line 212) | static int luaK_code (FuncState *fs, Instruction i) {
function luaK_codeABC (line 227) | int luaK_codeABC (FuncState *fs, OpCode o, int a, int b, int c) {
function luaK_codeABx (line 236) | int luaK_codeABx (FuncState *fs, OpCode o, int a, unsigned int bc) {
function codeextraarg (line 244) | static int codeextraarg (FuncState *fs, int a) {
function luaK_codek (line 250) | int luaK_codek (FuncState *fs, int reg, int k) {
function luaK_checkstack (line 261) | void luaK_checkstack (FuncState *fs, int n) {
function luaK_reserveregs (line 271) | void luaK_reserveregs (FuncState *fs, int n) {
function freereg (line 277) | static void freereg (FuncState *fs, int reg) {
function freeexp (line 285) | static void freeexp (FuncState *fs, expdesc *e) {
function addk (line 291) | static int addk (FuncState *fs, TValue *key, TValue *v) {
function luaK_stringK (line 319) | int luaK_stringK (FuncState *fs, TString *s) {
function luaK_numberK (line 326) | int luaK_numberK (FuncState *fs, lua_Number r) {
function boolK (line 343) | static int boolK (FuncState *fs, int b) {
function nilK (line 350) | static int nilK (FuncState *fs) {
function luaK_setreturns (line 359) | void luaK_setreturns (FuncState *fs, expdesc *e, int nresults) {
function luaK_setoneret (line 371) | void luaK_setoneret (FuncState *fs, expdesc *e) {
function luaK_dischargevars (line 383) | void luaK_dischargevars (FuncState *fs, expdesc *e) {
function code_label (line 415) | static int code_label (FuncState *fs, int A, int b, int jump) {
function discharge2reg (line 421) | static void discharge2reg (FuncState *fs, expdesc *e, int reg) {
function discharge2anyreg (line 460) | static void discharge2anyreg (FuncState *fs, expdesc *e) {
function exp2reg (line 468) | static void exp2reg (FuncState *fs, expdesc *e, int reg) {
function luaK_exp2nextreg (line 492) | void luaK_exp2nextreg (FuncState *fs, expdesc *e) {
function luaK_exp2anyreg (line 500) | int luaK_exp2anyreg (FuncState *fs, expdesc *e) {
function luaK_exp2anyregup (line 514) | void luaK_exp2anyregup (FuncState *fs, expdesc *e) {
function luaK_exp2val (line 520) | void luaK_exp2val (FuncState *fs, expdesc *e) {
function luaK_exp2RK (line 528) | int luaK_exp2RK (FuncState *fs, expdesc *e) {
function luaK_storevar (line 558) | void luaK_storevar (FuncState *fs, expdesc *var, expdesc *ex) {
function luaK_self (line 585) | void luaK_self (FuncState *fs, expdesc *e, expdesc *key) {
function invertjump (line 598) | static void invertjump (FuncState *fs, expdesc *e) {
function jumponcond (line 606) | static int jumponcond (FuncState *fs, expdesc *e, int cond) {
function luaK_goiftrue (line 621) | void luaK_goiftrue (FuncState *fs, expdesc *e) {
function luaK_goiffalse (line 645) | void luaK_goiffalse (FuncState *fs, expdesc *e) {
function codenot (line 668) | static void codenot (FuncState *fs, expdesc *e) {
function luaK_indexed (line 703) | void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k) {
function constfolding (line 713) | static int constfolding (OpCode op, expdesc *e1, expdesc *e2) {
function codearith (line 724) | static void codearith (FuncState *fs, OpCode op,
function codecomp (line 746) | static void codecomp (FuncState *fs, OpCode op, int cond, expdesc *e1,
function luaK_prefix (line 762) | void luaK_prefix (FuncState *fs, UnOpr op, expdesc *e, int line) {
function luaK_infix (line 786) | void luaK_infix (FuncState *fs, BinOpr op, expdesc *v) {
function luaK_posfix (line 813) | void luaK_posfix (FuncState *fs, BinOpr op,
function luaK_fixline (line 862) | void luaK_fixline (FuncState *fs, int line) {
function luaK_setlist (line 867) | void luaK_setlist (FuncState *fs, int base, int nelems, int tostore) {
FILE: src/lib/lua52/lcode.h
type BinOpr (line 26) | typedef enum BinOpr {
type UnOpr (line 36) | typedef enum UnOpr { OPR_MINUS, OPR_NOT, OPR_LEN, OPR_NOUNOPR } UnOpr;
FILE: src/lib/lua52/lcorolib.c
function auxresume (line 20) | static int auxresume (lua_State *L, lua_State *co, int narg) {
function luaB_coresume (line 49) | static int luaB_coresume (lua_State *L) {
function luaB_auxwrap (line 67) | static int luaB_auxwrap (lua_State *L) {
function luaB_cocreate (line 82) | static int luaB_cocreate (lua_State *L) {
function luaB_cowrap (line 92) | static int luaB_cowrap (lua_State *L) {
function luaB_yield (line 99) | static int luaB_yield (lua_State *L) {
function luaB_costatus (line 104) | static int luaB_costatus (lua_State *L) {
function luaB_corunning (line 132) | static int luaB_corunning (lua_State *L) {
function LUAMOD_API (line 151) | LUAMOD_API int luaopen_coroutine (lua_State *L) {
FILE: src/lib/lua52/ldblib.c
function checkstack (line 24) | static void checkstack (lua_State *L, lua_State *L1, int n) {
function db_getregistry (line 30) | static int db_getregistry (lua_State *L) {
function db_getmetatable (line 36) | static int db_getmetatable (lua_State *L) {
function db_setmetatable (line 45) | static int db_setmetatable (lua_State *L) {
function db_getuservalue (line 55) | static int db_getuservalue (lua_State *L) {
function db_setuservalue (line 64) | static int db_setuservalue (lua_State *L) {
function settabss (line 76) | static void settabss (lua_State *L, const char *i, const char *v) {
function settabsi (line 82) | static void settabsi (lua_State *L, const char *i, int v) {
function settabsb (line 88) | static void settabsb (lua_State *L, const char *i, int v) {
function lua_State (line 94) | static lua_State *getthread (lua_State *L, int *arg) {
function treatstackoption (line 106) | static void treatstackoption (lua_State *L, lua_State *L1, const char *f...
function db_getinfo (line 117) | static int db_getinfo (lua_State *L) {
function db_getlocal (line 168) | static int db_getlocal (lua_State *L) {
function db_setlocal (line 198) | static int db_setlocal (lua_State *L) {
function auxupvalue (line 213) | static int auxupvalue (lua_State *L, int get) {
function db_getupvalue (line 225) | static int db_getupvalue (lua_State *L) {
function db_setupvalue (line 230) | static int db_setupvalue (lua_State *L) {
function checkupval (line 236) | static int checkupval (lua_State *L, int argf, int argnup) {
function db_upvalueid (line 247) | static int db_upvalueid (lua_State *L) {
function db_upvaluejoin (line 254) | static int db_upvaluejoin (lua_State *L) {
function hookf (line 267) | static void hookf (lua_State *L, lua_Debug *ar) {
function makemask (line 284) | static int makemask (const char *smask, int count) {
function db_sethook (line 304) | static int db_sethook (lua_State *L) {
function db_gethook (line 333) | static int db_gethook (lua_State *L) {
function db_debug (line 354) | static int db_debug (lua_State *L) {
function db_traceback (line 369) | static int db_traceback (lua_State *L) {
function LUAMOD_API (line 404) | LUAMOD_API int luaopen_debug (lua_State *L) {
FILE: src/lib/lua52/ldebug.c
function currentpc (line 39) | static int currentpc (CallInfo *ci) {
function currentline (line 45) | static int currentline (CallInfo *ci) {
function swapextra (line 50) | static void swapextra (lua_State *L) {
function LUA_API (line 63) | LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int coun...
function LUA_API (line 78) | LUA_API lua_Hook lua_gethook (lua_State *L) {
function LUA_API (line 83) | LUA_API int lua_gethookmask (lua_State *L) {
function LUA_API (line 88) | LUA_API int lua_gethookcount (lua_State *L) {
function LUA_API (line 93) | LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar) {
function LUA_API (line 154) | LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int...
function LUA_API (line 178) | LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int...
function funcinfo (line 193) | static void funcinfo (lua_Debug *ar, Closure *cl) {
function collectvalidlines (line 211) | static void collectvalidlines (lua_State *L, Closure *f) {
function auxgetinfo (line 230) | static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar,
function LUA_API (line 281) | LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) {
function kname (line 327) | static void kname (Proto *p, int pc, int c, const char **name) {
function filterpc (line 347) | static int filterpc (int pc, int jmptarget) {
function findsetreg (line 357) | static int findsetreg (Proto *p, int lastpc, int reg) {
function isinstack (line 508) | static int isinstack (CallInfo *ci, const TValue *o) {
function l_noret (line 530) | l_noret luaG_typeerror (lua_State *L, const TValue *o, const char *op) {
function l_noret (line 549) | l_noret luaG_concaterror (lua_State *L, StkId p1, StkId p2) {
function l_noret (line 556) | l_noret luaG_aritherror (lua_State *L, const TValue *p1, const TValue *p...
function l_noret (line 564) | l_noret luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p...
function addinfo (line 574) | static void addinfo (lua_State *L, const char *msg) {
function l_noret (line 590) | l_noret luaG_errormsg (lua_State *L) {
function l_noret (line 603) | l_noret luaG_runerror (lua_State *L, const char *fmt, ...) {
FILE: src/lib/lua52/ldo.c
type lua_longjmp (line 77) | struct lua_longjmp {
function seterrorobj (line 84) | static void seterrorobj (lua_State *L, int errcode, StkId oldtop) {
function l_noret (line 103) | l_noret luaD_throw (lua_State *L, int errcode) {
function luaD_rawrunprotected (line 125) | int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) {
function correctstack (line 142) | static void correctstack (lua_State *L, TValue *oldstack) {
function luaD_reallocstack (line 161) | void luaD_reallocstack (lua_State *L, int newsize) {
function luaD_growstack (line 175) | void luaD_growstack (lua_State *L, int n) {
function stackinuse (line 194) | static int stackinuse (lua_State *L) {
function luaD_shrinkstack (line 205) | void luaD_shrinkstack (lua_State *L) {
function luaD_hook (line 217) | void luaD_hook (lua_State *L, int event, int line) {
function callhook (line 244) | static void callhook (lua_State *L, CallInfo *ci) {
function StkId (line 257) | static StkId adjust_varargs (lua_State *L, Proto *p, int actual) {
function StkId (line 274) | static StkId tryfuncTM (lua_State *L, StkId func) {
function luaD_precall (line 296) | int luaD_precall (lua_State *L, StkId func, int nresults) {
function luaD_poscall (line 362) | int luaD_poscall (lua_State *L, StkId firstResult) {
function luaD_call (line 393) | void luaD_call (lua_State *L, StkId func, int nResults, int allowyield) {
function finishCcall (line 408) | static void finishCcall (lua_State *L) {
function unroll (line 433) | static void unroll (lua_State *L, void *ud) {
function CallInfo (line 451) | static CallInfo *findpcall (lua_State *L) {
function recover (line 461) | static int recover (lua_State *L, int status) {
function l_noret (line 485) | static l_noret resume_error (lua_State *L, const char *msg, StkId firstA...
function resume (line 496) | static void resume (lua_State *L, void *ud) {
function LUA_API (line 535) | LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs) {
function LUA_API (line 567) | LUA_API int lua_yieldk (lua_State *L, int nresults, int ctx, lua_CFuncti...
function luaD_pcall (line 595) | int luaD_pcall (lua_State *L, Pfunc func, void *u,
type SParser (line 622) | struct SParser { /* data to `f_parser' */
function checkmode (line 631) | static void checkmode (lua_State *L, const char *mode, const char *x) {
function f_parser (line 640) | static void f_parser (lua_State *L, void *ud) {
function luaD_protectedparser (line 662) | int luaD_protectedparser (lua_State *L, ZIO *z, const char *name,
FILE: src/lib/lua52/ldump.c
type DumpState (line 18) | typedef struct {
function DumpBlock (line 29) | static void DumpBlock(const void* b, size_t size, DumpState* D)
function DumpChar (line 39) | static void DumpChar(int y, DumpState* D)
function DumpInt (line 45) | static void DumpInt(int x, DumpState* D)
function DumpNumber (line 50) | static void DumpNumber(lua_Number x, DumpState* D)
function DumpVector (line 55) | static void DumpVector(const void* b, int n, size_t size, DumpState* D)
function DumpString (line 61) | static void DumpString(const TString* s, DumpState* D)
function DumpConstants (line 80) | static void DumpConstants(const Proto* f, DumpState* D)
function DumpUpvalues (line 109) | static void DumpUpvalues(const Proto* f, DumpState* D)
function DumpDebug (line 120) | static void DumpDebug(const Proto* f, DumpState* D)
function DumpFunction (line 139) | static void DumpFunction(const Proto* f, DumpState* D)
function DumpHeader (line 152) | static void DumpHeader(DumpState* D)
function luaU_dump (line 162) | int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, i...
FILE: src/lib/lua52/lfunc.c
function Closure (line 23) | Closure *luaF_newCclosure (lua_State *L, int n) {
function Closure (line 30) | Closure *luaF_newLclosure (lua_State *L, int n) {
function UpVal (line 39) | UpVal *luaF_newupval (lua_State *L) {
function UpVal (line 47) | UpVal *luaF_findupval (lua_State *L, StkId level) {
function unlinkupval (line 75) | static void unlinkupval (UpVal *uv) {
function luaF_freeupval (line 82) | void luaF_freeupval (lua_State *L, UpVal *uv) {
function luaF_close (line 89) | void luaF_close (lua_State *L, StkId level) {
function Proto (line 110) | Proto *luaF_newproto (lua_State *L) {
function luaF_freeproto (line 135) | void luaF_freeproto (lua_State *L, Proto *f) {
FILE: src/lib/lua52/lgc.c
function removeentry (line 107) | static void removeentry (Node *n) {
function iscleared (line 121) | static int iscleared (global_State *g, const TValue *o) {
function luaC_barrier_ (line 135) | void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v) {
function luaC_barrierback_ (line 155) | void luaC_barrierback_ (lua_State *L, GCObject *o) {
function LUAI_FUNC (line 172) | LUAI_FUNC void luaC_barrierproto_ (lua_State *L, Proto *p, Closure *c) {
function luaC_checkupvalcolor (line 190) | void luaC_checkupvalcolor (global_State *g, UpVal *uv) {
function GCObject (line 212) | GCObject *luaC_newobj (lua_State *L, int tt, size_t sz, GCObject **list,
function reallymarkobject (line 243) | static void reallymarkobject (global_State *g, GCObject *o) {
function markmt (line 301) | static void markmt (global_State *g) {
function markbeingfnz (line 311) | static void markbeingfnz (global_State *g) {
function remarkupvals (line 324) | static void remarkupvals (global_State *g) {
function restartcollection (line 337) | static void restartcollection (global_State *g) {
function traverseweakvalue (line 355) | static void traverseweakvalue (global_State *g, Table *h) {
function traverseephemeron (line 378) | static int traverseephemeron (global_State *g, Table *h) {
function traversestrongtable (line 416) | static void traversestrongtable (global_State *g, Table *h) {
function lu_mem (line 434) | static lu_mem traversetable (global_State *g, Table *h) {
function traverseproto (line 457) | static int traverseproto (global_State *g, Proto *f) {
function lu_mem (line 479) | static lu_mem traverseCclosure (global_State *g, CClosure *cl) {
function lu_mem (line 486) | static lu_mem traverseLclosure (global_State *g, LClosure *cl) {
function lu_mem (line 495) | static lu_mem traversestack (global_State *g, lua_State *th) {
function propagatemark (line 521) | static void propagatemark (global_State *g) {
function propagateall (line 566) | static void propagateall (global_State *g) {
function propagatelist (line 571) | static void propagatelist (global_State *g, GCObject *l) {
function retraversegrays (line 582) | static void retraversegrays (global_State *g) {
function convergeephemerons (line 594) | static void convergeephemerons (global_State *g) {
function clearkeys (line 625) | static void clearkeys (global_State *g, GCObject *l, GCObject *f) {
function clearvalues (line 643) | static void clearvalues (global_State *g, GCObject *l, GCObject *f) {
function freeobj (line 663) | static void freeobj (lua_State *L, GCObject *o) {
function sweepthread (line 698) | static void sweepthread (lua_State *L, lua_State *L1) {
function GCObject (line 719) | static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count) {
function GCObject (line 758) | static GCObject **sweeptolive (lua_State *L, GCObject **p, int *n) {
function checkSizes (line 778) | static void checkSizes (lua_State *L) {
function GCObject (line 789) | static GCObject *udata2finalize (global_State *g) {
function dothecall (line 803) | static void dothecall (lua_State *L, void *ud) {
function GCTM (line 809) | static void GCTM (lua_State *L, int propagateerrors) {
function separatetobefnz (line 845) | static void separatetobefnz (lua_State *L, int all) {
function luaC_checkfinalizer (line 873) | void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) {
function setpause (line 913) | static void setpause (global_State *g, l_mem estimate) {
function entersweep (line 936) | static int entersweep (lua_State *L) {
function luaC_changemode (line 952) | void luaC_changemode (lua_State *L, int mode) {
function callallpendingfinalizers (line 974) | static void callallpendingfinalizers (lua_State *L, int propagateerrors) {
function luaC_freeallobjects (line 983) | void luaC_freeallobjects (lua_State *L) {
function l_mem (line 999) | static l_mem atomic (lua_State *L) {
function lu_mem (line 1040) | static lu_mem singlestep (lua_State *L) {
function luaC_runtilstate (line 1110) | void luaC_runtilstate (lua_State *L, int statesmask) {
function generationalcollection (line 1117) | static void generationalcollection (lua_State *L) {
function incstep (line 1139) | static void incstep (lua_State *L) {
function luaC_forcestep (line 1163) | void luaC_forcestep (lua_State *L) {
function luaC_step (line 1177) | void luaC_step (lua_State *L) {
function luaC_fullgc (line 1189) | void luaC_fullgc (lua_State *L, int isemergency) {
FILE: src/lib/lua52/linit.c
function LUALIB_API (line 52) | LUALIB_API void luaL_openlibs (lua_State *L) {
FILE: src/lib/lua52/liolib.c
type luaL_Stream (line 122) | typedef luaL_Stream LStream;
function io_type (line 130) | static int io_type (lua_State *L) {
function f_tostring (line 144) | static int f_tostring (lua_State *L) {
function FILE (line 154) | static FILE *tofile (lua_State *L) {
function LStream (line 168) | static LStream *newprefile (lua_State *L) {
function aux_close (line 176) | static int aux_close (lua_State *L) {
function io_close (line 184) | static int io_close (lua_State *L) {
function f_gc (line 192) | static int f_gc (lua_State *L) {
function io_fclose (line 203) | static int io_fclose (lua_State *L) {
function LStream (line 210) | static LStream *newfile (lua_State *L) {
function opencheck (line 218) | static void opencheck (lua_State *L, const char *fname, const char *mode) {
function io_open (line 226) | static int io_open (lua_State *L) {
function io_pclose (line 240) | static int io_pclose (lua_State *L) {
function io_popen (line 246) | static int io_popen (lua_State *L) {
function io_tmpfile (line 256) | static int io_tmpfile (lua_State *L) {
function FILE (line 263) | static FILE *getiofile (lua_State *L, const char *findex) {
function g_iofile (line 273) | static int g_iofile (lua_State *L, const char *f, const char *mode) {
function io_input (line 290) | static int io_input (lua_State *L) {
function io_output (line 295) | static int io_output (lua_State *L) {
function aux_lines (line 303) | static void aux_lines (lua_State *L, int toclose) {
function f_lines (line 316) | static int f_lines (lua_State *L) {
function io_lines (line 323) | static int io_lines (lua_State *L) {
function read_number (line 350) | static int read_number (lua_State *L, FILE *f) {
function test_eof (line 363) | static int test_eof (lua_State *L, FILE *f) {
function read_line (line 371) | static int read_line (lua_State *L, FILE *f, int chop) {
function read_all (line 395) | static void read_all (lua_State *L, FILE *f) {
function read_chars (line 411) | static int read_chars (lua_State *L, FILE *f, size_t n) {
function g_read (line 424) | static int g_read (lua_State *L, FILE *f, int first) {
function io_read (line 474) | static int io_read (lua_State *L) {
function f_read (line 479) | static int f_read (lua_State *L) {
function io_readline (line 484) | static int io_readline (lua_State *L) {
function g_write (line 514) | static int g_write (lua_State *L, FILE *f, int arg) {
function io_write (line 534) | static int io_write (lua_State *L) {
function f_write (line 539) | static int f_write (lua_State *L) {
function f_seek (line 546) | static int f_seek (lua_State *L) {
function f_setvbuf (line 565) | static int f_setvbuf (lua_State *L) {
function io_flush (line 577) | static int io_flush (lua_State *L) {
function f_flush (line 582) | static int f_flush (lua_State *L) {
function createmeta (line 623) | static void createmeta (lua_State *L) {
function io_noclose (line 635) | static int io_noclose (lua_State *L) {
function createstdfile (line 644) | static void createstdfile (lua_State *L, FILE *f, const char *k,
function LUAMOD_API (line 657) | LUAMOD_API int luaopen_io (lua_State *L) {
FILE: src/lib/lua52/llex.c
function save (line 52) | static void save (LexState *ls, int c) {
function luaX_init (line 65) | void luaX_init (lua_State *L) {
function l_noret (line 104) | static l_noret lexerror (LexState *ls, const char *msg, int token) {
function l_noret (line 114) | l_noret luaX_syntaxerror (LexState *ls, const char *msg) {
function TString (line 124) | TString *luaX_newstring (LexState *ls, const char *str, size_t l) {
function inclinenumber (line 148) | static void inclinenumber (LexState *ls) {
function luaX_setinput (line 159) | void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source,
function check_next (line 185) | static int check_next (LexState *ls, const char *set) {
function buffreplace (line 196) | static void buffreplace (LexState *ls, char from, char to) {
function trydecpoint (line 215) | static void trydecpoint (LexState *ls, SemInfo *seminfo) {
function read_numeral (line 232) | static void read_numeral (LexState *ls, SemInfo *seminfo) {
function skip_sep (line 257) | static int skip_sep (LexState *ls) {
function read_long_string (line 270) | static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) {
function escerror (line 305) | static void escerror (LexState *ls, int *c, int n, const char *msg) {
function readhexaesc (line 315) | static int readhexaesc (LexState *ls) {
function readdecesc (line 329) | static int readdecesc (LexState *ls) {
function read_string (line 343) | static void read_string (LexState *ls, int del, SemInfo *seminfo) {
function llex (line 401) | static int llex (LexState *ls, SemInfo *seminfo) {
function luaX_next (line 514) | void luaX_next (LexState *ls) {
function luaX_lookahead (line 525) | int luaX_lookahead (LexState *ls) {
FILE: src/lib/lua52/llex.h
type RESERVED (line 22) | enum RESERVED {
type SemInfo (line 37) | typedef union {
type Token (line 43) | typedef struct Token {
type LexState (line 51) | typedef struct LexState {
FILE: src/lib/lua52/llimits.h
type lu_int32 (line 18) | typedef unsigned LUA_INT32 lu_int32;
type LUAI_UMEM (line 20) | typedef LUAI_UMEM lu_mem;
type LUAI_MEM (line 22) | typedef LUAI_MEM l_mem;
type lu_byte (line 27) | typedef unsigned char lu_byte;
type LUAI_USER_ALIGNMENT_T (line 53) | typedef LUAI_USER_ALIGNMENT_T L_Umaxalign;
type LUAI_UACNUMBER (line 57) | typedef LUAI_UACNUMBER l_uacNumber;
type lu_int32 (line 133) | typedef lu_int32 Instruction;
FILE: src/lib/lua52/lmathlib.c
function math_abs (line 26) | static int math_abs (lua_State *L) {
function math_sin (line 31) | static int math_sin (lua_State *L) {
function math_sinh (line 36) | static int math_sinh (lua_State *L) {
function math_cos (line 41) | static int math_cos (lua_State *L) {
function math_cosh (line 46) | static int math_cosh (lua_State *L) {
function math_tan (line 51) | static int math_tan (lua_State *L) {
function math_tanh (line 56) | static int math_tanh (lua_State *L) {
function math_asin (line 61) | static int math_asin (lua_State *L) {
function math_acos (line 66) | static int math_acos (lua_State *L) {
function math_atan (line 71) | static int math_atan (lua_State *L) {
function math_atan2 (line 76) | static int math_atan2 (lua_State *L) {
function math_ceil (line 82) | static int math_ceil (lua_State *L) {
function math_floor (line 87) | static int math_floor (lua_State *L) {
function math_fmod (line 92) | static int math_fmod (lua_State *L) {
function math_modf (line 98) | static int math_modf (lua_State *L) {
function math_sqrt (line 106) | static int math_sqrt (lua_State *L) {
function math_pow (line 111) | static int math_pow (lua_State *L) {
function math_log (line 118) | static int math_log (lua_State *L) {
function math_log10 (line 133) | static int math_log10 (lua_State *L) {
function math_exp (line 139) | static int math_exp (lua_State *L) {
function math_deg (line 144) | static int math_deg (lua_State *L) {
function math_rad (line 149) | static int math_rad (lua_State *L) {
function math_frexp (line 154) | static int math_frexp (lua_State *L) {
function math_ldexp (line 161) | static int math_ldexp (lua_State *L) {
function math_min (line 170) | static int math_min (lua_State *L) {
function math_max (line 184) | static int math_max (lua_State *L) {
function math_random (line 198) | static int math_random (lua_State *L) {
function math_randomseed (line 226) | static int math_randomseed (lua_State *L) {
function LUAMOD_API (line 271) | LUAMOD_API int luaopen_math (lua_State *L) {
FILE: src/lib/lua52/lmem.c
function l_noret (line 66) | l_noret luaM_toobig (lua_State *L) {
FILE: src/lib/lua52/loadlib.c
function ll_unloadlib (line 129) | static void ll_unloadlib (void *lib) {
function lua_CFunction (line 141) | static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) {
function setprogdir (line 168) | static void setprogdir (lua_State *L) {
function pusherror (line 183) | static void pusherror (lua_State *L) {
function ll_unloadlib (line 193) | static void ll_unloadlib (void *lib) {
function lua_CFunction (line 206) | static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) {
function ll_unloadlib (line 229) | static void ll_unloadlib (void *lib) {
function lua_CFunction (line 241) | static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) {
function ll_addtoclib (line 261) | static void ll_addtoclib (lua_State *L, const char *path, void *plib) {
function gctm (line 275) | static int gctm (lua_State *L) {
function ll_loadfunc (line 286) | static int ll_loadfunc (lua_State *L, const char *path, const char *sym) {
function ll_loadlib (line 307) | static int ll_loadlib (lua_State *L) {
function readable (line 330) | static int readable (const char *filename) {
function ll_searchpath (line 372) | static int ll_searchpath (lua_State *L) {
function checkload (line 398) | static int checkload (lua_State *L, int stat, const char *filename) {
function searcher_Lua (line 410) | static int searcher_Lua (lua_State *L) {
function loadfunc (line 419) | static int loadfunc (lua_State *L, const char *filename, const char *mod...
function searcher_C (line 437) | static int searcher_C (lua_State *L) {
function searcher_Croot (line 445) | static int searcher_Croot (lua_State *L) {
function searcher_preload (line 468) | static int searcher_preload (lua_State *L) {
function findloader (line 478) | static void findloader (lua_State *L, const char *name) {
function ll_require (line 508) | static int ll_require (lua_State *L) {
function set_env (line 546) | static void set_env (lua_State *L) {
function dooptions (line 558) | static void dooptions (lua_State *L, int n) {
function modinit (line 570) | static void modinit (lua_State *L, const char *modname) {
function ll_module (line 585) | static int ll_module (lua_State *L) {
function ll_seeall (line 604) | static int ll_seeall (lua_State *L) {
function noenv (line 628) | static int noenv (lua_State *L) {
function setpath (line 637) | static void setpath (lua_State *L, const char *fieldname, const char *en...
function createsearcherstable (line 675) | static void createsearcherstable (lua_State *L) {
function LUAMOD_API (line 690) | LUAMOD_API int luaopen_package (lua_State *L) {
FILE: src/lib/lua52/lobject.c
function luaO_int2fb (line 36) | int luaO_int2fb (unsigned int x) {
function luaO_fb2int (line 48) | int luaO_fb2int (int x) {
function luaO_ceillog2 (line 55) | int luaO_ceillog2 (unsigned int x) {
function lua_Number (line 73) | lua_Number luaO_arith (int op, lua_Number v1, lua_Number v2) {
function luaO_hexavalue (line 87) | int luaO_hexavalue (int c) {
function isneg (line 98) | static int isneg (const char **s) {
function lua_Number (line 105) | static lua_Number readhexa (const char **s, lua_Number r, int *count) {
function lua_Number (line 118) | static lua_Number lua_strx2number (const char *s, char **endptr) {
function luaO_str2d (line 158) | int luaO_str2d (const char *s, size_t len, lua_Number *result) {
function pushstr (line 173) | static void pushstr (lua_State *L, const char *str, size_t l) {
function luaO_chunkid (line 252) | void luaO_chunkid (char *out, const char *source, size_t bufflen) {
FILE: src/lib/lua52/lobject.h
type GCObject (line 70) | typedef union GCObject GCObject;
type GCheader (line 83) | typedef struct GCheader {
type Value (line 92) | typedef union Value Value;
type TValue (line 106) | typedef struct lua_TValue TValue;
type lua_TValue (line 397) | struct lua_TValue {
type TValue (line 402) | typedef TValue *StkId;
type TString (line 410) | typedef union TString {
type Udata (line 431) | typedef union Udata {
type Upvaldesc (line 446) | typedef struct Upvaldesc {
type LocVar (line 457) | typedef struct LocVar {
type Proto (line 467) | typedef struct Proto {
type UpVal (line 496) | typedef struct UpVal {
type CClosure (line 516) | typedef struct CClosure {
type LClosure (line 523) | typedef struct LClosure {
type Closure (line 530) | typedef union Closure {
type TKey (line 545) | typedef union TKey {
type Node (line 554) | typedef struct Node {
type Table (line 560) | typedef struct Table {
FILE: src/lib/lua52/lopcodes.h
type OpMode (line 32) | enum OpMode {iABC, iABx, iAsBx, iAx}
type OpCode (line 165) | typedef enum {
type OpArgMask (line 265) | enum OpArgMask {
FILE: src/lib/lua52/loslib.c
function os_execute (line 80) | static int os_execute (lua_State *L) {
function os_remove (line 92) | static int os_remove (lua_State *L) {
function os_rename (line 98) | static int os_rename (lua_State *L) {
function os_tmpname (line 105) | static int os_tmpname (lua_State *L) {
function os_getenv (line 116) | static int os_getenv (lua_State *L) {
function os_clock (line 122) | static int os_clock (lua_State *L) {
function setfield (line 136) | static void setfield (lua_State *L, const char *key, int value) {
function setboolfield (line 141) | static void setboolfield (lua_State *L, const char *key, int value) {
function getboolfield (line 148) | static int getboolfield (lua_State *L, const char *key) {
function getfield (line 157) | static int getfield (lua_State *L, const char *key, int d) {
function os_date (line 195) | static int os_date (lua_State *L) {
function os_time (line 241) | static int os_time (lua_State *L) {
function os_difftime (line 266) | static int os_difftime (lua_State *L) {
function os_setlocale (line 275) | static int os_setlocale (lua_State *L) {
function os_exit (line 287) | static int os_exit (lua_State *L) {
function LUAMOD_API (line 319) | LUAMOD_API int luaopen_os (lua_State *L) {
FILE: src/lib/lua52/lparser.c
type BlockCnt (line 42) | typedef struct BlockCnt {
function anchor_token (line 60) | static void anchor_token (LexState *ls) {
function l_noret (line 71) | static l_noret semerror (LexState *ls, const char *msg) {
function l_noret (line 77) | static l_noret error_expected (LexState *ls, int token) {
function l_noret (line 83) | static l_noret errorlimit (FuncState *fs, int limit, const char *what) {
function checklimit (line 96) | static void checklimit (FuncState *fs, int v, int l, const char *what) {
function testnext (line 101) | static int testnext (LexState *ls, int c) {
function check (line 110) | static void check (LexState *ls, int c) {
function checknext (line 116) | static void checknext (LexState *ls, int c) {
function check_match (line 126) | static void check_match (LexState *ls, int what, int who, int where) {
function TString (line 139) | static TString *str_checkname (LexState *ls) {
function init_exp (line 148) | static void init_exp (expdesc *e, expkind k, int i) {
function codestring (line 155) | static void codestring (LexState *ls, expdesc *e, TString *s) {
function checkname (line 160) | static void checkname (LexState *ls, expdesc *e) {
function registerlocalvar (line 165) | static int registerlocalvar (LexState *ls, TString *varname) {
function new_localvar (line 178) | static void new_localvar (LexState *ls, TString *name) {
function new_localvarliteral_ (line 190) | static void new_localvarliteral_ (LexState *ls, const char *name, size_t...
function LocVar (line 198) | static LocVar *getlocvar (FuncState *fs, int i) {
function adjustlocalvars (line 205) | static void adjustlocalvars (LexState *ls, int nvars) {
function removevars (line 214) | static void removevars (FuncState *fs, int tolevel) {
function searchupvalue (line 221) | static int searchupvalue (FuncState *fs, TString *name) {
function newupvalue (line 231) | static int newupvalue (FuncState *fs, TString *name, expdesc *v) {
function searchvar (line 246) | static int searchvar (FuncState *fs, TString *n) {
function markupval (line 260) | static void markupval (FuncState *fs, int level) {
function singlevaraux (line 271) | static int singlevaraux (FuncState *fs, TString *n, expdesc *var, int ba...
function singlevar (line 297) | static void singlevar (LexState *ls, expdesc *var) {
function adjust_assign (line 310) | static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *...
function enterlevel (line 330) | static void enterlevel (LexState *ls) {
function closegoto (line 340) | static void closegoto (LexState *ls, int g, Labeldesc *label) {
function findlabel (line 364) | static int findlabel (LexState *ls, int g) {
function newlabelentry (line 384) | static int newlabelentry (LexState *ls, Labellist *l, TString *name,
function findgotos (line 402) | static void findgotos (LexState *ls, Labeldesc *lb) {
function movegotosout (line 420) | static void movegotosout (FuncState *fs, BlockCnt *bl) {
function enterblock (line 438) | static void enterblock (FuncState *fs, BlockCnt *bl, lu_byte isloop) {
function breaklabel (line 453) | static void breaklabel (LexState *ls) {
function l_noret (line 463) | static l_noret undefgoto (LexState *ls, Labeldesc *gt) {
function leaveblock (line 472) | static void leaveblock (FuncState *fs) {
function Proto (line 498) | static Proto *addprototype (LexState *ls) {
function codeclosure (line 520) | static void codeclosure (LexState *ls, expdesc *v) {
function open_func (line 527) | static void open_func (LexState *ls, FuncState *fs, BlockCnt *bl) {
function close_func (line 555) | static void close_func (LexState *ls) {
function block_follow (line 593) | static int block_follow (LexState *ls, int withuntil) {
function statlist (line 604) | static void statlist (LexState *ls) {
function fieldsel (line 616) | static void fieldsel (LexState *ls, expdesc *v) {
function yindex (line 627) | static void yindex (LexState *ls, expdesc *v) {
type ConsControl (line 643) | struct ConsControl {
function recfield (line 652) | static void recfield (LexState *ls, struct ConsControl *cc) {
function closelistfield (line 673) | static void closelistfield (FuncState *fs, struct ConsControl *cc) {
function lastlistfield (line 684) | static void lastlistfield (FuncState *fs, struct ConsControl *cc) {
function listfield (line 699) | static void listfield (LexState *ls, struct ConsControl *cc) {
function field (line 708) | static void field (LexState *ls, struct ConsControl *cc) {
function constructor (line 730) | static void constructor (LexState *ls, expdesc *t) {
function parlist (line 759) | static void parlist (LexState *ls) {
function body (line 788) | static void body (LexState *ls, expdesc *e, int ismethod, int line) {
function explist (line 810) | static int explist (LexState *ls, expdesc *v) {
function funcargs (line 823) | static void funcargs (LexState *ls, expdesc *f, int line) {
function primaryexp (line 877) | static void primaryexp (LexState *ls, expdesc *v) {
function suffixedexp (line 899) | static void suffixedexp (LexState *ls, expdesc *v) {
function simpleexp (line 937) | static void simpleexp (LexState *ls, expdesc *v) {
function UnOpr (line 987) | static UnOpr getunopr (int op) {
function BinOpr (line 997) | static BinOpr getbinopr (int op) {
function BinOpr (line 1037) | static BinOpr subexpr (LexState *ls, expdesc *v, int limit) {
function expr (line 1067) | static void expr (LexState *ls, expdesc *v) {
function block (line 1082) | static void block (LexState *ls) {
type LHS_assign (line 1096) | struct LHS_assign {
function check_conflict (line 1108) | static void check_conflict (LexState *ls, struct LHS_assign *lh, expdesc...
function assignment (line 1136) | static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) {
function cond (line 1169) | static int cond (LexState *ls) {
function gotostat (line 1179) | static void gotostat (LexState *ls, int pc) {
function checkrepeated (line 1195) | static void checkrepeated (FuncState *fs, Labellist *ll, TString *label) {
function skipnoopstat (line 1209) | static void skipnoopstat (LexState *ls) {
function labelstat (line 1215) | static void labelstat (LexState *ls, TString *label, int line) {
function whilestat (line 1233) | static void whilestat (LexState *ls, int line) {
function repeatstat (line 1252) | static void repeatstat (LexState *ls, int line) {
function exp1 (line 1272) | static int exp1 (LexState *ls) {
function forbody (line 1283) | static void forbody (LexState *ls, int base, int line, int nvars, int is...
function fornum (line 1309) | static void fornum (LexState *ls, TString *varname, int line) {
function forlist (line 1331) | static void forlist (LexState *ls, TString *indexname) {
function forstat (line 1356) | static void forstat (LexState *ls, int line) {
FILE: src/lib/lua52/lparser.h
type expkind (line 19) | typedef enum {
type expdesc (line 40) | typedef struct expdesc {
type Vardesc (line 57) | typedef struct Vardesc {
type Labeldesc (line 63) | typedef struct Labeldesc {
type Labellist (line 72) | typedef struct Labellist {
type Dyndata (line 80) | typedef struct Dyndata {
type BlockCnt (line 92) | struct BlockCnt
type FuncState (line 96) | typedef struct FuncState {
FILE: src/lib/lua52/lstate.c
type LX (line 59) | typedef struct LX {
type LG (line 70) | typedef struct LG {
function makeseed (line 89) | static unsigned int makeseed (lua_State *L) {
function luaE_setdebt (line 106) | void luaE_setdebt (global_State *g, l_mem debt) {
function CallInfo (line 112) | CallInfo *luaE_extendCI (lua_State *L) {
function luaE_freeCI (line 122) | void luaE_freeCI (lua_State *L) {
function stack_init (line 133) | static void stack_init (lua_State *L1, lua_State *L) {
function freestack (line 153) | static void freestack (lua_State *L) {
function init_registry (line 165) | static void init_registry (lua_State *L, global_State *g) {
function f_luaopen (line 183) | static void f_luaopen (lua_State *L, void *ud) {
function preinit_state (line 204) | static void preinit_state (lua_State *L, global_State *g) {
function close_state (line 223) | static void close_state (lua_State *L) {
function LUA_API (line 237) | LUA_API lua_State *lua_newthread (lua_State *L) {
function luaE_freethread (line 256) | void luaE_freethread (lua_State *L, lua_State *L1) {
function LUA_API (line 266) | LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) {
function LUA_API (line 317) | LUA_API void lua_close (lua_State *L) {
FILE: src/lib/lua52/lstate.h
type lua_longjmp (line 42) | struct lua_longjmp
type stringtable (line 59) | typedef struct stringtable {
type CallInfo (line 69) | typedef struct CallInfo {
type global_State (line 112) | typedef struct global_State {
type lua_State (line 154) | struct lua_State {
type Table (line 190) | struct Table
type Proto (line 191) | struct Proto
type UpVal (line 192) | struct UpVal
type lua_State (line 193) | struct lua_State
FILE: src/lib/lua52/lstring.c
function luaS_eqlngstr (line 33) | int luaS_eqlngstr (TString *a, TString *b) {
function luaS_eqstr (line 45) | int luaS_eqstr (TString *a, TString *b) {
function luaS_hash (line 51) | unsigned int luaS_hash (const char *str, size_t l, unsigned int seed) {
function luaS_resize (line 64) | void luaS_resize (lua_State *L, int newsize) {
function TString (line 98) | static TString *createstrobj (lua_State *L, const char *str, size_t l,
function TString (line 116) | static TString *newshrstr (lua_State *L, const char *str, size_t l,
function TString (line 133) | static TString *internshrstr (lua_State *L, const char *str, size_t l) {
function TString (line 156) | TString *luaS_newlstr (lua_State *L, const char *str, size_t l) {
function TString (line 170) | TString *luaS_new (lua_State *L, const char *str) {
function Udata (line 175) | Udata *luaS_newudata (lua_State *L, size_t s, Table *e) {
FILE: src/lib/lua52/lstrlib.c
function str_len (line 37) | static int str_len (lua_State *L) {
function posrelat (line 46) | static size_t posrelat (ptrdiff_t pos, size_t len) {
function str_sub (line 53) | static int str_sub (lua_State *L) {
function str_reverse (line 67) | static int str_reverse (lua_State *L) {
function str_lower (line 79) | static int str_lower (lua_State *L) {
function str_upper (line 92) | static int str_upper (lua_State *L) {
function str_rep (line 108) | static int str_rep (lua_State *L) {
function str_byte (line 133) | static int str_byte (lua_State *L) {
function str_char (line 152) | static int str_char (lua_State *L) {
function writer (line 167) | static int writer (lua_State *L, const void* b, size_t size, void* B) {
function str_dump (line 174) | static int str_dump (lua_State *L) {
type MatchState (line 198) | typedef struct MatchState {
function check_capture (line 226) | static int check_capture (MatchState *ms, int l) {
function capture_to_close (line 234) | static int capture_to_close (MatchState *ms) {
function match_class (line 266) | static int match_class (int c, int cl) {
function matchbracketclass (line 286) | static int matchbracketclass (int c, const char *p, const char *ec) {
function singlematch (line 309) | static int singlematch (MatchState *ms, const char *s, const char *p,
function push_onecapture (line 536) | static void push_onecapture (MatchState *ms, int i, const char *s,
function push_captures (line 555) | static int push_captures (MatchState *ms, const char *s, const char *e) {
function nospecials (line 566) | static int nospecials (const char *p, size_t l) {
function str_find_aux (line 577) | static int str_find_aux (lua_State *L, int find) {
function str_find (line 629) | static int str_find (lua_State *L) {
function str_match (line 634) | static int str_match (lua_State *L) {
function gmatch_aux (line 639) | static int gmatch_aux (lua_State *L) {
function gmatch (line 668) | static int gmatch (lua_State *L) {
function add_s (line 678) | static void add_s (MatchState *ms, luaL_Buffer *b, const char *s,
function add_value (line 704) | static void add_value (MatchState *ms, luaL_Buffer *b, const char *s,
function str_gsub (line 735) | static int str_gsub (lua_State *L) {
function addquoted (line 833) | static void addquoted (lua_State *L, luaL_Buffer *b, int arg) {
function addlenmod (line 882) | static void addlenmod (char *form, const char *lenmod) {
function str_format (line 892) | static int str_format (lua_State *L) {
function createmetatable (line 999) | static void createmetatable (lua_State *L) {
function LUAMOD_API (line 1014) | LUAMOD_API int luaopen_string (lua_State *L) {
FILE: src/lib/lua52/ltable.c
function Node (line 80) | static Node *hashnum (const Table *t, lua_Number n) {
function Node (line 97) | static Node *mainposition (const Table *t, const TValue *key) {
function arrayindex (line 127) | static int arrayindex (const TValue *key) {
function findindex (line 144) | static int findindex (lua_State *L, Table *t, StkId key) {
function luaH_next (line 169) | int luaH_next (lua_State *L, Table *t, StkId key) {
function computesizes (line 196) | static int computesizes (int nums[], int *narray) {
function countint (line 218) | static int countint (const TValue *key, int *nums) {
function numusearray (line 229) | static int numusearray (const Table *t, int *nums) {
function numusehash (line 254) | static int numusehash (const Table *t, int *nums, int *pnasize) {
function setarrayvector (line 270) | static void setarrayvector (lua_State *L, Table *t, int size) {
function setnodevector (line 279) | static void setnodevector (lua_State *L, Table *t, int size) {
function luaH_resize (line 304) | void luaH_resize (lua_State *L, Table *t, int nasize, int nhsize) {
function luaH_resizearray (line 337) | void luaH_resizearray (lua_State *L, Table *t, int nasize) {
function rehash (line 343) | static void rehash (lua_State *L, Table *t, const TValue *ek) {
function Table (line 368) | Table *luaH_new (lua_State *L) {
function luaH_free (line 379) | void luaH_free (lua_State *L, Table *t) {
function Node (line 387) | static Node *getfreepos (Table *t) {
function TValue (line 405) | TValue *luaH_newkey (lua_State *L, Table *t, const TValue *key) {
function TValue (line 446) | const TValue *luaH_getint (Table *t, int key) {
function TValue (line 466) | const TValue *luaH_getstr (Table *t, TString *key) {
function TValue (line 481) | const TValue *luaH_get (Table *t, const TValue *key) {
function TValue (line 510) | TValue *luaH_set (lua_State *L, Table *t, const TValue *key) {
function luaH_setint (line 518) | void luaH_setint (lua_State *L, Table *t, int key, TValue *value) {
function unbound_search (line 532) | static int unbound_search (Table *t, unsigned int j) {
function luaH_getn (line 560) | int luaH_getn (Table *t) {
function Node (line 582) | Node *luaH_mainposition (const Table *t, const TValue *key) {
function luaH_isdummy (line 586) | int luaH_isdummy (Node *n) { return isdummy(n); }
FILE: src/lib/lua52/ltablib.c
function maxn (line 25) | static int maxn (lua_State *L) {
function tinsert (line 42) | static int tinsert (lua_State *L) {
function tremove (line 69) | static int tremove (lua_State *L) {
function addfield (line 85) | static void addfield (lua_State *L, luaL_Buffer *b, int i) {
function tconcat (line 94) | static int tconcat (lua_State *L) {
function pack (line 120) | static int pack (lua_State *L) {
function unpack (line 137) | static int unpack (lua_State *L) {
function set2 (line 166) | static void set2 (lua_State *L, int i, int j) {
function sort_comp (line 171) | static int sort_comp (lua_State *L, int a, int b) {
function auxsort (line 186) | static void auxsort (lua_State *L, int l, int u) {
function sort (line 249) | static int sort (lua_State *L) {
function LUAMOD_API (line 276) | LUAMOD_API int luaopen_table (lua_State *L) {
FILE: src/lib/lua52/ltm.c
function luaT_init (line 32) | void luaT_init (lua_State *L) {
function TValue (line 52) | const TValue *luaT_gettm (Table *events, TMS event, TString *ename) {
function TValue (line 63) | const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event) {
FILE: src/lib/lua52/ltm.h
type TMS (line 18) | typedef enum {
FILE: src/lib/lua52/lua.h
type lua_State (line 54) | typedef struct lua_State lua_State;
type LUA_NUMBER (line 103) | typedef LUA_NUMBER lua_Number;
type LUA_INTEGER (line 107) | typedef LUA_INTEGER lua_Integer;
type LUA_UNSIGNED (line 110) | typedef LUA_UNSIGNED lua_Unsigned;
type lua_Debug (line 375) | typedef struct lua_Debug lua_Debug;
type lua_Debug (line 399) | struct lua_Debug {
FILE: src/lib/lua52/lundump.c
type LoadState (line 23) | typedef struct {
function l_noret (line 30) | static l_noret error(LoadState* S, const char* why)
function LoadBlock (line 45) | static void LoadBlock(LoadState* S, void* b, size_t size)
function LoadChar (line 50) | static int LoadChar(LoadState* S)
function LoadInt (line 57) | static int LoadInt(LoadState* S)
function lua_Number (line 65) | static lua_Number LoadNumber(LoadState* S)
function TString (line 72) | static TString* LoadString(LoadState* S)
function LoadCode (line 86) | static void LoadCode(LoadState* S, Proto* f)
function LoadConstants (line 96) | static void LoadConstants(LoadState* S, Proto* f)
function LoadUpvalues (line 135) | static void LoadUpvalues(LoadState* S, Proto* f)
function LoadDebug (line 149) | static void LoadDebug(LoadState* S, Proto* f)
function LoadFunction (line 171) | static void LoadFunction(LoadState* S, Proto* f)
function LoadHeader (line 190) | static void LoadHeader(LoadState* S)
function Closure (line 206) | Closure* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* n...
function luaU_header (line 244) | void luaU_header (lu_byte* h)
FILE: src/lib/lua52/lvm.c
function TValue (line 35) | const TValue *luaV_tonumber (const TValue *obj, TValue *n) {
function luaV_tostring (line 47) | int luaV_tostring (lua_State *L, StkId obj) {
function traceexec (line 60) | static void traceexec (lua_State *L) {
function callTM (line 93) | static void callTM (lua_State *L, const TValue *f, const TValue *p1,
function luaV_gettable (line 110) | void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId va...
function luaV_settable (line 136) | void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId va...
function call_binTM (line 175) | static int call_binTM (lua_State *L, const TValue *p1, const TValue *p2,
function TValue (line 186) | static const TValue *get_equalTM (lua_State *L, Table *mt1, Table *mt2,
function call_orderTM (line 200) | static int call_orderTM (lua_State *L, const TValue *p1, const TValue *p2,
function l_strcmp (line 209) | static int l_strcmp (const TString *ls, const TString *rs) {
function luaV_lessthan (line 231) | int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r) {
function luaV_lessequal (line 243) | int luaV_lessequal (lua_State *L, const TValue *l, const TValue *r) {
function luaV_equalobj_ (line 260) | int luaV_equalobj_ (lua_State *L, const TValue *t1, const TValue *t2) {
function luaV_concat (line 293) | void luaV_concat (lua_State *L, int total) {
function luaV_objlen (line 335) | void luaV_objlen (lua_State *L, StkId ra, const TValue *rb) {
function luaV_arith (line 360) | void luaV_arith (lua_State *L, StkId ra, const TValue *rb,
function Closure (line 379) | static Closure *getcached (Proto *p, UpVal **encup, StkId base) {
function pushclosure (line 401) | static void pushclosure (lua_State *L, Proto *p, UpVal **encup, StkId base,
function luaV_finishOp (line 423) | void luaV_finishOp (lua_State *L) {
function luaV_execute (line 534) | void luaV_execute (lua_State *L) {
FILE: src/lib/lua52/lzio.c
function luaZ_fill (line 21) | int luaZ_fill (ZIO *z) {
function luaZ_init (line 36) | void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data) {
function luaZ_read (line 46) | size_t luaZ_read (ZIO *z, void *b, size_t n) {
FILE: src/lib/lua52/lzio.h
type ZIO (line 18) | typedef struct Zio ZIO;
type Mbuffer (line 23) | typedef struct Mbuffer {
type Zio (line 54) | struct Zio {
FILE: src/lib/stb/stb_truetype.h
function my_stbtt_initfont (line 285) | void my_stbtt_initfont(void)
function my_stbtt_print (line 297) | void my_stbtt_print(float x, float y, char *text)
function main (line 330) | int main(int argc, char **argv)
function main (line 371) | int main(int arg, char **argv)
type stbtt_uint8 (line 424) | typedef unsigned char stbtt_uint8;
type stbtt_int8 (line 425) | typedef signed char stbtt_int8;
type stbtt_uint16 (line 426) | typedef unsigned short stbtt_uint16;
type stbtt_int16 (line 427) | typedef signed short stbtt_int16;
type stbtt_uint32 (line 428) | typedef unsigned int stbtt_uint32;
type stbtt_int32 (line 429) | typedef signed int stbtt_int32;
type stbtt__buf (line 509) | typedef struct
type stbtt_bakedchar (line 523) | typedef struct
type stbtt_aligned_quad (line 539) | typedef struct
type stbtt_packedchar (line 571) | typedef struct
type stbtt_pack_context (line 578) | typedef struct stbtt_pack_context stbtt_pack_context;
type stbtt_fontinfo (line 579) | typedef struct stbtt_fontinfo stbtt_fontinfo;
type stbrp_rect (line 581) | typedef struct stbrp_rect stbrp_rect;
type stbtt_pack_range (line 615) | typedef struct
type stbtt_pack_context (line 674) | struct stbtt_pack_context {
type stbtt_fontinfo (line 709) | struct stbtt_fontinfo
type stbtt_kerningentry (line 800) | typedef struct stbtt_kerningentry
type stbtt_vertex (line 831) | typedef struct
type stbtt__bitmap (line 919) | typedef struct
function stbtt_uint8 (line 1128) | static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b)
function stbtt_uint8 (line 1135) | static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b)
function stbtt__buf_seek (line 1142) | static void stbtt__buf_seek(stbtt__buf *b, int o)
function stbtt__buf_skip (line 1148) | static void stbtt__buf_skip(stbtt__buf *b, int o)
function stbtt_uint32 (line 1153) | static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n)
function stbtt__buf (line 1163) | static stbtt__buf stbtt__new_buf(const void *p, size_t size)
function stbtt__buf (line 1176) | static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s)
function stbtt__buf (line 1185) | static stbtt__buf stbtt__cff_get_index(stbtt__buf *b)
function stbtt_uint32 (line 1199) | static stbtt_uint32 stbtt__cff_int(stbtt__buf *b)
function stbtt__cff_skip_operand (line 1211) | static void stbtt__cff_skip_operand(stbtt__buf *b) {
function stbtt__buf (line 1226) | static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key)
function stbtt__dict_get_ints (line 1241) | static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, s...
function stbtt__cff_index_count (line 1249) | static int stbtt__cff_index_count(stbtt__buf *b)
function stbtt__buf (line 1255) | static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i)
function stbtt_uint16 (line 1281) | static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
function stbtt_int16 (line 1282) | static stbtt_int16 ttSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
function stbtt_uint32 (line 1283) | static stbtt_uint32 ttULONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]...
function stbtt_int32 (line 1284) | static stbtt_int32 ttLONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]...
function stbtt__isfont (line 1289) | static int stbtt__isfont(stbtt_uint8 *font)
function stbtt_uint32 (line 1301) | static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fo...
function stbtt_GetFontOffsetForIndex_internal (line 1314) | static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_coll...
function stbtt_GetNumberOfFonts_internal (line 1333) | static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection)
function stbtt__buf (line 1349) | static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
function stbtt__get_svg (line 1363) | static int stbtt__get_svg(stbtt_fontinfo *info)
function stbtt_InitFont_internal (line 1378) | static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *...
function STBTT_DEF (line 1491) | STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unico...
function STBTT_DEF (line 1584) | STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int un...
function stbtt_setvertex (line 1589) | static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int...
function stbtt__GetGlyfOffset (line 1598) | static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_in...
function STBTT_DEF (line 1620) | STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_in...
function STBTT_DEF (line 1636) | STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int code...
function STBTT_DEF (line 1641) | STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_i...
function stbtt__close_shape (line 1653) | static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, ...
function stbtt__GetGlyphShapeTT (line 1669) | static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_...
type stbtt__csctx (line 1892) | typedef struct
function stbtt__track_vertex (line 1906) | static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_in...
function stbtt__csctx_v (line 1915) | static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int3...
function stbtt__csctx_close_shape (line 1931) | static void stbtt__csctx_close_shape(stbtt__csctx *ctx)
function stbtt__csctx_rmove_to (line 1937) | static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy)
function stbtt__csctx_rline_to (line 1945) | static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy)
function stbtt__csctx_rccurve_to (line 1952) | static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float ...
function stbtt__buf (line 1963) | static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n)
function stbtt__buf (line 1977) | static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info,...
function stbtt__run_charstring (line 2005) | static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_i...
function stbtt__GetGlyphShapeT2 (line 2264) | static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_...
function stbtt__GetGlyphInfoT2 (line 2281) | static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_i...
function STBTT_DEF (line 2292) | STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_...
function STBTT_DEF (line 2300) | STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int gl...
function STBTT_DEF (line 2312) | STBTT_DEF int stbtt_GetKerningTableLength(const stbtt_fontinfo *info)
function STBTT_DEF (line 2327) | STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_ke...
function stbtt__GetGlyphKernInfoAdvance (line 2354) | static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, i...
function stbtt_int32 (line 2384) | static stbtt_int32 stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, ...
function stbtt_int32 (line 2443) | static stbtt_int32 stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int...
function stbtt_int32 (line 2495) | static stbtt_int32 stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo ...
function STBTT_DEF (line 2623) | STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int...
function STBTT_DEF (line 2635) | STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info,...
function STBTT_DEF (line 2642) | STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, in...
function STBTT_DEF (line 2647) | STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *as...
function STBTT_DEF (line 2654) | STBTT_DEF int stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int ...
function STBTT_DEF (line 2665) | STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int ...
function STBTT_DEF (line 2673) | STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, fl...
function STBTT_DEF (line 2679) | STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *in...
function STBTT_DEF (line 2685) | STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v)
function STBTT_DEF (line 2690) | STBTT_DEF stbtt_uint8 *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl)
function STBTT_DEF (line 2707) | STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, cons...
function STBTT_DEF (line 2724) | STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unic...
function STBTT_DEF (line 2734) | STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *fon...
function STBTT_DEF (line 2752) | STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int g...
function STBTT_DEF (line 2757) | STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo ...
function STBTT_DEF (line 2762) | STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, i...
type stbtt__hheap_chunk (line 2771) | typedef struct stbtt__hheap_chunk
type stbtt__hheap (line 2776) | typedef struct stbtt__hheap
function stbtt__hheap_free (line 2804) | static void stbtt__hheap_free(stbtt__hheap *hh, void *p)
function stbtt__hheap_cleanup (line 2810) | static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata)
type stbtt__edge (line 2820) | typedef struct stbtt__edge {
type stbtt__active_edge (line 2826) | typedef struct stbtt__active_edge
function stbtt__active_edge (line 2848) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
function stbtt__active_edge (line 2870) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
function stbtt__fill_active_edges (line 2895) | static void stbtt__fill_active_edges(unsigned char *scanline, int len, s...
function stbtt__rasterize_sorted_edges (line 2937) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
function stbtt__handle_clipped_edge (line 3041) | static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__ac...
function stbtt__fill_active_edges_new (line 3078) | static void stbtt__fill_active_edges_new(float *scanline, float *scanlin...
function stbtt__rasterize_sorted_edges (line 3240) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
function stbtt__sort_edges_ins_sort (line 3342) | static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n)
function stbtt__sort_edges_quicksort (line 3360) | static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n)
function stbtt__sort_edges (line 3422) | static void stbtt__sort_edges(stbtt__edge *p, int n)
type stbtt__point (line 3428) | typedef struct
function stbtt__rasterize (line 3433) | static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, i...
function stbtt__add_point (line 3490) | static void stbtt__add_point(stbtt__point *points, int n, float x, float y)
function stbtt__tesselate_curve (line 3498) | static int stbtt__tesselate_curve(stbtt__point *points, int *num_points,...
function stbtt__tesselate_cubic (line 3518) | static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points...
function stbtt__point (line 3561) | static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num...
function STBTT_DEF (line 3638) | STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_...
function STBTT_DEF (line 3651) | STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata)
function STBTT_DEF (line 3701) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info,...
function STBTT_DEF (line 3720) | STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigne...
function STBTT_DEF (line 3730) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fo...
function STBTT_DEF (line 3735) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *i...
function STBTT_DEF (line 3745) | STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, uns...
function stbtt_BakeFontBitmap_internal (line 3756) | static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset...
function STBTT_DEF (line 3802) | STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int p...
type stbrp_coord (line 3830) | typedef int stbrp_coord;
type stbrp_context (line 3843) | typedef struct
type stbrp_node (line 3849) | typedef struct
type stbrp_rect (line 3854) | struct stbrp_rect
function stbrp_init_target (line 3860) | static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_...
function stbrp_pack_rects (line 3871) | static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int ...
function STBTT_DEF (line 3900) | STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pi...
function STBTT_DEF (line 3932) | STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc)
function STBTT_DEF (line 3938) | STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsign...
function STBTT_DEF (line 3948) | STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *sp...
function stbtt__h_prefilter (line 3955) | static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int ...
function stbtt__v_prefilter (line 4017) | static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int ...
function stbtt__oversample_shift (line 4079) | static float stbtt__oversample_shift(int oversample)
function STBTT_DEF (line 4092) | STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, c...
function STBTT_DEF (line 4127) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontin...
function STBTT_DEF (line 4151) | STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *sp...
function STBTT_DEF (line 4240) | STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, st...
function STBTT_DEF (line 4245) | STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsign...
function STBTT_DEF (line 4281) | STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigne...
function STBTT_DEF (line 4293) | STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata...
function STBTT_DEF (line 4306) | STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int...
function stbtt__ray_intersect_bezier (line 4341) | static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], floa...
function equal (line 4405) | static int equal(float *a, float *b)
function stbtt__compute_crossings_x (line 4410) | static int stbtt__compute_crossings_x(float x, float y, int nverts, stbt...
function stbtt__cuberoot (line 4479) | static float stbtt__cuberoot( float x )
function stbtt__solve_cubic (line 4488) | static int stbtt__solve_cubic(float a, float b, float c, float* r)
function STBTT_DEF (line 4705) | STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata)
function stbtt_int32 (line 4716) | static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint...
function stbtt_CompareUTF8toUTF16_bigendian_internal (line 4755) | static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len...
function STBTT_DEF (line 4762) | STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font...
function stbtt__matchpair (line 4783) | static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint...
function stbtt__matches (line 4830) | static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_ui...
function stbtt_FindMatchingFont_internal (line 4859) | static int stbtt_FindMatchingFont_internal(unsigned char *font_collectio...
function STBTT_DEF (line 4875) | STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
function STBTT_DEF (line 4882) | STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int...
function STBTT_DEF (line 4887) | STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
function STBTT_DEF (line 4892) | STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *...
function STBTT_DEF (line 4897) | STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, cons...
function STBTT_DEF (line 4902) | STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len...
FILE: src/main.c
function get_scale (line 18) | static double get_scale(void) {
function get_exe_filename (line 29) | static void get_exe_filename(char *buf, int sz) {
function init_window_icon (line 47) | static void init_window_icon(void) {
function main (line 64) | int main(int argc, char **argv) {
FILE: src/rencache.c
type Command (line 16) | typedef struct {
function min (line 37) | static inline int min(int a, int b) { return a < b ? a : b; }
function max (line 38) | static inline int max(int a, int b) { return a > b ? a : b; }
function hash (line 43) | static void hash(unsigned *h, const void *data, int size) {
function cell_idx (line 51) | static inline int cell_idx(int x, int y) {
function rects_overlap (line 56) | static inline bool rects_overlap(RenRect a, RenRect b) {
function RenRect (line 62) | static RenRect intersect_rects(RenRect a, RenRect b) {
function RenRect (line 71) | static RenRect merge_rects(RenRect a, RenRect b) {
function Command (line 80) | static Command* push_command(int type, int size) {
function next_command (line 95) | static bool next_command(Command **prev) {
function rencache_show_debug (line 105) | void rencache_show_debug(bool enable) {
function rencache_free_font (line 110) | void rencache_free_font(RenFont *font) {
function rencache_set_clip_rect (line 116) | void rencache_set_clip_rect(RenRect rect) {
function rencache_draw_rect (line 122) | void rencache_draw_rect(RenRect rect, RenColor color) {
function rencache_draw_text (line 132) | int rencache_draw_text(RenFont *font, const char *text, int x, int y, Re...
function rencache_invalidate (line 155) | void rencache_invalidate(void) {
function rencache_begin_frame (line 160) | void rencache_begin_frame(void) {
function update_overlapping_cells (line 172) | static void update_overlapping_cells(RenRect r, unsigned h) {
function push_rect (line 187) | static void push_rect(RenRect r, int *count) {
function rencache_end_frame (line 201) | void rencache_end_frame(void) {
FILE: src/renderer.c
type RenImage (line 10) | struct RenImage {
type GlyphSet (line 15) | typedef struct {
type RenFont (line 20) | struct RenFont {
function ren_init (line 59) | void ren_init(SDL_Window *win) {
function ren_update_rects (line 67) | void ren_update_rects(RenRect *rects, int count) {
function ren_set_clip_rect (line 77) | void ren_set_clip_rect(RenRect rect) {
function ren_get_size (line 85) | void ren_get_size(int *x, int *y) {
function RenImage (line 92) | RenImage* ren_new_image(int width, int height) {
function ren_free_image (line 103) | void ren_free_image(RenImage *image) {
function GlyphSet (line 108) | static GlyphSet* load_glyphset(RenFont *font, int idx) {
function GlyphSet (line 153) | static GlyphSet* get_glyphset(RenFont *font, int codepoint) {
function RenFont (line 162) | RenFont* ren_load_font(const char *filename, float size) {
function ren_free_font (line 206) | void ren_free_font(RenFont *font) {
function ren_set_font_tab_width (line 219) | void ren_set_font_tab_width(RenFont *font, int n) {
function ren_get_font_tab_width (line 225) | int ren_get_font_tab_width(RenFont *font) {
function ren_get_font_width (line 231) | int ren_get_font_width(RenFont *font, const char *text) {
function ren_get_font_height (line 245) | int ren_get_font_height(RenFont *font) {
function RenColor (line 250) | static inline RenColor blend_pixel(RenColor dst, RenColor src) {
function RenColor (line 259) | static inline RenColor blend_pixel2(RenColor dst, RenColor src, RenColor...
function ren_draw_rect (line 278) | void ren_draw_rect(RenRect rect, RenColor color) {
function ren_draw_image (line 301) | void ren_draw_image(RenImage *image, RenRect *sub, int x, int y, RenColo...
function ren_draw_text (line 336) | int ren_draw_text(RenFont *font, const char *text, int x, int y, RenColo...
FILE: src/renderer.h
type RenImage (line 7) | typedef struct RenImage RenImage;
type RenFont (line 8) | typedef struct RenFont RenFont;
type RenColor (line 10) | typedef struct { uint8_t b, g, r, a; } RenColor;
type RenRect (line 11) | typedef struct { int x, y, width, height; } RenRect;
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_assert.h
type SDL_AssertState (line 102) | typedef enum
type SDL_AssertData (line 111) | typedef struct SDL_AssertData
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_atomic.h
type SDL_SpinLock (line 89) | typedef int SDL_SpinLock;
type SDL_atomic_t (line 216) | typedef struct { int value; } SDL_atomic_t;
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_audio.h
type Uint16 (line 64) | typedef Uint16 SDL_AudioFormat;
type SDL_AudioSpec (line 178) | typedef struct SDL_AudioSpec
type SDL_AudioCVT (line 192) | struct SDL_AudioCVT
type SDL_AudioCVT (line 193) | struct SDL_AudioCVT
type SDL_AUDIOCVT_PACKED (line 226) | typedef struct SDL_AudioCVT
type Uint32 (line 330) | typedef Uint32 SDL_AudioDeviceID;
type SDL_AudioStatus (line 395) | typedef enum
type _SDL_AudioStream (line 531) | struct _SDL_AudioStream
type SDL_AudioStream (line 532) | typedef struct _SDL_AudioStream SDL_AudioStream;
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_bits.h
function SDL_FORCE_INLINE (line 60) | SDL_FORCE_INLINE int
function SDL_FORCE_INLINE (line 104) | SDL_FORCE_INLINE SDL_bool
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_blendmode.h
type SDL_BlendMode (line 40) | typedef enum
type SDL_BlendOperation (line 62) | typedef enum
type SDL_BlendFactor (line 75) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_egl.h
type khronos_int32_t (line 177) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 178) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 179) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 180) | typedef uint64_t khronos_uint64_t;
type khronos_int32_t (line 190) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 191) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 192) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 193) | typedef uint64_t khronos_uint64_t;
type __int32 (line 202) | typedef __int32 khronos_int32_t;
type khronos_uint32_t (line 203) | typedef unsigned __int32 khronos_uint32_t;
type __int64 (line 204) | typedef __int64 khronos_int64_t;
type khronos_uint64_t (line 205) | typedef unsigned __int64 khronos_uint64_t;
type khronos_int32_t (line 214) | typedef int khronos_int32_t;
type khronos_uint32_t (line 215) | typedef unsigned int khronos_uint32_t;
type khronos_int64_t (line 217) | typedef long int khronos_int64_t;
type khronos_uint64_t (line 218) | typedef unsigned long int khronos_uint64_t;
type khronos_int64_t (line 220) | typedef long long int khronos_int64_t;
type khronos_uint64_t (line 221) | typedef unsigned long long int khronos_uint64_t;
type khronos_int32_t (line 231) | typedef int khronos_int32_t;
type khronos_uint32_t (line 232) | typedef unsigned int khronos_uint32_t;
type khronos_int32_t (line 242) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 243) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 244) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 245) | typedef uint64_t khronos_uint64_t;
type khronos_int8_t (line 255) | typedef signed char khronos_int8_t;
type khronos_uint8_t (line 256) | typedef unsigned char khronos_uint8_t;
type khronos_int16_t (line 257) | typedef signed short int khronos_int16_t;
type khronos_uint16_t (line 258) | typedef unsigned short int khronos_uint16_t;
type khronos_intptr_t (line 266) | typedef signed long long int khronos_intptr_t;
type khronos_uintptr_t (line 267) | typedef unsigned long long int khronos_uintptr_t;
type khronos_ssize_t (line 268) | typedef signed long long int khronos_ssize_t;
type khronos_usize_t (line 269) | typedef unsigned long long int khronos_usize_t;
type khronos_intptr_t (line 271) | typedef signed long int khronos_intptr_t;
type khronos_uintptr_t (line 272) | typedef unsigned long int khronos_uintptr_t;
type khronos_ssize_t (line 273) | typedef signed long int khronos_ssize_t;
type khronos_usize_t (line 274) | typedef unsigned long int khronos_usize_t;
type khronos_float_t (line 281) | typedef float khronos_float_t;
type khronos_uint64_t (line 294) | typedef khronos_uint64_t khronos_utime_nanoseconds_t;
type khronos_int64_t (line 295) | typedef khronos_int64_t khronos_stime_nanoseconds_t;
type khronos_boolean_enum_t (line 311) | typedef enum {
type IUnknown (line 397) | typedef IUnknown * EGLNativeWindowType;
type IUnknown (line 398) | typedef IUnknown * EGLNativePixmapType;
type IUnknown (line 399) | typedef IUnknown * EGLNativeDisplayType;
type HDC (line 401) | typedef HDC EGLNativeDisplayType;
type HBITMAP (line 402) | typedef HBITMAP EGLNativePixmapType;
type HWND (line 403) | typedef HWND EGLNativeWindowType;
type EGLNativeDisplayType (line 408) | typedef int EGLNativeDisplayType;
type wl_display (line 414) | struct wl_display
type wl_egl_pixmap (line 415) | struct wl_egl_pixmap
type wl_egl_window (line 416) | struct wl_egl_window
type gbm_device (line 420) | struct gbm_device
type gbm_bo (line 421) | struct gbm_bo
type ANativeWindow (line 426) | struct ANativeWindow
type egl_native_pixmap_t (line 427) | struct egl_native_pixmap_t
type ANativeWindow (line 429) | struct ANativeWindow
type egl_native_pixmap_t (line 430) | struct egl_native_pixmap_t
type MirEGLNativeDisplayType (line 436) | typedef MirEGLNativeDisplayType EGLNativeDisplayType;
type MirEGLNativeWindowType (line 438) | typedef MirEGLNativeWindowType EGLNativeWindowType;
type khronos_uintptr_t (line 445) | typedef khronos_uintptr_t EGLNativePixmapType;
type khronos_uintptr_t (line 446) | typedef khronos_uintptr_t EGLNativeWindowType;
type Display (line 454) | typedef Display *EGLNativeDisplayType;
type Pixmap (line 455) | typedef Pixmap EGLNativePixmapType;
type Window (line 456) | typedef Window EGLNativeWindowType;
type EGLNativeDisplayType (line 465) | typedef EGLNativeDisplayType NativeDisplayType;
type EGLNativePixmapType (line 466) | typedef EGLNativePixmapType NativePixmapType;
type EGLNativeWindowType (line 467) | typedef EGLNativeWindowType NativeWindowType;
type khronos_int32_t (line 477) | typedef khronos_int32_t EGLint;
type EGLBoolean (line 534) | typedef unsigned int EGLBoolean;
type EGLenum (line 649) | typedef unsigned int EGLenum;
type EGLAttrib (line 719) | typedef intptr_t EGLAttrib;
type khronos_utime_nanoseconds_t (line 720) | typedef khronos_utime_nanoseconds_t EGLTime;
type EGLAttribKHR (line 846) | typedef intptr_t EGLAttribKHR;
type EGLAttribKHR (line 847) | typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay ...
type khronos_utime_nanoseconds_t (line 888) | typedef khronos_utime_nanoseconds_t EGLTimeKHR;
type khronos_uint64_t (line 1063) | typedef khronos_uint64_t EGLuint64KHR;
type EGLNativeFileDescriptorKHR (line 1110) | typedef int EGLNativeFileDescriptorKHR;
type khronos_ssize_t (line 1180) | typedef khronos_ssize_t EGLsizeiANDROID;
type EGLsizeiANDROID (line 1182) | typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsi...
type EGLAttrib (line 1342) | typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDispl...
type EGLAttrib (line 1343) | typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDispla...
type const (line 1377) | typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLen...
type const (line 1378) | typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPRO...
type const (line 1379) | typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPRO...
type EGLClientPixmapHI (line 1455) | struct EGLClientPixmapHI {
type EGLClientPixmapHI (line 1462) | struct EGLClientPixmapHI
type EGLClientPixmapHI (line 1464) | struct EGLClientPixmapHI
type khronos_utime_nanoseconds_t (line 1611) | typedef khronos_utime_nanoseconds_t EGLTimeNV;
type khronos_utime_nanoseconds_t (line 1645) | typedef khronos_utime_nanoseconds_t EGLuint64NV;
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_endian.h
function SDL_FORCE_INLINE (line 70) | SDL_FORCE_INLINE Uint16
function SDL_FORCE_INLINE (line 77) | SDL_FORCE_INLINE Uint16
function SDL_FORCE_INLINE (line 84) | SDL_FORCE_INLINE Uint16
function SDL_FORCE_INLINE (line 93) | SDL_FORCE_INLINE Uint16
function SDL_FORCE_INLINE (line 106) | SDL_FORCE_INLINE Uint16
function SDL_FORCE_INLINE (line 114) | SDL_FORCE_INLINE Uint32
function SDL_FORCE_INLINE (line 121) | SDL_FORCE_INLINE Uint32
function SDL_FORCE_INLINE (line 128) | SDL_FORCE_INLINE Uint32
function SDL_FORCE_INLINE (line 139) | SDL_FORCE_INLINE Uint32
function SDL_FORCE_INLINE (line 161) | SDL_FORCE_INLINE Uint32
function SDL_FORCE_INLINE (line 170) | SDL_FORCE_INLINE Uint64
function SDL_FORCE_INLINE (line 188) | SDL_FORCE_INLINE Uint64
function SDL_FORCE_INLINE (line 195) | SDL_FORCE_INLINE Uint64
function SDL_FORCE_INLINE (line 212) | SDL_FORCE_INLINE float
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_error.h
type SDL_errorcode (line 55) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_events.h
type SDL_EventType (line 55) | typedef enum
type SDL_CommonEvent (line 171) | typedef struct SDL_CommonEvent
type SDL_DisplayEvent (line 180) | typedef struct SDL_DisplayEvent
type SDL_WindowEvent (line 195) | typedef struct SDL_WindowEvent
type SDL_KeyboardEvent (line 211) | typedef struct SDL_KeyboardEvent
type SDL_TextEditingEvent (line 227) | typedef struct SDL_TextEditingEvent
type SDL_TextInputEvent (line 242) | typedef struct SDL_TextInputEvent
type SDL_MouseMotionEvent (line 253) | typedef struct SDL_MouseMotionEvent
type SDL_MouseButtonEvent (line 269) | typedef struct SDL_MouseButtonEvent
type SDL_MouseWheelEvent (line 286) | typedef struct SDL_MouseWheelEvent
type SDL_JoyAxisEvent (line 300) | typedef struct SDL_JoyAxisEvent
type SDL_JoyBallEvent (line 316) | typedef struct SDL_JoyBallEvent
type SDL_JoyHatEvent (line 332) | typedef struct SDL_JoyHatEvent
type SDL_JoyButtonEvent (line 352) | typedef struct SDL_JoyButtonEvent
type SDL_JoyDeviceEvent (line 366) | typedef struct SDL_JoyDeviceEvent
type SDL_ControllerAxisEvent (line 377) | typedef struct SDL_ControllerAxisEvent
type SDL_ControllerButtonEvent (line 394) | typedef struct SDL_ControllerButtonEvent
type SDL_ControllerDeviceEvent (line 409) | typedef struct SDL_ControllerDeviceEvent
type SDL_AudioDeviceEvent (line 419) | typedef struct SDL_AudioDeviceEvent
type SDL_TouchFingerEvent (line 434) | typedef struct SDL_TouchFingerEvent
type SDL_MultiGestureEvent (line 451) | typedef struct SDL_MultiGestureEvent
type SDL_DollarGestureEvent (line 468) | typedef struct SDL_DollarGestureEvent
type SDL_DropEvent (line 486) | typedef struct SDL_DropEvent
type SDL_SensorEvent (line 498) | typedef struct SDL_SensorEvent
type SDL_QuitEvent (line 509) | typedef struct SDL_QuitEvent
type SDL_OSEvent (line 518) | typedef struct SDL_OSEvent
type SDL_UserEvent (line 527) | typedef struct SDL_UserEvent
type SDL_SysWMmsg (line 538) | struct SDL_SysWMmsg
type SDL_SysWMmsg (line 539) | typedef struct SDL_SysWMmsg SDL_SysWMmsg;
type SDL_SysWMEvent (line 547) | typedef struct SDL_SysWMEvent
type SDL_Event (line 557) | typedef union SDL_Event
type SDL_eventaction (line 613) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_gamecontroller.h
type _SDL_GameController (line 57) | struct _SDL_GameController
type SDL_GameController (line 58) | typedef struct _SDL_GameController SDL_GameController;
type SDL_GameControllerBindType (line 61) | typedef enum
type SDL_GameControllerButtonBind (line 72) | typedef struct SDL_GameControllerButtonBind
type SDL_GameControllerAxis (line 272) | typedef enum
type SDL_GameControllerButton (line 316) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_gesture.h
type Sint64 (line 44) | typedef Sint64 SDL_GestureID;
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_haptic.h
type _SDL_Haptic (line 140) | struct _SDL_Haptic
type SDL_Haptic (line 141) | typedef struct _SDL_Haptic SDL_Haptic;
type SDL_HapticDirection (line 450) | typedef struct SDL_HapticDirection
type SDL_HapticConstant (line 468) | typedef struct SDL_HapticConstant
type SDL_HapticPeriodic (line 549) | typedef struct SDL_HapticPeriodic
type SDL_HapticCondition (line 602) | typedef struct SDL_HapticCondition
type SDL_HapticRamp (line 639) | typedef struct SDL_HapticRamp
type SDL_HapticLeftRight (line 676) | typedef struct SDL_HapticLeftRight
type SDL_HapticCustom (line 704) | typedef struct SDL_HapticCustom
type SDL_HapticEffect (line 800) | typedef union SDL_HapticEffect
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_hints.h
type SDL_HintPriority (line 1180) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_joystick.h
type _SDL_Joystick (line 66) | struct _SDL_Joystick
type SDL_Joystick (line 67) | typedef struct _SDL_Joystick SDL_Joystick;
type SDL_JoystickGUID (line 70) | typedef struct {
type Sint32 (line 81) | typedef Sint32 SDL_JoystickID;
type SDL_JoystickType (line 83) | typedef enum
type SDL_JoystickPowerLevel (line 97) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_keyboard.h
type SDL_Keysym (line 47) | typedef struct SDL_Keysym
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_keycode.h
type Sint32 (line 45) | typedef Sint32 SDL_Keycode;
type SDL_Keymod (line 325) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_log.h
type SDL_LogPriority (line 102) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_messagebox.h
type SDL_MessageBoxFlags (line 37) | typedef enum
type SDL_MessageBoxButtonFlags (line 47) | typedef enum
type SDL_MessageBoxButtonData (line 56) | typedef struct
type SDL_MessageBoxColor (line 66) | typedef struct
type SDL_MessageBoxColorType (line 71) | typedef enum
type SDL_MessageBoxColorScheme (line 84) | typedef struct
type SDL_MessageBoxData (line 92) | typedef struct
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_mouse.h
type SDL_Cursor (line 41) | typedef struct SDL_Cursor SDL_Cursor;
type SDL_SystemCursor (line 46) | typedef enum
type SDL_MouseWheelDirection (line 66) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_mutex.h
type SDL_mutex (line 58) | struct SDL_mutex
type SDL_mutex (line 59) | typedef struct SDL_mutex SDL_mutex;
type SDL_semaphore (line 106) | struct SDL_semaphore
type SDL_sem (line 107) | typedef struct SDL_semaphore SDL_sem;
type SDL_cond (line 166) | struct SDL_cond
type SDL_cond (line 167) | typedef struct SDL_cond SDL_cond;
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengl.h
type GLenum (line 176) | typedef unsigned int GLenum;
type GLboolean (line 177) | typedef unsigned char GLboolean;
type GLbitfield (line 178) | typedef unsigned int GLbitfield;
type GLvoid (line 179) | typedef void GLvoid;
type GLbyte (line 180) | typedef signed char GLbyte;
type GLshort (line 181) | typedef short GLshort;
type GLint (line 182) | typedef int GLint;
type GLubyte (line 183) | typedef unsigned char GLubyte;
type GLushort (line 184) | typedef unsigned short GLushort;
type GLuint (line 185) | typedef unsigned int GLuint;
type GLsizei (line 186) | typedef int GLsizei;
type GLfloat (line 187) | typedef float GLfloat;
type GLclampf (line 188) | typedef float GLclampf;
type GLdouble (line 189) | typedef double GLdouble;
type GLclampd (line 190) | typedef double GLclampd;
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengl_glext.h
type GLsizeiptr (line 469) | typedef long GLsizeiptr;
type GLintptr (line 470) | typedef long GLintptr;
type GLsizeiptr (line 472) | typedef ptrdiff_t GLsizeiptr;
type GLintptr (line 473) | typedef ptrdiff_t GLintptr;
type GLchar (line 569) | typedef char GLchar;
type GLhalf (line 887) | typedef unsigned short GLhalf;
type GLubyte (line 1166) | typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLu...
type __GLsync (line 1371) | struct __GLsync
type __int32 (line 1401) | typedef __int32 int32_t;
type __int64 (line 1402) | typedef __int64 int64_t;
type GLuint64 (line 1409) | typedef uint64_t GLuint64;
type GLint64 (line 1410) | typedef int64_t GLint64;
type const (line 1759) | typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint ...
type const (line 1760) | typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, ...
type const (line 2463) | typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint prog...
type const (line 2466) | typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint pr...
type const (line 2467) | typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLui...
type GLuint64EXT (line 2597) | typedef uint64_t GLuint64EXT;
type _cl_context (line 2645) | struct _cl_context
type _cl_event (line 2646) | struct _cl_event
type struct (line 2649) | typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl...
type _cl_context (line 2651) | struct _cl_context
type _cl_event (line 2651) | struct _cl_event
type GLhalfARB (line 3042) | typedef unsigned short GLhalfARB;
type GLhandleARB (line 3575) | typedef unsigned int GLhandleARB;
type GLcharARB (line 3577) | typedef char GLcharARB;
type GLchar (line 3731) | typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, ...
type GLsizeiptrARB (line 4149) | typedef long GLsizeiptrARB;
type GLintptrARB (line 4150) | typedef long GLintptrARB;
type GLsizeiptrARB (line 4152) | typedef ptrdiff_t GLsizeiptrARB;
type GLintptrARB (line 4153) | typedef ptrdiff_t GLintptrARB;
type GLint (line 4495) | typedef GLint GLfixed;
type GLint64EXT (line 4828) | typedef int64_t GLint64EXT;
type GLenum (line 5629) | typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, co...
type GLuint (line 7587) | typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n...
type GLhalfNV (line 8856) | typedef unsigned short GLhalfNV;
type GLintptr (line 9740) | typedef GLintptr GLvdpauSurfaceNV;
type const (line 9747) | typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC...
type const (line 9748) | typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPRO...
type GLuint (line 9973) | typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n,...
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengles2_gl2.h
type GLvoid (line 21) | typedef void GLvoid;
type GLchar (line 22) | typedef char GLchar;
type GLenum (line 23) | typedef unsigned int GLenum;
type GLboolean (line 24) | typedef unsigned char GLboolean;
type GLbitfield (line 25) | typedef unsigned int GLbitfield;
type khronos_int8_t (line 26) | typedef khronos_int8_t GLbyte;
type GLshort (line 27) | typedef short GLshort;
type GLint (line 28) | typedef int GLint;
type GLsizei (line 29) | typedef int GLsizei;
type khronos_uint8_t (line 30) | typedef khronos_uint8_t GLubyte;
type GLushort (line 31) | typedef unsigned short GLushort;
type GLuint (line 32) | typedef unsigned int GLuint;
type khronos_float_t (line 33) | typedef khronos_float_t GLfloat;
type khronos_float_t (line 34) | typedef khronos_float_t GLclampf;
type khronos_int32_t (line 35) | typedef khronos_int32_t GLfixed;
type khronos_intptr_t (line 38) | typedef khronos_intptr_t GLintptr;
type khronos_ssize_t (line 39) | typedef khronos_ssize_t GLsizeiptr;
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengles2_gl2ext.h
type khronos_int64_t (line 27) | typedef khronos_int64_t GLint64;
type khronos_uint64_t (line 28) | typedef khronos_uint64_t GLuint64;
type __GLsync (line 29) | struct __GLsync
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengles2_khrplatform.h
type khronos_int32_t (line 142) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 143) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 144) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 145) | typedef uint64_t khronos_uint64_t;
type khronos_int32_t (line 155) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 156) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 157) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 158) | typedef uint64_t khronos_uint64_t;
type __int32 (line 167) | typedef __int32 khronos_int32_t;
type khronos_uint32_t (line 168) | typedef unsigned __int32 khronos_uint32_t;
type __int64 (line 169) | typedef __int64 khronos_int64_t;
type khronos_uint64_t (line 170) | typedef unsigned __int64 khronos_uint64_t;
type khronos_int32_t (line 179) | typedef int khronos_int32_t;
type khronos_uint32_t (line 180) | typedef unsigned int khronos_uint32_t;
type khronos_int64_t (line 182) | typedef long int khronos_int64_t;
type khronos_uint64_t (line 183) | typedef unsigned long int khronos_uint64_t;
type khronos_int64_t (line 185) | typedef long long int khronos_int64_t;
type khronos_uint64_t (line 186) | typedef unsigned long long int khronos_uint64_t;
type khronos_int32_t (line 196) | typedef int khronos_int32_t;
type khronos_uint32_t (line 197) | typedef unsigned int khronos_uint32_t;
type khronos_int32_t (line 207) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 208) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 209) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 210) | typedef uint64_t khronos_uint64_t;
type khronos_int8_t (line 220) | typedef signed char khronos_int8_t;
type khronos_uint8_t (line 221) | typedef unsigned char khronos_uint8_t;
type khronos_int16_t (line 222) | typedef signed short int khronos_int16_t;
type khronos_uint16_t (line 223) | typedef unsigned short int khronos_uint16_t;
type khronos_intptr_t (line 231) | typedef signed long long int khronos_intptr_t;
type khronos_uintptr_t (line 232) | typedef unsigned long long int khronos_uintptr_t;
type khronos_ssize_t (line 233) | typedef signed long long int khronos_ssize_t;
type khronos_usize_t (line 234) | typedef unsigned long long int khronos_usize_t;
type khronos_intptr_t (line 236) | typedef signed long int khronos_intptr_t;
type khronos_uintptr_t (line 237) | typedef unsigned long int khronos_uintptr_t;
type khronos_ssize_t (line 238) | typedef signed long int khronos_ssize_t;
type khronos_usize_t (line 239) | typedef unsigned long int khronos_usize_t;
type khronos_float_t (line 246) | typedef float khronos_float_t;
type khronos_uint64_t (line 259) | typedef khronos_uint64_t khronos_utime_nanoseconds_t;
type khronos_int64_t (line 260) | typedef khronos_int64_t khronos_stime_nanoseconds_t;
type khronos_boolean_enum_t (line 276) | typedef enum {
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_pixels.h
type SDL_PixelFormatEnum (line 171) | typedef enum
type SDL_Color (line 295) | typedef struct SDL_Color
type SDL_Palette (line 304) | typedef struct SDL_Palette
type SDL_PixelFormat (line 315) | typedef struct SDL_PixelFormat
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_power.h
type SDL_PowerState (line 42) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_rect.h
type SDL_Point (line 48) | typedef struct SDL_Point
type SDL_FPoint (line 60) | typedef struct SDL_FPoint
type SDL_Rect (line 77) | typedef struct SDL_Rect
type SDL_FRect (line 87) | typedef struct SDL_FRect
function SDL_FORCE_INLINE (line 99) | SDL_FORCE_INLINE SDL_bool SDL_PointInRect(const SDL_Point *p, const SDL_...
function SDL_FORCE_INLINE (line 108) | SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r)
function SDL_FORCE_INLINE (line 116) | SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Re...
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_render.h
type SDL_RendererFlags (line 64) | typedef enum
type SDL_RendererInfo (line 78) | typedef struct SDL_RendererInfo
type SDL_TextureAccess (line 91) | typedef enum
type SDL_TextureModulate (line 101) | typedef enum
type SDL_RendererFlip (line 111) | typedef enum
type SDL_Renderer (line 121) | struct SDL_Renderer
type SDL_Renderer (line 122) | typedef struct SDL_Renderer SDL_Renderer;
type SDL_Texture (line 127) | struct SDL_Texture
type SDL_Texture (line 128) | typedef struct SDL_Texture SDL_Texture;
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_rwops.h
type SDL_RWops (line 52) | typedef struct SDL_RWops
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_scancode.h
type SDL_Scancode (line 43) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_sensor.h
type _SDL_Sensor (line 51) | struct _SDL_Sensor
type SDL_Sensor (line 52) | typedef struct _SDL_Sensor SDL_Sensor;
type Sint32 (line 60) | typedef Sint32 SDL_SensorID;
type SDL_SensorType (line 69) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_shape.h
type WindowShapeMode (line 80) | typedef enum {
type SDL_WindowShapeParams (line 94) | typedef union {
type SDL_WindowShapeMode (line 101) | typedef struct SDL_WindowShapeMode {
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_stdinc.h
type SDL_bool (line 159) | typedef int SDL_bool;
type SDL_bool (line 161) | typedef enum
type Sint8 (line 173) | typedef int8_t Sint8;
type Uint8 (line 179) | typedef uint8_t Uint8;
type Sint16 (line 185) | typedef int16_t Sint16;
type Uint16 (line 191) | typedef uint16_t Uint16;
type Sint32 (line 197) | typedef int32_t Sint32;
type Uint32 (line 203) | typedef uint32_t Uint32;
type Sint64 (line 210) | typedef int64_t Sint64;
type Uint64 (line 216) | typedef uint64_t Uint64;
type SDL_DUMMY_ENUM (line 337) | typedef enum
function SDL_FORCE_INLINE (line 420) | SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords)
type _SDL_iconv_t (line 547) | struct _SDL_iconv_t
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_surface.h
type SDL_Surface (line 70) | typedef struct SDL_Surface
type SDL_Surface (line 98) | struct SDL_Surface
type SDL_Surface (line 99) | struct SDL_Surface
type SDL_YUV_CONVERSION_MODE (line 104) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_system.h
type IDirect3DDevice9 (line 60) | typedef struct IDirect3DDevice9 IDirect3DDevice9;
type SDL_WinRT_Path (line 183) | typedef enum
type SDL_WinRT_DeviceFamily (line 207) | typedef enum
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_syswm.h
type SDL_SysWMinfo (line 44) | struct SDL_SysWMinfo
type NSWindow (line 84) | typedef struct _NSWindow NSWindow;
type UIWindow (line 92) | typedef struct _UIWindow UIWindow;
type UIViewController (line 93) | typedef struct _UIViewController UIViewController;
type Uint32 (line 95) | typedef Uint32 GLuint;
type ANativeWindow (line 99) | typedef struct ANativeWindow ANativeWindow;
type SDL_SYSWM_TYPE (line 119) | typedef enum
type SDL_SysWMmsg (line 138) | struct SDL_SysWMmsg
type SDL_SysWMinfo (line 197) | struct SDL_SysWMinfo
type SDL_SysWMinfo (line 295) | typedef struct SDL_SysWMinfo SDL_SysWMinfo;
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_test_common.h
type SDLTest_CommonState (line 51) | typedef struct
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_test_crc32.h
type SDLTest_Crc32Context (line 66) | typedef struct {
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_test_harness.h
type SDLTest_TestCaseReference (line 75) | typedef struct SDLTest_TestCaseReference {
type SDLTest_TestSuiteReference (line 89) | typedef struct SDLTest_TestSuiteReference {
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_test_images.h
type SDLTest_SurfaceImage_t (line 50) | typedef struct SDLTest_SurfaceImage_s {
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_test_md5.h
type MD5UINT4 (line 68) | typedef unsigned long int MD5UINT4;
type SDLTest_Md5Context (line 71) | typedef struct {
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_test_random.h
type SDLTest_RandomContext (line 59) | typedef struct {
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_thread.h
type SDL_Thread (line 45) | struct SDL_Thread
type SDL_Thread (line 46) | typedef struct SDL_Thread SDL_Thread;
type SDL_threadID (line 49) | typedef unsigned long SDL_threadID;
type SDL_TLSID (line 52) | typedef unsigned int SDL_TLSID;
type SDL_ThreadPriority (line 59) | typedef enum {
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_timer.h
type SDL_TimerID (line 86) | typedef int SDL_TimerID;
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_touch.h
type Sint64 (line 41) | typedef Sint64 SDL_TouchID;
type Sint64 (line 42) | typedef Sint64 SDL_FingerID;
type SDL_TouchDeviceType (line 44) | typedef enum
type SDL_Finger (line 52) | typedef struct SDL_Finger
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_version.h
type SDL_version (line 51) | typedef struct SDL_version
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_video.h
type SDL_DisplayMode (line 53) | typedef struct
type SDL_Window (line 90) | typedef struct SDL_Window SDL_Window;
type SDL_WindowFlags (line 97) | typedef enum
type SDL_WindowEventID (line 146) | typedef enum
type SDL_DisplayEventID (line 175) | typedef enum
type SDL_DisplayOrientation (line 181) | typedef enum
type SDL_GLattr (line 198) | typedef enum
type SDL_GLprofile (line 229) | typedef enum
type SDL_GLcontextFlag (line 236) | typedef enum
type SDL_GLcontextReleaseFlag (line 244) | typedef enum
type SDL_GLContextResetNotification (line 250) | typedef enum
type SDL_HitTestResult (line 1020) | typedef enum
type SDL_Point (line 1039) | typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win,
FILE: winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_vulkan.h
type VkInstance (line 57) | typedef VkInstance SDL_vulkanInstance;
type VkSurfaceKHR (line 58) | typedef VkSurfaceKHR SDL_vulkanSurface;
FILE: winlib/SDL2-2.0.10/test/checkkeys.c
function quit (line 31) | static void
function print_string (line 38) | static void
function print_modifiers (line 57) | static void
function PrintModifierState (line 91) | static void
function PrintKey (line 105) | static void
function PrintText (line 137) | static void
function loop (line 151) | void
function main (line 198) | int
FILE: winlib/SDL2-2.0.10/test/controllermap.c
type SDL_GameControllerExtendedBind (line 114) | typedef struct
type AxisState (line 140) | typedef struct
function SDL_Texture (line 154) | SDL_Texture *
function StandardizeAxisValue (line 187) | static int
function SetCurrentBinding (line 199) | static void
function SDL_bool (line 226) | static SDL_bool
function ConfigureBinding (line 255) | static void
function SDL_bool (line 335) | static SDL_bool
function WatchJoystick (line 353) | static void
function main (line 772) | int
FILE: winlib/SDL2-2.0.10/test/loopwave.c
function quit (line 40) | static void
function close_audio (line 47) | static void
function open_audio (line 56) | static void
function reopen_audio (line 72) | static void reopen_audio()
function fillerup (line 79) | void SDLCALL
function loop (line 105) | void
function main (line 113) | int
FILE: winlib/SDL2-2.0.10/test/loopwavequeue.c
function quit (line 37) | static void
function poked (line 45) | void
function loop (line 51) | void
function main (line 74) | int
FILE: winlib/SDL2-2.0.10/test/nacl/background.js
function makeURL (line 5) | function makeURL(toolchain, config) {
function createWindow (line 9) | function createWindow(url) {
function onLaunched (line 18) | function onLaunched(launchData) {
FILE: winlib/SDL2-2.0.10/test/nacl/common.js
function isHostToolchain (line 21) | function isHostToolchain(tool) {
function mimeTypeForTool (line 32) | function mimeTypeForTool(tool) {
function browserSupportsNaCl (line 55) | function browserSupportsNaCl(tool) {
function injectScript (line 73) | function injectScript(url, onload, onerror) {
function runTests (line 89) | function runTests(moduleEl) {
function createNaClModule (line 123) | function createNaClModule(name, tool, path, width, height, attrs) {
function attachDefaultListeners (line 190) | function attachDefaultListeners() {
function handleError (line 206) | function handleError(event) {
function handleCrash (line 218) | function handleCrash(event) {
function moduleDidLoad (line 234) | function moduleDidLoad() {
function hideModule (line 251) | function hideModule() {
function removeModule (line 260) | function removeModule() {
function startsWith (line 271) | function startsWith(s, prefix) {
function logMessage (line 290) | function logMessage(message) {
function handleMessage (line 315) | function handleMessage(message_event) {
function domContentLoaded (line 348) | function domContentLoaded(name, tool, path, width, height, attrs) {
function updateStatus (line 385) | function updateStatus(opt_message) {
FILE: winlib/SDL2-2.0.10/test/testatomic.c
function RunBasicTest (line 36) | static
function adder (line 119) | static
function runAdder (line 133) | static
function RunEpicTest (line 158) | static
type SDL_EventQueueEntry (line 262) | typedef struct
type SDL_EventQueue (line 268) | typedef struct
function InitEventQueue (line 297) | static void InitEventQueue(SDL_EventQueue *queue)
function SDL_bool (line 314) | static SDL_bool EnqueueEvent_LockFree(SDL_EventQueue *queue, const SDL_E...
function SDL_bool (line 361) | static SDL_bool DequeueEvent_LockFree(SDL_EventQueue *queue, SDL_Event *...
function SDL_bool (line 408) | static SDL_bool EnqueueEvent_Mutex(SDL_EventQueue *queue, const SDL_Even...
function SDL_bool (line 441) | static SDL_bool DequeueEvent_Mutex(SDL_EventQueue *queue, SDL_Event *event)
type WriterData (line 479) | typedef struct
type ReaderData (line 489) | typedef struct
function FIFO_Writer (line 498) | static int SDLCALL FIFO_Writer(void* _data)
function FIFO_Reader (line 533) | static int SDLCALL FIFO_Reader(void* _data)
function FIFO_Watcher (line 573) | static int SDLCALL FIFO_Watcher(void* _data)
function RunFIFOTest (line 594) | static void RunFIFOTest(SDL_bool lock_free)
function main (line 711) | int
FILE: winlib/SDL2-2.0.10/test/testaudiocapture.c
function loop (line 26) | static void
function main (line 89) | int
FILE: winlib/SDL2-2.0.10/test/testaudiohotplug.c
function quit (line 38) | static void
function fillerup (line 45) | void SDLCALL
function poked (line 71) | void
function iteration (line 83) | static void
function loop (line 126) | void
function main (line 136) | int
FILE: winlib/SDL2-2.0.10/test/testaudioinfo.c
function print_devices (line 15) | static void
function main (line 40) | int
FILE: winlib/SDL2-2.0.10/test/testautomation.c
function quit (line 25) | static void
function main (line 32) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_audio.c
function _audioSetUp (line 19) | void
function _audioTearDown (line 31) | void
function _audio_testCallback (line 49) | void SDLCALL _audio_testCallback(void *userdata, Uint8 *stream, int len)
function audio_quitInitAudioSubSystem (line 65) | int audio_quitInitAudioSubSystem()
function audio_initQuitAudio (line 83) | int audio_initQuitAudio()
function audio_initOpenCloseQuitAudio (line 139) | int audio_initOpenCloseQuitAudio()
function audio_pauseUnpauseAudio (line 225) | int audio_pauseUnpauseAudio()
function audio_enumerateAndNameAudioDevices (line 346) | int audio_enumerateAndNameAudioDevices()
function audio_enumerateAndNameAudioDevicesNegativeTests (line 404) | int audio_enumerateAndNameAudioDevicesNegativeTests()
function audio_printAudioDrivers (line 451) | int audio_printAudioDrivers()
function audio_printCurrentAudioDriver (line 483) | int audio_printCurrentAudioDriver()
function audio_buildAudioCVT (line 515) | int audio_buildAudioCVT()
function audio_buildAudioCVTNegative (line 579) | int audio_buildAudioCVTNegative()
function audio_getAudioStatus (line 674) | int audio_getAudioStatus()
function audio_openCloseAndGetAudioStatus (line 695) | int audio_openCloseAndGetAudioStatus()
function audio_lockUnlockOpenAudioDevice (line 754) | int audio_lockUnlockOpenAudioDevice()
function audio_convertAudio (line 817) | int audio_convertAudio()
function audio_openCloseAudioDeviceConnected (line 915) | int audio_openCloseAudioDeviceConnected()
FILE: winlib/SDL2-2.0.10/test/testautomation_clipboard.c
function clipboard_testHasClipboardText (line 21) | int
function clipboard_testGetClipboardText (line 37) | int
function clipboard_testSetClipboardText (line 54) | int
function clipboard_testClipboardTextFunctions (line 85) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_events.c
function _events_sampleNullEventFilter (line 28) | int SDLCALL _events_sampleNullEventFilter(void *userdata, SDL_Event *event)
function events_pushPumpAndPollUserevent (line 48) | int
function events_addDelEventWatch (line 83) | int
function events_addDelEventWatchWithUserdata (line 133) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_hints.c
function hints_getHint (line 75) | int
function hints_setHint (line 100) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_keyboard.c
function keyboard_getKeyboardState (line 21) | int
function keyboard_getKeyboardFocus (line 47) | int
function keyboard_getKeyFromName (line 64) | int
function _checkInvalidScancodeError (line 110) | void
function keyboard_getKeyFromScancode (line 131) | int
function keyboard_getKeyName (line 170) | int
function keyboard_getScancodeNameNegative (line 226) | int
function keyboard_getKeyNameNegative (line 253) | int
function keyboard_getSetModState (line 291) | int
function keyboard_startStopTextInput (line 352) | int
function _testSetTextInputRect (line 379) | void _testSetTextInputRect(SDL_Rect refRect)
function keyboard_setTextInputRect (line 398) | int
function keyboard_setTextInputRectNegative (line 478) | int
function keyboard_getScancodeFromKey (line 517) | int
function keyboard_getScancodeFromName (line 541) | int
function _checkInvalidNameError (line 592) | void
function keyboard_getScancodeFromNameNegative (line 614) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_main.c
function main_testInitQuitJoystickHaptic (line 19) | static int main_testInitQuitJoystickHaptic (void *arg)
function main_testInitQuitSubSystem (line 47) | static int main_testInitQuitSubSystem (void *arg)
function main_testImpliedJoystickInit (line 75) | static int main_testImpliedJoystickInit (void *arg)
function main_testImpliedJoystickQuit (line 100) | static int main_testImpliedJoystickQuit (void *arg)
FILE: winlib/SDL2-2.0.10/test/testautomation_mouse.c
function _mouseStateCheck (line 16) | int _mouseStateCheck(Uint32 state)
function mouse_getMouseState (line 30) | int
function mouse_getRelativeMouseState (line 76) | int
function SDL_Cursor (line 157) | static SDL_Cursor *_initArrowCursor(const char *image[])
function mouse_createFreeCursor (line 198) | int
function mouse_createFreeColorCursor (line 224) | int
function _changeCursorVisibility (line 255) | void _changeCursorVisibility(int state)
function mouse_showCursor (line 280) | int
function mouse_setCursor (line 310) | int
function mouse_getCursor (line 343) | int
function mouse_getSetRelativeMouseMode (line 362) | int
function SDL_Window (line 418) | SDL_Window *_createMouseSuiteTestWindow()
function _destroyMouseSuiteTestWindow (line 431) | void _destroyMouseSuiteTestWindow(SDL_Window *window)
function mouse_warpMouseInWindow (line 445) | int
function mouse_getMouseFocus (line 507) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_pixels.c
function pixels_allocFreeFormat (line 125) | int
function pixels_getPixelFormatName (line 231) | int
function pixels_allocFreePalette (line 316) | int
function pixels_calcGammaRamp (line 405) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_platform.c
function _compareSizeOfType (line 22) | static int _compareSizeOfType( size_t sizeoftype, size_t hardcodetype )
function platform_testTypes (line 32) | int platform_testTypes(void *arg)
function platform_testEndianessAndSwap (line 54) | int platform_testEndianessAndSwap(void *arg)
function platform_testGetFunctions (line 110) | int platform_testGetFunctions (void *arg)
function platform_testHasFunctions (line 164) | int platform_testHasFunctions (void *arg)
function platform_testGetVersion (line 208) | int platform_testGetVersion(void *arg)
function platform_testSDLVersion (line 231) | int platform_testSDLVersion(void *arg)
function platform_testDefaultInit (line 254) | int platform_testDefaultInit(void *arg)
function platform_testGetSetClearError (line 280) | int platform_testGetSetClearError(void *arg)
function platform_testSetErrorEmptyInput (line 332) | int platform_testSetErrorEmptyInput(void *arg)
function platform_testSetErrorInvalidInput (line 370) | int platform_testSetErrorInvalidInput(void *arg)
function platform_testGetPowerInfo (line 453) | int platform_testGetPowerInfo(void *arg)
FILE: winlib/SDL2-2.0.10/test/testautomation_rect.c
function _validateIntersectRectAndLineResults (line 18) | void _validateIntersectRectAndLineResults(
function rect_testIntersectRectAndLine (line 48) | int
function rect_testIntersectRectAndLineInside (line 119) | int
function rect_testIntersectRectAndLineOutside (line 186) | int
function rect_testIntersectRectAndLineEmpty (line 241) | int
function rect_testIntersectRectAndLineParam (line 276) | int
function _validateHasIntersectionResults (line 308) | void _validateHasIntersectionResults(
function _validateIntersectRectResults (line 331) | void _validateIntersectRectResults(
function _validateUnionRectResults (line 350) | void _validateUnionRectResults(
function _validateRectEmptyResults (line 373) | void _validateRectEmptyResults(
function _validateRectEqualsResults (line 391) | void _validateRectEqualsResults(
function rect_testIntersectRectInside (line 417) | int rect_testIntersectRectInside (void *arg)
function rect_testIntersectRectOutside (line 445) | int rect_testIntersectRectOutside (void *arg)
function rect_testIntersectRectPartial (line 473) | int rect_testIntersectRectPartial (void *arg)
function rect_testIntersectRectPoint (line 562) | int rect_testIntersectRectPoint (void *arg)
function rect_testIntersectRectEmpty (line 609) | int rect_testIntersectRectEmpty (void *arg)
function rect_testIntersectRectParam (line 681) | int rect_testIntersectRectParam(void *arg)
function rect_testHasIntersectionInside (line 711) | int rect_testHasIntersectionInside (void *arg)
function rect_testHasIntersectionOutside (line 738) | int rect_testHasIntersectionOutside (void *arg)
function rect_testHasIntersectionPartial (line 765) | int rect_testHasIntersectionPartial (void *arg)
function rect_testHasIntersectionPoint (line 832) | int rect_testHasIntersectionPoint (void *arg)
function rect_testHasIntersectionEmpty (line 878) | int rect_testHasIntersectionEmpty (void *arg)
function rect_testHasIntersectionParam (line 936) | int rect_testHasIntersectionParam(void *arg)
function rect_testEnclosePoints (line 959) | int rect_testEnclosePoints(void *arg)
function rect_testEnclosePointsRepeatedInput (line 1029) | int rect_testEnclosePointsRepeatedInput(void *arg)
function rect_testEnclosePointsWithClipping (line 1105) | int rect_testEnclosePointsWithClipping(void *arg)
function rect_testEnclosePointsParam (line 1204) | int rect_testEnclosePointsParam(void *arg)
function rect_testUnionRectOutside (line 1232) | int rect_testUnionRectOutside(void *arg)
function rect_testUnionRectEmpty (line 1303) | int rect_testUnionRectEmpty(void *arg)
function rect_testUnionRectInside (line 1368) | int rect_testUnionRectInside(void *arg)
function rect_testUnionRectParam (line 1432) | int rect_testUnionRectParam(void *arg)
function rect_testRectEmpty (line 1460) | int rect_testRectEmpty(void *arg)
function rect_testRectEmptyParam (line 1503) | int rect_testRectEmptyParam(void *arg)
function rect_testRectEquals (line 1520) | int rect_testRectEquals(void *arg)
function rect_testRectEqualsParam (line 1550) | int rect_testRectEqualsParam(void *arg)
FILE: winlib/SDL2-2.0.10/test/testautomation_render.c
function InitCreateRenderer (line 43) | void InitCreateRenderer(void *arg)
function CleanupDestroyRenderer (line 66) | void CleanupDestroyRenderer(void *arg)
function render_testGetNumRenderDrivers (line 88) | int
function render_testPrimitives (line 107) | int render_testPrimitives (void *arg)
function render_testPrimitivesBlend (line 213) | int render_testPrimitivesBlend (void *arg)
function render_testBlit (line 361) | int
function render_testBlitColor (line 431) | int
function render_testBlitAlpha (line 505) | int
function _testBlitBlendMode (line 582) | static void
function render_testBlitBlend (line 634) | int
function _isSupported (line 772) | static int
function _hasDrawColor (line 785) | static int
function _hasBlendModes (line 823) | static int
function SDL_Texture (line 879) | static SDL_Texture *
function _hasTexColor (line 909) | static int
function _hasTexAlpha (line 949) | static int
function _compare (line 991) | static void
function _clearScreen (line 1035) | static int
FILE: winlib/SDL2-2.0.10/test/testautomation_rwops.c
function RWopsSetUp (line 32) | void
function RWopsTearDown (line 72) | void
function _testGenericRWopsValidations (line 94) | void
function rwops_testParamNegative (line 174) | int
function rwops_testMem (line 221) | int
function rwops_testConstMem (line 261) | int
function rwops_testFileRead (line 297) | int
function rwops_testFileWrite (line 344) | int
function rwops_testFPRead (line 393) | int
function rwops_testFPWrite (line 443) | int
function rwops_testAllocFree (line 490) | int
function rwops_testCompareRWFromMemWithRWFromFile (line 517) | int
function rwops_testFileWriteReadEndian (line 586) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_sdltest.c
function sdltest_generateRunSeed (line 33) | int
function sdltest_getFuzzerInvocationCount (line 64) | int
function sdltest_randomNumber (line 88) | int
function sdltest_randomBoundaryNumberUint8 (line 157) | int
function sdltest_randomBoundaryNumberUint16 (line 267) | int
function sdltest_randomBoundaryNumberUint32 (line 377) | int
function sdltest_randomBoundaryNumberUint64 (line 487) | int
function sdltest_randomBoundaryNumberSint8 (line 597) | int
function sdltest_randomBoundaryNumberSint16 (line 707) | int
function sdltest_randomBoundaryNumberSint32 (line 817) | int
function sdltest_randomBoundaryNumberSint64 (line 934) | int
function sdltest_randomIntegerInRange (line 1044) | int
function sdltest_randomAsciiString (line 1119) | int
function sdltest_randomAsciiStringWithMaximumLength (line 1153) | int
function sdltest_randomAsciiStringOfSize (line 1206) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_stdlib.c
function stdlib_strlcpy (line 17) | int
function stdlib_snprintf (line 43) | int
function stdlib_getsetenv (line 125) | int
function stdlib_sscanf (line 260) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_surface.c
function _surfaceSetUp (line 38) | void
function _surfaceTearDown (line 70) | void
function _clearTestSurface (line 82) | void _clearTestSurface()
function _testBlitBlendMode (line 98) | void _testBlitBlendMode(int mode)
function _AssertFileExist (line 204) | void
function surface_testSaveLoadBitmap (line 219) | int
function surface_testSurfaceConversion (line 265) | int
function surface_testCompleteSurfaceConversion (line 306) | int
function surface_testLoadFailure (line 396) | int
function surface_testBlit (line 408) | int
function surface_testBlitColorMod (line 431) | int
function surface_testBlitAlphaMod (line 454) | int
function surface_testBlitBlendNone (line 478) | int
function surface_testBlitBlendBlend (line 501) | int
function surface_testBlitBlendAdd (line 524) | int
function surface_testBlitBlendMod (line 547) | int
function surface_testBlitBlendLoop (line 570) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_syswm.c
function syswm_getWindowWMInfo (line 16) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_timer.c
function _timerSetUp (line 21) | void
function timer_getPerformanceCounter (line 38) | int
function timer_getPerformanceFrequency (line 53) | int
function timer_delayAndGetTicks (line 68) | int
function Uint32 (line 107) | Uint32 SDLCALL _timerTestCallback(Uint32 interval, void *param)
function timer_addRemoveTimer (line 124) | int
FILE: winlib/SDL2-2.0.10/test/testautomation_video.c
function SDL_Window (line 26) | SDL_Window *_createVideoSuiteTestWindow(const char *title)
function _destroyVideoSuiteTestWindow (line 49) | void _destroyVideoSuiteTestWindow(SDL_Window *window)
function video_enableDisableScreensaver (line 63) | int
function video_createWindowVariousPositions (line 115) | int
function video_createWindowVariousSizes (line 196) | int
function video_createWindowVariousFlags (line 253) | int
function video_getWindowFlags (line 330) | int
function video_getNumDisplayModes (line 358) | int
function video_getNumDisplayModesNegative (line 382) | int
function video_getClosestDisplayModeCurrentResolution (line 416) | int
function video_getClosestDisplayModeRandomResolution (line 472) | int
function video_getWindowBrightness (line 513) | int
function video_getWindowBrightnessNegative (line 539) | int
function video_getWindowDisplayMode (line 568) | int
function _checkInvalidWindowError (line 599) | void _checkInvalidWindowError()
function video_getWindowDisplayModeNegative (line 622) | int
function video_getWindowGammaRamp (line 666) | int
function video_getWindowGammaRampNegative (line 727) | int
function _setAndCheckWindowGrabState (line 748) | void
function video_getSetWindowGrab (line 773) | int
function video_getWindowId (line 842) | int
function video_getWindowPixelFormat (line 897) | int
function video_getSetWindowPosition (line 932) | int
function _checkInvalidParameterError (line 1051) | void _checkInvalidParameterError()
function video_getSetWindowSize (line 1075) | int
function video_getSetWindowMinimumSize (line 1237) | int
function video_getSetWindowMaximumSize (line 1376) | int
function video_getSetWindowData (line 1514) | int
FILE: winlib/SDL2-2.0.10/test/testbounds.c
function main (line 15) | int main(int argc, char **argv)
FILE: winlib/SDL2-2.0.10/test/testcustomcursor.c
function SDL_Cursor (line 70) | static SDL_Cursor*
function SDL_Cursor (line 100) | static SDL_Cursor*
function quit (line 142) | static void
function loop (line 149) | void
function main (line 183) | int
FILE: winlib/SDL2-2.0.10/test/testdisplayinfo.c
function print_mode (line 20) | static void
function main (line 31) | int
FILE: winlib/SDL2-2.0.10/test/testdraw2.c
function DrawPoints (line 38) | void
function DrawLines (line 81) | void
function DrawRects (line 133) | void
function loop (line 178) | void
function main (line 208) | int
FILE: winlib/SDL2-2.0.10/test/testdrawchessboard.c
function DrawChessBoard (line 31) | void
function loop (line 58) | void
function main (line 100) | int
FILE: winlib/SDL2-2.0.10/test/testdropfile.c
function quit (line 21) | static void
function main (line 28) | int
FILE: winlib/SDL2-2.0.10/test/testerror.c
function quit (line 23) | static void
function ThreadFunc (line 30) | int SDLCALL
function main (line 44) | int
FILE: winlib/SDL2-2.0.10/test/testfile.c
function cleanup (line 43) | static void
function rwops_error_quit (line 50) | static void
function main (line 65) | int
FILE: winlib/SDL2-2.0.10/test/testfilesystem.c
function main (line 17) | int
FILE: winlib/SDL2-2.0.10/test/testgamecontroller.c
function SDL_Texture (line 69) | static SDL_Texture *
function loop (line 97) | void
function SDL_bool (line 172) | SDL_bool
function main (line 250) | int
function main (line 366) | int
FILE: winlib/SDL2-2.0.10/test/testgesture.c
type Point (line 44) | typedef struct
type Knob (line 49) | typedef struct
function setpix (line 58) | static void
function drawLine (line 93) | static void
function drawCircle (line 102) | static void
function drawKnob (line 119) | static void
function DrawScreen (line 127) | static void
function loop (line 171) | static void
function main (line 269) | int main(int argc, char* argv[])
FILE: winlib/SDL2-2.0.10/test/testgl2.c
type GL_Context (line 27) | typedef struct GL_Context
function LoadContext (line 42) | static int LoadContext(GL_Context * data)
function quit (line 71) | static void
function Render (line 82) | static void
function main (line 210) | int
function main (line 433) | int
FILE: winlib/SDL2-2.0.10/test/testgles.c
function quit (line 32) | static void
function Render (line 51) | static void
function main (line 102) | int
function main (line 346) | int
FILE: winlib/SDL2-2.0.10/test/testgles2.c
type GLES2_Context (line 32) | typedef struct GLES2_Context
function LoadContext (line 45) | static int LoadContext(GLES2_Context * data)
function quit (line 73) | static void
function rotate_matrix (line 106) | static void
function perspective_matrix (line 146) | static void
function multiply_matrix (line 170) | static void
function process_shader (line 198) | void
type shader_data (line 364) | typedef struct shader_data
function Render (line 375) | static void
function loop (line 420) | void loop()
function main (line 477) | int
function main (line 723) | int
FILE: winlib/SDL2-2.0.10/test/testhaptic.c
function main (line 40) | int
function abort_execution (line 301) | static void
function HapticPrintSupported (line 316) | static void
function main (line 362) | int
FILE: winlib/SDL2-2.0.10/test/testhittesting.c
function SDL_HitTestResult (line 17) | static SDL_HitTestResult SDLCALL
function main (line 60) | int main(int argc, char **argv)
FILE: winlib/SDL2-2.0.10/test/testhotplug.c
function main (line 23) | int
function main (line 155) | int
FILE: winlib/SDL2-2.0.10/test/testiconv.c
function widelen (line 17) | static size_t
function main (line 28) | int
FILE: winlib/SDL2-2.0.10/test/testime.c
type UnifontGlyph (line 62) | struct UnifontGlyph {
function Uint8 (line 71) | static Uint8 dehex(char c)
function Uint8 (line 82) | static Uint8 dehex2(char c1, char c2)
function Uint8 (line 87) | static Uint8 validate_hex(const char *cp, size_t len, Uint32 *np)
function unifont_init (line 102) | static int unifont_init(const char *fontname)
function unifont_make_rgba (line 227) | static void unifont_make_rgba(Uint8 *src, Uint8 *dst, Uint8 width)
function unifont_load_texture (line 263) | static int unifont_load_texture(Uint32 textureID)
function Sint32 (line 320) | static Sint32 unifont_draw_glyph(Uint32 codepoint, int rendererID, SDL_R...
function unifont_cleanup (line 345) | static void unifont_cleanup()
function utf8_length (line 371) | size_t utf8_length(unsigned char c)
function Uint32 (line 412) | Uint32 utf8_decode(char *p, size_t len)
function usage (line 436) | void usage()
function InitInput (line 441) | void InitInput()
function CleanupVideo (line 455) | void CleanupVideo()
function _Redraw (line 466) | void _Redraw(int rendererID)
function Redraw (line 615) | void Redraw()
function main (line 632) | int main(int argc, char *argv[])
FILE: winlib/SDL2-2.0.10/test/testintersections.c
function DrawPoints (line 40) | void
function add_line (line 86) | static int
function DrawLines (line 104) | void
function add_rect (line 130) | static int
function DrawRects (line 154) | static void
function DrawRectLineIntersections (line 161) | static void
function DrawRectRectIntersections (line 185) | static void
function loop (line 201) | void
function main (line 267) | int
FILE: winlib/SDL2-2.0.10/test/testjoystick.c
function DrawRect (line 39) | static void
function loop (line 46) | void
function SDL_bool (line 190) | static SDL_bool
function main (line 378) | int
FILE: winlib/SDL2-2.0.10/test/testkeys.c
function main (line 22) | int
FILE: winlib/SDL2-2.0.10/test/testloadso.c
function main (line 24) | int
FILE: winlib/SDL2-2.0.10/test/testlock.c
function SDL_Quit_Wrapper (line 32) | static void
function printid (line 38) | void
function terminate (line 44) | void
function closemutex (line 51) | void
function Run (line 64) | int SDLCALL
function main (line 92) | int
FILE: winlib/SDL2-2.0.10/test/testmessage.c
function quit (line 21) | static void
function button_messagebox (line 28) | static int SDLCALL
function main (line 83) | int
FILE: winlib/SDL2-2.0.10/test/testmultiaudio.c
type callback_data (line 24) | typedef struct
function play_through_once (line 33) | void SDLCALL
function loop (line 53) | void
function test_multi_audio (line 67) | static void
function main (line 163) | int
FILE: winlib/SDL2-2.0.10/test/testnative.c
function quit (line 42) | static void
function SDL_Texture (line 52) | SDL_Texture *
function MoveSprites (line 83) | void
function main (line 122) | int
FILE: winlib/SDL2-2.0.10/test/testnative.h
type NativeWindowFactory (line 22) | typedef struct
FILE: winlib/SDL2-2.0.10/test/testnativew32.c
function LRESULT (line 26) | LRESULT CALLBACK
function DestroyWindowNative (line 80) | static void
FILE: winlib/SDL2-2.0.10/test/testnativex11.c
function DestroyWindowX11 (line 44) | static void
FILE: winlib/SDL2-2.0.10/test/testoverlay2.c
function quit (line 153) | static void
function PrintUsage (line 160) | static void
function loop (line 177) | void
function main (line 235) | int
FILE: winlib/SDL2-2.0.10/test/testplatform.c
function badsize (line 22) | static int
function TestTypes (line 28) | int
function TestEndian (line 83) | int
function TST_allmul (line 151) | static int TST_allmul (void *a, void *b, int arg, void *result, void *ex...
function TST_alldiv (line 157) | static int TST_alldiv (void *a, void *b, int arg, void *result, void *ex...
function TST_allrem (line 163) | static int TST_allrem (void *a, void *b, int arg, void *result, void *ex...
function TST_ualldiv (line 169) | static int TST_ualldiv (void *a, void *b, int arg, void *result, void *e...
function TST_uallrem (line 175) | static int TST_uallrem (void *a, void *b, int arg, void *result, void *e...
function TST_allshl (line 181) | static int TST_allshl (void *a, void *b, int arg, void *result, void *ex...
function TST_aullshl (line 187) | static int TST_aullshl (void *a, void *b, int arg, void *result, void *e...
function TST_allshr (line 193) | static int TST_allshr (void *a, void *b, int arg, void *result, void *ex...
function TST_aullshr (line 199) | static int TST_aullshr (void *a, void *b, int arg, void *result, void *e...
type LL_Test (line 208) | typedef struct {
function Test64Bit (line 341) | int
function TestCPUInfo (line 366) | int
function TestAssertions (line 390) | int
function main (line 419) | int
FILE: winlib/SDL2-2.0.10/test/testpower.c
function report_power (line 17) | static void
function main (line 63) | int
FILE: winlib/SDL2-2.0.10/test/testqsort.c
function num_compare (line 15) | static int
function test_sort (line 23) | static void
function main (line 44) | int
FILE: winlib/SDL2-2.0.10/test/testrelative.c
function DrawRects (line 30) | static void
function loop (line 37) | static void
function main (line 77) | int
FILE: winlib/SDL2-2.0.10/test/testrendercopyex.c
type DrawState (line 27) | typedef struct {
function quit (line 40) | static void
function SDL_Texture (line 47) | SDL_Texture *
function Draw (line 97) | void
function loop (line 140) | void loop()
function main (line 162) | int
FILE: winlib/SDL2-2.0.10/test/testrendertarget.c
type DrawState (line 27) | typedef struct {
function quit (line 41) | static void
function SDL_Texture (line 48) | SDL_Texture *
function SDL_bool (line 98) | SDL_bool
function SDL_bool (line 181) | SDL_bool
function loop (line 225) | void
function main (line 251) | int
FILE: winlib/SDL2-2.0.10/test/testresample.c
function main (line 15) | int
FILE: winlib/SDL2-2.0.10/test/testrumble.c
function main (line 44) | int
function main (line 146) | int
FILE: winlib/SDL2-2.0.10/test/testscale.c
type DrawState (line 29) | typedef struct {
function quit (line 42) | static void
function SDL_Texture (line 49) | SDL_Texture *
function Draw (line 99) | void
function loop (line 130) | void
function main (line 152) | int
FILE: winlib/SDL2-2.0.10/test/testsem.c
function ThreadFunc (line 26) | int SDLCALL
function killed (line 44) | static void
function TestWaitTimeout (line 50) | static void
function main (line 78) | int
FILE: winlib/SDL2-2.0.10/test/testsensor.c
function HandleSensorEvent (line 37) | static void HandleSensorEvent(SDL_SensorEvent *event)
function main (line 58) | int
FILE: winlib/SDL2-2.0.10/test/testshader.c
type ShaderData (line 31) | typedef struct {
function SDL_bool (line 127) | static SDL_bool CompileShader(GLhandleARB shader, const char *source)
function SDL_bool (line 150) | static SDL_bool CompileShaderProgram(ShaderData *data)
function DestroyShaderProgram (line 193) | static void DestroyShaderProgram(ShaderData *data)
function SDL_bool (line 202) | static SDL_bool InitShaders()
function QuitShaders (line 256) | static void QuitShaders()
function power_of_two (line 266) | static int
function GLuint (line 277) | GLuint
function InitGL (line 335) | void InitGL(int Width, int Height) /* We call this ri...
function DrawGLScene (line 356) | void DrawGLScene(SDL_Window *window, GLuint texture, GLfloat * texcoord)
function main (line 416) | int main(int argc, char **argv)
function main (line 491) | int
FILE: winlib/SDL2-2.0.10/test/testshape.c
type LoadedPicture (line 22) | typedef struct LoadedPicture {
function render (line 29) | void render(SDL_Renderer *renderer,SDL_Texture *texture,SDL_Rect texture...
function main (line 41) | int main(int argc,char** argv)
FILE: winlib/SDL2-2.0.10/test/testsprite2.c
function quit (line 50) | static void
function LoadSprite (line 60) | int
function MoveSprites (line 117) | void
function loop (line 246) | void
function main (line 281) | int
FILE: winlib/SDL2-2.0.10/test/testspriteminimal.c
function quit (line 38) | static void
function LoadSprite (line 44) | int
function MoveSprites (line 93) | void
function loop (line 128) | void loop()
function main (line 146) | int
FILE: winlib/SDL2-2.0.10/test/teststreaming.c
function quit (line 64) | void quit(int rc)
function UpdateTexture (line 70) | void UpdateTexture(SDL_Texture *texture, int frame)
function loop (line 94) | void
function main (line 126) | int
FILE: winlib/SDL2-2.0.10/test/testthread.c
function quit (line 26) | static void
function ThreadFunc (line 47) | int SDLCALL
function killed (line 70) | static void
function main (line 79) | int
FILE: winlib/SDL2-2.0.10/test/testtimer.c
function Uint32 (line 26) | static Uint32 SDLCALL
function Uint32 (line 33) | static Uint32 SDLCALL
function main (line 40) | int
FILE: winlib/SDL2-2.0.10/test/testver.c
function main (line 23) | int
FILE: winlib/SDL2-2.0.10/test/testviewport.c
function quit (line 36) | static void
function DrawOnViewport (line 43) | void
function loop (line 91) | void
function main (line 140) | int
FILE: winlib/SDL2-2.0.10/test/testvulkan.c
function main (line 21) | int main(int argc, char *argv[])
type VulkanContext (line 176) | typedef struct VulkanContext
function quit (line 211) | static void quit(int rc)
function loadGlobalFunctions (line 218) | static void loadGlobalFunctions(void)
function createInstance (line 245) | static void createInstance(void)
function loadInstanceFunctions (line 293) | static void loadInstanceFunctions(void)
function createSurface (line 311) | static void createSurface(void)
function findPhysicalDevice (line 324) | static void findPhysicalDevice(void)
function createDevice (line 497) | static void createDevice(void)
function loadDeviceFunctions (line 529) | static void loadDeviceFunctions(void)
function getQueues (line 549) | static void getQueues(void)
function createSemaphore (line 564) | static void createSemaphore(VkSemaphore *semaphore)
function createSemaphores (line 581) | static void createSemaphores(void)
function getSurfaceCaps (line 587) | static void getSurfaceCaps(void)
function getSurfaceFormats (line 608) | static void getSurfaceFormats(void)
function getSwapchainImages (line 649) | static void getSwapchainImages(void)
function SDL_bool (line 687) | static SDL_bool createSwapchain(void)
function destroySwapchain (line 758) | static void destroySwapchain(void)
function destroyCommandBuffers (line 767) | static void destroyCommandBuffers(void)
function destroyCommandPool (line 778) | static void destroyCommandPool(void)
function createCommandPool (line 785) | static void createCommandPool(void)
function createCommandBuffers (line 806) | static void createCommandBuffers(void)
function createFences (line 830) | static void createFences(void)
function destroyFences (line 865) | static void destroyFences(void)
function recordPipelineImageBarrier (line 879) | static void recordPipelineImageBarrier(VkCommandBuffer commandBuffer,
function rerecordCommandBuffer (line 912) | static void rerecordCommandBuffer(uint32_t frameIndex, const VkClearColo...
function destroySwapchainAndSwapchainSpecificStuff (line 966) | static void destroySwapchainAndSwapchainSpecificStuff(SDL_bool doDestroy...
function SDL_bool (line 975) | static SDL_bool createNewSwapchainAndSwapchainSpecificStuff(void)
function initVulkan (line 988) | static void initVulkan(void)
function shutdownVulkan (line 1004) | static void shutdownVulkan(void)
function SDL_bool (line 1023) | static SDL_bool render(void)
function main (line 1119) | int main(int argc, char *argv[])
FILE: winlib/SDL2-2.0.10/test/testwm2.c
function quit (line 43) | static void
function loop (line 50) | void
function main (line 117) | int
FILE: winlib/SDL2-2.0.10/test/testyuv.c
function SDL_bool (line 26) | static SDL_bool is_packed_yuv_format(Uint32 format)
function SDL_Surface (line 34) | static SDL_Surface *generate_test_pattern(int pattern_size)
function SDL_bool (line 74) | static SDL_bool verify_yuv_data(Uint32 format, const Uint8 *yuv, int yuv...
function run_automated_tests (line 114) | static int run_automated_tests(int pattern_size, int extra_pitch)
function main (line 219) | int
FILE: winlib/SDL2-2.0.10/test/testyuv_cvt.c
function clip3 (line 18) | static float clip3(float x, float y, float z)
function RGBtoYUV (line 23) | static void RGBtoYUV(Uint8 * rgb, int *yuv, SDL_YUV_CONVERSION_MODE mode...
function ConvertRGBtoPlanar2x2 (line 76) | static void ConvertRGBtoPlanar2x2(Uint32 format, Uint8 *src, int pitch, ...
function ConvertRGBtoPacked4 (line 192) | static void ConvertRGBtoPacked4(Uint32 format, Uint8 *src, int pitch, Ui...
function SDL_bool (line 262) | SDL_bool ConvertRGBtoYUV(Uint32 format, Uint8 *src, int pitch, Uint8 *ou...
function CalculateYUVPitch (line 282) | int CalculateYUVPitch(Uint32 format, int width)
FILE: winlib/SDL2-2.0.10/test/torturethread.c
function quit (line 27) | static void
function SubThreadFunc (line 34) | int SDLCALL
function ThreadFunc (line 43) | int SDLCALL
function main (line 76) | int
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_assert.h
type SDL_AssertState (line 102) | typedef enum
type SDL_AssertData (line 111) | typedef struct SDL_AssertData
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_atomic.h
type SDL_SpinLock (line 89) | typedef int SDL_SpinLock;
type SDL_atomic_t (line 216) | typedef struct { int value; } SDL_atomic_t;
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_audio.h
type Uint16 (line 64) | typedef Uint16 SDL_AudioFormat;
type SDL_AudioSpec (line 178) | typedef struct SDL_AudioSpec
type SDL_AudioCVT (line 192) | struct SDL_AudioCVT
type SDL_AudioCVT (line 193) | struct SDL_AudioCVT
type SDL_AUDIOCVT_PACKED (line 226) | typedef struct SDL_AudioCVT
type Uint32 (line 330) | typedef Uint32 SDL_AudioDeviceID;
type SDL_AudioStatus (line 395) | typedef enum
type _SDL_AudioStream (line 531) | struct _SDL_AudioStream
type SDL_AudioStream (line 532) | typedef struct _SDL_AudioStream SDL_AudioStream;
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_bits.h
function SDL_FORCE_INLINE (line 60) | SDL_FORCE_INLINE int
function SDL_FORCE_INLINE (line 104) | SDL_FORCE_INLINE SDL_bool
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_blendmode.h
type SDL_BlendMode (line 40) | typedef enum
type SDL_BlendOperation (line 62) | typedef enum
type SDL_BlendFactor (line 75) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_egl.h
type khronos_int32_t (line 177) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 178) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 179) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 180) | typedef uint64_t khronos_uint64_t;
type khronos_int32_t (line 190) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 191) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 192) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 193) | typedef uint64_t khronos_uint64_t;
type __int32 (line 202) | typedef __int32 khronos_int32_t;
type khronos_uint32_t (line 203) | typedef unsigned __int32 khronos_uint32_t;
type __int64 (line 204) | typedef __int64 khronos_int64_t;
type khronos_uint64_t (line 205) | typedef unsigned __int64 khronos_uint64_t;
type khronos_int32_t (line 214) | typedef int khronos_int32_t;
type khronos_uint32_t (line 215) | typedef unsigned int khronos_uint32_t;
type khronos_int64_t (line 217) | typedef long int khronos_int64_t;
type khronos_uint64_t (line 218) | typedef unsigned long int khronos_uint64_t;
type khronos_int64_t (line 220) | typedef long long int khronos_int64_t;
type khronos_uint64_t (line 221) | typedef unsigned long long int khronos_uint64_t;
type khronos_int32_t (line 231) | typedef int khronos_int32_t;
type khronos_uint32_t (line 232) | typedef unsigned int khronos_uint32_t;
type khronos_int32_t (line 242) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 243) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 244) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 245) | typedef uint64_t khronos_uint64_t;
type khronos_int8_t (line 255) | typedef signed char khronos_int8_t;
type khronos_uint8_t (line 256) | typedef unsigned char khronos_uint8_t;
type khronos_int16_t (line 257) | typedef signed short int khronos_int16_t;
type khronos_uint16_t (line 258) | typedef unsigned short int khronos_uint16_t;
type khronos_intptr_t (line 266) | typedef signed long long int khronos_intptr_t;
type khronos_uintptr_t (line 267) | typedef unsigned long long int khronos_uintptr_t;
type khronos_ssize_t (line 268) | typedef signed long long int khronos_ssize_t;
type khronos_usize_t (line 269) | typedef unsigned long long int khronos_usize_t;
type khronos_intptr_t (line 271) | typedef signed long int khronos_intptr_t;
type khronos_uintptr_t (line 272) | typedef unsigned long int khronos_uintptr_t;
type khronos_ssize_t (line 273) | typedef signed long int khronos_ssize_t;
type khronos_usize_t (line 274) | typedef unsigned long int khronos_usize_t;
type khronos_float_t (line 281) | typedef float khronos_float_t;
type khronos_uint64_t (line 294) | typedef khronos_uint64_t khronos_utime_nanoseconds_t;
type khronos_int64_t (line 295) | typedef khronos_int64_t khronos_stime_nanoseconds_t;
type khronos_boolean_enum_t (line 311) | typedef enum {
type IUnknown (line 397) | typedef IUnknown * EGLNativeWindowType;
type IUnknown (line 398) | typedef IUnknown * EGLNativePixmapType;
type IUnknown (line 399) | typedef IUnknown * EGLNativeDisplayType;
type HDC (line 401) | typedef HDC EGLNativeDisplayType;
type HBITMAP (line 402) | typedef HBITMAP EGLNativePixmapType;
type HWND (line 403) | typedef HWND EGLNativeWindowType;
type EGLNativeDisplayType (line 408) | typedef int EGLNativeDisplayType;
type wl_display (line 414) | struct wl_display
type wl_egl_pixmap (line 415) | struct wl_egl_pixmap
type wl_egl_window (line 416) | struct wl_egl_window
type gbm_device (line 420) | struct gbm_device
type gbm_bo (line 421) | struct gbm_bo
type ANativeWindow (line 426) | struct ANativeWindow
type egl_native_pixmap_t (line 427) | struct egl_native_pixmap_t
type ANativeWindow (line 429) | struct ANativeWindow
type egl_native_pixmap_t (line 430) | struct egl_native_pixmap_t
type MirEGLNativeDisplayType (line 436) | typedef MirEGLNativeDisplayType EGLNativeDisplayType;
type MirEGLNativeWindowType (line 438) | typedef MirEGLNativeWindowType EGLNativeWindowType;
type khronos_uintptr_t (line 445) | typedef khronos_uintptr_t EGLNativePixmapType;
type khronos_uintptr_t (line 446) | typedef khronos_uintptr_t EGLNativeWindowType;
type Display (line 454) | typedef Display *EGLNativeDisplayType;
type Pixmap (line 455) | typedef Pixmap EGLNativePixmapType;
type Window (line 456) | typedef Window EGLNativeWindowType;
type EGLNativeDisplayType (line 465) | typedef EGLNativeDisplayType NativeDisplayType;
type EGLNativePixmapType (line 466) | typedef EGLNativePixmapType NativePixmapType;
type EGLNativeWindowType (line 467) | typedef EGLNativeWindowType NativeWindowType;
type khronos_int32_t (line 477) | typedef khronos_int32_t EGLint;
type EGLBoolean (line 534) | typedef unsigned int EGLBoolean;
type EGLenum (line 649) | typedef unsigned int EGLenum;
type EGLAttrib (line 719) | typedef intptr_t EGLAttrib;
type khronos_utime_nanoseconds_t (line 720) | typedef khronos_utime_nanoseconds_t EGLTime;
type EGLAttribKHR (line 846) | typedef intptr_t EGLAttribKHR;
type EGLAttribKHR (line 847) | typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay ...
type khronos_utime_nanoseconds_t (line 888) | typedef khronos_utime_nanoseconds_t EGLTimeKHR;
type khronos_uint64_t (line 1063) | typedef khronos_uint64_t EGLuint64KHR;
type EGLNativeFileDescriptorKHR (line 1110) | typedef int EGLNativeFileDescriptorKHR;
type khronos_ssize_t (line 1180) | typedef khronos_ssize_t EGLsizeiANDROID;
type EGLsizeiANDROID (line 1182) | typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsi...
type EGLAttrib (line 1342) | typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDispl...
type EGLAttrib (line 1343) | typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDispla...
type const (line 1377) | typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLen...
type const (line 1378) | typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPRO...
type const (line 1379) | typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPRO...
type EGLClientPixmapHI (line 1455) | struct EGLClientPixmapHI {
type EGLClientPixmapHI (line 1462) | struct EGLClientPixmapHI
type EGLClientPixmapHI (line 1464) | struct EGLClientPixmapHI
type khronos_utime_nanoseconds_t (line 1611) | typedef khronos_utime_nanoseconds_t EGLTimeNV;
type khronos_utime_nanoseconds_t (line 1645) | typedef khronos_utime_nanoseconds_t EGLuint64NV;
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_endian.h
function SDL_FORCE_INLINE (line 70) | SDL_FORCE_INLINE Uint16
function SDL_FORCE_INLINE (line 77) | SDL_FORCE_INLINE Uint16
function SDL_FORCE_INLINE (line 84) | SDL_FORCE_INLINE Uint16
function SDL_FORCE_INLINE (line 93) | SDL_FORCE_INLINE Uint16
function SDL_FORCE_INLINE (line 106) | SDL_FORCE_INLINE Uint16
function SDL_FORCE_INLINE (line 114) | SDL_FORCE_INLINE Uint32
function SDL_FORCE_INLINE (line 121) | SDL_FORCE_INLINE Uint32
function SDL_FORCE_INLINE (line 128) | SDL_FORCE_INLINE Uint32
function SDL_FORCE_INLINE (line 139) | SDL_FORCE_INLINE Uint32
function SDL_FORCE_INLINE (line 161) | SDL_FORCE_INLINE Uint32
function SDL_FORCE_INLINE (line 170) | SDL_FORCE_INLINE Uint64
function SDL_FORCE_INLINE (line 188) | SDL_FORCE_INLINE Uint64
function SDL_FORCE_INLINE (line 195) | SDL_FORCE_INLINE Uint64
function SDL_FORCE_INLINE (line 212) | SDL_FORCE_INLINE float
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_error.h
type SDL_errorcode (line 55) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_events.h
type SDL_EventType (line 55) | typedef enum
type SDL_CommonEvent (line 171) | typedef struct SDL_CommonEvent
type SDL_DisplayEvent (line 180) | typedef struct SDL_DisplayEvent
type SDL_WindowEvent (line 195) | typedef struct SDL_WindowEvent
type SDL_KeyboardEvent (line 211) | typedef struct SDL_KeyboardEvent
type SDL_TextEditingEvent (line 227) | typedef struct SDL_TextEditingEvent
type SDL_TextInputEvent (line 242) | typedef struct SDL_TextInputEvent
type SDL_MouseMotionEvent (line 253) | typedef struct SDL_MouseMotionEvent
type SDL_MouseButtonEvent (line 269) | typedef struct SDL_MouseButtonEvent
type SDL_MouseWheelEvent (line 286) | typedef struct SDL_MouseWheelEvent
type SDL_JoyAxisEvent (line 300) | typedef struct SDL_JoyAxisEvent
type SDL_JoyBallEvent (line 316) | typedef struct SDL_JoyBallEvent
type SDL_JoyHatEvent (line 332) | typedef struct SDL_JoyHatEvent
type SDL_JoyButtonEvent (line 352) | typedef struct SDL_JoyButtonEvent
type SDL_JoyDeviceEvent (line 366) | typedef struct SDL_JoyDeviceEvent
type SDL_ControllerAxisEvent (line 377) | typedef struct SDL_ControllerAxisEvent
type SDL_ControllerButtonEvent (line 394) | typedef struct SDL_ControllerButtonEvent
type SDL_ControllerDeviceEvent (line 409) | typedef struct SDL_ControllerDeviceEvent
type SDL_AudioDeviceEvent (line 419) | typedef struct SDL_AudioDeviceEvent
type SDL_TouchFingerEvent (line 434) | typedef struct SDL_TouchFingerEvent
type SDL_MultiGestureEvent (line 451) | typedef struct SDL_MultiGestureEvent
type SDL_DollarGestureEvent (line 468) | typedef struct SDL_DollarGestureEvent
type SDL_DropEvent (line 486) | typedef struct SDL_DropEvent
type SDL_SensorEvent (line 498) | typedef struct SDL_SensorEvent
type SDL_QuitEvent (line 509) | typedef struct SDL_QuitEvent
type SDL_OSEvent (line 518) | typedef struct SDL_OSEvent
type SDL_UserEvent (line 527) | typedef struct SDL_UserEvent
type SDL_SysWMmsg (line 538) | struct SDL_SysWMmsg
type SDL_SysWMmsg (line 539) | typedef struct SDL_SysWMmsg SDL_SysWMmsg;
type SDL_SysWMEvent (line 547) | typedef struct SDL_SysWMEvent
type SDL_Event (line 557) | typedef union SDL_Event
type SDL_eventaction (line 613) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_gamecontroller.h
type _SDL_GameController (line 57) | struct _SDL_GameController
type SDL_GameController (line 58) | typedef struct _SDL_GameController SDL_GameController;
type SDL_GameControllerBindType (line 61) | typedef enum
type SDL_GameControllerButtonBind (line 72) | typedef struct SDL_GameControllerButtonBind
type SDL_GameControllerAxis (line 272) | typedef enum
type SDL_GameControllerButton (line 316) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_gesture.h
type Sint64 (line 44) | typedef Sint64 SDL_GestureID;
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_haptic.h
type _SDL_Haptic (line 140) | struct _SDL_Haptic
type SDL_Haptic (line 141) | typedef struct _SDL_Haptic SDL_Haptic;
type SDL_HapticDirection (line 450) | typedef struct SDL_HapticDirection
type SDL_HapticConstant (line 468) | typedef struct SDL_HapticConstant
type SDL_HapticPeriodic (line 549) | typedef struct SDL_HapticPeriodic
type SDL_HapticCondition (line 602) | typedef struct SDL_HapticCondition
type SDL_HapticRamp (line 639) | typedef struct SDL_HapticRamp
type SDL_HapticLeftRight (line 676) | typedef struct SDL_HapticLeftRight
type SDL_HapticCustom (line 704) | typedef struct SDL_HapticCustom
type SDL_HapticEffect (line 800) | typedef union SDL_HapticEffect
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_hints.h
type SDL_HintPriority (line 1180) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_joystick.h
type _SDL_Joystick (line 66) | struct _SDL_Joystick
type SDL_Joystick (line 67) | typedef struct _SDL_Joystick SDL_Joystick;
type SDL_JoystickGUID (line 70) | typedef struct {
type Sint32 (line 81) | typedef Sint32 SDL_JoystickID;
type SDL_JoystickType (line 83) | typedef enum
type SDL_JoystickPowerLevel (line 97) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_keyboard.h
type SDL_Keysym (line 47) | typedef struct SDL_Keysym
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_keycode.h
type Sint32 (line 45) | typedef Sint32 SDL_Keycode;
type SDL_Keymod (line 325) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_log.h
type SDL_LogPriority (line 102) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_messagebox.h
type SDL_MessageBoxFlags (line 37) | typedef enum
type SDL_MessageBoxButtonFlags (line 47) | typedef enum
type SDL_MessageBoxButtonData (line 56) | typedef struct
type SDL_MessageBoxColor (line 66) | typedef struct
type SDL_MessageBoxColorType (line 71) | typedef enum
type SDL_MessageBoxColorScheme (line 84) | typedef struct
type SDL_MessageBoxData (line 92) | typedef struct
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_mouse.h
type SDL_Cursor (line 41) | typedef struct SDL_Cursor SDL_Cursor;
type SDL_SystemCursor (line 46) | typedef enum
type SDL_MouseWheelDirection (line 66) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_mutex.h
type SDL_mutex (line 58) | struct SDL_mutex
type SDL_mutex (line 59) | typedef struct SDL_mutex SDL_mutex;
type SDL_semaphore (line 106) | struct SDL_semaphore
type SDL_sem (line 107) | typedef struct SDL_semaphore SDL_sem;
type SDL_cond (line 166) | struct SDL_cond
type SDL_cond (line 167) | typedef struct SDL_cond SDL_cond;
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_opengl.h
type GLenum (line 176) | typedef unsigned int GLenum;
type GLboolean (line 177) | typedef unsigned char GLboolean;
type GLbitfield (line 178) | typedef unsigned int GLbitfield;
type GLvoid (line 179) | typedef void GLvoid;
type GLbyte (line 180) | typedef signed char GLbyte;
type GLshort (line 181) | typedef short GLshort;
type GLint (line 182) | typedef int GLint;
type GLubyte (line 183) | typedef unsigned char GLubyte;
type GLushort (line 184) | typedef unsigned short GLushort;
type GLuint (line 185) | typedef unsigned int GLuint;
type GLsizei (line 186) | typedef int GLsizei;
type GLfloat (line 187) | typedef float GLfloat;
type GLclampf (line 188) | typedef float GLclampf;
type GLdouble (line 189) | typedef double GLdouble;
type GLclampd (line 190) | typedef double GLclampd;
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_opengl_glext.h
type GLsizeiptr (line 469) | typedef long GLsizeiptr;
type GLintptr (line 470) | typedef long GLintptr;
type GLsizeiptr (line 472) | typedef ptrdiff_t GLsizeiptr;
type GLintptr (line 473) | typedef ptrdiff_t GLintptr;
type GLchar (line 569) | typedef char GLchar;
type GLhalf (line 887) | typedef unsigned short GLhalf;
type GLubyte (line 1166) | typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLu...
type __GLsync (line 1371) | struct __GLsync
type __int32 (line 1401) | typedef __int32 int32_t;
type __int64 (line 1402) | typedef __int64 int64_t;
type GLuint64 (line 1409) | typedef uint64_t GLuint64;
type GLint64 (line 1410) | typedef int64_t GLint64;
type const (line 1759) | typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint ...
type const (line 1760) | typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, ...
type const (line 2463) | typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint prog...
type const (line 2466) | typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint pr...
type const (line 2467) | typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLui...
type GLuint64EXT (line 2597) | typedef uint64_t GLuint64EXT;
type _cl_context (line 2645) | struct _cl_context
type _cl_event (line 2646) | struct _cl_event
type struct (line 2649) | typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl...
type _cl_context (line 2651) | struct _cl_context
type _cl_event (line 2651) | struct _cl_event
type GLhalfARB (line 3042) | typedef unsigned short GLhalfARB;
type GLhandleARB (line 3575) | typedef unsigned int GLhandleARB;
type GLcharARB (line 3577) | typedef char GLcharARB;
type GLchar (line 3731) | typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, ...
type GLsizeiptrARB (line 4149) | typedef long GLsizeiptrARB;
type GLintptrARB (line 4150) | typedef long GLintptrARB;
type GLsizeiptrARB (line 4152) | typedef ptrdiff_t GLsizeiptrARB;
type GLintptrARB (line 4153) | typedef ptrdiff_t GLintptrARB;
type GLint (line 4495) | typedef GLint GLfixed;
type GLint64EXT (line 4828) | typedef int64_t GLint64EXT;
type GLenum (line 5629) | typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, co...
type GLuint (line 7587) | typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n...
type GLhalfNV (line 8856) | typedef unsigned short GLhalfNV;
type GLintptr (line 9740) | typedef GLintptr GLvdpauSurfaceNV;
type const (line 9747) | typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC...
type const (line 9748) | typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPRO...
type GLuint (line 9973) | typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n,...
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_opengles2_gl2.h
type GLvoid (line 21) | typedef void GLvoid;
type GLchar (line 22) | typedef char GLchar;
type GLenum (line 23) | typedef unsigned int GLenum;
type GLboolean (line 24) | typedef unsigned char GLboolean;
type GLbitfield (line 25) | typedef unsigned int GLbitfield;
type khronos_int8_t (line 26) | typedef khronos_int8_t GLbyte;
type GLshort (line 27) | typedef short GLshort;
type GLint (line 28) | typedef int GLint;
type GLsizei (line 29) | typedef int GLsizei;
type khronos_uint8_t (line 30) | typedef khronos_uint8_t GLubyte;
type GLushort (line 31) | typedef unsigned short GLushort;
type GLuint (line 32) | typedef unsigned int GLuint;
type khronos_float_t (line 33) | typedef khronos_float_t GLfloat;
type khronos_float_t (line 34) | typedef khronos_float_t GLclampf;
type khronos_int32_t (line 35) | typedef khronos_int32_t GLfixed;
type khronos_intptr_t (line 38) | typedef khronos_intptr_t GLintptr;
type khronos_ssize_t (line 39) | typedef khronos_ssize_t GLsizeiptr;
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_opengles2_gl2ext.h
type khronos_int64_t (line 27) | typedef khronos_int64_t GLint64;
type khronos_uint64_t (line 28) | typedef khronos_uint64_t GLuint64;
type __GLsync (line 29) | struct __GLsync
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_opengles2_khrplatform.h
type khronos_int32_t (line 142) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 143) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 144) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 145) | typedef uint64_t khronos_uint64_t;
type khronos_int32_t (line 155) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 156) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 157) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 158) | typedef uint64_t khronos_uint64_t;
type __int32 (line 167) | typedef __int32 khronos_int32_t;
type khronos_uint32_t (line 168) | typedef unsigned __int32 khronos_uint32_t;
type __int64 (line 169) | typedef __int64 khronos_int64_t;
type khronos_uint64_t (line 170) | typedef unsigned __int64 khronos_uint64_t;
type khronos_int32_t (line 179) | typedef int khronos_int32_t;
type khronos_uint32_t (line 180) | typedef unsigned int khronos_uint32_t;
type khronos_int64_t (line 182) | typedef long int khronos_int64_t;
type khronos_uint64_t (line 183) | typedef unsigned long int khronos_uint64_t;
type khronos_int64_t (line 185) | typedef long long int khronos_int64_t;
type khronos_uint64_t (line 186) | typedef unsigned long long int khronos_uint64_t;
type khronos_int32_t (line 196) | typedef int khronos_int32_t;
type khronos_uint32_t (line 197) | typedef unsigned int khronos_uint32_t;
type khronos_int32_t (line 207) | typedef int32_t khronos_int32_t;
type khronos_uint32_t (line 208) | typedef uint32_t khronos_uint32_t;
type khronos_int64_t (line 209) | typedef int64_t khronos_int64_t;
type khronos_uint64_t (line 210) | typedef uint64_t khronos_uint64_t;
type khronos_int8_t (line 220) | typedef signed char khronos_int8_t;
type khronos_uint8_t (line 221) | typedef unsigned char khronos_uint8_t;
type khronos_int16_t (line 222) | typedef signed short int khronos_int16_t;
type khronos_uint16_t (line 223) | typedef unsigned short int khronos_uint16_t;
type khronos_intptr_t (line 231) | typedef signed long long int khronos_intptr_t;
type khronos_uintptr_t (line 232) | typedef unsigned long long int khronos_uintptr_t;
type khronos_ssize_t (line 233) | typedef signed long long int khronos_ssize_t;
type khronos_usize_t (line 234) | typedef unsigned long long int khronos_usize_t;
type khronos_intptr_t (line 236) | typedef signed long int khronos_intptr_t;
type khronos_uintptr_t (line 237) | typedef unsigned long int khronos_uintptr_t;
type khronos_ssize_t (line 238) | typedef signed long int khronos_ssize_t;
type khronos_usize_t (line 239) | typedef unsigned long int khronos_usize_t;
type khronos_float_t (line 246) | typedef float khronos_float_t;
type khronos_uint64_t (line 259) | typedef khronos_uint64_t khronos_utime_nanoseconds_t;
type khronos_int64_t (line 260) | typedef khronos_int64_t khronos_stime_nanoseconds_t;
type khronos_boolean_enum_t (line 276) | typedef enum {
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_pixels.h
type SDL_PixelFormatEnum (line 171) | typedef enum
type SDL_Color (line 295) | typedef struct SDL_Color
type SDL_Palette (line 304) | typedef struct SDL_Palette
type SDL_PixelFormat (line 315) | typedef struct SDL_PixelFormat
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_power.h
type SDL_PowerState (line 42) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_rect.h
type SDL_Point (line 48) | typedef struct SDL_Point
type SDL_FPoint (line 60) | typedef struct SDL_FPoint
type SDL_Rect (line 77) | typedef struct SDL_Rect
type SDL_FRect (line 87) | typedef struct SDL_FRect
function SDL_FORCE_INLINE (line 99) | SDL_FORCE_INLINE SDL_bool SDL_PointInRect(const SDL_Point *p, const SDL_...
function SDL_FORCE_INLINE (line 108) | SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r)
function SDL_FORCE_INLINE (line 116) | SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Re...
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_render.h
type SDL_RendererFlags (line 64) | typedef enum
type SDL_RendererInfo (line 78) | typedef struct SDL_RendererInfo
type SDL_TextureAccess (line 91) | typedef enum
type SDL_TextureModulate (line 101) | typedef enum
type SDL_RendererFlip (line 111) | typedef enum
type SDL_Renderer (line 121) | struct SDL_Renderer
type SDL_Renderer (line 122) | typedef struct SDL_Renderer SDL_Renderer;
type SDL_Texture (line 127) | struct SDL_Texture
type SDL_Texture (line 128) | typedef struct SDL_Texture SDL_Texture;
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_rwops.h
type SDL_RWops (line 52) | typedef struct SDL_RWops
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_scancode.h
type SDL_Scancode (line 43) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_sensor.h
type _SDL_Sensor (line 51) | struct _SDL_Sensor
type SDL_Sensor (line 52) | typedef struct _SDL_Sensor SDL_Sensor;
type Sint32 (line 60) | typedef Sint32 SDL_SensorID;
type SDL_SensorType (line 69) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_shape.h
type WindowShapeMode (line 80) | typedef enum {
type SDL_WindowShapeParams (line 94) | typedef union {
type SDL_WindowShapeMode (line 101) | typedef struct SDL_WindowShapeMode {
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_stdinc.h
type SDL_bool (line 159) | typedef int SDL_bool;
type SDL_bool (line 161) | typedef enum
type Sint8 (line 173) | typedef int8_t Sint8;
type Uint8 (line 179) | typedef uint8_t Uint8;
type Sint16 (line 185) | typedef int16_t Sint16;
type Uint16 (line 191) | typedef uint16_t Uint16;
type Sint32 (line 197) | typedef int32_t Sint32;
type Uint32 (line 203) | typedef uint32_t Uint32;
type Sint64 (line 210) | typedef int64_t Sint64;
type Uint64 (line 216) | typedef uint64_t Uint64;
type SDL_DUMMY_ENUM (line 337) | typedef enum
function SDL_FORCE_INLINE (line 420) | SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords)
type _SDL_iconv_t (line 547) | struct _SDL_iconv_t
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_surface.h
type SDL_Surface (line 70) | typedef struct SDL_Surface
type SDL_Surface (line 98) | struct SDL_Surface
type SDL_Surface (line 99) | struct SDL_Surface
type SDL_YUV_CONVERSION_MODE (line 104) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_system.h
type IDirect3DDevice9 (line 60) | typedef struct IDirect3DDevice9 IDirect3DDevice9;
type SDL_WinRT_Path (line 183) | typedef enum
type SDL_WinRT_DeviceFamily (line 207) | typedef enum
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_syswm.h
type SDL_SysWMinfo (line 44) | struct SDL_SysWMinfo
type NSWindow (line 84) | typedef struct _NSWindow NSWindow;
type UIWindow (line 92) | typedef struct _UIWindow UIWindow;
type UIViewController (line 93) | typedef struct _UIViewController UIViewController;
type Uint32 (line 95) | typedef Uint32 GLuint;
type ANativeWindow (line 99) | typedef struct ANativeWindow ANativeWindow;
type SDL_SYSWM_TYPE (line 119) | typedef enum
type SDL_SysWMmsg (line 138) | struct SDL_SysWMmsg
type SDL_SysWMinfo (line 197) | struct SDL_SysWMinfo
type SDL_SysWMinfo (line 295) | typedef struct SDL_SysWMinfo SDL_SysWMinfo;
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_test_common.h
type SDLTest_CommonState (line 51) | typedef struct
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_test_crc32.h
type SDLTest_Crc32Context (line 66) | typedef struct {
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_test_harness.h
type SDLTest_TestCaseReference (line 75) | typedef struct SDLTest_TestCaseReference {
type SDLTest_TestSuiteReference (line 89) | typedef struct SDLTest_TestSuiteReference {
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_test_images.h
type SDLTest_SurfaceImage_t (line 50) | typedef struct SDLTest_SurfaceImage_s {
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_test_md5.h
type MD5UINT4 (line 68) | typedef unsigned long int MD5UINT4;
type SDLTest_Md5Context (line 71) | typedef struct {
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_test_random.h
type SDLTest_RandomContext (line 59) | typedef struct {
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_thread.h
type SDL_Thread (line 45) | struct SDL_Thread
type SDL_Thread (line 46) | typedef struct SDL_Thread SDL_Thread;
type SDL_threadID (line 49) | typedef unsigned long SDL_threadID;
type SDL_TLSID (line 52) | typedef unsigned int SDL_TLSID;
type SDL_ThreadPriority (line 59) | typedef enum {
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_timer.h
type SDL_TimerID (line 86) | typedef int SDL_TimerID;
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_touch.h
type Sint64 (line 41) | typedef Sint64 SDL_TouchID;
type Sint64 (line 42) | typedef Sint64 SDL_FingerID;
type SDL_TouchDeviceType (line 44) | typedef enum
type SDL_Finger (line 52) | typedef struct SDL_Finger
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_version.h
type SDL_version (line 51) | typedef struct SDL_version
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_video.h
type SDL_DisplayMode (line 53) | typedef struct
type SDL_Window (line 90) | typedef struct SDL_Window SDL_Window;
type SDL_WindowFlags (line 97) | typedef enum
type SDL_WindowEventID (line 146) | typedef enum
type SDL_DisplayEventID (line 175) | typedef enum
type SDL_DisplayOrientation (line 181) | typedef enum
type SDL_GLattr (line 198) | typedef enum
type SDL_GLprofile (line 229) | typedef enum
type SDL_GLcontextFlag (line 236) | typedef enum
type SDL_GLcontextReleaseFlag (line 244) | typedef enum
type SDL_GLContextResetNotification (line 250) | typedef enum
type SDL_HitTestResult (line 1020) | typedef enum
type SDL_Point (line 1039) | typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win,
FILE: winlib/SDL2-2.0.10/x86_64-w64-mingw32/include/SDL2/SDL_vulkan.h
type VkInstance (line 57) | typedef VkInstance SDL_vulkanInstance;
type VkSurfaceKHR (line 58) | typedef VkSurfaceKHR SDL_vulkanSurface;
Condensed preview — 429 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,028K chars).
[
{
"path": ".gitattributes",
"chars": 84,
"preview": "winlib/* linguist-vendored\nsrc/lib/* linguist-vendored\nicon.inl linguist-vendored\n"
},
{
"path": ".github/FUNDING.yml",
"chars": 59,
"preview": "# These are supported funding model platforms\n\ngithub: rxi\n"
},
{
"path": "LICENSE",
"chars": 1047,
"preview": "Copyright (c) 2020 rxi\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software an"
},
{
"path": "README.md",
"chars": 1930,
"preview": "# lite\n...\n\nwindres res.rc -O coff -o r"
},
{
"path": "build.sh",
"chars": 982,
"preview": "#!/bin/bash\n\ncflags=\"-Wall -O3 -g -std=gnu11 -fno-strict-aliasing -Isrc\"\nlflags=\"-lSDL2 -lm\"\n\nif [[ $* == *windows* ]]; "
},
{
"path": "build_release.sh",
"chars": 231,
"preview": "#!/bin/bash\n./build.sh release windows\n./build.sh release\nrm lite.zip 2>/dev/null\ncp winlib/SDL2-2.0.10/x86_64-w64-mingw"
},
{
"path": "data/core/command.lua",
"chars": 1422,
"preview": "local core = require \"core\"\nlocal command = {}\n\ncommand.map = {}\n\nlocal always_true = function() return true end\n\n\nfunct"
},
{
"path": "data/core/commands/command.lua",
"chars": 634,
"preview": "local core = require \"core\"\nlocal command = require \"core.command\"\nlocal CommandView = require \"core.commandview\"\n\nlocal"
},
{
"path": "data/core/commands/core.lua",
"chars": 2701,
"preview": "local core = require \"core\"\nlocal common = require \"core.common\"\nlocal command = require \"core.command\"\nlocal keymap = r"
},
{
"path": "data/core/commands/doc.lua",
"chars": 10363,
"preview": "local core = require \"core\"\nlocal command = require \"core.command\"\nlocal common = require \"core.common\"\nlocal config = r"
},
{
"path": "data/core/commands/findreplace.lua",
"chars": 4625,
"preview": "local core = require \"core\"\nlocal command = require \"core.command\"\nlocal config = require \"core.config\"\nlocal search = r"
},
{
"path": "data/core/commands/root.lua",
"chars": 3151,
"preview": "local core = require \"core\"\nlocal style = require \"core.style\"\nlocal DocView = require \"core.docview\"\nlocal command = re"
},
{
"path": "data/core/commandview.lua",
"chars": 6364,
"preview": "local core = require \"core\"\nlocal common = require \"core.common\"\nlocal style = require \"core.style\"\nlocal Doc = require "
},
{
"path": "data/core/common.lua",
"chars": 3033,
"preview": "local common = {}\n\n\nfunction common.is_utf8_cont(char)\n local byte = char:byte()\n return byte >= 0x80 and byte < 0xc0\n"
},
{
"path": "data/core/config.lua",
"chars": 520,
"preview": "local config = {}\n\nconfig.project_scan_rate = 5\nconfig.fps = 60\nconfig.max_log_items = 80\nconfig.message_timeout = 3\ncon"
},
{
"path": "data/core/doc/highlighter.lua",
"chars": 1944,
"preview": "local core = require \"core\"\nlocal config = require \"core.config\"\nlocal tokenizer = require \"core.tokenizer\"\nlocal Object"
},
{
"path": "data/core/doc/init.lua",
"chars": 10255,
"preview": "local Object = require \"core.object\"\nlocal Highlighter = require \"core.doc.highlighter\"\nlocal syntax = require \"core.syn"
},
{
"path": "data/core/doc/search.lua",
"chars": 1006,
"preview": "local search = {}\n\nlocal default_opt = {}\n\n\nlocal function pattern_lower(str)\n if str:sub(1, 1) == \"%\" then\n return "
},
{
"path": "data/core/doc/translate.lua",
"chars": 3022,
"preview": "local common = require \"core.common\"\nlocal config = require \"core.config\"\n\n-- functions for translating a Doc position t"
},
{
"path": "data/core/docview.lua",
"chars": 10458,
"preview": "local core = require \"core\"\nlocal common = require \"core.common\"\nlocal config = require \"core.config\"\nlocal style = requ"
},
{
"path": "data/core/init.lua",
"chars": 12435,
"preview": "require \"core.strict\"\nlocal common = require \"core.common\"\nlocal config = require \"core.config\"\nlocal style = require \"c"
},
{
"path": "data/core/keymap.lua",
"chars": 5711,
"preview": "local command = require \"core.command\"\nlocal keymap = {}\n\nkeymap.modkeys = {}\nkeymap.map = {}\nkeymap.reverse_map = {}\n\nl"
},
{
"path": "data/core/logview.lua",
"chars": 1694,
"preview": "local core = require \"core\"\nlocal style = require \"core.style\"\nlocal View = require \"core.view\"\n\n\nlocal LogView = View:e"
},
{
"path": "data/core/object.lua",
"chars": 819,
"preview": "local Object = {}\nObject.__index = Object\n\n\nfunction Object:new()\nend\n\n\nfunction Object:extend()\n local cls = {}\n for "
},
{
"path": "data/core/rootview.lua",
"chars": 13225,
"preview": "local core = require \"core\"\nlocal common = require \"core.common\"\nlocal style = require \"core.style\"\nlocal keymap = requi"
},
{
"path": "data/core/statusview.lua",
"chars": 3381,
"preview": "local core = require \"core\"\nlocal common = require \"core.common\"\nlocal command = require \"core.command\"\nlocal config = r"
},
{
"path": "data/core/strict.lua",
"chars": 428,
"preview": "local strict = {}\nstrict.defined = {}\n\n\n-- used to define a global variable\nfunction global(t)\n for k, v in pairs(t) do"
},
{
"path": "data/core/style.lua",
"chars": 1837,
"preview": "local common = require \"core.common\"\nlocal style = {}\n\nstyle.padding = { x = common.round(14 * SCALE), y = common.round("
},
{
"path": "data/core/syntax.lua",
"chars": 537,
"preview": "local common = require \"core.common\"\n\nlocal syntax = {}\nsyntax.items = {}\n\nlocal plain_text_syntax = { patterns = {}, sy"
},
{
"path": "data/core/tokenizer.lua",
"chars": 2364,
"preview": "local tokenizer = {}\n\n\nlocal function push_token(t, type, text)\n local prev_type = t[#t-1]\n local prev_text = t[#t]\n "
},
{
"path": "data/core/view.lua",
"chars": 3294,
"preview": "local core = require \"core\"\nlocal config = require \"core.config\"\nlocal style = require \"core.style\"\nlocal common = requi"
},
{
"path": "data/plugins/autocomplete.lua",
"chars": 6943,
"preview": "local core = require \"core\"\nlocal common = require \"core.common\"\nlocal config = require \"core.config\"\nlocal command = re"
},
{
"path": "data/plugins/autoreload.lua",
"chars": 1323,
"preview": "local core = require \"core\"\nlocal config = require \"core.config\"\nlocal Doc = require \"core.doc\"\n\n\nlocal times = setmetat"
},
{
"path": "data/plugins/language_c.lua",
"chars": 1960,
"preview": "local syntax = require \"core.syntax\"\n\nsyntax.add {\n files = { \"%.c$\", \"%.h$\", \"%.inl$\", \"%.cpp$\", \"%.hpp$\" },\n comment"
},
{
"path": "data/plugins/language_css.lua",
"chars": 998,
"preview": "local syntax = require \"core.syntax\"\n\nsyntax.add {\n files = { \"%.css$\" },\n patterns = {\n { pattern = \"\\\\.\", "
},
{
"path": "data/plugins/language_js.lua",
"chars": 2302,
"preview": "local syntax = require \"core.syntax\"\n\nsyntax.add {\n files = { \"%.js$\", \"%.json$\", \"%.cson$\" },\n comment = \"//\",\n patt"
},
{
"path": "data/plugins/language_lua.lua",
"chars": 1795,
"preview": "local syntax = require \"core.syntax\"\n\nsyntax.add {\n files = \"%.lua$\",\n headers = \"^#!.*[ /]lua\",\n comment = \"--\",\n p"
},
{
"path": "data/plugins/language_md.lua",
"chars": 946,
"preview": "local syntax = require \"core.syntax\"\n\nsyntax.add {\n files = { \"%.md$\", \"%.markdown$\" },\n patterns = {\n { pattern = "
},
{
"path": "data/plugins/language_python.lua",
"chars": 1823,
"preview": "local syntax = require \"core.syntax\"\n\nsyntax.add {\n files = { \"%.py$\", \"%.pyw$\" },\n headers = \"^#!.*[ /]python\",\n com"
},
{
"path": "data/plugins/language_xml.lua",
"chars": 915,
"preview": "local syntax = require \"core.syntax\"\n\nsyntax.add {\n files = { \"%.xml$\", \"%.html?$\" },\n headers = \"<%?xml\",\n patterns "
},
{
"path": "data/plugins/macro.lua",
"chars": 1444,
"preview": "local core = require \"core\"\nlocal command = require \"core.command\"\nlocal keymap = require \"core.keymap\"\n\nlocal handled_e"
},
{
"path": "data/plugins/projectsearch.lua",
"chars": 7299,
"preview": "local core = require \"core\"\nlocal common = require \"core.common\"\nlocal keymap = require \"core.keymap\"\nlocal command = re"
},
{
"path": "data/plugins/quote.lua",
"chars": 569,
"preview": "local core = require \"core\"\nlocal command = require \"core.command\"\nlocal keymap = require \"core.keymap\"\n\n\nlocal escapes "
},
{
"path": "data/plugins/reflow.lua",
"chars": 1600,
"preview": "local core = require \"core\"\nlocal config = require \"core.config\"\nlocal command = require \"core.command\"\nlocal keymap = r"
},
{
"path": "data/plugins/tabularize.lua",
"chars": 1628,
"preview": "local core = require \"core\"\nlocal command = require \"core.command\"\nlocal translate = require \"core.doc.translate\"\n\n\nloca"
},
{
"path": "data/plugins/treeview.lua",
"chars": 4624,
"preview": "local core = require \"core\"\nlocal common = require \"core.common\"\nlocal command = require \"core.command\"\nlocal config = r"
},
{
"path": "data/plugins/trimwhitespace.lua",
"chars": 881,
"preview": "local core = require \"core\"\nlocal command = require \"core.command\"\nlocal Doc = require \"core.doc\"\n\n\nlocal function trim_"
},
{
"path": "data/user/colors/fall.lua",
"chars": 1229,
"preview": "local style = require \"core.style\"\nlocal common = require \"core.common\"\n\nstyle.background = { common.color \"#343233\" }\ns"
},
{
"path": "data/user/colors/summer.lua",
"chars": 1229,
"preview": "local style = require \"core.style\"\nlocal common = require \"core.common\"\n\nstyle.background = { common.color \"#fbfbfb\" }\ns"
},
{
"path": "data/user/init.lua",
"chars": 331,
"preview": "-- put user settings here\n-- this module will be loaded after everything else when the application starts\n\nlocal keymap "
},
{
"path": "doc/usage.md",
"chars": 5955,
"preview": "# lite\n\n;\nint luaopen_renderer(lua_State *L);\n\n\nstatic const luaL_Reg libs[] "
},
{
"path": "src/api/api.h",
"chars": 190,
"preview": "#ifndef API_H\n#define API_H\n\n#include \"lib/lua52/lua.h\"\n#include \"lib/lua52/lauxlib.h\"\n#include \"lib/lua52/lualib.h\"\n\n#d"
},
{
"path": "src/api/renderer.c",
"chars": 2367,
"preview": "#include \"api.h\"\n#include \"renderer.h\"\n#include \"rencache.h\"\n\n\nstatic RenColor checkcolor(lua_State *L, int idx, int def"
},
{
"path": "src/api/renderer_font.c",
"chars": 1536,
"preview": "#include \"api.h\"\n#include \"renderer.h\"\n#include \"rencache.h\"\n\n\nstatic int f_load(lua_State *L) {\n const char *filename "
},
{
"path": "src/api/system.c",
"chars": 9511,
"preview": "#include <SDL2/SDL.h>\n#include <stdbool.h>\n#include <ctype.h>\n#include <dirent.h>\n#include <unistd.h>\n#include <errno.h>"
},
{
"path": "src/lib/lua52/lapi.c",
"chars": 29910,
"preview": "/*\n** $Id: lapi.c,v 2.171.1.1 2013/04/12 18:48:47 roberto Exp $\n** Lua API\n** See Copyright Notice in lua.h\n*/\n\n\n#includ"
},
{
"path": "src/lib/lua52/lapi.h",
"chars": 545,
"preview": "/*\n** $Id: lapi.h,v 2.7.1.1 2013/04/12 18:48:47 roberto Exp $\n** Auxiliary functions from Lua API\n** See Copyright Notic"
},
{
"path": "src/lib/lua52/lauxlib.c",
"chars": 27541,
"preview": "/*\n** $Id: lauxlib.c,v 1.248.1.1 2013/04/12 18:48:47 roberto Exp $\n** Auxiliary functions for building Lua libraries\n** "
},
{
"path": "src/lib/lua52/lauxlib.h",
"chars": 7344,
"preview": "/*\n** $Id: lauxlib.h,v 1.120.1.1 2013/04/12 18:48:47 roberto Exp $\n** Auxiliary functions for building Lua libraries\n** "
},
{
"path": "src/lib/lua52/lbaselib.c",
"chars": 12285,
"preview": "/*\n** $Id: lbaselib.c,v 1.276.1.1 2013/04/12 18:48:47 roberto Exp $\n** Basic library\n** See Copyright Notice in lua.h\n*/"
},
{
"path": "src/lib/lua52/lbitlib.c",
"chars": 4374,
"preview": "/*\n** $Id: lbitlib.c,v 1.18.1.2 2013/07/09 18:01:41 roberto Exp $\n** Standard library for bitwise operations\n** See Copy"
},
{
"path": "src/lib/lua52/lcode.c",
"chars": 22404,
"preview": "/*\n** $Id: lcode.c,v 2.62.1.1 2013/04/12 18:48:47 roberto Exp $\n** Code generator for Lua\n** See Copyright Notice in lua"
},
{
"path": "src/lib/lua52/lcode.h",
"chars": 3120,
"preview": "/*\n** $Id: lcode.h,v 1.58.1.1 2013/04/12 18:48:47 roberto Exp $\n** Code generator for Lua\n** See Copyright Notice in lua"
},
{
"path": "src/lib/lua52/lcorolib.c",
"chars": 3575,
"preview": "/*\n** $Id: lcorolib.c,v 1.5.1.1 2013/04/12 18:48:47 roberto Exp $\n** Coroutine Library\n** See Copyright Notice in lua.h\n"
},
{
"path": "src/lib/lua52/lctype.c",
"chars": 2299,
"preview": "/*\n** $Id: lctype.c,v 1.11.1.1 2013/04/12 18:48:47 roberto Exp $\n** 'ctype' functions for Lua\n** See Copyright Notice in"
},
{
"path": "src/lib/lua52/lctype.h",
"chars": 1841,
"preview": "/*\n** $Id: lctype.h,v 1.12.1.1 2013/04/12 18:48:47 roberto Exp $\n** 'ctype' functions for Lua\n** See Copyright Notice in"
},
{
"path": "src/lib/lua52/ldblib.c",
"chars": 10348,
"preview": "/*\n** $Id: ldblib.c,v 1.132.1.2 2015/02/19 17:16:55 roberto Exp $\n** Interface from Lua to its debug API\n** See Copyrigh"
},
{
"path": "src/lib/lua52/ldebug.c",
"chars": 16482,
"preview": "/*\n** $Id: ldebug.c,v 2.90.1.4 2015/02/19 17:05:13 roberto Exp $\n** Debug Interface\n** See Copyright Notice in lua.h\n*/\n"
},
{
"path": "src/lib/lua52/ldebug.h",
"chars": 1087,
"preview": "/*\n** $Id: ldebug.h,v 2.7.1.1 2013/04/12 18:48:47 roberto Exp $\n** Auxiliary functions from Debug Interface module\n** Se"
},
{
"path": "src/lib/lua52/ldo.c",
"chars": 20751,
"preview": "/*\n** $Id: ldo.c,v 2.108.1.3 2013/11/08 18:22:50 roberto Exp $\n** Stack and Call structure of Lua\n** See Copyright Notic"
},
{
"path": "src/lib/lua52/ldo.h",
"chars": 1531,
"preview": "/*\n** $Id: ldo.h,v 2.20.1.1 2013/04/12 18:48:47 roberto Exp $\n** Stack and Call structure of Lua\n** See Copyright Notice"
},
{
"path": "src/lib/lua52/ldump.c",
"chars": 3221,
"preview": "/*\n** $Id: ldump.c,v 2.17.1.1 2013/04/12 18:48:47 roberto Exp $\n** save precompiled Lua chunks\n** See Copyright Notice i"
},
{
"path": "src/lib/lua52/lfunc.c",
"chars": 4270,
"preview": "/*\n** $Id: lfunc.c,v 2.30.1.1 2013/04/12 18:48:47 roberto Exp $\n** Auxiliary functions to manipulate prototypes and clos"
},
{
"path": "src/lib/lua52/lfunc.h",
"chars": 1045,
"preview": "/*\n** $Id: lfunc.h,v 2.8.1.1 2013/04/12 18:48:47 roberto Exp $\n** Auxiliary functions to manipulate prototypes and closu"
},
{
"path": "src/lib/lua52/lgc.c",
"chars": 37759,
"preview": "/*\n** $Id: lgc.c,v 2.140.1.3 2014/09/01 16:55:08 roberto Exp $\n** Garbage Collector\n** See Copyright Notice in lua.h\n*/\n"
},
{
"path": "src/lib/lua52/lgc.h",
"chars": 5404,
"preview": "/*\n** $Id: lgc.h,v 2.58.1.1 2013/04/12 18:48:47 roberto Exp $\n** Garbage Collector\n** See Copyright Notice in lua.h\n*/\n\n"
},
{
"path": "src/lib/lua52/linit.c",
"chars": 1689,
"preview": "/*\n** $Id: linit.c,v 1.32.1.1 2013/04/12 18:48:47 roberto Exp $\n** Initialization of libraries for lua.c and other clien"
},
{
"path": "src/lib/lua52/liolib.c",
"chars": 17196,
"preview": "/*\n** $Id: liolib.c,v 2.112.1.1 2013/04/12 18:48:47 roberto Exp $\n** Standard I/O (and system) library\n** See Copyright "
},
{
"path": "src/lib/lua52/llex.c",
"chars": 15336,
"preview": "/*\n** $Id: llex.c,v 2.63.1.3 2015/02/09 17:56:34 roberto Exp $\n** Lexical Analyzer\n** See Copyright Notice in lua.h\n*/\n\n"
},
{
"path": "src/lib/lua52/llex.h",
"chars": 2162,
"preview": "/*\n** $Id: llex.h,v 1.72.1.1 2013/04/12 18:48:47 roberto Exp $\n** Lexical Analyzer\n** See Copyright Notice in lua.h\n*/\n\n"
},
{
"path": "src/lib/lua52/llimits.h",
"chars": 7529,
"preview": "/*\n** $Id: llimits.h,v 1.103.1.1 2013/04/12 18:48:47 roberto Exp $\n** Limits, basic types, and some other `installation-"
},
{
"path": "src/lib/lua52/lmathlib.c",
"chars": 6586,
"preview": "/*\n** $Id: lmathlib.c,v 1.83.1.1 2013/04/12 18:48:47 roberto Exp $\n** Standard mathematical library\n** See Copyright Not"
},
{
"path": "src/lib/lua52/lmem.c",
"chars": 2650,
"preview": "/*\n** $Id: lmem.c,v 1.84.1.1 2013/04/12 18:48:47 roberto Exp $\n** Interface to Memory Manager\n** See Copyright Notice in"
},
{
"path": "src/lib/lua52/lmem.h",
"chars": 1806,
"preview": "/*\n** $Id: lmem.h,v 1.40.1.1 2013/04/12 18:48:47 roberto Exp $\n** Interface to Memory Manager\n** See Copyright Notice in"
},
{
"path": "src/lib/lua52/loadlib.c",
"chars": 21492,
"preview": "/*\n** $Id: loadlib.c,v 1.111.1.1 2013/04/12 18:48:47 roberto Exp $\n** Dynamic library loader for Lua\n** See Copyright No"
},
{
"path": "src/lib/lua52/lobject.c",
"chars": 7905,
"preview": "/*\n** $Id: lobject.c,v 2.58.1.1 2013/04/12 18:48:47 roberto Exp $\n** Some generic functions over Lua objects\n** See Copy"
},
{
"path": "src/lib/lua52/lobject.h",
"chars": 14945,
"preview": "/*\n** $Id: lobject.h,v 2.71.1.2 2014/05/07 14:14:58 roberto Exp $\n** Type definitions for Lua objects\n** See Copyright N"
},
{
"path": "src/lib/lua52/lopcodes.c",
"chars": 3076,
"preview": "/*\n** $Id: lopcodes.c,v 1.49.1.1 2013/04/12 18:48:47 roberto Exp $\n** Opcodes for Lua virtual machine\n** See Copyright N"
},
{
"path": "src/lib/lua52/lopcodes.h",
"chars": 8486,
"preview": "/*\n** $Id: lopcodes.h,v 1.142.1.2 2014/10/20 18:32:09 roberto Exp $\n** Opcodes for Lua virtual machine\n** See Copyright "
},
{
"path": "src/lib/lua52/loslib.c",
"chars": 8059,
"preview": "/*\n** $Id: loslib.c,v 1.40.1.1 2013/04/12 18:48:47 roberto Exp $\n** Standard Operating System library\n** See Copyright N"
},
{
"path": "src/lib/lua52/lparser.c",
"chars": 45973,
"preview": "/*\n** $Id: lparser.c,v 2.130.1.1 2013/04/12 18:48:47 roberto Exp $\n** Lua Parser\n** See Copyright Notice in lua.h\n*/\n\n\n#"
},
{
"path": "src/lib/lua52/lparser.h",
"chars": 3332,
"preview": "/*\n** $Id: lparser.h,v 1.70.1.1 2013/04/12 18:48:47 roberto Exp $\n** Lua Parser\n** See Copyright Notice in lua.h\n*/\n\n#if"
},
{
"path": "src/lib/lua52/lstate.c",
"chars": 7716,
"preview": "/*\n** $Id: lstate.c,v 2.99.1.2 2013/11/08 17:45:31 roberto Exp $\n** Global State\n** See Copyright Notice in lua.h\n*/\n\n\n#"
},
{
"path": "src/lib/lua52/lstate.h",
"chars": 7543,
"preview": "/*\n** $Id: lstate.h,v 2.82.1.1 2013/04/12 18:48:47 roberto Exp $\n** Global State\n** See Copyright Notice in lua.h\n*/\n\n#i"
},
{
"path": "src/lib/lua52/lstring.c",
"chars": 4904,
"preview": "/*\n** $Id: lstring.c,v 2.26.1.1 2013/04/12 18:48:47 roberto Exp $\n** String table (keeps all strings handled by Lua)\n** "
},
{
"path": "src/lib/lua52/lstring.h",
"chars": 1272,
"preview": "/*\n** $Id: lstring.h,v 1.49.1.1 2013/04/12 18:48:47 roberto Exp $\n** String table (keep all strings handled by Lua)\n** S"
},
{
"path": "src/lib/lua52/lstrlib.c",
"chars": 28355,
"preview": "/*\n** $Id: lstrlib.c,v 1.178.1.1 2013/04/12 18:48:47 roberto Exp $\n** Standard library for string operations and pattern"
},
{
"path": "src/lib/lua52/ltable.c",
"chars": 16482,
"preview": "/*\n** $Id: ltable.c,v 2.72.1.1 2013/04/12 18:48:47 roberto Exp $\n** Lua tables (hash)\n** See Copyright Notice in lua.h\n*"
},
{
"path": "src/lib/lua52/ltable.h",
"chars": 1410,
"preview": "/*\n** $Id: ltable.h,v 2.16.1.2 2013/08/30 15:49:41 roberto Exp $\n** Lua tables (hash)\n** See Copyright Notice in lua.h\n*"
},
{
"path": "src/lib/lua52/ltablib.c",
"chars": 7722,
"preview": "/*\n** $Id: ltablib.c,v 1.65.1.2 2014/05/07 16:32:55 roberto Exp $\n** Library for Table Manipulation\n** See Copyright Not"
},
{
"path": "src/lib/lua52/ltm.c",
"chars": 1799,
"preview": "/*\n** $Id: ltm.c,v 2.14.1.1 2013/04/12 18:48:47 roberto Exp $\n** Tag methods\n** See Copyright Notice in lua.h\n*/\n\n\n#incl"
},
{
"path": "src/lib/lua52/ltm.h",
"chars": 1125,
"preview": "/*\n** $Id: ltm.h,v 2.11.1.1 2013/04/12 18:48:47 roberto Exp $\n** Tag methods\n** See Copyright Notice in lua.h\n*/\n\n#ifnde"
},
{
"path": "src/lib/lua52/lua.c_",
"chars": 14013,
"preview": "/*\n** $Id: lua.c,v 1.206.1.1 2013/04/12 18:48:47 roberto Exp $\n** Lua stand-alone interpreter\n** See Copyright Notice in"
},
{
"path": "src/lib/lua52/lua.h",
"chars": 13602,
"preview": "/*\n** $Id: lua.h,v 1.285.1.4 2015/02/21 14:04:50 roberto Exp $\n** Lua - A Scripting Language\n** Lua.org, PUC-Rio, Brazil"
},
{
"path": "src/lib/lua52/lua.hpp",
"chars": 191,
"preview": "// lua.hpp\n// Lua header files for C++\n// <<extern \"C\">> not supplied automatically because Lua also compiles as C++\n\nex"
},
{
"path": "src/lib/lua52/luac.c_",
"chars": 9964,
"preview": "/*\n** $Id: luac.c,v 1.69 2011/11/29 17:46:33 lhf Exp $\n** Lua compiler (saves bytecodes to files; also list bytecodes)\n*"
},
{
"path": "src/lib/lua52/luaconf.h",
"chars": 15439,
"preview": "/*\n** $Id: luaconf.h,v 1.176.1.2 2013/11/21 17:26:16 roberto Exp $\n** Configuration file for Lua\n** See Copyright Notice"
},
{
"path": "src/lib/lua52/lualib.h",
"chars": 1099,
"preview": "/*\n** $Id: lualib.h,v 1.43.1.1 2013/04/12 18:48:47 roberto Exp $\n** Lua standard libraries\n** See Copyright Notice in lu"
},
{
"path": "src/lib/lua52/lundump.c",
"chars": 5623,
"preview": "/*\n** $Id: lundump.c,v 2.22.1.1 2013/04/12 18:48:47 roberto Exp $\n** load precompiled Lua chunks\n** See Copyright Notice"
},
{
"path": "src/lib/lua52/lundump.h",
"chars": 772,
"preview": "/*\n** $Id: lundump.h,v 1.39.1.1 2013/04/12 18:48:47 roberto Exp $\n** load precompiled Lua chunks\n** See Copyright Notice"
},
{
"path": "src/lib/lua52/lvm.c",
"chars": 28842,
"preview": "/*\n** $Id: lvm.c,v 2.155.1.1 2013/04/12 18:48:47 roberto Exp $\n** Lua virtual machine\n** See Copyright Notice in lua.h\n*"
},
{
"path": "src/lib/lua52/lvm.h",
"chars": 1484,
"preview": "/*\n** $Id: lvm.h,v 2.18.1.1 2013/04/12 18:48:47 roberto Exp $\n** Lua virtual machine\n** See Copyright Notice in lua.h\n*/"
},
{
"path": "src/lib/lua52/lzio.c",
"chars": 1625,
"preview": "/*\n** $Id: lzio.c,v 1.35.1.1 2013/04/12 18:48:47 roberto Exp $\n** Buffered streams\n** See Copyright Notice in lua.h\n*/\n\n"
},
{
"path": "src/lib/lua52/lzio.h",
"chars": 1486,
"preview": "/*\n** $Id: lzio.h,v 1.26.1.1 2013/04/12 18:48:47 roberto Exp $\n** Buffered streams\n** See Copyright Notice in lua.h\n*/\n\n"
},
{
"path": "src/lib/stb/stb_truetype.c",
"chars": 62,
"preview": "#define STB_TRUETYPE_IMPLEMENTATION\n#include \"stb_truetype.h\"\n"
},
{
"path": "src/lib/stb/stb_truetype.h",
"chars": 195647,
"preview": "// stb_truetype.h - v1.24 - public domain\n// authored from 2009-2020 by Sean Barrett / RAD Game Tools\n//\n// ============"
},
{
"path": "src/main.c",
"chars": 3299,
"preview": "#include <stdio.h>\n#include <SDL2/SDL.h>\n#include \"api/api.h\"\n#include \"renderer.h\"\n\n#ifdef _WIN32\n #include <windows.h"
},
{
"path": "src/rencache.c",
"chars": 7393,
"preview": "#include <stdio.h>\n#include \"rencache.h\"\n\n/* a cache over the software renderer -- all drawing operations are stored as\n"
},
{
"path": "src/rencache.h",
"chars": 452,
"preview": "#ifndef RENCACHE_H\n#define RENCACHE_H\n\n#include <stdbool.h>\n#include \"renderer.h\"\n\nvoid rencache_show_debug(bool enable)"
},
{
"path": "src/renderer.c",
"chars": 8734,
"preview": "#include <stdio.h>\n#include <stdbool.h>\n#include <assert.h>\n#include <math.h>\n#include \"lib/stb/stb_truetype.h\"\n#include"
},
{
"path": "src/renderer.h",
"chars": 1003,
"preview": "#ifndef RENDERER_H\n#define RENDERER_H\n\n#include <SDL2/SDL.h>\n#include <stdint.h>\n\ntypedef struct RenImage RenImage;\ntype"
},
{
"path": "winlib/SDL2-2.0.10/BUGS.txt",
"chars": 463,
"preview": "\r\nBugs are now managed in the SDL bug tracker, here:\r\n\r\n https://bugzilla.libsdl.org/\r\n\r\nYou may report bugs there, a"
},
{
"path": "winlib/SDL2-2.0.10/COPYING.txt",
"chars": 930,
"preview": "\r\nSimple DirectMedia Layer\r\nCopyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\r\n \r\nThis software is provided 'as"
},
{
"path": "winlib/SDL2-2.0.10/CREDITS.txt",
"chars": 1918,
"preview": "\r\nSimple DirectMedia Layer CREDITS\r\nThanks to everyone who made this possible, including:\r\n\r\n* Cliff Matthews, for givin"
},
{
"path": "winlib/SDL2-2.0.10/INSTALL.txt",
"chars": 489,
"preview": "\r\nThe 32-bit files are in i686-w64-mingw32\r\nThe 64-bit files are in x86_64-w64-mingw32\r\n\r\nTo install SDL for native deve"
},
{
"path": "winlib/SDL2-2.0.10/Makefile",
"chars": 1161,
"preview": "#\n# Makefile for installing the mingw32 version of the SDL library\n\nCROSS_PATH := /usr/local\nARCHITECTURES := i686-w64-m"
},
{
"path": "winlib/SDL2-2.0.10/README-SDL.txt",
"chars": 433,
"preview": "\r\nPlease distribute this file with the SDL runtime environment:\r\n\r\nThe Simple DirectMedia Layer (SDL for short) is a cro"
},
{
"path": "winlib/SDL2-2.0.10/README.txt",
"chars": 648,
"preview": "\r\n Simple DirectMedia Layer\r\n\r\n (SDL)\r\n\r\n "
},
{
"path": "winlib/SDL2-2.0.10/WhatsNew.txt",
"chars": 28273,
"preview": "\r\nThis is a list of major changes in SDL's version history.\r\n\r\n---------------------------------------------------------"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-android.md",
"chars": 19139,
"preview": "Android\r\n================================================================================\r\n\r\nMatt Styles wrote a tutoria"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-cmake.md",
"chars": 997,
"preview": "CMake\r\n================================================================================\r\n(www.cmake.org)\r\n\r\nSDL's build "
},
{
"path": "winlib/SDL2-2.0.10/docs/README-directfb.md",
"chars": 2660,
"preview": "DirectFB\r\n========\r\n\r\nSupports:\r\n\r\n- Hardware YUV overlays\r\n- OpenGL - software only\r\n- 2D/3D accelerations (depends on "
},
{
"path": "winlib/SDL2-2.0.10/docs/README-dynapi.md",
"chars": 7111,
"preview": "Dynamic API\r\n================================================================================\r\nOriginally posted by Ryan"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-emscripten.md",
"chars": 966,
"preview": "Emscripten\r\n================================================================================\r\n\r\nBuild:\r\n\r\n $ mkdir bu"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-gesture.md",
"chars": 4074,
"preview": "Dollar Gestures\r\n===========================================================================\r\nSDL provides an implementa"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-hg.md",
"chars": 809,
"preview": "Mercurial\r\n=========\r\n\r\nThe latest development version of SDL is available via Mercurial.\r\nMercurial allows you to get u"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-ios.md",
"chars": 15124,
"preview": "iOS\r\n======\r\n\r\n==============================================================================\r\nBuilding the Simple Direc"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-linux.md",
"chars": 3801,
"preview": "Linux\r\n================================================================================\r\n\r\nBy default SDL will only link"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-macosx.md",
"chars": 10088,
"preview": "Mac OS X\r\n==============================================================================\r\n\r\nThese instructions are for p"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-nacl.md",
"chars": 4428,
"preview": "Native Client\r\n================================================================================\r\n\r\nRequirements: \r\n\r\n* N"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-pandora.md",
"chars": 752,
"preview": "Pandora \r\n=====================================================================\r\n\r\n( http://openpandora.org/ )\r\n- A pand"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-platforms.md",
"chars": 187,
"preview": "Platforms\r\n=========\r\n\r\nWe maintain the list of supported platforms on our wiki now, and how to\r\nbuild and install SDL f"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-porting.md",
"chars": 2029,
"preview": "Porting\r\n=======\r\n\r\n* Porting To A New Platform\r\n\r\n The first thing you have to do when porting to a new platform, is l"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-psp.md",
"chars": 354,
"preview": "PSP\r\n======\r\nSDL port for the Sony PSP contributed by \r\n Captian Lex \r\n\r\nCredit to\r\n Marcus R.Brown,Jim Paris,Matthe"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-raspberrypi.md",
"chars": 8051,
"preview": "Raspberry Pi\r\n================================================================================\r\n\r\nRequirements:\r\n\r\nRaspb"
},
{
"path": "winlib/SDL2-2.0.10/docs/README-touch.md",
"chars": 4111,
"preview": "Touch\r\n===========================================================================\r\nSystem Specific Notes\r\n============="
},
{
"path": "winlib/SDL2-2.0.10/docs/README-wince.md",
"chars": 220,
"preview": "WinCE\r\n=====\r\n\r\nWindows CE is no longer supported by SDL.\r\n\r\nWe have left the CE support in SDL 1.2 for those that must "
},
{
"path": "winlib/SDL2-2.0.10/docs/README-windows.md",
"chars": 2362,
"preview": "Windows\n================================================================================\n\n=============================="
},
{
"path": "winlib/SDL2-2.0.10/docs/README-winrt.md",
"chars": 26158,
"preview": "WinRT\r\n=====\r\n\r\nThis port allows SDL applications to run on Microsoft's platforms that require\r\nuse of \"Windows Runtime\""
},
{
"path": "winlib/SDL2-2.0.10/docs/README.md",
"chars": 2191,
"preview": "Simple DirectMedia Layer {#mainpage}\r\n========================\r\n\r\n (SDL)\r\n\r\n "
},
{
"path": "winlib/SDL2-2.0.10/docs/doxyfile",
"chars": 65794,
"preview": "# Doxyfile 1.5.9\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) "
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/bin/sdl2-config",
"chars": 1420,
"preview": "#!/bin/sh\n\nprefix=/opt/local/i686-w64-mingw32\nexec_prefix=${prefix}\nexec_prefix_set=no\nlibdir=${exec_prefix}/lib\n\n#usage"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL.h",
"chars": 4210,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_assert.h",
"chars": 11045,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_atomic.h",
"chars": 10839,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_audio.h",
"chars": 35787,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_bits.h",
"chars": 3096,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_blendmode.h",
"chars": 5115,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_clipboard.h",
"chars": 1966,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_config.h",
"chars": 6776,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_cpuinfo.h",
"chars": 8610,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_egl.h",
"chars": 73586,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_endian.h",
"chars": 6451,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_error.h",
"chars": 2271,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_events.h",
"chars": 30883,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_filesystem.h",
"chars": 5255,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_gamecontroller.h",
"chars": 13531,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_gesture.h",
"chars": 2157,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_haptic.h",
"chars": 39294,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_hints.h",
"chars": 53343,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_joystick.h",
"chars": 13836,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_keyboard.h",
"chars": 6437,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_keycode.h",
"chars": 15262,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_loadso.h",
"chars": 2866,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_log.h",
"chars": 6491,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_main.h",
"chars": 5375,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_messagebox.h",
"chars": 4611,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_mouse.h",
"chars": 10924,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_mutex.h",
"chars": 6665,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_name.h",
"chars": 1155,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengl.h",
"chars": 82593,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengl_glext.h",
"chars": 731497,
"preview": "#ifndef __glext_h_\n#define __glext_h_ 1\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n** Copyright (c) 2013-2014 The Khron"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengles.h",
"chars": 1254,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengles2.h",
"chars": 1552,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengles2_gl2.h",
"chars": 31876,
"preview": "#ifndef __gl2_h_\n#define __gl2_h_\n\n/* $Revision: 20555 $ on $Date:: 2013-02-12 14:32:47 -0800 #$ */\n\n/*#include <GLES2/g"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengles2_gl2ext.h",
"chars": 98695,
"preview": "#ifndef __gl2ext_h_\n#define __gl2ext_h_\n\n/* $Revision: 22801 $ on $Date:: 2013-08-21 03:20:48 -0700 #$ */\n\n#ifdef __cplu"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengles2_gl2platform.h",
"chars": 913,
"preview": "#ifndef __gl2platform_h_\n#define __gl2platform_h_\n\n/* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */\n\n/*\n"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_opengles2_khrplatform.h",
"chars": 10022,
"preview": "#ifndef __khrplatform_h_\n#define __khrplatform_h_\n\n/*\n** Copyright (c) 2008-2009 The Khronos Group Inc.\n**\n** Permission"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_pixels.h",
"chars": 17188,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_platform.h",
"chars": 5203,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_power.h",
"chars": 2463,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_quit.h",
"chars": 2106,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_rect.h",
"chars": 4839,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_render.h",
"chars": 42721,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_revision.h",
"chars": 79,
"preview": "#define SDL_REVISION \"hg-12952:bc90ce38f1e2\"\n#define SDL_REVISION_NUMBER 12952\n"
},
{
"path": "winlib/SDL2-2.0.10/i686-w64-mingw32/include/SDL2/SDL_rwops.h",
"chars": 9197,
"preview": "/*\n Simple DirectMedia Layer\n Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>\n\n This software is provided '"
}
]
// ... and 229 more files (download for full content)
About this extraction
This page contains the full source code of the rxi/lite GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 429 files (18.6 MB), approximately 1.5M tokens, and a symbol index with 2474 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.