(sometimes AI explains it better)
(2026-05)
Lua module for ranges tree structure.
Tree contains nested named ranges and provides method to resolve node ranges to tree root's frame.
(Below is annotated current example from "Getting string".)
Okay, you have string with fixed data layout:
~ 1 2 3 4 - - 5 6 7 8 9 =
There is "real data" part with digits. You need to get two middle characters that are at even positions in "real data" part.
Preparation and printing of initial "raw data".
local create_string_value = request('StringValue.create')
local create_ranges_tree = request('RangesTree.create')
local create_range = request('Range.create')
local apply_ranges = request('apply_ranges')
local test_str = '~1234--56789='
local InputData = create_string_value(test_str)
local StringFields = create_ranges_tree()
local OutputData
print('<Input>: ' .. InputData:GetValue())Creating Part, Part.Even and Part.Even.Middle range nodes.
StringFields:AddNameAndRanges(
'Part',
{
create_range(2, 4),
create_range(8, 5),
}
)
StringFields:AddNameAndRanges(
'Part.Even',
{
create_range(2, 1),
create_range(4, 1),
create_range(6, 1),
create_range(8, 1),
}
)
StringFields:AddNameAndRange('Part.Even.Middle', create_range(2, 2))Note that nested node ranges does not depend from parent's ranges.
Arguments for create_range() are starting index (from 1) and length.
We are using two convenience functions AddNameAndRanges() and
AddNameAndRange(). But core functions are AddName() and AddRange().
Getting and printing our "two middle even chars from essential data":
OutputData = create_string_value()
apply_ranges(InputData, StringFields:GetRanges('Part.Even.Middle'), OutputData)
print('Part.Even.Middle: ' .. OutputData:GetValue())Complete example's output:
<Input>: ~1234--56789=
Part: 123456789
Part.Even: 2468
Part.Even.Middle: 46
-
Ranges tree does not store any data. It stores ranges map for fields. Real data is read only from
apply_ranges().This means you can use created ranges mask for any other data in same format. No need to recreate tree nodes.
src/- Examples
- Lua v5.3
- Clone repo/delete directory
workshop-- My personal Lua framework- My other repositories