excel_to_code 0.2.21 → 0.2.22

Sign up to get free protection for your applications and to get access to all the features.
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