Class: CSKit::Readers::ScienceHealthReader

Inherits:
Object
  • Object
show all
Defined in:
lib/cskit/readers/science_health_reader.rb

Defined Under Namespace

Classes: Paragraph

Constant Summary collapse

NUMERALS =
%w(vi vii ix x xi xii)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(volume) ⇒ ScienceHealthReader

Returns a new instance of ScienceHealthReader.



14
15
16
# File 'lib/cskit/readers/science_health_reader.rb', line 14

def initialize(volume)
  @volume = volume
end

Instance Attribute Details

#volumeObject (readonly)

Returns the value of attribute volume.



8
9
10
# File 'lib/cskit/readers/science_health_reader.rb', line 8

def volume
  @volume
end

Instance Method Details

#each_line(line_number, page_number) ⇒ Object

be careful - this will go all the way to the end of the book unless you break



27
28
29
30
31
32
33
# File 'lib/cskit/readers/science_health_reader.rb', line 27

def each_line(line_number, page_number)
  while page = get_page(page_number)
    yield get_line(line_number, page_number), line_number, page_number
    line_number, page_number = increment(line_number, page_number)
  end
rescue Errno::ENOENT => e
end

#each_paragraph(line_number, page_number) ⇒ Object

be careful - this will go all the way to the end of the book unless you break



36
37
38
39
40
41
42
43
44
# File 'lib/cskit/readers/science_health_reader.rb', line 36

def each_paragraph(line_number, page_number)
  while paragraph = get_paragraph(page_number, line_number)
    yield paragraph
    line_number, page_number = increment(
      paragraph.line_end, paragraph.page_end
    )
  end
rescue Errno::ENOENT => e
end

#get_line(line_number, page_number) ⇒ Object



22
23
24
# File 'lib/cskit/readers/science_health_reader.rb', line 22

def get_line(line_number, page_number)
  get_page(page_number).lines[line_number - 1]
end

#get_line_range(range, page_number) ⇒ Object



74
75
76
77
78
79
80
81
# File 'lib/cskit/readers/science_health_reader.rb', line 74

def get_line_range(range, page_number)
  lines = []
  each_line(range.first, page_number) do |line, line_number, page_number|
    lines << line
    break if line_number == range.last
  end
  lines
end

#get_page(page_number) ⇒ Object



18
19
20
# File 'lib/cskit/readers/science_health_reader.rb', line 18

def get_page(page_number)
  volume.get_page(page_number)
end

#get_paragraph(page_number, line_number) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/cskit/readers/science_health_reader.rb', line 46

def get_paragraph(page_number, line_number)
  original_page_number = page_number
  original_line_number = line_number
  first_line = true
  lines = []

  each_line(line_number, page_number) do |cur_line, cur_line_number, cur_page_number|
    if first_line
      lines << cur_line
    else
      if cur_line.paragraph_start? && !first_line
        break
      else
        lines << cur_line
      end
    end

    first_line = false
    line_number = cur_line_number
    page_number = cur_page_number
  end

  Paragraph.new(
    lines, original_line_number, line_number,
    original_page_number, page_number
  )
end

#readings_for(citation) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/cskit/readers/science_health_reader.rb', line 83

def readings_for(citation)
  citation.lines.map do |citation_line|
    lines = if citation_line.start == citation_line.finish
      if citation_line.only?
        [get_line(citation_line.start, citation.page)]
      else
        get_paragraph(citation.page, citation_line.start).lines
      end
    else
      get_line_range(citation_line.start..citation_line.finish, citation.page)
    end

    Reading.new(lines, citation_line)
  end
end