diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-12-07 16:49:29 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-12-07 20:11:32 +0100 |
| commit | 3570869c9ae2c4df14b15423789919e514322916 (patch) | |
| tree | 6b990c9ec59fbdc7abce89c1307d22e66d0fd88a /lua/lexers/applescript.lua | |
| parent | 098504f67aea8a862840d58c69e8f6360eef3073 (diff) | |
| download | vis-3570869c9ae2c4df14b15423789919e514322916.tar.gz vis-3570869c9ae2c4df14b15423789919e514322916.tar.xz | |
Move all lua related files to lua/ subfolder
Also remove the lexers sub directory from the Lua search path.
As a result we attempt to open fewer files during startup:
$ strace -e open -o log ./vis +q config.h && wc -l log
In order to avoid having to modifiy all lexers which `require('lexer')`
we instead place a symlink in the top level directory.
$ ./configure --disable-lua
$ rm -rf lua
Should result in a source tree with most lua specifc functionality
removed.
Diffstat (limited to 'lua/lexers/applescript.lua')
| -rw-r--r-- | lua/lexers/applescript.lua | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/lua/lexers/applescript.lua b/lua/lexers/applescript.lua new file mode 100644 index 0000000..07cf1d3 --- /dev/null +++ b/lua/lexers/applescript.lua @@ -0,0 +1,82 @@ +-- Copyright 2006-2016 Mitchell mitchell.att.foicica.com. See LICENSE. +-- Applescript 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 M = {_NAME = 'applescript'} + +-- Whitespace. +local ws = token(l.WHITESPACE, l.space^1) + +-- Comments. +local line_comment = '--' * l.nonnewline^0 +local block_comment = '(*' * (l.any - '*)')^0 * P('*)')^-1 +local comment = token(l.COMMENT, line_comment + block_comment) + +-- Strings. +local string = token(l.STRING, l.delimited_range('"', true)) + +-- Numbers. +local number = token(l.NUMBER, l.float + l.integer) + +-- Keywords. +local keyword = token(l.KEYWORD, word_match({ + 'script', 'property', 'prop', 'end', 'copy', 'to', 'set', 'global', 'local', + 'on', 'to', 'of', 'in', 'given', 'with', 'without', 'return', 'continue', + 'tell', 'if', 'then', 'else', 'repeat', 'times', 'while', 'until', 'from', + 'exit', 'try', 'error', 'considering', 'ignoring', 'timeout', 'transaction', + 'my', 'get', 'put', 'into', 'is', + -- References. + 'each', 'some', 'every', 'whose', 'where', 'id', 'index', 'first', 'second', + 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth', 'tenth', + 'last', 'front', 'back', 'st', 'nd', 'rd', 'th', 'middle', 'named', 'through', + 'thru', 'before', 'after', 'beginning', 'the', + -- Commands. + 'close', 'copy', 'count', 'delete', 'duplicate', 'exists', 'launch', 'make', + 'move', 'open', 'print', 'quit', 'reopen', 'run', 'save', 'saving', + -- Operators. + 'div', 'mod', 'and', 'not', 'or', 'as', 'contains', 'equal', 'equals', + 'isn\'t', +}, "'", true)) + +-- Constants. +local constant = token(l.CONSTANT, word_match({ + 'case', 'diacriticals', 'expansion', 'hyphens', 'punctuation', + -- Predefined variables. + 'it', 'me', 'version', 'pi', 'result', 'space', 'tab', 'anything', + -- Text styles. + 'bold', 'condensed', 'expanded', 'hidden', 'italic', 'outline', 'plain', + 'shadow', 'strikethrough', 'subscript', 'superscript', 'underline', + -- Save options. + 'ask', 'no', 'yes', + -- Booleans. + 'false', 'true', + -- Date and time. + 'weekday', 'monday', 'mon', 'tuesday', 'tue', 'wednesday', 'wed', 'thursday', + 'thu', 'friday', 'fri', 'saturday', 'sat', 'sunday', 'sun', 'month', + 'january', 'jan', 'february', 'feb', 'march', 'mar', 'april', 'apr', 'may', + 'june', 'jun', 'july', 'jul', 'august', 'aug', 'september', 'sep', 'october', + 'oct', 'november', 'nov', 'december', 'dec', 'minutes', 'hours', 'days', + 'weeks' +}, nil, true)) + +-- Identifiers. +local identifier = token(l.IDENTIFIER, (l.alpha + '_') * l.alnum^0) + +-- Operators. +local operator = token(l.OPERATOR, S('+-^*/&<>=:,(){}')) + +M._rules = { + {'whitespace', ws}, + {'keyword', keyword}, + {'constant', constant}, + {'identifier', identifier}, + {'string', string}, + {'comment', comment}, + {'number', number}, + {'operator', operator}, +} + +return M |
