excel_to_code 0.2.21 → 0.2.22

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: 7dfb614b4506cd5feb1fdf4ed13261b19e33af1c
4
- data.tar.gz: 5e06790944edc88f7ccea7959e4a1a1a6119fffb
3
+ metadata.gz: 3ccdb199882da15b8172e1714f446a6bf0327d9e
4
+ data.tar.gz: 1a6a3be2a554c829a9654a0d567f385f8f8fca92
5
5
  SHA512:
6
- metadata.gz: 3f5287bc61bfaa773332bfd7361eb062cf3f3246649ce677699374745fdb68cb707899457a003faabd04caa3285483a04a465e8a6864bdcad8a593faa417bf00
7
- data.tar.gz: 1dbe79f4c2bf8dcb78db9f033f30ce1dfd0f5e44b3e8004a51b2f42f62507001ae3e3c17e25a19af075af0b67d25598cd214b7b0a39987f994ca7333e6300c2f
6
+ metadata.gz: e2653de86cca389d7865e7fe853fa1253255b3399953764c3746ed968432ab0c6f6a3fc4cb10bd10de4b7beeefa06d563f85463b697e385b783f19c07b5cc7a3
7
+ data.tar.gz: 7040c57720a1bfb389106405ac2c6d17e8f2f0602d944456b8cffd3b5ad2033f5104850af57cb2d7a022e06697af9fe1a03689f53fc8c05d25390612c89e7259
data/bin/excel_to_c CHANGED
@@ -52,6 +52,11 @@ END
52
52
  opts.on('--isolate WORKSHEET', "Only performs translation and optimiation of that one worksheet. Useful for debugging an incorrect translation of a large worksheet") do |sheet|
53
53
  command.isolate = sheet
54
54
  end
55
+
56
+ opts.on('-d','--debug', "Does not perform final optimisations of spreadsheet, leaving the resulting code more similar to the original worksheet, but potentially slower") do |sheet|
57
+ command.should_inline_formulae_that_are_only_used_once = false
58
+ command.extract_repeated_parts_of_formulae = false
59
+ end
55
60
 
56
61
  opts.on("-h", "--help", "Show this message") do
57
62
  puts opts
data/bin/excel_to_ruby CHANGED
@@ -52,6 +52,11 @@ END
52
52
  opts.on('--isolate WORKSHEET', "Only performs translation and optimiation of that one worksheet. Useful for debugging an incorrect translation of a large worksheet") do |sheet|
53
53
  command.isolate = sheet
54
54
  end
55
+
56
+ opts.on('-d','--debug', "Does not perform final optimisations of spreadsheet, leaving the resulting code more similar to the original worksheet, but potentially slower") do |sheet|
57
+ command.should_inline_formulae_that_are_only_used_once = false
58
+ command.extract_repeated_parts_of_formulae = false
59
+ end
55
60
 
56
61
  opts.on("-h", "--help", "Show this message") do
57
62
  puts opts
@@ -38,6 +38,33 @@ class ExcelToRuby < ExcelToX
38
38
  c.rewrite(@formulae, @worksheet_c_names, o)
39
39
  o.puts
40
40
 
41
+ # Output the named references
42
+
43
+ # Getters
44
+ o.puts "# Start of named references"
45
+ c.settable = lambda { |ref| false }
46
+ named_references_ast = {}
47
+ @named_references_to_keep.each do |ref|
48
+ c_name = ref.is_a?(Array) ? c_name_for(ref) : ["", c_name_for(ref)]
49
+ named_references_ast[c_name] = @named_references[ref]
50
+ end
51
+
52
+ c.rewrite(named_references_ast, @worksheet_c_names, o)
53
+
54
+ # Setters
55
+ m = MapNamedReferenceToRubySetter.new
56
+ m.cells_that_can_be_set_at_runtime = cells_that_can_be_set_at_runtime
57
+ m.sheet_names = @worksheet_c_names
58
+ @named_references_that_can_be_set_at_runtime.each do |ref|
59
+ c_name = c_name_for(ref)
60
+ ast = @named_references[ref]
61
+ o.puts " def #{c_name}=(newValue)"
62
+ o.puts " @#{c_name} = newValue"
63
+ o.puts m.map(ast)
64
+ o.puts " end"
65
+ end
66
+ o.puts "# End of named references"
67
+
41
68
  log.info "Starting to write initializer"
42
69
  o.puts
43
70
  o.puts " # starting initializer"
@@ -50,6 +77,7 @@ class ExcelToRuby < ExcelToX
50
77
  o.puts ""
51
78
  log.info "Finished writing initializer"
52
79
 
80
+
53
81
  o.puts "end"
54
82
  close(o)
55
83
  log.info "Finished writing code"
@@ -87,22 +87,28 @@ class ExcelToX
87
87
 
88
88
  # Optional attribute. Boolean.
89
89
  # * true - the generated tests are run
90
- # * false - the generated tests are not run
90
+ # * false (default) - the generated tests are not run
91
91
  attr_accessor :actually_run_tests
92
92
 
93
93
  # This is the log file, if set it needs to respond to the same methods as the standard logger library
94
94
  attr_accessor :log
95
95
 
96
- # Optional attribute. Boolean. Default true.
97
- # * true - empty cells and zeros are treated as being equivalent in tests. Numbers greater then 1 are only expected to match with assert_in_epsilon, numbers less than 1 are only expected to match with assert_in_delta
96
+ # Optional attribute. Boolean.
97
+ # * true (default) - empty cells and zeros are treated as being equivalent in tests. Numbers greater then 1 are only expected to match with assert_in_epsilon, numbers less than 1 are only expected to match with assert_in_delta
98
98
  # * false - empty cells and zeros are treated as being different in tests. Numbers must match to full accuracy.
99
99
  attr_accessor :sloppy_tests
100
100
 
101
- # Optional attribute, Boolean. Default true
102
- # * true - the compiler attempts to extract bits of calculation that appear in more than one formula into separate methods. This should increase performance
101
+ # Optional attribute, Boolean.
102
+ # * true (default) - the compiler attempts to inline any calculation that is done in another cell, but only referred to by this cell. This should increase performance
103
+ # * false - the compiler leaves calculations in their original cells expanded. This may make debugging easier
104
+ attr_accessor :should_inline_formulae_that_are_only_used_once
105
+
106
+ # Optional attribute, Boolean.
107
+ # * true (default) - the compiler attempts to extract bits of calculation that appear in more than one formula into separate methods. This should increase performance
103
108
  # * false - the compiler leaves calculations fully expanded. This may make debugging easier
104
109
  attr_accessor :extract_repeated_parts_of_formulae
105
110
 
111
+
106
112
  # Optional attribute, Array. Default nil
107
113
  # This is used to help debug large spreadsheets that aren't working correctly.
108
114
  # If set to the name of a worksheet then ONLY that worksheet will be run through the
@@ -189,7 +195,7 @@ class ExcelToX
189
195
  filter_named_references
190
196
 
191
197
  replace_formulae_with_their_results
192
- inline_formulae_that_are_only_used_once
198
+ inline_formulae_that_are_only_used_once if should_inline_formulae_that_are_only_used_once
193
199
  remove_any_cells_not_needed_for_outputs
194
200
  separate_formulae_elements if extract_repeated_parts_of_formulae
195
201
  replace_values_with_constants
@@ -228,6 +234,7 @@ class ExcelToX
228
234
 
229
235
  # Setting this to false may make it easier to figure out errors
230
236
  self.extract_repeated_parts_of_formulae = true if @extract_repeated_parts_of_formulae == nil
237
+ self.should_inline_formulae_that_are_only_used_once = true if @should_inline_formulae_that_are_only_used_once == nil
231
238
 
232
239
  # This setting is used for debugging, and makes the system only do the conversion on a subset of the the
233
240
  if self.isolate
@@ -31,8 +31,8 @@ class MapNamedReferenceToCSetter
31
31
  def sheet_reference(sheet,reference)
32
32
  s = sheet_names[sheet]
33
33
  c = map(reference)
34
- return " // #{s}_#{c} not settable" unless settable(sheet, c)
35
- " set_#{s}_#{c}(#{@new_value_name});"
34
+ return not_settable_code(s,c) unless settable(sheet, c)
35
+ settable_code(s,c)
36
36
  end
37
37
 
38
38
  def array(*rows)
@@ -48,8 +48,7 @@ class MapNamedReferenceToCSetter
48
48
  end.flatten.join("\n")
49
49
 
50
50
  @new_value_name = "newValue"
51
-
52
- " ExcelValue *array = newValue.array;\n#{result}"
51
+ array_code(result)
53
52
  end
54
53
 
55
54
  def settable(sheet, reference)
@@ -59,8 +58,36 @@ class MapNamedReferenceToCSetter
59
58
  settable_refs.include?(reference.upcase.to_sym)
60
59
  end
61
60
 
61
+ def not_settable_code(s,c)
62
+ " // #{s}_#{c} not settable"
63
+ end
64
+
65
+ def settable_code(s,c)
66
+ " set_#{s}_#{c}(#{@new_value_name});"
67
+ end
68
+
69
+ def array_code(result)
70
+ " ExcelValue *array = newValue.array;\n#{result}"
71
+ end
72
+
73
+ end
74
+
75
+ class MapNamedReferenceToRubySetter < MapNamedReferenceToCSetter
76
+ def not_settable_code(s,c)
77
+ " # @#{s}_#{c} not settable"
78
+ end
79
+
80
+ def settable_code(s,c)
81
+ " @#{s}_#{c} = #{@new_value_name}"
82
+ end
83
+
84
+ def array_code(result)
85
+ " array = newValue\n#{result}"
86
+ end
62
87
  end
63
88
 
89
+
90
+
64
91
  class CompileNamedReferenceSetters
65
92
 
66
93
  attr_accessor :cells_that_can_be_set_at_runtime
@@ -3,6 +3,7 @@ end
3
3
 
4
4
  # Support functions
5
5
  require_relative 'excel_functions/number_argument'
6
+ require_relative 'excel_functions/reset'
6
7
 
7
8
  # Constants
8
9
  require_relative 'excel_functions/pi'
@@ -0,0 +1,14 @@
1
+ module ExcelFunctions
2
+
3
+ # This is a support function for reseting a spreadsheet's instance
4
+ # variables back to nil, allowing the results to be recalculated
5
+ def reset()
6
+ # Set all the instance variables to nil
7
+ instance_variables.each do |iv|
8
+ instance_variable_set(iv,nil)
9
+ end
10
+ # Reset the settable variables to their defaults
11
+ initialize
12
+ end
13
+
14
+ end
data/src/excel_to_code.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class ExcelToCode
2
- def self.version() "0.2.21" end
2
+ def self.version() "0.2.22" end
3
3
  end
4
4
 
5
5
  require_relative 'commands'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: excel_to_code
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.21
4
+ version: 0.2.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Counsell, Green on Black Ltd
@@ -186,6 +186,7 @@ files:
186
186
  - src/excel/excel_functions/power.rb
187
187
  - src/excel/excel_functions/pv.rb
188
188
  - src/excel/excel_functions/rank.rb
189
+ - src/excel/excel_functions/reset.rb
189
190
  - src/excel/excel_functions/right.rb
190
191
  - src/excel/excel_functions/round.rb
191
192
  - src/excel/excel_functions/rounddown.rb