oselvar-var-core 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'oselvar/var/core/span'
4
+
5
+ module Oselvar
6
+ module Var
7
+ module Core
8
+ # Parse a Markdown/Gherkin table row into trimmed cells and per-cell source
9
+ # spans. Port of table-cells.ts. All offsets count UTF-16 code units.
10
+ module TableCells
11
+ module_function
12
+
13
+ # Split a `| a | b |` row into [cells, cell_spans]. +line_start_offset+
14
+ # is the UTF-16 offset of the row's first character within +source+.
15
+ def parse_row_cells(line_text, line_start_offset, source)
16
+ first_cp = line_text.index('|')
17
+ last_cp = line_text.rindex('|')
18
+ return [[], []] if first_cp.nil? || last_cp.nil? || last_cp <= first_cp
19
+
20
+ # Pipe positions: convert code-point index to UTF-16 (matters when
21
+ # astral chars precede the pipe). '|' is ASCII → 1 UTF-16 unit.
22
+ first_u16 = Offsets.to_utf16_offset(line_text, first_cp)
23
+ inner_start_u16 = first_u16 + 1
24
+
25
+ inner = line_text[(first_cp + 1)...last_cp]
26
+
27
+ cells = []
28
+ cell_spans = []
29
+ cursor = 0 # running UTF-16 position within inner
30
+
31
+ # split(-1) keeps trailing empty segments, matching JS/Python split.
32
+ inner.split('|', -1).each do |seg|
33
+ trimmed = seg.strip
34
+ leading = Offsets.utf16_len(seg) - Offsets.utf16_len(seg.lstrip)
35
+ abs_start = line_start_offset + inner_start_u16 + cursor + leading
36
+ cells << trimmed
37
+ cell_spans << Offsets.span_from_offsets(source, abs_start, abs_start + Offsets.utf16_len(trimmed))
38
+ cursor += Offsets.utf16_len(seg) + 1 # +1 for the '|' delimiter
39
+ end
40
+
41
+ [cells, cell_spans]
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Oselvar
4
+ module Var
5
+ # The pure functional core: parse, match, plan, execute, diffs, drift, and
6
+ # the conformance projections. No filesystem, network, globals, or time.
7
+ module Core
8
+ VERSION = '0.3.2'
9
+ end
10
+ end
11
+ end
12
+
13
+ require 'oselvar/var/core/span'
14
+ require 'oselvar/var/core/ast'
15
+ require 'oselvar/var/core/table_cells'
16
+ require 'oselvar/var/core/scanner'
17
+ require 'oselvar/var/core/structurer'
18
+ require 'oselvar/var/core/parse'
19
+ require 'oselvar/var/core/step_role'
20
+ require 'oselvar/var/core/registry'
21
+ require 'oselvar/var/core/sentences'
22
+ require 'oselvar/var/core/diagnostics'
23
+ require 'oselvar/var/core/cell_diff'
24
+ require 'oselvar/var/core/matcher'
25
+ require 'oselvar/var/core/plan'
26
+ require 'oselvar/var/core/deep_freeze'
27
+ require 'oselvar/var/core/doc_string_diff'
28
+ require 'oselvar/var/core/param_diff'
29
+ require 'oselvar/var/core/failure_anchor'
30
+ require 'oselvar/var/core/execute'
31
+ require 'oselvar/var/core/hash'
32
+ require 'oselvar/var/core/drift'
33
+ require 'oselvar/var/core/canonical_json'
34
+ require 'oselvar/var/core/conformance'
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oselvar-var-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.2
5
+ platform: ruby
6
+ authors:
7
+ - Aslak Hellesøy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2026-07-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cucumber-cucumber-expressions
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 20.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 20.0.0
27
+ description: The pure functional pipeline (parse, match, plan, execute, drift) behind
28
+ Vár.
29
+ email:
30
+ - aslak@oselvar.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - lib/oselvar/var/core.rb
36
+ - lib/oselvar/var/core/ast.rb
37
+ - lib/oselvar/var/core/canonical_json.rb
38
+ - lib/oselvar/var/core/cell_diff.rb
39
+ - lib/oselvar/var/core/conformance.rb
40
+ - lib/oselvar/var/core/deep_freeze.rb
41
+ - lib/oselvar/var/core/diagnostics.rb
42
+ - lib/oselvar/var/core/doc_string_diff.rb
43
+ - lib/oselvar/var/core/drift.rb
44
+ - lib/oselvar/var/core/execute.rb
45
+ - lib/oselvar/var/core/failure_anchor.rb
46
+ - lib/oselvar/var/core/hash.rb
47
+ - lib/oselvar/var/core/matcher.rb
48
+ - lib/oselvar/var/core/param_diff.rb
49
+ - lib/oselvar/var/core/parse.rb
50
+ - lib/oselvar/var/core/plan.rb
51
+ - lib/oselvar/var/core/registry.rb
52
+ - lib/oselvar/var/core/scanner.rb
53
+ - lib/oselvar/var/core/sentences.rb
54
+ - lib/oselvar/var/core/span.rb
55
+ - lib/oselvar/var/core/step_role.rb
56
+ - lib/oselvar/var/core/structurer.rb
57
+ - lib/oselvar/var/core/table_cells.rb
58
+ homepage: https://var.oselvar.com
59
+ licenses:
60
+ - MIT
61
+ metadata:
62
+ rubygems_mfa_required: 'true'
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '3.2'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubygems_version: 3.4.10
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: Markdown-native BDD — pure functional core engine
82
+ test_files: []