From dc5f5a45a2315011ebeeb0a56a7434ead292dc96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Fri, 31 Mar 2017 12:50:33 +0200 Subject: lexers: sync with scintillua changeset 600 rev fdeca0b808bf I think the default value for the cache argument to the lexer load function should be true, not false. Optimize for the common case. This makes the API ugly/harder to use. But for now we follow upstream. --- lua/lexers/logtalk.lua | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 lua/lexers/logtalk.lua (limited to 'lua/lexers/logtalk.lua') diff --git a/lua/lexers/logtalk.lua b/lua/lexers/logtalk.lua new file mode 100644 index 0000000..3986859 --- /dev/null +++ b/lua/lexers/logtalk.lua @@ -0,0 +1,52 @@ +-- Copyright © 2017 Michael T. Richter . See LICENSE. +-- Logtalk LPeg lexer. + +local l = require 'lexer' +local token, word_match = l.token, l.word_match +local B, P, R, S, V = lpeg.B, lpeg.P, lpeg.R, lpeg.S, lpeg.V + +local M = { _NAME = 'logtalk' } + +local keyword = token(l.KEYWORD, word_match{ + -- Logtalk "keywords" generated from Vim syntax highlighting file with Prolog + -- keywords stripped since we're building up on the Prolog lexer. + 'abolish_category', 'abolish_events', 'abolish_object', 'abolish_protocol', + 'after', 'alias', 'as', 'before', 'built_in', 'calls', 'category', + 'category_property', 'coinductive', 'complements', 'complements_object', + 'conforms_to_protocol', 'create', 'create_category', 'create_object', + 'create_protocol', 'create_logtalk_flag', 'current', 'current_category', + 'current_event', 'current_logtalk_flag', 'current_object', 'current_protocol', + 'define_events', 'encoding', 'end_category', 'end_class', 'end_object', + 'end_protocol', 'extends', 'extends_category', 'extends_object', + 'extends_protocol', 'forward', 'implements', 'implements_protocol', 'imports', + 'imports_category', 'include', 'info', 'instantiates', 'instantiates_class', + 'is', 'logtalk_compile', 'logtalk_library_path', 'logtalk_load', + 'logtalk_load_context', 'logtalk_make', 'meta_non_terminal', 'mode', 'object', + 'object_property', 'parameter', 'private', 'protected', 'protocol_property', + 'self', 'sender', 'set_logtalk_flag', 'specializes', 'specializes_class', + 'synchronized', 'this', 'threaded', 'threaded_call', 'threaded_engine', + 'threaded_engine_create', 'threaded_engine_destroy', 'threaded_engine_fetch', + 'threaded_engine_next', 'threaded_engine_next_reified', + 'threaded_engine_post', 'threaded_engine_self', 'threaded_engine_yield', + 'threaded_exit', 'threaded_ignore', 'threaded_notify', 'threaded_once', + 'threaded_peek', 'threaded_wait', 'uses', + + -- info/1 and info/2 predicates have their own keywords, manually extracted + -- from documentation + 'comment', 'argnames', 'arguments', 'author', 'version', 'date', 'parameters', + 'parnames', 'copyright', 'license', 'remarks', 'see_also', +}) + +-- Extend prolog lexer to include logtalk extensions. +local prolog = l.load('prolog') +local _rules = prolog._rules +for i = 1, #_rules do + if _rules[i][1] == 'keyword' then + table.insert(_rules, i, {'logtalk_keyword', keyword}) + end +end + +M._rules = _rules +M._foldsymbols = prolog._foldsymbols + +return M -- cgit v1.2.3