howl.util.ScintilluaLexer

calling it lexes text using the specified Scintillua lexer

tmpfile = File.tmpfile!
tmpfile.contents = [[
  local l = lexer
  local token, word_match = l.token, l.word_match
  local ws = token(l.WHITESPACE, l.space^1)
  local keyword = token(l.KEYWORD, word_match {
    'awesome',
    'stuff',
  })
  local M = { _NAME = 'spec' }
  M._rules = {
    { 'whitespace', ws },
    { 'keyword', keyword },
  }
  return M
]]
lexer = ScintilluaLexer 'spec', tmpfile
tmpfile\delete!
lexed = lexer 'awesome stuff'
assert.same {
  1, 'keyword', 8,
  8, 'whitespace', 9,
  9, 'keyword', 14
}, lexed

provides the usual pre-defined Scintillua styles in the lexer

File.with_tmpfile (file) ->
  file.contents = [[
    local new_tag = lexer.style_tag .. {}
    assert(lexer.style_class ~= nil)
    return {
      _NAME = 'futile_styling_attempt',
      _rules = { { 'any', lexer.any } }
    }
  ]]
  ScintilluaLexer 'style_craze', file

Scintillua's lexer.load()

can load other Scintillua lexers from registered modes

File.with_tmpfile (file) ->
  file.contents = [[
    return {
      _NAME = 'embedded',
      _rules = { { 'any', lexer.any } }
    }
  ]]
  lexer = ScintilluaLexer 'embedded', file
  mode.register name: 'embedded', create: -> :lexer

File.with_tmpfile (file) ->
  file.contents = [[
    local embedded = lexer.load('embedded')
    assert(embedded._RULES ~= nil, 'Failed to load sub lexer')
    return {
      _NAME = 'driver',
      _rules = { { 'any', lexer.any } }
    }
  ]]
  ScintilluaLexer 'driver', file