aboutsummaryrefslogtreecommitdiff
path: root/env/.config/vis/lexers/asciidoc.lua
blob: 83d080b4c09666f6dfdcf7c5dba73aa8abb1c63f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
local lexer = require('lexer')
local token, word_match = lexer.token, lexer.word_match
local P, S, B = lpeg.P, lpeg.S, lpeg.B

local lex = lexer.new('asciidoc')

-- AsciiDoc blocks: ==== and ----
local adoc_block = lexer.range('====', '====', true, true, true) + lexer.range('----', '----', true, true, true)
lex:add_rule('block', token(lexer.PREPROCESSOR, lexer.range('====', '====', true, true, true) + lexer.range('----', '----', true, true, true)))
--lex:add_rule('block', token(lexer.EMPH, adoc_block))

-- Block: ---- must match full line
--lex:add_rule('block', token(lexer.EMPH, P('----') * P('\n') * (lexer.any - P('----'))^0 * P('----')))

-- Headers: Must be at start of line
lex:add_rule('header', token(lexer.KEYWORD, B('\n')^-1 * P('=')^1 * ' ' * lexer.nonnewline^1))

-- Bold: Prevent overlap with other syntax
lex:add_rule('bold', token(lexer.BOLD, P('*') * (lexer.any - S('*\n'))^1 * P('*')))

-- Italic
lex:add_rule('italic', token(lexer.ITALIC, P('_') * (lexer.any - S('_\n'))^1 * P('_')))

-- Links
lex:add_rule('link', token(lexer.CONSTANT, 'https?://' * lexer.nonnewline^1))

-- Comments
lex:add_rule('comment', token(lexer.COMMENT, P('//') * lexer.nonnewline^0))

-- Identifier (last)
lex:add_rule('identifier', token(lexer.IDENTIFIER, lexer.word))

return lex