text-gen 0.2.0 → 0.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a974f3f11c14b16da1838a5a8c53395b41c33e08c7adfc32c36306ea79f9d602
4
- data.tar.gz: 3b389b465cb6b135fae0c11060e42a1bd45e26e484c946180ae2b54452a4dba7
3
+ metadata.gz: fd025671968a7f3a6d7fd3dc9cc0cb1d02f06a43054c2aa8395f6db054d86c79
4
+ data.tar.gz: 5ff622ee28e61931406c4d3f1d792c1bc3eefde351c2bd8e22f8b285b715158d
5
5
  SHA512:
6
- metadata.gz: 9354feb07dec71c9f35a149c1d3ed6a7b82db54a91d8bcdf77d044659cc1907539358bae8e78befcb44c7ee139bd5edee90c07901a3b991049301aab83c4e1ad
7
- data.tar.gz: df9160a73bddb71420d441e376da8882cc42c42beccac551c21b4a994b7ea8bd42892c8acee82f177ef0eb03bf6c81b7a2109bb9baa0129dc719a4e390d4584d
6
+ metadata.gz: eafd1508e2cac903b0f81e0c94dd47eee86d8bc8321d863f3258b5d2e730cc016a84b7cbba48e0827ba9fc6545916cd20a521d7927587eedfd017cd6561f4b35
7
+ data.tar.gz: 0d82d9c14341a74baea22e17cb1830f3c61559a33ca8049b0ba5fde856552ddde0a5fddb82b67b0d81a4d80505f6e8aa8894b930640d49281127a27e20d1148d
@@ -0,0 +1,7 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(find:*)"
5
+ ]
6
+ }
7
+ }
@@ -66,18 +66,13 @@ module Text
66
66
 
67
67
  # Create a builder that always returns a constant value
68
68
  def constant_builder(key, str)
69
+ # TODO: the string should be parsed into segments
70
+ segments = Segment::Parser.parse(str)
69
71
  {
70
72
  "key" => key,
71
73
  "items" => [
72
74
  {
73
- "segments" => [
74
- {
75
- "type" => "constant",
76
- "text" => str,
77
- "meta" => {},
78
- "filters" => []
79
- }
80
- ],
75
+ "segments" => segments,
81
76
  "value" => 0,
82
77
  "multiplier" => 1,
83
78
  "filters" => [],
@@ -0,0 +1,20 @@
1
+ module Text
2
+ module Gen
3
+ module Segment
4
+ class Constant
5
+ TEXT = /(?:(?:\\\[)|(?:\\\])|[^\[\]])+/
6
+ class << self
7
+ def scan(scanner)
8
+ str = scanner.scan(TEXT)
9
+ return unless str
10
+
11
+ {
12
+ "type" => "constant",
13
+ "text" => str
14
+ }
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module Text
2
+ module Gen
3
+ module Segment
4
+ class Dice
5
+ DICE_MATCHER = /\[\s*(\d*[dD]\d+(?:\s*[+x-]\s*\d+)?)\s*\]/
6
+ class << self
7
+ def scan(scanner)
8
+ str = scanner.scan(DICE_MATCHER)
9
+ return unless str
10
+
11
+ {
12
+ "type" => "dice",
13
+ "text" => scanner[1]
14
+ }
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module Text
2
+ module Gen
3
+ module Segment
4
+ class Number
5
+ NUMBER_MATCHER = /([+-]?\d+)/
6
+ class << self
7
+ def scan(scanner)
8
+ str = scanner.scan(NUMBER_MATCHER)
9
+ return unless str
10
+
11
+ {
12
+ "type" => "constant",
13
+ "text" => str
14
+ }
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,27 @@
1
+ require_relative "constant"
2
+ require_relative "dice"
3
+ require_relative "number"
4
+ require_relative "reference"
5
+
6
+ module Text
7
+ module Gen
8
+ module Segment
9
+ class Parser
10
+ class SegmentParseError < StandardError; end
11
+ class << self
12
+ def parse(str)
13
+ segments = []
14
+ scanner = StringScanner.new(str)
15
+ until scanner.eos?
16
+ seg = Dice.scan(scanner) || Reference.scan(scanner) || Number.scan(scanner) || Constant.scan(scanner)
17
+ raise SegmentParseError, "Invalid segment: #{scanner.rest}" unless seg
18
+
19
+ segments << seg
20
+ end
21
+ segments
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,22 @@
1
+ module Text
2
+ module Gen
3
+ module Segment
4
+ class Reference
5
+ REFERENCE_MATCHER = /\[\s*([a-z0-9-]+(?::[a-z0-9i]+)*)\s*\]/
6
+ class << self
7
+ def scan(scanner)
8
+ str = scanner.scan(REFERENCE_MATCHER)
9
+ return unless str
10
+
11
+ {
12
+ "type" => "reference",
13
+ "text" => scanner[1],
14
+ "filters" => [],
15
+ "meta" => {}
16
+ }
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Text
4
4
  module Gen
5
- VERSION = "0.2.0"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
data/lib/text/gen.rb CHANGED
@@ -9,6 +9,7 @@ require_relative "gen/max_recursion_error"
9
9
  require_relative "gen/result_accumulator"
10
10
  require_relative "gen/titleizer"
11
11
  require_relative "gen/result"
12
+ require_relative "gen/segment/parser"
12
13
  require_relative "gen/filter"
13
14
  require_relative "gen/store"
14
15
  require_relative "gen/runner"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: text-gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - G Palmer
@@ -33,6 +33,7 @@ executables: []
33
33
  extensions: []
34
34
  extra_rdoc_files: []
35
35
  files:
36
+ - ".claude/settings.local.json"
36
37
  - CHANGELOG.md
37
38
  - CODE_OF_CONDUCT.md
38
39
  - LICENSE.txt
@@ -47,6 +48,11 @@ files:
47
48
  - lib/text/gen/result.rb
48
49
  - lib/text/gen/result_accumulator.rb
49
50
  - lib/text/gen/runner.rb
51
+ - lib/text/gen/segment/constant.rb
52
+ - lib/text/gen/segment/dice.rb
53
+ - lib/text/gen/segment/number.rb
54
+ - lib/text/gen/segment/parser.rb
55
+ - lib/text/gen/segment/reference.rb
50
56
  - lib/text/gen/store.rb
51
57
  - lib/text/gen/titleizer.rb
52
58
  - lib/text/gen/version.rb