calyx 0.11.1 → 0.11.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75811b39e9ca016645eb82dea083ff50612f8e2b
4
- data.tar.gz: af905efd81c6b0e679e2ed333f571fdad65ee8a8
3
+ metadata.gz: dc594e0fddc6c14df3cd938cc1ab458f7ffc490f
4
+ data.tar.gz: 68f4c73ef62ae94daea3194b11d3c7e0e5df7904
5
5
  SHA512:
6
- metadata.gz: 97a47ba2a0dcf0d658641ba1f67b3237731132ca0500c92053b86f54a60b2eba7f3181daef54c43f94d40c725915c39a2ae2898d6a639a0399f3910a4d01116f
7
- data.tar.gz: 57341f9c8428917d56b33dedd219dd904bca3252b9f2a7d240bcab1a050f8209f7b61ab26d9402b69f029be53d7ffcfcd29b8342777e2de62733e408607af872
6
+ metadata.gz: c9e136e726881b1847690a290565125546fd7a41f90f7bbd4320542eaee82be2df9796acbf11d53cb71c77d2b82e97e29d228f050ac765d688bc36ac1c672a75
7
+ data.tar.gz: 9290522a14840247671d1c76228b0e515687b97713890e4b303fe10f128cf1e7c7d5b061775dd060534ad67e7e98143b398ae9ab5cba74289c25bab8c4adebfd
data/README.md CHANGED
@@ -417,7 +417,8 @@ Rough plan for stabilising the API and features for a `1.0` release.
417
417
  | `0.9` | ~~return grammar tree from `#evaluate`, with flattened string from `#generate` being separate~~ |
418
418
  | `0.10` | ~~inject custom string functions for parameterised rules, transforms and mappings~~ |
419
419
  | `0.11` | ~~support YAML format (and JSON?)~~ |
420
- | `1.0` | API documentation |
420
+ | `0.12` | indirection (allow output of a rule to be used as the name for another rule) |
421
+ | `1.0` | ~~API documentation~~ |
421
422
 
422
423
  ## Credits
423
424
 
@@ -7,7 +7,7 @@ module Calyx
7
7
  # Accepts a JSON or YAML file path, identified by its extension (`.json`
8
8
  # or `.yml`).
9
9
  #
10
- # @param filename [String]
10
+ # @param [String] filename
11
11
  # @return [Calyx::Grammar]
12
12
  def self.load(filename)
13
13
  file = File.read(filename)
@@ -23,7 +23,7 @@ module Calyx
23
23
 
24
24
  # Converts the given string of YAML data to a grammar instance.
25
25
  #
26
- # @param data [String]
26
+ # @param [String] data
27
27
  # @return [Calyx::Grammar]
28
28
  def self.load_yml(data)
29
29
  require 'yaml'
@@ -32,7 +32,7 @@ module Calyx
32
32
 
33
33
  # Converts the given string of JSON data to a grammar instance.
34
34
  #
35
- # @param data [String]
35
+ # @param [String] data
36
36
  # @return [Calyx::Grammar]
37
37
  def self.load_json(data)
38
38
  require 'json'
@@ -23,7 +23,7 @@ module Calyx
23
23
  # Accepts a JSON or YAML file path, identified by its extension (`.json`
24
24
  # or `.yml`).
25
25
  #
26
- # @param filename [String]
26
+ # @param [String] filename
27
27
  # @return [Calyx::Grammar]
28
28
  def load(filename)
29
29
  Format.load(filename)
@@ -31,22 +31,22 @@ module Calyx
31
31
 
32
32
  # DSL helper method for registering a modifier module with the grammar.
33
33
  #
34
- # @param module_name [Module]
34
+ # @param [Module] module_name
35
35
  def modifier(module_name)
36
36
  registry.modifier(module_name)
37
37
  end
38
38
 
39
39
  # DSL helper method for registering a paired mapping regex.
40
40
  #
41
- # @param name [Symbol]
42
- # @param pairs [Hash<Regex,String>]
41
+ # @param [Symbol] name
42
+ # @param [Hash<Regex,String>] pairs
43
43
  def mapping(name, pairs)
44
44
  registry.mapping(name, pairs)
45
45
  end
46
46
 
47
47
  # DSL helper method for registering the given block as a string filter.
48
48
  #
49
- # @param name [Symbol]
49
+ # @param [Symbol] name
50
50
  # @block block with a single string argument returning a modified string.
51
51
  def filter(name, &block)
52
52
  registry.mapping(name, &block)
@@ -56,8 +56,8 @@ module Calyx
56
56
  #
57
57
  # Not usually used directly, as the method missing API is less verbose.
58
58
  #
59
- # @param name [Symbol]
60
- # @param productions [Array]
59
+ # @param [Symbol] name
60
+ # @param [Array] productions
61
61
  def rule(name, *productions)
62
62
  registry.rule(name, *productions)
63
63
  end
@@ -68,8 +68,8 @@ module Calyx
68
68
  # This must be bypassed by calling `#rule` directly if the name of the
69
69
  # desired rule clashes with an existing helper method.
70
70
  #
71
- # @param name [Symbol]
72
- # @param productions [Array]
71
+ # @param [Symbol] name
72
+ # @param [Array] productions
73
73
  def method_missing(name, *productions)
74
74
  registry.rule(name, *productions)
75
75
  end
@@ -77,7 +77,7 @@ module Calyx
77
77
  # Hook for combining the registry of a parent grammar into the child that
78
78
  # inherits from it.
79
79
  #
80
- # @param child_registry [Calyx::Registry]
80
+ # @param [Calyx::Registry] child_registry
81
81
  def inherit_registry(child_registry)
82
82
  registry.combine(child_registry) unless child_registry.nil?
83
83
  end
@@ -87,7 +87,7 @@ module Calyx
87
87
  #
88
88
  # This is automatically called by the Ruby engine.
89
89
  #
90
- # @param subclass [Class]
90
+ # @param [Class] subclass
91
91
  def inherited(subclass)
92
92
  subclass.inherit_registry(registry)
93
93
  end
@@ -98,7 +98,7 @@ module Calyx
98
98
  # Grammar rules can be constructed on the fly when the passed-in block is
99
99
  # evaluated.
100
100
  #
101
- # @param seed [Number]
101
+ # @param [Number] seed
102
102
  def initialize(seed=nil, &block)
103
103
  @seed = seed || Random.new_seed
104
104
  srand(@seed)
@@ -113,8 +113,9 @@ module Calyx
113
113
 
114
114
  # Produces a string as an output of the grammar.
115
115
  #
116
- # @param start_symbol [Symbol]
117
- # @param rules_map [Hash]
116
+ # @overload
117
+ # @param [Symbol] start_symbol
118
+ # @param [Hash] rules_map
118
119
  # @return [String]
119
120
  def generate(*args)
120
121
  start_symbol, rules_map = map_default_args(*args)
@@ -126,8 +127,9 @@ module Calyx
126
127
 
127
128
  # Produces a syntax tree of nested list nodes as an output of the grammar.
128
129
  #
129
- # @param start_symbol [Symbol]
130
- # @param rules_map [Hash]
130
+ # @overload
131
+ # @param [Symbol] start_symbol
132
+ # @param [Hash] rules_map
131
133
  # @return [Array]
132
134
  def evaluate(*args)
133
135
  start_symbol, rules_map = map_default_args(*args)
@@ -8,8 +8,8 @@ module Calyx
8
8
  #
9
9
  # If an invalid modifier function is given, returns the raw input string.
10
10
  #
11
- # @param name [Symbol]
12
- # @param value [String]
11
+ # @param [Symbol] name
12
+ # @param [String] value
13
13
  # @return [String]
14
14
  def transform(name, value)
15
15
  if respond_to?(name)
@@ -6,8 +6,8 @@ module Calyx
6
6
  # Parse a list of productions and return a choice node which is the head
7
7
  # of a syntax tree of child nodes.
8
8
  #
9
- # @param productions [Array]
10
- # @param registry [Calyx::Registry]
9
+ # @param [Array] productions
10
+ # @param [Calyx::Registry] registry
11
11
  def self.parse(productions, registry)
12
12
  choices = productions.map do |choice|
13
13
  if choice.is_a?(String)
@@ -27,7 +27,7 @@ module Calyx
27
27
 
28
28
  # Initialize a new choice with a list of child nodes.
29
29
  #
30
- # @param collection [Array]
30
+ # @param [Array] collection
31
31
  def initialize(collection)
32
32
  @collection = collection
33
33
  end
@@ -13,8 +13,8 @@ module Calyx
13
13
  #
14
14
  # Returns a concat node which is the head of a tree of child nodes.
15
15
  #
16
- # @param production [String]
17
- # @param registry [Calyx::Registry]
16
+ # @param [String] production
17
+ # @param [Calyx::Registry] registry
18
18
  def self.parse(production, registry)
19
19
  expansion = production.split(EXPRESSION).map do |atom|
20
20
  if atom.is_a?(String)
@@ -42,7 +42,7 @@ module Calyx
42
42
  # Initialize the concat node with an expansion of terminal and
43
43
  # non-terminal fragments.
44
44
  #
45
- # @param expansion [Array]
45
+ # @param [Array] expansion
46
46
  def initialize(expansion)
47
47
  @expansion = expansion
48
48
  end
@@ -4,9 +4,9 @@ module Calyx
4
4
  class Expression
5
5
  # Constructs a node representing a single template substitution.
6
6
  #
7
- # @param production [#evaluate]
8
- # @param methods [Array]
9
- # @param registry [Calyx::Registry]
7
+ # @param [#evaluate] production
8
+ # @param [Array] methods
9
+ # @param [Calyx::Registry] registry
10
10
  def initialize(production, methods, registry)
11
11
  @production = production
12
12
  @methods = methods.map { |m| m.to_sym }
@@ -8,8 +8,8 @@ module Calyx
8
8
  # Construct a memoized rule, given the symbol to lookup and the registry
9
9
  # to look it up in.
10
10
  #
11
- # @param symbol [Symbol]
12
- # @param registry [Calyx::Registry]
11
+ # @param [Symbol] symbol
12
+ # @param [Calyx::Registry] registry
13
13
  def initialize(symbol, registry)
14
14
  @symbol = symbol.slice(1, symbol.length-1).to_sym
15
15
  @registry = registry
@@ -6,8 +6,8 @@ module Calyx
6
6
  # Construct a non-terminal node, given the symbol to lookup and the
7
7
  # registry to look it up in.
8
8
  #
9
- # @param symbol [Symbol]
10
- # @param registry [Calyx::Registry]
9
+ # @param [Symbol] symbol
10
+ # @param [Calyx::Registry] registry
11
11
  def initialize(symbol, registry)
12
12
  @symbol = symbol.to_sym
13
13
  @registry = registry
@@ -4,7 +4,7 @@ module Calyx
4
4
  class Terminal
5
5
  # Construct a terminal node with the given value.
6
6
  #
7
- # @param atom [#to_s]
7
+ # @param [#to_s] atom
8
8
  def initialize(atom)
9
9
  @atom = atom
10
10
  end
@@ -7,8 +7,8 @@ module Calyx
7
7
  # Parse a given list or hash of productions into a syntax tree of weighted
8
8
  # choices.
9
9
  #
10
- # @param productions [Array<Array>, Hash<#to_s, Float>]
11
- # @param registry [Calyx::Registry]
10
+ # @param [Array<Array>, Hash<#to_s, Float>] productions
11
+ # @param [Calyx::Registry] registry
12
12
  def self.parse(productions, registry)
13
13
  weights_sum = productions.reduce(0) do |memo, choice|
14
14
  memo += choice.last
@@ -29,7 +29,7 @@ module Calyx
29
29
 
30
30
  # Initialize a new choice with a list of child nodes.
31
31
  #
32
- # @param collection [Array]
32
+ # @param [Array] collection
33
33
  def initialize(collection)
34
34
  @collection = collection
35
35
  end
@@ -12,30 +12,30 @@ module Calyx
12
12
 
13
13
  # Hook for defining rules without explicitly calling the `#rule` method.
14
14
  #
15
- # @param name [Symbol]
16
- # @param productions [Array]
15
+ # @param [Symbol] name
16
+ # @param [Array] productions
17
17
  def method_missing(name, *arguments)
18
18
  rule(name, *arguments)
19
19
  end
20
20
 
21
21
  # Attaches a modifier module to this instance.
22
22
  #
23
- # @param module_name [Module]
23
+ # @param [Module] module_name
24
24
  def modifier(name)
25
25
  modifiers.extend(name)
26
26
  end
27
27
 
28
28
  # Registers a paired mapping regex.
29
29
  #
30
- # @param name [Symbol]
31
- # @param pairs [Hash<Regex,String>]
30
+ # @param [Symbol] name
31
+ # @param [Hash<Regex,String>] pairs
32
32
  def mapping(name, pairs)
33
33
  transforms[name.to_sym] = construct_mapping(pairs)
34
34
  end
35
35
 
36
36
  # Registers the given block as a string filter.
37
37
  #
38
- # @param name [Symbol]
38
+ # @param [Symbol] name
39
39
  # @block block with a single string argument returning a modified string.
40
40
  def filter(name, callable=nil, &block)
41
41
  if block_given?
@@ -47,23 +47,23 @@ module Calyx
47
47
 
48
48
  # Registers a new grammar rule.
49
49
  #
50
- # @param name [Symbol]
51
- # @param productions [Array]
50
+ # @param [Symbol] name
51
+ # @param [Array] productions
52
52
  def rule(name, *productions)
53
53
  rules[name.to_sym] = construct_rule(productions)
54
54
  end
55
55
 
56
56
  # Expands the given rule symbol to its production.
57
57
  #
58
- # @param symbol [Symbol]
58
+ # @param [Symbol] symbol
59
59
  def expand(symbol)
60
60
  rules[symbol] || context[symbol]
61
61
  end
62
62
 
63
63
  # Applies the given modifier function to the given value to transform it.
64
64
  #
65
- # @param name [Symbol]
66
- # @param value [String]
65
+ # @param [Symbol] name
66
+ # @param [String] value
67
67
  # @return [String]
68
68
  def transform(name, value)
69
69
  if transforms.key?(name)
@@ -76,7 +76,7 @@ module Calyx
76
76
  # Expands a memoized rule symbol by evaluating it and storing the result
77
77
  # for later.
78
78
  #
79
- # @param symbol [Symbol]
79
+ # @param [Symbol] symbol
80
80
  def memoize_expansion(symbol)
81
81
  memos[symbol] ||= expand(symbol).evaluate
82
82
  end
@@ -86,7 +86,7 @@ module Calyx
86
86
  # This is only needed at compile time, so that child classes can easily
87
87
  # inherit the set of rules decared by their parent.
88
88
  #
89
- # @param registry [Calyx::Registry]
89
+ # @param [Calyx::Registry] registry
90
90
  def combine(registry)
91
91
  @rules = rules.merge(registry.rules)
92
92
  end
@@ -96,8 +96,8 @@ module Calyx
96
96
  #
97
97
  # Produces a syntax tree of nested list nodes.
98
98
  #
99
- # @param start_symbol [Symbol]
100
- # @param rules_map [Hash]
99
+ # @param [Symbol] start_symbol
100
+ # @param [Hash] rules_map
101
101
  # @return [Array]
102
102
  def evaluate(start_symbol=:start, rules_map={})
103
103
  reset_evaluation_context
@@ -135,7 +135,12 @@ module Calyx
135
135
  def construct_mapping(pairs)
136
136
  mapper = -> (input) {
137
137
  match, target = pairs.detect { |match, target| input =~ match }
138
- input.gsub(match, target)
138
+
139
+ if match && target
140
+ input.gsub(match, target)
141
+ else
142
+ input
143
+ end
139
144
  }
140
145
  end
141
146
 
@@ -1,3 +1,3 @@
1
1
  module Calyx
2
- VERSION = '0.11.1'.freeze
2
+ VERSION = '0.11.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calyx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.11.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Rickerby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-06 00:00:00.000000000 Z
11
+ date: 2016-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler