htot_conv 0.2.0 → 0.3.0

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: 5d55ad5f2d58f0e79c06559e63d2a8916b34aa31
4
- data.tar.gz: c08cb89b3d16f61f9a529fd78eb69d4eda2979ae
3
+ metadata.gz: 5d5f671f2c6eb3e7bc5c8ba10c10b7dfba0417a3
4
+ data.tar.gz: 051cd8132c24bb1e640171f747a25342f8b59d45
5
5
  SHA512:
6
- metadata.gz: 3437bfd4648e1b5422a84ac848fd7271bb1b2f71b6a98080864af56e1dc4800a749cce2f30e1327c456ad1f802a855e27f16083d9e0a56215b5ae26e13ca8b3c
7
- data.tar.gz: 1147a7ad351c344f6b1e53cdb5e5330ae23a24ffe5e6b8b94f1e2eb718c4bf5c6481ba739920f17f2a78edefad6bd84de0bbf1a593bf0f56b2d291da2db2ed9f
6
+ metadata.gz: 3b658635745828831f4fdb86a97e14eb3aaddca9a8fe606ad8ea3ce366f743de8e100350dc82e278fa3832d2464585dff1ffddc41c0ebb60984b3db8543ad6e9
7
+ data.tar.gz: 4521c421e386868aee477c20a6f7a33a78d225304be6e8f894560963f2862d9fde61f8c3cd915555f5c7964b7888b68f9c38dde662c91143e5771d2c2b8b6837
@@ -30,10 +30,9 @@ module HTOTConv
30
30
  item = node.item
31
31
 
32
32
  key_cell = Array.new(max_level, nil)
33
- key_cell[node.item.level - 1] = item.key
34
- node.ancestors.each do |ancestor|
35
- key_cell[ancestor.item.level - 1] = ancestor.item.key if ancestor.item
36
- break if ancestor.prev
33
+ [node].concat(node.ancestors.to_a).each do |c_node|
34
+ key_cell[c_node.item.level - 1] = c_node.item.key if c_node.item
35
+ break if c_node.prev
37
36
  end
38
37
 
39
38
  value_cell = HTOTConv::Util.pad_array(item.value, max_value_length)
@@ -41,14 +40,15 @@ module HTOTConv
41
40
  ws.add_row(key_cell.concat(value_cell),
42
41
  :style => Axlsx::STYLE_THIN_BORDER)
43
42
 
44
- [node].concat(node.ancestors.to_a).each do |ancestor|
45
- if (ancestor.parent && ancestor.parent.item && ancestor.parent.item.level)
43
+ node.ancestors.each_with_object([node]) do |c_node, descendants|
44
+ if (c_node.item && c_node.item.level)
46
45
  edges = [:left, :right]
47
- edges << :top unless ancestor.prev
48
- edges << :bottom unless ancestor.next
49
- ws.rows.last.cells[ancestor.parent.item.level - 1].style = ws.styles.add_style(
46
+ edges << :top unless (descendants.any? { |v| v.prev })
47
+ edges << :bottom unless (descendants.any? { |v| v.next })
48
+ ws.rows.last.cells[c_node.item.level - 1].style = ws.styles.add_style(
50
49
  :border => { :style => :thin, :color => "00", :edges => edges })
51
50
  end
51
+ descendants.unshift(c_node)
52
52
  end
53
53
  (item.level..max_level).each do |level|
54
54
  edges = [:top, :bottom]
@@ -64,17 +64,17 @@ module HTOTConv
64
64
  end
65
65
  end
66
66
 
67
- node.ancestors.inject(node) do |c_node, a_node|
68
- rowspan_cells[a_node.item.level - 1] << ws.rows.last.cells[a_node.item.level - 1]
69
- unless c_node.next # if c_node is last?
67
+ node.ancestors.each_with_object([node]) do |c_node, descendants|
68
+ rowspan_cells[c_node.item.level - 1] << ws.rows.last.cells[c_node.item.level - 1]
69
+ unless (descendants.any? { |v| v.next })
70
70
  if [:rowspan, :both].include?(@option[:integrate_cells])
71
- if rowspan_cells[a_node.item.level - 1].length > 1
72
- ws.merge_cells(rowspan_cells[a_node.item.level - 1])
71
+ if rowspan_cells[c_node.item.level - 1].length > 1
72
+ ws.merge_cells(rowspan_cells[c_node.item.level - 1])
73
73
  end
74
74
  end
75
- rowspan_cells[a_node.item.level - 1].clear
75
+ rowspan_cells[c_node.item.level - 1].clear
76
76
  end
77
- a_node
77
+ descendants.unshift(c_node)
78
78
  end
79
79
  end
80
80
  end
@@ -6,17 +6,27 @@ module HTOTConv
6
6
  class DirTree < Base
7
7
  def self.option_help
8
8
  {
9
+ :key_header => {
10
+ :default => [],
11
+ :pat => Array,
12
+ :desc => "key header",
13
+ },
9
14
  :glob_pattern => {
10
15
  :default => "**/*",
11
16
  :pat => String,
12
17
  :desc => "globbing pattern (default: \"**/*\")",
13
18
  },
19
+ :dir_indicator => {
20
+ :default => "",
21
+ :pat => String,
22
+ :desc => "append directory indicator",
23
+ },
14
24
  }
15
25
  end
16
26
 
17
27
  def parse(input=Dir.pwd)
18
28
  outline = HTOTConv::Outline.new
19
- outline.key_header = []
29
+ outline.key_header = @option[:key_header]
20
30
  outline.value_header = []
21
31
 
22
32
  outline_item = Set.new
@@ -28,14 +38,15 @@ module HTOTConv
28
38
  file_path
29
39
  end
30
40
  end
31
- end
32
41
 
33
- outline_item.sort.each do |file_path|
34
- key = File.basename(file_path)
35
- level = file_path.split(File::SEPARATOR).length
36
- outline.add_item(key, level, [])
42
+ outline_item.sort.each do |file_path|
43
+ key = File.basename(file_path)
44
+ key << "#{option[:dir_indicator]}" if FileTest.directory?(file_path)
45
+ level = file_path.split(File::SEPARATOR).length
46
+ outline.add_item(key, level, [])
47
+ end
37
48
  end
38
-
49
+
39
50
  outline
40
51
  end
41
52
  end
@@ -4,9 +4,19 @@ require 'htot_conv/parser/base'
4
4
  module HTOTConv
5
5
  module Parser
6
6
  class HtmlList < Base
7
+ def self.option_help
8
+ {
9
+ :key_header => {
10
+ :default => [],
11
+ :pat => Array,
12
+ :desc => "key header",
13
+ },
14
+ }
15
+ end
16
+
7
17
  def parse(input)
8
18
  outline = HTOTConv::Outline.new
9
- outline.key_header = []
19
+ outline.key_header = @option[:key_header]
10
20
  outline.value_header = []
11
21
 
12
22
  parser = Nokogiri::HTML::SAX::Parser.new(ListDoc.new(outline))
@@ -4,9 +4,19 @@ require 'htot_conv/parser/base'
4
4
  module HTOTConv
5
5
  module Parser
6
6
  class Opml < Base
7
+ def self.option_help
8
+ {
9
+ :key_header => {
10
+ :default => [],
11
+ :pat => Array,
12
+ :desc => "key header",
13
+ },
14
+ }
15
+ end
16
+
7
17
  def parse(input)
8
18
  outline = HTOTConv::Outline.new
9
- outline.key_header = []
19
+ outline.key_header = @option[:key_header]
10
20
  outline.value_header = []
11
21
 
12
22
  parser = Nokogiri::XML::SAX::Parser.new(ListDoc.new(outline))
@@ -17,10 +17,15 @@ module HTOTConv
17
17
  :desc => "separator character of additional data",
18
18
  },
19
19
  :preserve_empty_line => {
20
- :defalut => false,
20
+ :default => false,
21
21
  :pat => FalseClass,
22
22
  :desc => "preserve empty line as a level-1 item (default: no)",
23
23
  },
24
+ :key_header => {
25
+ :default => [],
26
+ :pat => Array,
27
+ :desc => "key header",
28
+ },
24
29
  :value_header => {
25
30
  :default => [],
26
31
  :pat => Array,
@@ -33,7 +38,7 @@ module HTOTConv
33
38
  indent_regexp = Regexp.new("^(?<indents>(#{Regexp.escape(@option[:indent])})*)")
34
39
  delimiter_regexp = (@option[:delimiter].kind_of?(String))? Regexp.new(Regexp.escape(@option[:delimiter])) : @option[:delimiter]
35
40
  outline = HTOTConv::Outline.new
36
- outline.key_header = []
41
+ outline.key_header = @option[:key_header]
37
42
  outline.value_header = @option[:value_header]
38
43
 
39
44
  input.each_line do |line|
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module HTOTConv
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: htot_conv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - "@cat_in_136"
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-10 00:00:00.000000000 Z
11
+ date: 2017-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: axlsx