# Technology

Textadept is composed of many different technologies, which are briefly listed
in the following sections.

## User Interface

Textadept's user interface consists of a graphical user interface (GUI) and a
terminal user interface (TUI).

=[GTK+][] - GIMP Toolkit=
    Textadept uses GTK as its cross-platform GUI toolkit.

=[ncurses][], [pdcurses][] - Libraries for displaying terminal applications=
    Textadept uses ncurses as its Linux, MacOSX, and BSD terminal UI, and uses
    pdcurses as its Windows terminal UI.

=[gtDialog][]\* - Cross-platform tool for creating interactive dialogs=
    Textadept uses gtDialog for displaying interactive GUI and TUI dialogs.

=[cdk][] - Widget library for terminal applications=
    Textadept uses cdk for drawing terminal UI widgets.

=[libtermkey][] - Library for processing keyboard entry for terminal apps=
    Textadept uses libtermkey for advanced keyboard entry handling.

## Editor

Textadept's core text editing component is Scintilla.

=[Scintilla][] - Scintilla=
    Textadept uses Scintilla as its core text editing component.

=[Scinterm][]\* - Scintilla for curses=
    Textadept uses Scinterm as its core text editing component for the terminal
    version.

=[Scintillua][]\* - Dynamic Lua LPeg Lexers for Scintilla=
    Textadept uses Scintillua and its lexers for highlighting source code.

## Scripting

Textadept uses Lua as its scripting language. The editor is primarily written in
Lua and includes a few external libraries.

=[Lua][] - Lua Programming Language=
    Textadept uses Lua as its internal scripting language. Most of Textadept is
    written in Lua.

=[LuaJIT][] - Just in Time Compiler for Lua=
    Textadept optionally uses LuaJIT as a substitute for vanilla Lua.

=[LPeg][] - Parsing Expression Grammars for Lua=
    Textadept uses LPeg in its Scintillua lexers.

=[LuaFileSystem][] - Library for accessing directories and file attributes=
    Textadept uses LFS for accessing the host filesystem.

=[lspawn][]\* - Lua module for spawning processes=
    Textadept uses lspawn for spawning asynchronous processes.

\* A Foicica.com project.

[GTK+]: http://www.gtk.org
[Scintilla]: http://scintilla.org
[Lua]: http://www.lua.org
[LuaJIT]: http://luajit.org
[Scintillua]: http://foicica.com/scintillua
[Scinterm]: http://foicica.com/scinterm
[LPeg]: http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html
[LuaFileSystem]: http://keplerproject.github.io/luafilesystem/
[lspawn]: http://foicica.com/hg/lspawn
[gtDialog]: http://foicica.com/gtdialog/
[ncurses]: http://invisible-island.net/ncurses/
[pdcurses]: http://pdcurses.sourceforge.net/
[cdk]: http://invisible-island.net/cdk/
[libtermkey]: http://www.leonerd.org.uk/code/libtermkey/
