Class: LineTree

Inherits:
Object
  • Object
show all
Defined in:
lib/line-tree.rb

Instance Method Summary collapse

Constructor Details

#initialize(raw_s, level: nil, ignore_non_element: true, ignore_blank_lines: true, ignore_label: false, ignore_newline: true, root: nil, debug: false) ⇒ LineTree

Returns a new instance of LineTree.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/line-tree.rb', line 24

def initialize(raw_s, level: nil, ignore_non_element: true, 
               ignore_blank_lines: true, ignore_label: false, 
               ignore_newline: true, root: nil, debug: false)
  
  
  puts 'inside linetree'.info if @debug
  
  @root = root
  s =  raw_s
  
  @ignore_non_element = ignore_non_element
  @ignore_label = ignore_label
  @ignore_blank_lines = ignore_blank_lines
  @ignore_newline = ignore_newline
  @debug = debug
  
  lines = ignore_blank_lines ? s.gsub(/^ *$\n/,'') : s
  puts ('lines : ' + lines.inspect).debug if @debug
  @to_a = scan_shift(lines.lstrip, level)
  
end

Instance Method Details

#make_tree_list(a) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/line-tree.rb', line 120

def make_tree_list(a)
  
  items = a.inject([]) do |r,x|    
    
    if x.is_a? Array then
      r << make_tree_list(x)
    else
      r + ['item', {title: x}]
    end
  end

end

#scan2keypair(h, trail = nil) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/line-tree.rb', line 90

def scan2keypair(h, trail=nil)

  h.inject([]) do |r,x|

    if x.last.is_a? String then

      key, val = x

      new_key = if r.last and r.last.first.length > 0 then
        key.to_s
      else
        key.to_s
      end
      r << [[trail, new_key].compact.join('/'), val]
    else
      new_key = x.first.to_s
      r << [new_key, x.last.first]
      r.concat scan2keypair(x.last.last, [trail, new_key].compact.join('/'))
    end

  end

end

#to_a(normalize: false) ⇒ Object



46
47
48
# File 'lib/line-tree.rb', line 46

def to_a(normalize: false)
  normalize ? norm(@to_a) : @to_a
end

#to_doc(encapsulate: false) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/line-tree.rb', line 50

def to_doc(encapsulate: false)    
  
  a = @to_a
  
  a2 = if a[0].is_a? Array then      
    encapsulate ? encap(a) : scan_a(a)
  else
    puts 'before scan_a' if @debug
    scan_a(*a)
  end

  
  
  a3 = @root ? a2.unshift(@root, {}) : a2.flatten(1)
    
  puts 'a3: ' + a3.inspect if @debug  

  Rexle.new(a3)
  
end

#to_hObject



71
72
73
# File 'lib/line-tree.rb', line 71

def to_h()
  build_h(@to_a)
end

#to_html(numbered: false) ⇒ Object



75
76
77
78
79
80
81
82
83
# File 'lib/line-tree.rb', line 75

def to_html(numbered: false)
  
  @numbered = numbered
  s = "<ul>%s</ul>" % make_html_list(@to_a)
  puts ('s: ' + s.inspect).debug if @debug
  puts s if @debug
  Rexle.new(s).xml declaration: false
  
end

#to_kv_pairObject

key–value pair returns Hash object describing a flat representation of a tree



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/line-tree.rb', line 88

def to_kv_pair

  def scan2keypair(h, trail=nil)

    h.inject([]) do |r,x|

      if x.last.is_a? String then

        key, val = x

        new_key = if r.last and r.last.first.length > 0 then
          key.to_s
        else
          key.to_s
        end
        r << [[trail, new_key].compact.join('/'), val]
      else
        new_key = x.first.to_s
        r << [new_key, x.last.first]
        r.concat scan2keypair(x.last.last, [trail, new_key].compact.join('/'))
      end

    end

  end

  scan2keypair(self.to_h).to_h

end

#to_treeObject



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/line-tree.rb', line 118

def to_tree()
  
  def make_tree_list(a)
    
    items = a.inject([]) do |r,x|    
      
      if x.is_a? Array then
        r << make_tree_list(x)
      else
        r + ['item', {title: x}]
      end
    end

  end

  a = make_tree_list(@to_a)
  doc = Rexle.new(['tree', {}, *a])
  doc.xml    
  
end

#to_xml(options = {}) ⇒ Object



139
140
141
# File 'lib/line-tree.rb', line 139

def to_xml(options={})
  to_doc.xml(options)
end