nixos-config/home-manager/modules/neovim/snippets/tex/fonts.lua
2024-11-25 11:57:38 -05:00

106 lines
2.7 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 }
),
}