From c273afbf4e9c9d8c7852d82b4ba98830d141a208 Mon Sep 17 00:00:00 2001 From: arne314 <73391160+arne314@users.noreply.github.com> Date: Tue, 14 Jan 2025 20:25:16 +0100 Subject: [PATCH] feat(snip): series of numbered letters --- README.md | 5 ++-- lua/typstar/snippets/letters.lua | 41 ++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 8029b02..b37e11d 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Available snippets can mostly be intuitively derived from [here](././lua/typstar Markup snippets: - Begin inline math with `ll` and multiline math with `dm` -- [Markup shorthands](./lua/typstar/snippets/markup.lua) (e.g. `HIG` → `#highlight[]`, `IMP` → `$=>$ `) +- [Markup shorthands](./lua/typstar/snippets/markup.lua) (e.g. `HIG` → `#highlight[]`, `IMP` → `$==>$ `) - [ctheorems shorthands](./lua/typstar/snippets/markup.lua) (e.g. `tem` → empty theorem, `exa` → empty example) - [Flashcards](#anki): `fla` and `flA` - All above snippets support visual mode via the [selection key](#installation) @@ -23,7 +23,8 @@ Math snippets: - [Many shorthands](./lua/typstar/snippets/math.lua) for mathematical expressions - Alphanumeric characters: `:` → `$$ ` in markup (e.g. `:X` → `$X$ `, `:5` → `$5$ `) - Greek letters: `;` → `` in math and `$$ ` in markup (e.g. `;a` → `alpha`/`$alpha$ `) -- Common indices (numbers and letters `i-n`): `` → `_` in math and `$$ ` → `$_$ ` in markup (e.g `A314` → `A_314`, `$alpha$n ` → `$alpha_n$ `) +- Common indices (numbers and letters `i-n`): ` ` → `_ ` in math and `$$ ` → `$_$ ` in markup (e.g `A314 ` → `A_314 `, `$alpha$n ` → `$alpha_n$ `) +- Series of numbered letters: ` ot ` → `_1, _2, ... ` (e.g. `a ot ` → `a_1, a_2, ... `, `a ot4 ` → `a_1, a_2, a_3, a_4 `, `alpha ot k ` → `alpha_1, alpha_2, ..., alpha_k `) - Wrapping of any mathematical expression (see [operations](./lua/typstar/snippets/visual.lua), works nested, multiline and in visual mode via the [selection key](#installation)): `` → `()` (e.g. `(a^2+b^2)rt` → `sqrt(a^2+b^2)`, `lambdatd` → `tilde(lambda)`, `(1+1)sQ` → `[1+1]`, `(1+1)sq` → `[(1+1)]`) - Matrices: `ma` and `lma` (e.g. `23ma` → 2x3 matrix) diff --git a/lua/typstar/snippets/letters.lua b/lua/typstar/snippets/letters.lua index 6cc6257..8400f16 100644 --- a/lua/typstar/snippets/letters.lua +++ b/lua/typstar/snippets/letters.lua @@ -76,24 +76,41 @@ local get_index = function(_, snippet) return s(nil, t(letter .. '_' .. index)) end -table.insert(letter_snippets, snip(':([A-Za-z0-9])', '$<>$ ', { cap(1) }, markup)) -table.insert(letter_snippets, snip(';(' .. trigger_greek .. ')', '$<>$ ', { d(1, get_greek) }, markup)) -table.insert(letter_snippets, snip(';(' .. trigger_greek .. ')', '<>', { d(1, get_greek) }, math)) -table.insert( - letter_snippets, +local get_series = function(_, snippet) + local letter, target = snippet.captures[1], snippet.captures[2] + local target_num = tonumber(target) + local result + if target_num then + local res = {} + for n = 1, target_num do + table.insert(res, string.format('%s_%d', letter, n)) + if n ~= target_num then table.insert(res, ', ') end + end + result = table.concat(res, '') + else + result = string.format('%s_1, %s_2, ... %s_%s', letter, letter, letter, target) + end + return s(nil, t(result)) +end + +return { + -- latin/greek + snip(':([A-Za-z0-9])', '$<>$ ', { cap(1) }, markup), + snip(';(' .. trigger_greek .. ')', '$<>$ ', { d(1, get_greek) }, markup), + snip(';(' .. trigger_greek .. ')', '<>', { d(1, get_greek) }, math), + + -- indices snip( '\\$(' .. trigger_index_pre .. ')\\$' .. '(' .. trigger_index_post .. ') ', '$<>$ ', { d(1, get_index) }, markup, 500 - ) -) -table.insert( - letter_snippets, - snip('(' .. trigger_index_pre .. ')' .. '(' .. trigger_index_post .. ') ', '<> ', { d(1, get_index) }, math, 200) -) + ), + snip('(' .. trigger_index_pre .. ')' .. '(' .. trigger_index_post .. ') ', '<> ', { d(1, get_index) }, math, 200), -return { + -- 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(\\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), }