----------------
-- Abbreviations
----------------


local ls = require("luasnip")
local s = ls.snippet
local sn = ls.snippet_node
local t = ls.text_node
local i = ls.insert_node
local f = ls.function_node
local d = ls.dynamic_node
local fmt = require("luasnip.extras.fmt").fmt
local fmta = require("luasnip.extras.fmt").fmta
local rep = require("luasnip.extras").rep


---------------
-- Environments
---------------


local tex_utils = {}

tex_utils.in_mathzone = function()  -- math context detection
  return vim.fn['vimtex#syntax#in_mathzone']() == 1
end

tex_utils.in_text = function()
  return not tex_utils.in_mathzone()
end

tex_utils.in_comment = function()  -- comment detection
  return vim.fn['vimtex#syntax#in_comment']() == 1
end

tex_utils.in_env = function(name)  -- generic environment detection
  local is_inside = vim.fn['vimtex#env#is_inside'](name)
  return (is_inside[1] > 0 and is_inside[2] > 0)
end

local get_visual = function(args, parent)
  if (#parent.snippet.env.LS_SELECT_RAW > 0) then
    return sn(nil, i(1, parent.snippet.env.LS_SELECT_RAW))
  else
    return sn(nil, i(1))
  end
end


-----------
-- Snippets
-----------


return {


s({trig="´a", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\alpha ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´b", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\beta ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´g", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\gamma ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´d", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\delta ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´e", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\epsilon ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´z", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\zeta ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´h", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\eta ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´q", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\theta ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´i", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\iota ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´k", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\kappa ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´l", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\lambda ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´m", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\mu ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´n", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\nu ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´x", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\xi ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´p", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\pi ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´r", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\rho ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´s", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\sigma ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´t", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\tau ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´u", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\upsilon ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´f", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\phi ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´c", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\chi ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´y", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\psi ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´w", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\omega ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´A", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Alpha ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´B", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Beta ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´G", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Gamma ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´D", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Delta ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´E", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Epsilon ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´Z", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Zeta ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´H", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Eta ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´Q", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Theta ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´I", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Iota ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´K", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Kappa ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´L", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Lambda ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´M", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Mu ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´N", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Nu ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´X", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Xi ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´P", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Pi ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´R", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Rho ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´S", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Sigma ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´T", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Tau ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´U", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Upsilon ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´F", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Phi ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´C", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Chi ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´Y", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Psi ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

s({trig="´W", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\Omega ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),


-- Strictly speaking not greek characters, but very similar snippets

s({trig="´6", wordTrig=false, snippetType="autosnippet"},
    fmta(
        [[\partial ]],
        {}
    ),
    {condition = tex_utils.in_mathzone}
),

}  -- return

