106 lines
3.1 KiB
Lua
106 lines
3.1 KiB
Lua
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 }
|
|
),
|
|
}
|