bluedoc-sml 0.6.1 → 0.6.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: b42faf5f6a63c5ba48bc3df7157f106ed348b0b1bb9ec5be85fccdb4ce7c8ed1
4
- data.tar.gz: b09c64f34316a98d5f4b5df131eadc49dfe055342d877905890d81a221a5097a
3
+ metadata.gz: 675ba78976901654e5dfc6edbd8e3a6432af52f1566bff7a9dfe1fcbd9f138ad
4
+ data.tar.gz: 5d4d87f0db8127706450f765fd10a1f09ed632347e7be952bdd753a08f9cbd08
5
5
  SHA512:
6
- metadata.gz: 5820c42b3eb931a26f24aa52d415623ae369f0fcaf59d8c3f333b0c3fd58118c28a95a746582996cf1812ae22c9fc8a5f6f4c86fe9178280d972c5b04fcd6d5b
7
- data.tar.gz: f3925f4ab3884600dabdfaa1eca12230f2cad388e6b5074e3d368b6a447eb6a37367e1d52c7e5ef0948c7922f3995a48e4443d23e57ffb90fde4a0aed4e9659e
6
+ metadata.gz: 810a4ec0f30c541eb7e7d66016004cd699ed62af72fc1a182bc489c061db48c05d28b69b45a60d6894080e24e0545f9908ee991357f8af20abb2bc0e914ed4cc
7
+ data.tar.gz: 4e883a3d9fda0a022fd6f1047e8c222cc4a37a9b9be7dc33207a7b0a297ed4cc63eb392dbc841a1e043538b78f492ad6bb861d6b51702438d44686162bc5087a
@@ -6,7 +6,7 @@ module BlueDoc::SML
6
6
  class Renderer
7
7
  include BlueDoc::SML::Utils
8
8
 
9
- attr_accessor :sml, :value, :config
9
+ attr_accessor :sml, :value, :config, :list
10
10
 
11
11
  # For table, list for temp mark in block
12
12
  attr_accessor :in_block
@@ -17,6 +17,7 @@ module BlueDoc::SML
17
17
  @config.plantuml_service_host = options[:plantuml_service_host]
18
18
  @config.mathjax_service_host = options[:mathjax_service_host]
19
19
  @value = YAML.load(sml)
20
+ @list = {}
20
21
  end
21
22
 
22
23
  def to_html
@@ -42,6 +43,27 @@ module BlueDoc::SML
42
43
  prev_node = idx > 0 ? children[idx - 1] : nil
43
44
  next_node = idx < children.length ? children[idx + 1] : nil
44
45
 
46
+ list = self.list
47
+ is_list = self.class.tag_name(child) == "list"
48
+
49
+ if is_list
50
+ child_attrs = self.class.attributes(child)
51
+ nid = child_attrs[:nid]
52
+
53
+ if list[nid]
54
+ list[nid] << child
55
+ else
56
+ list[nid] = [child]
57
+ end
58
+ end
59
+
60
+ if (!is_list && self.class.tag_name(prev_node) == "list") ||
61
+ (is_list && self.class.tag_name(prev_node) == "list" && self.class.attributes(child)[:nid] != self.class.attributes(prev_node)[:nid])
62
+ nid = self.class.attributes(prev_node)[:nid]
63
+ list.delete(nid)
64
+ end
65
+
66
+
45
67
  node_to_html(child, prev: prev_node, next: next_node)
46
68
  end.join("")
47
69
  end
@@ -9,6 +9,92 @@ module BlueDoc::SML::Rules
9
9
  INDENT_PX = 8
10
10
 
11
11
  def self.to_html(node, opts = {})
12
+ renderer = opts[:renderer]
13
+ attrs = attributes(node)
14
+
15
+ nid = attrs[:nid]
16
+ list = renderer.list
17
+ current = list[nid]
18
+ html = []
19
+
20
+ return "" if !current
21
+ return "" if opts[:next] && nid == attributes(opts[:next])[:nid]
22
+
23
+ current.length.times do |i|
24
+ current_node = current[i]
25
+ prev_node = current[i - 1]
26
+ next_node = current[i + 1]
27
+
28
+ current_attrs = attributes(current_node)
29
+ prev_attrs = attributes(prev_node)
30
+ next_attrs = attributes(next_node)
31
+
32
+ current_tag = list_tag_by_type(current_attrs[:type])
33
+ current_level = current_attrs[:level]
34
+
35
+ prev_tag = nil
36
+ prev_level = nil
37
+ next_tag = nil
38
+ next_level = nil
39
+
40
+ if prev_node
41
+ prev_tag = list_tag_by_type(prev_attrs[:type])
42
+ prev_level = prev_attrs[:level]
43
+ end
44
+
45
+ if next_node
46
+ next_tag = list_tag_by_type(next_attrs[:type])
47
+ next_level = next_attrs[:level]
48
+ end
49
+
50
+ if (
51
+ i == 0 ||
52
+ prev_level < current_level ||
53
+ (
54
+ prev_level == current_level &&
55
+ current_tag != prev_tag
56
+ )
57
+ )
58
+
59
+ html << %(<#{current_tag} data-level="#{current_level}">)
60
+ end
61
+
62
+ children = renderer.children_to_html(current_node)
63
+ li = %(<li>#{children})
64
+
65
+ if i < current.length - 1
66
+ if next_level < current_level
67
+ (current_level - next_level).times do |j|
68
+ prev_item = current[i - j]
69
+ prev_item_attrs = attributes(prev_item)
70
+ prev_item_tag = list_tag_by_type(prev_item_attrs[:type])
71
+ li += %(</li></#{prev_item_tag}>)
72
+ end
73
+
74
+ li += %(</li>)
75
+ elsif next_level == current_level
76
+ if next_tag == current_tag
77
+ li += %(</li>)
78
+ else
79
+ li += %(</li></#{current_tag}>)
80
+ end
81
+ end
82
+ else
83
+ current_level.times do |j|
84
+ prev_item = current[i - j]
85
+ prev_item_attrs = attributes(prev_item)
86
+ prev_item_tag = list_tag_by_type(prev_item_attrs[:type])
87
+ li += %(</li></#{prev_item_tag}>)
88
+ end
89
+ end
90
+
91
+ html << li
92
+ end
93
+
94
+ html.join("\n")
95
+ end
96
+
97
+ def self.to_html1(node, opts = {})
12
98
  renderer = opts[:renderer]
13
99
  attrs = attributes(node)
14
100
  children = renderer.children_to_html(node)
@@ -14,6 +14,16 @@ module BlueDoc::SML
14
14
  node[0] || ""
15
15
  end
16
16
 
17
+ def list_tag_by_type(type)
18
+ if type == "bulleted"
19
+ return "ul"
20
+ elsif type == "ordered"
21
+ return "ol"
22
+ else
23
+ return nil
24
+ end
25
+ end
26
+
17
27
  def attributes(node, add_if_mission: false)
18
28
  return {} if node.blank?
19
29
  return node[1].deep_symbolize_keys if has_attributes?(node)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module BlueDoc
4
4
  module SML
5
- VERSION = "0.6.1"
5
+ VERSION = "0.6.2"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bluedoc-sml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Lee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-21 00:00:00.000000000 Z
11
+ date: 2019-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport