vis

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

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

asp.lua

(1090B)


      1 -- Copyright 2006-2025 Mitchell. See LICENSE.
      2 -- ASP LPeg lexer.
      3 
      4 local lexer = lexer
      5 local P, S = lpeg.P, lpeg.S
      6 
      7 local html = lexer.load('html')
      8 local lex = lexer.new(..., {inherit = html}) -- proxy for HTML
      9 
     10 -- Embedded VB.
     11 local vb = lexer.load('vb')
     12 local vb_start_rule = lex:tag(lexer.PREPROCESSOR, '<%' * P('=')^-1)
     13 local vb_end_rule = lex:tag(lexer.PREPROCESSOR, '%>')
     14 lex:embed(vb, vb_start_rule, vb_end_rule)
     15 
     16 -- Embedded VBScript.
     17 local vbs = lexer.load('vb', 'vbscript')
     18 local script_element = lexer.word_match('script', true)
     19 local vbs_start_rule = #('<' * script_element * (P(function(input, index)
     20 	if input:find('^%s+language%s*=%s*(["\'])vbscript%1', index) or
     21 		input:find('^%s+type%s*=%s*(["\'])text/vbscript%1', index) then return true end
     22 end) + '>')) * html.embed_start_tag -- <script language="vbscript">
     23 local vbs_end_rule = #('</' * script_element * '>') * html.embed_end_tag -- </script>
     24 lex:embed(vbs, vbs_start_rule, vbs_end_rule)
     25 
     26 -- Fold points.
     27 lex:add_fold_point(lexer.PREPROCESSOR, '<%', '%>')
     28 
     29 lexer.property['scintillua.comment'] = '<!--|-->'
     30 
     31 return lex