aboutsummaryrefslogtreecommitdiff
path: root/lua/lexers/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'lua/lexers/README.md')
-rw-r--r--lua/lexers/README.md63
1 files changed, 42 insertions, 21 deletions
diff --git a/lua/lexers/README.md b/lua/lexers/README.md
index e97ea1f..1d74a8c 100644
--- a/lua/lexers/README.md
+++ b/lua/lexers/README.md
@@ -2,8 +2,7 @@ Lua LPeg lexers for vis
=======================
Vis reuses the [Lua](http://www.lua.org/) [LPeg](http://www.inf.puc-rio.br/~roberto/lpeg/)
-based lexers from the [Scintillua](http://foicica.com/scintillua/) project
-which is now part of the [Scintilla 3.x branch](https://foicica.com/hg/scintilla/file/tip/lexlua).
+based lexers from the [Scintillua](https://orbitalquark.github.io/scintillua/index.html) project.
# Vis integration
@@ -26,13 +25,13 @@ where `<name>` corresponds to the filename without the `.lua` extension.
To add a new lexer, start with the template quoted below or a lexer of a
similiar language. Read the
-[lexer module documentation](http://foicica.com/scintillua/api.html#lexer).
+[lexer module documentation](https://orbitalquark.github.io/scintillua/api.html#lexer).
The [LPeg](http://www.inf.puc-rio.br/~roberto/lpeg/) introduction might also
be useful.
For development purposes it is recommended to test the lexers from a lua
script as described in the
-[Scintillua manual](http://foicica.com/scintillua/manual.html#Using.Scintillua.as.a.Lua.Library).
+[Scintillua manual](https://orbitalquark.github.io/scintillua/manual.html#Using.Scintillua.as.a.Lua.Library).
To enable auto syntax highlighting when opening a file you can associate your
new lexer with a set of file extensions by adding a corresponding entry into
@@ -42,35 +41,57 @@ Changes to existing lexers should also be sent upstream for consideration.
A template for new lexers:
-```
+```lua
+-- Copyright 2006-2021 Mitchell. See LICENSE.
-- ? LPeg lexer.
-local l = require('lexer')
-local token, word_match = l.token, l.word_match
-local P, R, S = lpeg.P, lpeg.R, lpeg.S
+local lexer = require('lexer')
+local token, word_match = lexer.token, lexer.word_match
+local P, S = lpeg.P, lpeg.S
-local M = {_NAME = '?'}
+local lex = lexer.new('?')
-- Whitespace.
-local ws = token(l.WHITESPACE, l.space^1)
+lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1))
+
+-- Keywords.
+lex:add_rule('keyword', token(lexer.KEYWORD, word_match[[
+ keyword1 keyword2 keyword3
+]]))
+
+-- Identifiers.
+lex:add_rule('identifier', token(lexer.IDENTIFIER, lexer.word))
+
+-- Strings.
+local sq_str = lexer.range("'")
+local dq_str = lexer.range('"')
+lex:add_rule('string', token(lexer.STRING, sq_str + dq_str))
+
+-- Comments.
+lex:add_rule('comment', token(lexer.COMMENT, lexer.to_eol('#')))
-M._rules = {
- {'whitespace', ws},
-}
+-- Numbers.
+lex:add_rule('number', token(lexer.NUMBER, lexer.number))
-M._tokenstyles = {
+-- Operators.
+lex:add_rule('operator', token(lexer.OPERATOR, S('+-*/%^=<>,.{}[]()')))
-}
+-- Fold points.
+lex:add_fold_point(lexer.KEYWORD, 'start', 'end')
+lex:add_fold_point(lexer.OPERATOR, '{', '}')
+lex:add_fold_point(lexer.COMMENT, lexer.fold_consecutive_lines('#'))
-return M
+return lex
```
# Color Themes
-The `../themes` directory contains the color schemes. Depending on the
-number of colors supported by your terminal, vis will start with either
-the `default-16` or `default-256` theme. Symlink it to your prefered
-style or add a command like the following one to your `visrc.lua`:
+The [`../themes directory`](../themes) contains the color
+schemes. Depending on the number of colors supported by your terminal,
+vis will start with either the [`default-16`](../themes/default-16.lua)
+or [`default-256`](../themes/default-256.lua) theme. Symlink it to
+your prefered style or add a command like the following one to your
+`visrc.lua`:
```
vis:command("set theme solarized")
@@ -79,4 +100,4 @@ vis:command("set theme solarized")
# Dependencies
* [Lua](http://www.lua.org/) 5.1 or greater
- * [LPeg](http://www.inf.puc-rio.br/~roberto/lpeg/) 0.12 or greater
+ * [LPeg](http://www.inf.puc-rio.br/~roberto/lpeg/) 1.0.0 or greater