60 lines
2.5 KiB
Lua
60 lines
2.5 KiB
Lua
|
-- Copyright 2006-2019 Mitchell mitchell.att.foicica.com. See License.txt.
|
||
|
-- Gnuplot LPeg lexer.
|
||
|
|
||
|
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('gnuplot')
|
||
|
|
||
|
-- Whitespace.
|
||
|
lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1))
|
||
|
|
||
|
-- Keywords.
|
||
|
lex:add_rule('keyword', token(lexer.KEYWORD, word_match[[
|
||
|
cd call clear exit fit help history if load pause plot using with index every
|
||
|
smooth thru print pwd quit replot reread reset save set show unset shell splot
|
||
|
system test unset update
|
||
|
]]))
|
||
|
|
||
|
-- Functions.
|
||
|
lex:add_rule('function', token(lexer.FUNCTION, word_match[[
|
||
|
abs acos acosh arg asin asinh atan atan2 atanh besj0 besj1 besy0 besy1 ceil
|
||
|
cos cosh erf erfc exp floor gamma ibeta inverf igamma imag invnorm int
|
||
|
lambertw lgamma log log10 norm rand real sgn sin sinh sqrt tan tanh column
|
||
|
defined tm_hour tm_mday tm_min tm_mon tm_sec tm_wday tm_yday tm_year valid
|
||
|
]]))
|
||
|
|
||
|
-- Variables.
|
||
|
lex:add_rule('variable', token(lexer.VARIABLE, word_match[[
|
||
|
angles arrow autoscale bars bmargin border boxwidth clabel clip cntrparam
|
||
|
colorbox contour datafile decimalsign dgrid3d dummy encoding fit fontpath
|
||
|
format functions function grid hidden3d historysize isosamples key label
|
||
|
lmargin loadpath locale logscale mapping margin mouse multiplot mx2tics mxtics
|
||
|
my2tics mytics mztics offsets origin output parametric plot pm3d palette
|
||
|
pointsize polar print rmargin rrange samples size style surface terminal tics
|
||
|
ticslevel ticscale timestamp timefmt title tmargin trange urange variables
|
||
|
version view vrange x2data x2dtics x2label x2mtics x2range x2tics x2zeroaxis
|
||
|
xdata xdtics xlabel xmtics xrange xtics xzeroaxis y2data y2dtics y2label
|
||
|
y2mtics y2range y2tics y2zeroaxis ydata ydtics ylabel ymtics yrange ytics
|
||
|
yzeroaxis zdata zdtics cbdata cbdtics zero zeroaxis zlabel zmtics zrange ztics
|
||
|
cblabel cbmtics cbrange cbtics
|
||
|
]]))
|
||
|
|
||
|
-- Identifiers.
|
||
|
lex:add_rule('identifier', token(lexer.IDENTIFIER, lexer.word))
|
||
|
|
||
|
-- Strings.
|
||
|
lex:add_rule('string', token(lexer.STRING, lexer.delimited_range("'") +
|
||
|
lexer.delimited_range('"') +
|
||
|
lexer.delimited_range('[]', true) +
|
||
|
lexer.delimited_range('{}', true)))
|
||
|
|
||
|
-- Comments.
|
||
|
lex:add_rule('comment', token(lexer.COMMENT, '#' * lexer.nonnewline^0))
|
||
|
|
||
|
-- Operators.
|
||
|
lex:add_rule('operator', token(lexer.OPERATOR, S('-+~!$*%=<>&|^?:()')))
|
||
|
|
||
|
return lex
|