Class: Mathtype::WmfFileParser

Inherits:
FileParser show all
Defined in:
lib/file_parser/wmf.rb

Instance Attribute Summary

Attributes inherited from FileParser

#equation, #raw

Instance Method Summary collapse

Methods inherited from FileParser

#read_from_file

Constructor Details

#initialize(path) ⇒ WmfFileParser

Returns a new instance of WmfFileParser.



3
4
5
6
# File 'lib/file_parser/wmf.rb', line 3

def initialize(path)
  super(path)
  extract_mtef_from_mfcomment(@raw)
end

Instance Method Details

#extract_mtef_from_mfcomment(comment) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/file_parser/wmf.rb', line 8

def extract_mtef_from_mfcomment(comment)
  match = comment.match("MathTypeUU")
  if match
    lenpos = match.end(0)
    len = comment[lenpos..lenpos+1].unpack("H*")[0].to_i 16
    start = lenpos + 2
  else
    match = comment.match("AppsMFCC\x01")
    raise ::NotImplementedError, "No MathType Equation found in wmf" unless match
    len_start = match.end(0)
    totallen = comment[len_start..len_start + 3].reverse.chars.rotate(-1).join.unpack("H*")[0].to_i 16
    datalen = comment[len_start + 4 .. len_start + 7].reverse.chars.rotate(-1).join.unpack("H*")[0].to_i 16
    signature = comment[len_start + 8.. -1].match(/.+?\x00/)
    raise ::NotImplementedError, "Equation split over multiple comments" unless totallen == datalen
    start = len_start + 8 + signature.end(0)
    len = datalen
  end
  @equation = comment[start..(start + len)]
end