logo

oasis-root

Compiled tree of Oasis Linux based on own branch at <https://hacktivis.me/git/oasis/> git clone https://anongit.hacktivis.me/git/oasis-root.git

toml.lua (1424B)


  1. -- Copyright 2015-2024 Alejandro Baez (https://keybase.io/baez). See LICENSE.
  2. -- TOML LPeg lexer.
  3. local lexer = lexer
  4. local P, S = lpeg.P, lpeg.S
  5. local lex = lexer.new(..., {fold_by_indentation = true})
  6. -- Keywords.
  7. lex:add_rule('keyword', lex:tag(lexer.KEYWORD, lexer.word_match('true false')))
  8. -- Identifiers.
  9. lex:add_rule('identifier', lex:tag(lexer.IDENTIFIER, lexer.word))
  10. -- Strings.
  11. local sq_str = lexer.range("'")
  12. local dq_str = lexer.range('"')
  13. lex:add_rule('string', lex:tag(lexer.STRING, sq_str + dq_str))
  14. -- Comments.
  15. lex:add_rule('comment', lex:tag(lexer.COMMENT, lexer.to_eol('#')))
  16. -- Operators.
  17. lex:add_rule('operator', lex:tag(lexer.OPERATOR, S('=+-,.{}[]()')))
  18. -- Datetime.
  19. local year = lexer.digit * lexer.digit * lexer.digit * lexer.digit
  20. local month = lexer.digit * lexer.digit^-1
  21. local day = lexer.digit * lexer.digit^-1
  22. local date = year * '-' * month * '-' * day
  23. local hours = lexer.digit * lexer.digit^-1
  24. local minutes = lexer.digit * lexer.digit
  25. local seconds = lexer.digit * lexer.digit
  26. local fraction = '.' * lexer.digit^0
  27. local time = hours * ':' * minutes * ':' * seconds * fraction^-1
  28. local zone = 'Z' + S(' \t')^0 * S('-+') * hours * (':' * minutes)^-1
  29. lex:add_rule('datetime', lex:tag(lexer.NUMBER .. '.timestamp', date * (S('tT \t') * time * zone^-1)))
  30. -- Numbers.
  31. lex:add_rule('number', lex:tag(lexer.NUMBER, lexer.number))
  32. lexer.property['scintillua.comment'] = '#'
  33. return lex