diff --git a/lua/luasnippets/tex/postfix.lua b/lua/luasnippets/tex/postfix.lua new file mode 100644 index 0000000..e0fb378 --- /dev/null +++ b/lua/luasnippets/tex/postfix.lua @@ -0,0 +1,80 @@ +local ls = require 'luasnip' +local s = ls.snippet +local sn = ls.snippet_node +local isn = ls.indent_snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local r = ls.restore_node +local events = require 'luasnip.util.events' +local ai = require 'luasnip.nodes.absolute_indexer' +local extras = require 'luasnip.extras' +local l = extras.lambda +local rep = extras.rep +local p = extras.partial +local m = extras.match +local n = extras.nonempty +local dl = extras.dynamic_lambda +local fmt = require('luasnip.extras.fmt').fmt +local fmta = require('luasnip.extras.fmt').fmta +local conds = require 'luasnip.extras.expand_conditions' +local postfix = require('luasnip.extras.postfix').postfix +local types = require 'luasnip.util.types' +local parse = require('luasnip.util.parser').parse_snippet +local ms = ls.multi_snippet +local k = require('luasnip.nodes.key_indexer').new_key + +local utils = require 'luasnip-latex-snippets.luasnippets.tex.utils' +local is_math = utils.conditions.is_math + +local as = require('luasnip').extend_decorator.apply(s, { snippetType = 'autosnippet' }) + +local ret = {} + +-- dynamic node +-- generally, postfix comes in the form PRE-CAPTURE-POST, so in this case, arg1 is the "pre" text, arg2 the "post" text +local dynamic_postfix = function(_, parent, _, user_arg1, user_arg2) + local capture = parent.snippet.env.POSTFIX_MATCH + if #capture > 0 then + return sn( + nil, + fmta( + [[ + <><><><> + ]], + { t(user_arg1), t(capture), t(user_arg2), i(0) } + ) + ) + else + local visual_placeholder = '' + if #parent.snippet.env.SELECT_RAW > 0 then + visual_placeholder = parent.snippet.env.SELECT_RAW + end + return sn( + nil, + fmta( + [[ + <><><><> + ]], + { t(user_arg1), i(1, visual_placeholder), t(user_arg2), i(0) } + ) + ) + end +end + +local function postfix_std(trig, result_start, result_end) + return postfix( + { trig = trig, snippetType = 'autosnippet' }, + { d(1, dynamic_postfix, {}, { user_args = { result_start, result_end } }) }, + { condition = is_math, show_condition = is_math } + ) +end + +-- table.insert(ret, postfix_std('vec', '\\vec{', '}')) +-- table.insert(ret, postfix_std('hat', '\\hat{', '}')) +-- table.insert(ret, postfix_std('dot', '\\dot{', '}')) +-- table.insert(ret, postfix_std('bar', '\\bar{', '}')) + +return ret diff --git a/lua/luasnippets/tex/ranges.lua b/lua/luasnippets/tex/ranges.lua new file mode 100644 index 0000000..31d36f4 --- /dev/null +++ b/lua/luasnippets/tex/ranges.lua @@ -0,0 +1,87 @@ +local ls = require 'luasnip' +local s = ls.snippet +local sn = ls.snippet_node +local isn = ls.indent_snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local r = ls.restore_node +local events = require 'luasnip.util.events' +local ai = require 'luasnip.nodes.absolute_indexer' +local extras = require 'luasnip.extras' +local l = extras.lambda +local rep = extras.rep +local p = extras.partial +local m = extras.match +local n = extras.nonempty +local dl = extras.dynamic_lambda +local fmt = require('luasnip.extras.fmt').fmt +local fmta = require('luasnip.extras.fmt').fmta +local conds = require 'luasnip.extras.expand_conditions' +local postfix = require('luasnip.extras.postfix').postfix +local types = require 'luasnip.util.types' +local parse = require('luasnip.util.parser').parse_snippet +local ms = ls.multi_snippet +local k = require('luasnip.nodes.key_indexer').new_key + +local utils = require 'luasnip-latex-snippets.luasnippets.tex.utils' + +local is_math = utils.conditions.is_math +local as = require('luasnip').extend_decorator.apply(s, { snippetType = 'autosnippet' }) + +local ret = {} +-- +-- table.insert( +-- ret, +-- as( +-- { +-- trig = 'rancc', +-- regTrig = true, +-- name = 'range closed close', +-- dscr = 'ranges typing x_ -> x_{}', +-- }, +-- fmta([[ \left[ <> ; <> \right] ]], { +-- i(1), +-- i(2), +-- }), +-- { condition = is_math } +-- ) +-- ) + +local leters = { 'c', 'o' } +for index, value in ipairs(leters) do + for index2, value2 in ipairs(leters) do + local char1 + local char2 + if index == 1 then + char1 = '[' + else + char1 = ']' + end + if index2 == 1 then + char2 = ']' + else + char2 = '[' + end + table.insert( + ret, + as( + { + trig = 'ran' .. value .. value2, + regTrig = true, + name = 'range ' .. value .. value2 .. ' - ' .. char1 .. char2, + dscr = 'ranges', + }, + fmta('\\left' .. char1 .. ' <> ; <> \\right' .. char2, { + i(1), + i(2), + }), + { condition = is_math } + ) + ) + end +end + +return ret diff --git a/lua/luasnippets/tex/tex.lua b/lua/luasnippets/tex/tex.lua new file mode 100644 index 0000000..dc7338a --- /dev/null +++ b/lua/luasnippets/tex/tex.lua @@ -0,0 +1,53 @@ +local ls = require 'luasnip' +local s = ls.snippet +local sn = ls.snippet_node +local isn = ls.indent_snippet_node +local t = ls.text_node +local i = ls.insert_node +local f = ls.function_node +local c = ls.choice_node +local d = ls.dynamic_node +local r = ls.restore_node +local events = require 'luasnip.util.events' +local ai = require 'luasnip.nodes.absolute_indexer' +local extras = require 'luasnip.extras' +local l = extras.lambda +local rep = extras.rep +local p = extras.partial +local m = extras.match +local n = extras.nonempty +local dl = extras.dynamic_lambda +local fmt = require('luasnip.extras.fmt').fmt +local fmta = require('luasnip.extras.fmt').fmta +local conds = require 'luasnip.extras.expand_conditions' +local postfix = require('luasnip.extras.postfix').postfix +local types = require 'luasnip.util.types' +local parse = require('luasnip.util.parser').parse_snippet +local ms = ls.multi_snippet +local k = require('luasnip.nodes.key_indexer').new_key + +local utils = require 'luasnip-latex-snippets.luasnippets.tex.utils' + +local is_math = utils.conditions.is_math + +local as = require('luasnip').extend_decorator.apply(s, { snippetType = 'autosnippet' }) + +local ret = { + as( + { + trig = '(%a)_', + regTrig = true, + name = 'auto subscript underscore', + dscr = 'Auto subscript: typing x_ -> x_{}', + }, + fmta([[<>_{<>}]], { + f(function(_, snip) + return snip.captures[1] + end), + i(1), + }), + { condition = is_math } + ), +} + +return {}