rggen-spreadsheet-loader 0.15.1 → 0.18.2

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
  SHA256:
3
- metadata.gz: 7b1603acefd8a9ca6048b41152da67046cd9107378cadef93918f53957ea5306
4
- data.tar.gz: 7789dca828cfb3ba59aee1b009fd774799994aade28b70d391ef942c7027c088
3
+ metadata.gz: bb30337ed0f7670b7a30412298d500efc2c43a68b23c62cb24710cbd177d6712
4
+ data.tar.gz: 120d91e46af469f9843844afcfdf1d2ec736bada9d57b5405db9ae16bd52aa49
5
5
  SHA512:
6
- metadata.gz: 7e83ece7dd05d0d827c3070a85255af2cf873a4c841b801599ad1a21d00d22d14ca72cce0b5fafb60e86d7aa8898ddf9add2dbd062a483c9e2755b65ac98f472
7
- data.tar.gz: d3aa50a6640fa53dad732f00f9ed56663f25cd378155e768bc137fc20094906e7f778e802ce26d9062fca8776d9c5f5a8f4d08fa77304323f6d3d9aaf38be803
6
+ metadata.gz: baaede9d7b9dcdcbe08c7671a17da7ae8847cab6d6f5ab9f0c1154419bd321256a7951414f70e0aa5f9b56d6ef452ecd87027ddcf39ecc9f4f16537d6a9300ed
7
+ data.tar.gz: b2bf6f9e744ba823cdcbc77b776f59805c9df88ebd107fa9e18830d5baf0396743989da7e7576fb29f2d3fa1be2d1c240abbd114018f86d3c8bf7bbc55616a51
@@ -13,10 +13,12 @@ require_relative 'spreadsheet_loader/xls_loader'
13
13
 
14
14
  module RgGen
15
15
  module SpreadsheetLoader
16
+ PLUGIN_NAME = :'rggen-spreadsheet-loader'
17
+
16
18
  def self.default_setup(builder)
17
- builder.register_loader(:register_map, CSVLoader)
18
- builder.register_loader(:register_map, RooLoader)
19
- builder.register_loader(:register_map, XLSLoader)
19
+ builder.register_loader(:register_map, :spreadsheet, CSVLoader)
20
+ builder.register_loader(:register_map, :spreadsheet, RooLoader)
21
+ builder.register_loader(:register_map, :spreadsheet, XLSLoader)
20
22
  end
21
23
  end
22
24
  end
@@ -5,7 +5,7 @@ module RgGen
5
5
  class CSVLoader < Core::RegisterMap::Loader
6
6
  include SpreadsheetLoader
7
7
 
8
- support_types [:csv]
8
+ support_types [:csv, :tsv]
9
9
 
10
10
  def read_spreadsheet(file, book)
11
11
  sheet = read_csv(file)
@@ -17,7 +17,12 @@ module RgGen
17
17
 
18
18
  def read_csv(file)
19
19
  require 'csv'
20
- CSV.read(file)
20
+ CSV.read(file, col_sep: separator(file))
21
+ end
22
+
23
+ def separator(file)
24
+ ext = File.extname(file)
25
+ ext.casecmp?('.tsv') && "\t" || ','
21
26
  end
22
27
  end
23
28
  end
@@ -1,4 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rggen/spreadsheet_loader'
4
- RgGen.setup :'rggen-spreadsheet-loader', RgGen::SpreadsheetLoader
4
+ RgGen.setup RgGen::SpreadsheetLoader do |builder|
5
+ builder.ignore_value :register_map, :spreadsheet, :register_block, :comment
6
+ builder.ignore_value :register_map, :spreadsheet, :register, :comment
7
+ end
@@ -9,72 +9,70 @@ module RgGen
9
9
  Spreadsheet::Book.new(file) { |book| read_spreadsheet(file, book) }
10
10
  end
11
11
 
12
- def format(book, _file)
13
- book.sheets.each(&method(:process_sheet))
14
- end
15
-
16
12
  private
17
13
 
18
- def process_sheet(sheet)
19
- register_block = parse_register_block(sheet)
20
- sheet
21
- .rows(register_start_position.row)
22
- .reject { |row| row.cells.all?(&:empty_cell?) }
23
- .each { |row| process_row(row, register_block) }
14
+ def format_layer_data(read_data, layer, _file)
15
+ layer != :root ? collect_layer_data(read_data, layer) : nil
24
16
  end
25
17
 
26
- def parse_register_block(sheet)
27
- register_map.register_block do
28
- register_block_valid_values
29
- .zip(register_block_cells(sheet))
30
- .each { |value_name, cell| value(value_name, cell) }
31
- end
18
+ def collect_layer_data(read_data, layer)
19
+ values = valid_values(layer)
20
+ cells = __send__("#{layer}_cells", read_data)
21
+ values.zip(cells).to_h
32
22
  end
33
23
 
34
24
  def register_block_cells(sheet)
35
25
  start_row = register_block_start_position.row
36
26
  start_column = register_block_start_position.column
37
- Array.new(register_block_valid_values.size) do |i|
27
+ Array.new(valid_values(:register_block).size) do |i|
38
28
  sheet[start_row + i, start_column]
39
29
  end
40
30
  end
41
31
 
42
- def process_row(row, register_block)
43
- register =
44
- if row[register_start_position.column].empty_cell?
45
- register_block.children.last
46
- else
47
- parse_register(row, register_block)
48
- end
49
- parse_bit_field(row, register)
32
+ def register_cells(rows)
33
+ start_column = register_start_position.column
34
+ size = valid_values(:register).size
35
+ rows.first.cells(start_column, size)
50
36
  end
51
37
 
52
- def parse_register(row, register_block)
53
- register_block.register do
54
- register_valid_values
55
- .zip(register_cells(row))
56
- .each { |value_name, cell| value(value_name, cell) }
57
- end
38
+ def bit_field_cells(row)
39
+ start_column = bit_field_start_position.column
40
+ size = valid_values(:bit_field).size
41
+ row.cells(start_column, size)
58
42
  end
59
43
 
60
- def register_cells(row)
61
- start_column = register_start_position.column
62
- size = register_valid_values.size
63
- row.cells(start_column, size)
44
+ SUB_LAYERS = {
45
+ root: :register_block,
46
+ register_block: :register,
47
+ register: :bit_field
48
+ }.freeze
49
+
50
+ def format_sub_layer_data(read_data, layer, _file)
51
+ sub_layer = SUB_LAYERS[layer]
52
+ sub_layer && { sub_layer => __send__("collect_#{sub_layer}_data", read_data) }
64
53
  end
65
54
 
66
- def parse_bit_field(row, register)
67
- register.bit_field do
68
- bit_field_valid_values
69
- .zip(bit_field_cells(row))
70
- .each { |value_name, cell| value(value_name, cell) }
71
- end
55
+ def collect_register_block_data(book)
56
+ book.sheets
72
57
  end
73
58
 
74
- def bit_field_cells(row)
75
- start_column = bit_field_start_position.column
76
- size = bit_field_valid_values.size
77
- row.cells(start_column, size)
59
+ def collect_register_data(sheet)
60
+ sheet.rows(register_start_position.row)
61
+ .reject { |row| row.cells.all?(&:empty_cell?) }
62
+ .each_with_object([], &method(:collect_register_rows))
63
+ end
64
+
65
+ def collect_register_rows(row, row_sets)
66
+ register_begin?(row) && (row_sets << [])
67
+ row_sets.last << row
68
+ end
69
+
70
+ def register_begin?(row)
71
+ !row[register_start_position.column].empty_cell?
72
+ end
73
+
74
+ def collect_bit_field_data(rows)
75
+ rows
78
76
  end
79
77
 
80
78
  def register_block_start_position
@@ -83,28 +81,16 @@ module RgGen
83
81
 
84
82
  def register_start_position
85
83
  @register_start_position ||=
86
- Position.new(register_block_valid_values.size + 2, 1)
84
+ Position.new(valid_values(:register_block).size + 2, 1)
87
85
  end
88
86
 
89
87
  def bit_field_start_position
90
88
  @bit_field_start_position ||=
91
- begin
92
- column =
93
- register_start_position.column + register_valid_values.size
94
- Position.new(0, column)
95
- end
96
- end
97
-
98
- def register_block_valid_values
99
- valid_value_lists[1]
100
- end
101
-
102
- def register_valid_values
103
- valid_value_lists[2]
89
+ Position.new(0, bit_field_start_column)
104
90
  end
105
91
 
106
- def bit_field_valid_values
107
- valid_value_lists[3]
92
+ def bit_field_start_column
93
+ register_start_position.column + valid_values(:register).size
108
94
  end
109
95
  end
110
96
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module SpreadsheetLoader
5
- VERSION = '0.15.1'
5
+ VERSION = '0.18.2'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-spreadsheet-loader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.1
4
+ version: 0.18.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-17 00:00:00.000000000 Z
11
+ date: 2020-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roo
@@ -100,5 +100,5 @@ requirements: []
100
100
  rubygems_version: 3.1.2
101
101
  signing_key:
102
102
  specification_version: 4
103
- summary: rggen-spreadsheet-loader-0.15.1
103
+ summary: rggen-spreadsheet-loader-0.18.2
104
104
  test_files: []