class VString
a Virtual string backed by a file, which is read on-demand
Public Class Methods
new(fd, len)
click to toggle source
# File misc/pdfparse.rb, line 21 def initialize(fd, len) @fd = fd @len = len end
read(fname)
click to toggle source
creates a VString
from a file
# File misc/pdfparse.rb, line 16 def self.read(fname) raise 'need a PDF filename' if not fname new File.open(fname, 'rb'), File.size(fname) end
Public Instance Methods
[](start, len=nil)
click to toggle source
# File misc/pdfparse.rb, line 28 def [](start, len=nil) return if not start if start.kind_of? Range len = start.end len -= 1 if start.exclude_end? len = @len+1+len if len < 0 start = start.begin end start = @len+1+start if start < 0 return nil if start < 0 or len < 0 or start > @len @fd.pos = start @fd.read len end
index(sub, off=0)
click to toggle source
search on a small region (1k or 1M)
# File misc/pdfparse.rb, line 43 def index(sub, off=0) off += 1 + @len if off < 0 return if not ret = self[off, 1024].index(sub) || self[off, 1024*1024].index(sub) ret + off end
length()
click to toggle source
# File misc/pdfparse.rb, line 26 def length; @len end
rindex(sub, off=@len)
click to toggle source
search on a small region (1k or 1M)
# File misc/pdfparse.rb, line 50 def rindex(sub, off=@len) off += 1 + @len if off < 0 p1 = [off, 1024].min p2 = [off, 1024*1024].min if ret = self[off-p1, p1].rindex(sub) ret + off-p1 elsif p1 != p2 and ret = self[off-p2, p2].rindex(sub) ret + off-p2 end end