local helpers = require('personal.luasnip-helper-funcs') local get_visual = helpers.get_visual -- A logical OR of `line_begin` and the regTrig '[^%a]trig' function line_begin_or_non_letter(line_to_cursor, matched_trigger) local line_begin = line_to_cursor:sub(1, -(#matched_trigger + 1)):match("^%s*$") local non_letter = line_to_cursor:sub(-(#matched_trigger + 1), -(#matched_trigger + 1)):match("[^%a]") return line_begin or non_letter end -- Math context detection local tex = {} tex.in_mathzone = function() return vim.fn['vimtex#syntax#in_mathzone']() == 1 end tex.in_text = function() return not tex.in_mathzone() end local line_begin = function(line_to_cursor, matched_trigger) -- +1 because `string.sub("abcd", 1, -2)` -> abc return line_to_cursor:sub(1, -(#matched_trigger + 1)):match("^%s*$") end -- Return snippet tables return { -- TYPEWRITER i.e. \texttt s({trig = "([^%a])tt", regTrig = true, wordTrig = false, snippetType="autosnippet", priority=2000}, fmta( "<>\\texttt{<>}", { f( function(_, snip) return snip.captures[1] end ), d(1, get_visual), } ), {condition = tex.in_text} ), -- ITALIC i.e. \textit s({trig = "([^%a])tii", regTrig = true, wordTrig = false, snippetType="autosnippet"}, fmta( "<>\\textit{<>}", { f( function(_, snip) return snip.captures[1] end ), d(1, get_visual), } ) ), -- BOLD i.e. \textbf s({trig = "tbb", snippetType="autosnippet"}, fmta( "\\textbf{<>}", { d(1, get_visual), } ) ), -- MATH ROMAN i.e. \mathrm s({trig = "([^%a])rmm", regTrig = true, wordTrig = false, snippetType="autosnippet"}, fmta( "<>\\mathrm{<>}", { f( function(_, snip) return snip.captures[1] end ), d(1, get_visual), } ) ), -- MATH CALIGRAPHY i.e. \mathcal s({trig = "([^%a])mcc", regTrig = true, wordTrig = false, snippetType="autosnippet"}, fmta( "<>\\mathcal{<>}", { f( function(_, snip) return snip.captures[1] end ), d(1, get_visual), } ) ), -- MATH BOLDFACE i.e. \mathbf s({trig = "([^%a])mbf", regTrig = true, wordTrig = false, snippetType="autosnippet"}, fmta( "<>\\mathbf{<>}", { f( function(_, snip) return snip.captures[1] end ), d(1, get_visual), } ) ), -- MATH BLACKBOARD i.e. \mathbb s({trig = "([^%a])mbb", regTrig = true, wordTrig = false, snippetType="autosnippet"}, fmta( "<>\\mathbb{<>}", { f( function(_, snip) return snip.captures[1] end ), d(1, get_visual), } ) ), -- REGULAR TEXT i.e. \text (in math environments) s({trig = "([^%a])tee", regTrig = true, wordTrig = false, snippetType="autosnippet"}, fmta( "<>\\text{<>}", { f( function(_, snip) return snip.captures[1] end ), d(1, get_visual), } ), { condition = tex.in_mathzone } ), }