kotodama 1.2.5 → 1.2.6

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.
@@ -67,7 +67,8 @@ if File.exist? ARGV[0]
67
67
  output_file.puts output
68
68
  output_file.close if output_file != STDOUT
69
69
  else
70
- STDERR.puts result.error
70
+ STDERR.puts result.backtrace :error
71
+ STDERR.puts result.backtrace
71
72
  end
72
73
  else
73
74
  STDERR.puts "File `#{ARGV[0]}' does not exist"
@@ -1,7 +1,7 @@
1
1
  require 'kaiseki'
2
2
 
3
3
  module Kotodama
4
- VERSION = '1.2.5'
4
+ VERSION = '1.2.6'
5
5
  file_path = File.dirname __FILE__
6
6
 
7
7
  #load base class mods
@@ -18,6 +18,7 @@ module Kotodama
18
18
  action do
19
19
  @language.options[@key] = @value
20
20
  end
21
+ tag_error :error
21
22
  end
22
23
 
23
24
  rule :content_block do
@@ -42,6 +43,7 @@ module Kotodama
42
43
  action do
43
44
  @symbols.each {|n| @type.add n, @weight }
44
45
  end
46
+ tag_error :error
45
47
  end
46
48
 
47
49
  rule :rule_block do
@@ -59,12 +61,14 @@ module Kotodama
59
61
  rule :exclude_expression do
60
62
  parses 'exclude'.skip & :ID.one_or_more & ';'.skip
61
63
  action { @rule.excludes << @result.join }
64
+ tag_error :error
62
65
  end
63
66
 
64
67
  rule :rule_expression do
65
68
  parses :ATOM.one_or_more & :WEIGHT.optional & ';'.skip
66
69
  node [:expression, :weight]
67
70
  action { @rule.add @expression, @weight }
71
+ tag_error :error
68
72
  end
69
73
 
70
74
  rule :change_block do
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: kotodama
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.2.5
5
+ version: 1.2.6
6
6
  platform: ruby
7
7
  authors:
8
8
  - William Hamilton-Levi
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-21 00:00:00 -05:00
13
+ date: 2011-03-01 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -19,9 +19,9 @@ dependencies:
19
19
  requirement: &id001 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
- - - ">="
22
+ - - ~>
23
23
  - !ruby/object:Gem::Version
24
- version: 1.1.1
24
+ version: 1.3.0
25
25
  type: :runtime
26
26
  version_requirements: *id001
27
27
  description: A programable word generator
@@ -38,9 +38,7 @@ files:
38
38
  - lib/change.rb
39
39
  - lib/rule.rb
40
40
  - lib/mod_array.rb
41
- - lib/kotodama_grammar.rb~
42
41
  - lib/language.rb
43
- - lib/language.rb~
44
42
  - lib/kotodama.rb
45
43
  - lib/kotodama_grammar.rb
46
44
  - README
@@ -1,181 +0,0 @@
1
- module Kotodama
2
- GRAMMAR = Kaiseki::Grammar.new do
3
- starting :document
4
- skipping :WS | :COMMENT
5
-
6
- rule :document do
7
- parses proc { @language = Language.new } & :options_block.optional & :content_block.zero_or_more & :EOF.skip
8
- filter { @language }
9
- end
10
-
11
- rule :options_block do
12
- parses 'options'.skip & '{'.skip & :option.zero_or_more & '}'.skip
13
- end
14
-
15
- rule :option do
16
- parses :LITERAL & '=>'.skip & (:ATOM | :INT) & ';'.skip
17
- node [:key, :value]
18
- action do
19
- @language.options[@key] = @value
20
- end
21
- end
22
-
23
- rule :content_block do
24
- parses :type_block | :rule_block | :change_block | :spelling_rule | :zipf_block
25
- end
26
-
27
- rule :type_block do
28
- parses 'type'.skip & :ATOM.set(:id) & :get_type & '{'.skip & :symbol_declaration.zero_or_more & '}'.skip
29
- end
30
-
31
- action :get_type do
32
- if @language.types.key? @id
33
- @type = @language.types[@id]
34
- else
35
- @type = @language.types[@id] = Type.new(@language)
36
- end
37
- end
38
-
39
- rule :symbol_declaration do
40
- parses :LIST & :WEIGHT.optional & ';'.skip
41
- node [:symbols, :weight]
42
- action do
43
- @symbols.each {|n| @type.add n, @weight }
44
- end
45
- end
46
-
47
- rule :rule_block do
48
- parses 'rule'.skip & :ATOM.set(:id) & :get_rule & '{'.skip & (:exclude_expression | :rule_expression).zero_or_more & '}'.skip
49
- end
50
-
51
- action :get_rule do
52
- if @language.rules.key? @id
53
- @rule = @language.rules[@id]
54
- else
55
- @rule = @language.rules[@id] = Rule.new(@language)
56
- end
57
- end
58
-
59
- rule :exclude_expression do
60
- parses 'exclude'.skip & :ID.one_or_more & ';'.skip
61
- action { @rule.excludes << @result.join }
62
- end
63
-
64
- rule :rule_expression do
65
- parses :ATOM.one_or_more & :WEIGHT.optional & ';'.skip
66
- node [:expression, :weight]
67
- action { @rule.add @expression, @weight }
68
- end
69
-
70
- rule :change_block do
71
- parses 'change'.skip & :ATOM.set(:id) & :get_change & '{'.skip & (:ATOM.set(:id).action { @change.add [:load, @id, nil] } | :sound_change).zero_or_more & '}'.skip
72
- end
73
-
74
- action :get_change do
75
- if @language.changes.key? @id
76
- @change = @language.changes[@id]
77
- else
78
- @change = @language.changes[@id] = Change.new(@language)
79
- end
80
- end
81
-
82
- rule :sound_change do
83
- parses (:insert_change | :delete_change | :convert_change) & :change_env.optional & ';'.skip
84
- node [:type, :env]
85
- action do
86
- @type[2] = @env
87
- @change.add @type
88
- end
89
- end
90
-
91
- rule :insert_change do
92
- parses 'insert'.skip & :ATOM.one_or_more
93
- filter { [:insert, (@result.is_a?(Array) ? @result : [@result]), nil] }
94
- end
95
-
96
- rule :delete_change do
97
- parses 'delete'.skip & :ATOM.one_or_more
98
- filter { [:delete, (@result.is_a?(Array) ? @result : [@result]), nil] }
99
- end
100
-
101
- rule :convert_change do
102
- parses :ATOM.one_or_more & '>'.skip & :ATOM.one_or_more
103
- node [:from, :to]
104
- filter { [:convert, [@from, @to], nil] }
105
- end
106
-
107
- rule :change_env do
108
- parses '/'.skip & '#'.optional & :ATOM.zero_or_more & '_'.skip & :ATOM.zero_or_more & '#'.optional
109
- end
110
-
111
- rule :spelling_rule do
112
- parses 'spell'.skip & :ID & 'as'.skip & :LITERAL & ';'.skip
113
- node [:symbol, :spelling]
114
- action do
115
- @language.spellings[@symbol] = @spelling[1..-1]
116
- end
117
- end
118
-
119
- rule :zipf_block do
120
- parses 'zipf'.skip & :FLOAT.set(:float) & '{'.skip & (:LIST & ';'.skip).one_or_more.set(:lists) & '}'.skip
121
- action do
122
- zipf_list = []
123
- @lists.each {|list1| list1.each {|n| zipf_list << n } }
124
- zipf_list.length.times do |i|
125
- value = 1.0 / (i + 1) ** @float
126
- value = (value * 100).to_i
127
- @language.zipf[zipf_list[i]] = value
128
- end
129
- end
130
- end
131
-
132
- rule :ID do
133
- parses /[a-zA-Z][0-9]?/
134
- filter do
135
- if @result.length == 1
136
- @result + '0'
137
- else
138
- @result
139
- end
140
- end
141
- end
142
-
143
- rule :LIST do
144
- parses (:ID & (','.skip & :ID).zero_or_more).merge
145
- end
146
-
147
- rule :LITERAL do
148
- parses /\"([^"]*)\"/ | /\'([^']*)\'/
149
- simplify false
150
- filter do
151
- '$' + @result.captures[0]
152
- end
153
- end
154
-
155
- rule :ATOM do
156
- parses :ID | :LITERAL
157
- end
158
-
159
- rule :WEIGHT do
160
- parses '('.skip & :INT & ')'.skip
161
- end
162
-
163
- rule :INT do
164
- parses /\d+/
165
- cast Integer
166
- end
167
-
168
- rule :FLOAT do
169
- parses /\d+\.\d+/
170
- cast Float
171
- end
172
-
173
- rule :WS do
174
- parses /\s+/
175
- end
176
-
177
- rule :COMMENT do
178
- parses /%[^\n]*\n/
179
- end
180
- end
181
- end
@@ -1,41 +0,0 @@
1
- module Kotodama
2
- class Language
3
- attr_reader :types, :rules, :changes, :spellings, :options, :zipf
4
-
5
- def initialize
6
- @types = {}
7
- @rules = {}
8
- @changes = {}
9
- @spellings = {}
10
- @options = {}
11
- @zipf = {}
12
- end
13
-
14
- def generate options = {}
15
- rule = options[:rule] || @options['$rule']
16
- raise "rule `#{rule}' isn't defined" unless @rules.key? rule
17
- output = @rules[rule].generate
18
- puts output
19
- return output.join if options[:generate_only]
20
- change = options[:change] || @options['$change']
21
- if change
22
- raise "change `#{change}' isn't defined" unless @changes.key? change
23
- output = @changes[change].apply self, output
24
- end
25
- return output.join if options[:change_only]
26
- string = ''
27
- output.each do |n|
28
- if @spellings.key? n
29
- string << @spellings[n]
30
- else
31
- if n[0] == '$'
32
- string << n[1..-1]
33
- else
34
- string << n[0]
35
- end
36
- end
37
- end
38
- string
39
- end
40
- end
41
- end