aboutsummaryrefslogtreecommitdiffhomepage
path: root/lexlua/inform.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lexlua/inform.lua')
-rw-r--r--lexlua/inform.lua72
1 files changed, 72 insertions, 0 deletions
diff --git a/lexlua/inform.lua b/lexlua/inform.lua
new file mode 100644
index 000000000..59f9a26b0
--- /dev/null
+++ b/lexlua/inform.lua
@@ -0,0 +1,72 @@
+-- Copyright 2010-2018 Jeff Stone. See License.txt.
+-- Inform LPeg lexer for Scintilla.
+-- JMS 2010-04-25.
+
+local lexer = require('lexer')
+local token, word_match = lexer.token, lexer.word_match
+local P, R, S = lpeg.P, lpeg.R, lpeg.S
+
+local lex = lexer.new('inform')
+
+-- Whitespace.
+lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1))
+
+-- Keywords.
+lex:add_rule('keyword', token(lexer.KEYWORD, word_match[[
+ Abbreviate Array Attribute Class Constant Default End Endif Extend Global
+ Ifdef Iffalse Ifndef Ifnot Iftrue Import Include Link Lowstring Message Object
+ Property Release Replace Serial StartDaemon Statusline StopDaemon Switches
+ Verb
+ absent action actor add_to_scope address additive after and animate article
+ articles before bold box break cant_go capacity char class child children
+ clothing concealed container continue creature daemon deadflag default
+ describe description do door door_dir door_to d_to d_obj e_to e_obj each_turn
+ edible else enterable false female first font for found_in general give
+ grammar has hasnt held if in in_to in_obj initial inside_description invent
+ jump last life light list_together location lockable locked male move moved
+ multi multiexcept multiheld multiinside n_to n_obj ne_to ne_obj nw_to nw_obj
+ name neuter new_line nothing notin noun number objectloop ofclass off on only
+ open openable or orders out_to out_obj parent parse_name player plural
+ pluralname print print_ret private proper provides random react_after
+ react_before remove replace return reverse rfalseroman rtrue s_to s_obj se_to
+ se_obj sw_to sw_obj scenery scope score scored second self short_name
+ short_name_indef sibling spaces static string style supporter switch
+ switchable talkable thedark time_left time_out to topic transparent true
+ underline u_to u_obj visited w_to w_obj when_closed when_off when_on when_open
+ while with with_key workflag worn
+]]))
+
+-- Library actions.
+lex:add_rule('action', token('action', word_match[[
+ Answer Ask AskFor Attack Blow Burn Buy Climb Close Consult Cut Dig Disrobe
+ Drink Drop Eat Empty EmptyT Enter Examine Exit Fill FullScore GetOff Give Go
+ GoIn Insert Inv InvTall InvWide Jump JumpOver Kiss LetGo Listen LMode1 LMode2
+ LMode3 Lock Look LookUnder Mild No NotifyOff NotifyOn Objects Open Order
+ Places Pray Pronouns Pull Push PushDir PutOn Quit Receive Remove Restart
+ Restore Rub Save Score ScriptOff ScriptOn Search Set SetTo Show Sing Sleep
+ Smell Sorry Squeeze Strong Swim Swing SwitchOff SwitchOn Take Taste Tell Think
+ ThrowAt ThrownAt Tie Touch Transfer Turn Unlock VagueGo Verify Version Wait
+ Wake WakeOther Wave WaveHands Wear Yes
+]]))
+lex:add_style('action', lexer.STYLE_VARIABLE)
+
+-- Identifiers.
+lex:add_rule('identifier', token(lexer.IDENTIFIER, lexer.word))
+
+-- Strings.
+lex:add_rule('string', token(lexer.STRING, lexer.delimited_range("'") +
+ lexer.delimited_range('"')))
+
+-- Comments.
+lex:add_rule('comment', token(lexer.COMMENT, '!' * lexer.nonnewline^0))
+
+-- Numbers.
+local inform_hex = '$' * lexer.xdigit^1
+local inform_bin = '$$' * S('01')^1
+lex:add_rule('number', token(lexer.NUMBER, lexer.integer + inform_hex +
+ inform_bin))
+
+-- Operators.
+lex:add_rule('operator', token(lexer.OPERATOR, S('@~=+-*/%^#=<>;:,.{}[]()&|?')))
+
+return lex