Module: Brief::Document::SourceMap
- Included in:
- Brief::Document
- Defined in:
- lib/brief/document/source_map.rb
Instance Method Summary collapse
- #content_under_heading(heading_element, include_heading = true) ⇒ Object
- #heading_details ⇒ Object
- #heading_element_tags ⇒ Object
- #heading_line_numbers ⇒ Object
- #line_numbers_for_heading(heading_element, include_heading = true) ⇒ Object
- #next_sibling_heading_for(heading_element) ⇒ Object
Instance Method Details
#content_under_heading(heading_element, include_heading = true) ⇒ Object
62 63 64 65 66 |
# File 'lib/brief/document/source_map.rb', line 62 def content_under_heading(heading_element, include_heading=true) start_index, end_index = line_numbers_for_heading(heading_element, include_heading) lines = raw_content.lines.dup.slice(start_index - 1, end_index) Array(include_heading ? lines : lines.slice(1, lines.length)).join("") end |
#heading_details ⇒ Object
10 11 12 13 14 15 |
# File 'lib/brief/document/source_map.rb', line 10 def heading_details @heading_details ||= structure.get_heading_details.tap do |list| list.map! {|i| i.line_number = i.line_number.to_i; i.level = i.level.to_i; i } list.sort_by! {|i| i.line_number } end end |
#heading_element_tags ⇒ Object
6 7 8 |
# File 'lib/brief/document/source_map.rb', line 6 def css('h1,h2,h4,h5,h6') end |
#heading_line_numbers ⇒ Object
2 3 4 |
# File 'lib/brief/document/source_map.rb', line 2 def heading_line_numbers .map {|el| el.attr('data-line-number') } end |
#line_numbers_for_heading(heading_element, include_heading = true) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/brief/document/source_map.rb', line 34 def line_numbers_for_heading(heading_element, include_heading=true) if heading_element.nil? binding.pry end if heading_element.is_a?(String) && heading_element.length > 1 heading_element = .find do |el| el.attr('data-heading').include?(heading_element.strip.downcase) || el.text.to_s.strip.downcase.include?(heading_element.strip.downcase) end end if heading_element.nil? binding.pry end start_index = heading_element.attr('data-line-number').to_i if next_heading = next_sibling_heading_for(heading_element) end_index = next_heading.attr('data-line-number').to_i else end_index = raw_content.lines.length + 1 end end_index = end_index - start_index start_index = 0 if start_index < 0 [start_index, end_index] end |
#next_sibling_heading_for(heading_element) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/brief/document/source_map.rb', line 17 def next_sibling_heading_for(heading_element) if heading_element.is_a?(String) && heading_element.length > 1 heading_element = .find do |el| el.attr('data-heading').include?(heading_element) || el.text.to_s.include?(heading_element) end end line = heading_element.attr('data-line-number').to_i level = heading_element.attr('data-level').to_i superior = heading_details.find do |next_element| next_element.line_number.to_i > line && next_element.level.to_i >= level end superior && superior.element end |