vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

json.lua

(721B)


      1 -- Copyright 2006-2025 Brian "Sir Alaran" Schott. See LICENSE.
      2 -- JSON LPeg lexer.
      3 -- Based off of lexer code by Mitchell.
      4 
      5 local lexer = lexer
      6 local P, S = lpeg.P, lpeg.S
      7 
      8 local lex = lexer.new(...)
      9 
     10 -- Strings.
     11 local sq_str = lexer.range("'", true)
     12 local dq_str = lexer.range('"', true)
     13 lex:add_rule('string', lex:tag(lexer.STRING, sq_str + dq_str))
     14 
     15 -- Keywords.
     16 lex:add_rule('keyword', lex:tag(lexer.KEYWORD, lexer.word_match('true false null')))
     17 
     18 -- Numbers.
     19 lex:add_rule('number', lex:tag(lexer.NUMBER, lexer.number))
     20 
     21 -- Operators.
     22 lex:add_rule('operator', lex:tag(lexer.OPERATOR, S('[]{}:,')))
     23 
     24 -- Fold points.
     25 lex:add_fold_point(lexer.OPERATOR, '[', ']')
     26 lex:add_fold_point(lexer.OPERATOR, '{', '}')
     27 
     28 return lex