feat(snip): expand index snippets on punctuation

This commit is contained in:
arne314
2025-01-15 15:56:23 +01:00
parent 76a8fdd5fb
commit 0917648f54

View File

@@ -8,7 +8,6 @@ local cap = helper.cap
local math = helper.in_math local math = helper.in_math
local markup = helper.in_markup local markup = helper.in_markup
local letter_snippets = {}
local greek_letters_map = { local greek_letters_map = {
['a'] = 'alpha', ['a'] = 'alpha',
['b'] = 'beta', ['b'] = 'beta',
@@ -40,6 +39,8 @@ local greek_letters_set = {}
local common_indices = { '\\d+', '[i-n]' } local common_indices = { '\\d+', '[i-n]' }
local index_conflicts = { 'in', 'ln', 'pi', 'xi', 'el' } local index_conflicts = { 'in', 'ln', 'pi', 'xi', 'el' }
local index_conflicts_set = {} local index_conflicts_set = {}
local punctuation_prepend_space = { ',', ';' }
local punctuation_prepend_space_set = {}
local trigger_greek = '' local trigger_greek = ''
local trigger_index_pre = '' local trigger_index_pre = ''
local trigger_index_post = '' local trigger_index_post = ''
@@ -58,9 +59,14 @@ for latin, greek in pairs(greek_letters_map) do
table.insert(greek_keys, latin:upper()) table.insert(greek_keys, latin:upper())
end end
for _, conflict in ipairs(index_conflicts) do local generate_bool_set = function(arr, target)
index_conflicts_set[conflict] = true for _, val in ipairs(arr) do
target[val] = true
end end
end
generate_bool_set(index_conflicts, index_conflicts_set)
generate_bool_set(punctuation_prepend_space, punctuation_prepend_space_set)
greek_letters_map = greek_full greek_letters_map = greek_full
trigger_greek = table.concat(greek_keys, '|') trigger_greek = table.concat(greek_keys, '|')
@@ -69,8 +75,9 @@ trigger_index_post = table.concat(common_indices, '|')
local get_greek = function(_, snippet) return s(nil, t(greek_letters_map[snippet.captures[1]])) end local get_greek = function(_, snippet) return s(nil, t(greek_letters_map[snippet.captures[1]])) end
local get_index = function(_, snippet) local get_index = function(_, snippet, _, idx1, idx2)
local letter, index = snippet.captures[1], snippet.captures[2] print(idx1, idx2)
local letter, index = snippet.captures[idx1], snippet.captures[idx2]
local trigger = letter .. index local trigger = letter .. index
if index_conflicts_set[trigger] then return s(nil, t(trigger)) end if index_conflicts_set[trigger] then return s(nil, t(trigger)) end
return s(nil, t(letter .. '_' .. index)) return s(nil, t(letter .. '_' .. index))
@@ -93,6 +100,12 @@ local get_series = function(_, snippet)
return s(nil, t(result)) return s(nil, t(result))
end end
local prepend_space = function(_, snippet, _, idx)
local punc = snippet.captures[idx]
if punctuation_prepend_space_set[punc] then punc = punc .. ' ' end
return s(nil, t(punc))
end
return { return {
-- latin/greek -- latin/greek
snip(':([A-Za-z0-9])', '$<>$ ', { cap(1) }, markup), snip(':([A-Za-z0-9])', '$<>$ ', { cap(1) }, markup),
@@ -101,16 +114,21 @@ return {
-- indices -- indices
snip( snip(
'\\$(' .. trigger_index_pre .. ')\\$' .. '(' .. trigger_index_post .. ') ', '\\$(' .. trigger_index_pre .. ')\\$' .. '(' .. trigger_index_post .. ')([^\\w])',
'$<>$ ', '$<>$<>',
{ d(1, get_index) }, { d(1, get_index, {}, { user_args = { 1, 2 } }), d(2, prepend_space, {}, { user_args = { 3 } }) },
markup, markup,
500 500
), ),
snip('(' .. trigger_index_pre .. ')' .. '(' .. trigger_index_post .. ') ', '<> ', { d(1, get_index) }, math, 200), snip(
'([^\\w])(' .. trigger_index_pre .. ')' .. '(' .. trigger_index_post .. ')([^\\w])',
'<><><>',
{ cap(1), d(1, get_index, {}, { user_args = { 2, 3 } }), d(2, prepend_space, {}, { user_args = { 4 } }) },
math,
200
),
-- series of numbered letters -- series of numbered letters
snip('(' .. trigger_index_pre .. ') ot ', '<>_1, <>_2, ... ', { cap(1), cap(1) }, math), -- a_1, a_2, ... snip('(' .. trigger_index_pre .. ') ot ', '<>_1, <>_2, ... ', { cap(1), cap(1) }, math), -- a_1, a_2, ...
snip('(' .. trigger_index_pre .. ') ot(\\w+) ', '<> ', { d(1, get_series) }, math), -- a_1, a_2, ... a_j or a_1, a_2, a_2, a_3, a_4, a_5 snip('(' .. trigger_index_pre .. ') ot(\\w+) ', '<> ', { d(1, get_series) }, math), -- a_1, a_2, ... a_j or a_1, a_2, a_2, a_3, a_4, a_5
unpack(letter_snippets),
} }