Module: Coradoc::AsciiDoc::Builder::ListBuilder

Included in:
Coradoc::AsciiDoc::Builder
Defined in:
lib/coradoc/asciidoc/builder/list_builder.rb

Instance Method Summary collapse

Instance Method Details

#build_definition_content(ast) ⇒ Object



80
81
82
83
84
85
# File 'lib/coradoc/asciidoc/builder/list_builder.rb', line 80

def build_definition_content(ast)
  terms = Array(ast[:terms]).join(', ')
  definition = ast[:definition] || ast[:contents]

  "#{terms}: #{definition}"
end

#build_definition_item(ast) ⇒ Object



70
71
72
73
74
75
76
77
78
# File 'lib/coradoc/asciidoc/builder/list_builder.rb', line 70

def build_definition_item(ast)
  item_ast = ast[:definition_list_item] || ast

  Coradoc::CoreModel::ListItem.new(
    marker: '::',
    content: build_definition_content(item_ast),
    children: []
  )
end

#build_definition_list(ast) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/coradoc/asciidoc/builder/list_builder.rb', line 40

def build_definition_list(ast)
  items = Array(ast[:definition_list]).map do |item|
    build_definition_item(item)
  end

  Coradoc::CoreModel::ListBlock.new(
    marker_type: 'definition',
    marker_level: 1,
    items: items,
    attributes: build_attributes_private(ast[:attribute_list])
  )
end

#build_item_children(attached_ast) ⇒ Object



101
102
103
104
105
# File 'lib/coradoc/asciidoc/builder/list_builder.rb', line 101

def build_item_children(attached_ast)
  return [] unless attached_ast

  Array(attached_ast).map { |child| build_element(child) }.compact
end

#build_list_block(ast) ⇒ Object



7
8
9
10
11
12
13
14
15
16
# File 'lib/coradoc/asciidoc/builder/list_builder.rb', line 7

def build_list_block(ast)
  Coradoc::CoreModel::ListBlock.new(
    marker_type: detect_marker_type(ast),
    marker_level: detect_marker_level(ast),
    items: build_list_items(ast[:items] || ast[:list_items]),
    title: ast[:title],
    id: ast[:id],
    attributes: build_attributes_private(ast[:attribute_list])
  )
end

#build_list_item(ast) ⇒ Object



59
60
61
62
63
64
65
66
67
68
# File 'lib/coradoc/asciidoc/builder/list_builder.rb', line 59

def build_list_item(ast)
  item_ast = ast[:list_item] || ast

  Coradoc::CoreModel::ListItem.new(
    marker: item_ast[:marker]&.to_s,
    content: extract_item_content(item_ast),
    nested_list: build_nested_list(item_ast[:nested]),
    children: build_item_children(item_ast[:attached])
  )
end

#build_list_items(items_ast) ⇒ Object



53
54
55
56
57
# File 'lib/coradoc/asciidoc/builder/list_builder.rb', line 53

def build_list_items(items_ast)
  return [] unless items_ast

  Array(items_ast).map { |item| build_list_item(item) }
end

#build_nested_list(nested_ast) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/coradoc/asciidoc/builder/list_builder.rb', line 87

def build_nested_list(nested_ast)
  return nil unless nested_ast

  if nested_ast.is_a?(Array)
    Coradoc::CoreModel::ListBlock.new(
      marker_type: 'unordered',
      marker_level: 2,
      items: nested_ast.map { |item| build_list_item(item) }
    )
  else
    build_element(nested_ast)
  end
end

#build_ordered_list(ast) ⇒ Object



29
30
31
32
33
34
35
36
37
38
# File 'lib/coradoc/asciidoc/builder/list_builder.rb', line 29

def build_ordered_list(ast)
  items = Array(ast[:ordered]).map { |item| build_list_item(item) }

  Coradoc::CoreModel::ListBlock.new(
    marker_type: 'ordered',
    marker_level: 1,
    items: items,
    attributes: build_attributes_private(ast[:attribute_list])
  )
end

#build_unordered_list(ast) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/coradoc/asciidoc/builder/list_builder.rb', line 18

def build_unordered_list(ast)
  items = Array(ast[:unordered]).map { |item| build_list_item(item) }

  Coradoc::CoreModel::ListBlock.new(
    marker_type: 'unordered',
    marker_level: 1,
    items: items,
    attributes: build_attributes_private(ast[:attribute_list])
  )
end

#extract_item_content(ast) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/coradoc/asciidoc/builder/list_builder.rb', line 107

def extract_item_content(ast)
  if ast[:text]
    case ast[:text]
    when String
      ast[:text]
    when Array
      ast[:text].map(&:to_s).join
    else
      ast[:text].to_s
    end
  elsif ast[:content]
    ast[:content].to_s
  else
    ''
  end
end