mathtype 0.0.8 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.travis.yml +7 -0
- data/Rakefile +8 -0
- data/lib/file_parser/ole.rb +15 -0
- data/lib/file_parser/parser.rb +19 -0
- data/lib/file_parser/wmf.rb +28 -0
- data/lib/mathtype.rb +30 -7
- data/lib/mathtype/version.rb +1 -1
- data/lib/records/bintypes.rb +18 -0
- data/lib/records/mtef.rb +8 -114
- data/lib/records/nudge.rb +9 -5
- data/lib/records/ruler.rb +1 -1
- data/lib/records/typesizes.rb +5 -10
- data/lib/records3/char.rb +53 -0
- data/lib/records3/embell.rb +109 -0
- data/lib/records3/font.rb +27 -0
- data/lib/records3/line.rb +47 -0
- data/lib/records3/matrix.rb +80 -0
- data/lib/records3/mtef.rb +97 -0
- data/lib/records3/options.rb +5 -0
- data/lib/records3/pile.rb +43 -0
- data/lib/records3/size.rb +75 -0
- data/lib/records3/snapshot.rb +19 -0
- data/lib/records3/tmpl.rb +751 -0
- data/lib/{records → records5}/char.rb +6 -12
- data/lib/{records → records5}/color.rb +1 -1
- data/lib/{records → records5}/color_def.rb +8 -8
- data/lib/{records → records5}/embell.rb +2 -2
- data/lib/{records → records5}/encoding_def.rb +1 -1
- data/lib/{records → records5}/eqn_prefs.rb +2 -2
- data/lib/{records → records5}/font_def.rb +1 -1
- data/lib/{records → records5}/font_style_def.rb +1 -1
- data/lib/{records → records5}/future.rb +1 -1
- data/lib/{records → records5}/line.rb +3 -3
- data/lib/{records → records5}/matrix.rb +11 -3
- data/lib/records5/mtef.rb +129 -0
- data/lib/{records → records5}/pile.rb +2 -2
- data/lib/{records → records5}/size.rb +9 -7
- data/lib/records5/snapshot.rb +19 -0
- data/lib/{records → records5}/tmpl.rb +2 -2
- data/spec/fixtures/expected/mathtype3/ceil.xml +38 -0
- data/spec/fixtures/expected/mathtype3/fence.xml +77 -0
- data/spec/fixtures/expected/mathtype3/floor.xml +38 -0
- data/spec/fixtures/expected/mathtype3/frac.xml +136 -0
- data/spec/fixtures/expected/mathtype3/large_nudge.xml +135 -0
- data/spec/fixtures/expected/mathtype3/lim_embell.xml +247 -0
- data/spec/fixtures/expected/mathtype3/matrix_2x1.xml +500 -0
- data/spec/fixtures/expected/mathtype3/pile.xml +188 -0
- data/spec/fixtures/expected/mathtype3/sigma_subsup.xml +46 -0
- data/spec/fixtures/expected/mathtype3/small_nudge.xml +90 -0
- data/spec/fixtures/expected/mathtype3/sqrt.xml +132 -0
- data/spec/fixtures/expected/{299.xml → mathtype5/299.xml} +30 -15
- data/spec/fixtures/expected/{arrows.xml → mathtype5/arrows.xml} +30 -15
- data/spec/fixtures/expected/{embedded.xml → mathtype5/embedded.xml} +29 -14
- data/spec/fixtures/expected/{embellishments.xml → mathtype5/embellishments.xml} +30 -15
- data/spec/fixtures/expected/{equation1.xml → mathtype5/equation1.xml} +30 -15
- data/spec/fixtures/expected/{equation10.xml → mathtype5/equation10.xml} +30 -15
- data/spec/fixtures/expected/{equation11.xml → mathtype5/equation11.xml} +30 -15
- data/spec/fixtures/expected/{equation12.xml → mathtype5/equation12.xml} +30 -15
- data/spec/fixtures/expected/{equation13.xml → mathtype5/equation13.xml} +30 -15
- data/spec/fixtures/expected/{equation2.xml → mathtype5/equation2.xml} +30 -15
- data/spec/fixtures/expected/{equation3.xml → mathtype5/equation3.xml} +30 -15
- data/spec/fixtures/expected/{equation4.xml → mathtype5/equation4.xml} +30 -15
- data/spec/fixtures/expected/{equation5.xml → mathtype5/equation5.xml} +30 -15
- data/spec/fixtures/expected/{equation6.xml → mathtype5/equation6.xml} +30 -15
- data/spec/fixtures/expected/{equation7.xml → mathtype5/equation7.xml} +30 -15
- data/spec/fixtures/expected/{equation8.xml → mathtype5/equation8.xml} +30 -15
- data/spec/fixtures/expected/{equation9.xml → mathtype5/equation9.xml} +30 -15
- data/spec/fixtures/expected/{fences.xml → mathtype5/fences.xml} +30 -15
- data/spec/fixtures/expected/{integrals.xml → mathtype5/integrals.xml} +30 -15
- data/spec/fixtures/expected/mathtype5/matrix-border.xml +365 -0
- data/spec/fixtures/expected/mathtype5/matrix.xml +382 -0
- data/spec/fixtures/expected/{sizes.xml → mathtype5/sizes.xml} +30 -15
- data/spec/fixtures/input/mathtype3/ceil.bin +0 -0
- data/spec/fixtures/input/mathtype3/fence.bin +0 -0
- data/spec/fixtures/input/mathtype3/floor.bin +0 -0
- data/spec/fixtures/input/mathtype3/frac.bin +0 -0
- data/spec/fixtures/input/mathtype3/large_nudge.bin +0 -0
- data/spec/fixtures/input/mathtype3/lim_embell.bin +0 -0
- data/spec/fixtures/input/mathtype3/matrix_2x1.bin +0 -0
- data/spec/fixtures/input/mathtype3/pile.bin +0 -0
- data/spec/fixtures/input/mathtype3/sigma_subsup.bin +0 -0
- data/spec/fixtures/input/mathtype3/small_nudge.bin +0 -0
- data/spec/fixtures/input/mathtype3/sqrt.bin +0 -0
- data/spec/fixtures/input/{299.bin → mathtype5/299.bin} +0 -0
- data/spec/fixtures/input/{arrows.bin → mathtype5/arrows.bin} +0 -0
- data/spec/fixtures/input/{embedded.bin → mathtype5/embedded.bin} +0 -0
- data/spec/fixtures/input/{embellishments.bin → mathtype5/embellishments.bin} +0 -0
- data/spec/fixtures/input/{equation1.bin → mathtype5/equation1.bin} +0 -0
- data/spec/fixtures/input/{equation10.bin → mathtype5/equation10.bin} +0 -0
- data/spec/fixtures/input/{equation11.bin → mathtype5/equation11.bin} +0 -0
- data/spec/fixtures/input/{equation12.bin → mathtype5/equation12.bin} +0 -0
- data/spec/fixtures/input/{equation13.bin → mathtype5/equation13.bin} +0 -0
- data/spec/fixtures/input/{equation2.bin → mathtype5/equation2.bin} +0 -0
- data/spec/fixtures/input/{equation3.bin → mathtype5/equation3.bin} +0 -0
- data/spec/fixtures/input/{equation4.bin → mathtype5/equation4.bin} +0 -0
- data/spec/fixtures/input/{equation5.bin → mathtype5/equation5.bin} +0 -0
- data/spec/fixtures/input/{equation6.bin → mathtype5/equation6.bin} +0 -0
- data/spec/fixtures/input/{equation7.bin → mathtype5/equation7.bin} +0 -0
- data/spec/fixtures/input/{equation8.bin → mathtype5/equation8.bin} +0 -0
- data/spec/fixtures/input/{equation9.bin → mathtype5/equation9.bin} +0 -0
- data/spec/fixtures/input/{fences.bin → mathtype5/fences.bin} +0 -0
- data/spec/fixtures/input/{integrals.bin → mathtype5/integrals.bin} +0 -0
- data/spec/fixtures/input/mathtype5/matrix-border.bin +0 -0
- data/spec/fixtures/input/mathtype5/matrix.bin +0 -0
- data/spec/fixtures/input/{sizes.bin → mathtype5/sizes.bin} +0 -0
- data/spec/mathtype_spec.rb +11 -9
- data/test-mathtype.rb +2 -0
- metadata +168 -97
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
require_relative "snapshot"
|
16
16
|
|
17
|
-
module
|
17
|
+
module Mathtype5
|
18
18
|
class RecordEmbell < BinData::Record; end
|
19
19
|
class RecordChar < BinData::Record
|
20
20
|
include Snapshot
|
@@ -24,11 +24,11 @@ module Mathtype
|
|
24
24
|
endian :little
|
25
25
|
int8 :options
|
26
26
|
|
27
|
-
|
27
|
+
record_nudge :nudge, onlyif: lambda { options & OPTIONS["mtefOPT_NUDGE"] > 0 }
|
28
28
|
|
29
29
|
int8 :_typeface
|
30
30
|
|
31
|
-
|
31
|
+
mtef16 :_mt_code_value, onlyif: (lambda do
|
32
32
|
options & OPTIONS["mtefOPT_CHAR_ENC_NO_MTCODE"] == 0
|
33
33
|
end)
|
34
34
|
|
@@ -47,7 +47,7 @@ module Mathtype
|
|
47
47
|
char_enc_char_8 = options & OPTIONS["mtefOPT_CHAR_ENC_CHAR_8"] > 0
|
48
48
|
char_enc_char_16 = options & OPTIONS["mtefOPT_CHAR_ENC_CHAR_16"] > 0
|
49
49
|
|
50
|
-
|
50
|
+
char_enc_char_8 || char_enc_char_16
|
51
51
|
end
|
52
52
|
|
53
53
|
choice :font_position,
|
@@ -55,7 +55,7 @@ module Mathtype
|
|
55
55
|
onlyif: font_position_present do
|
56
56
|
|
57
57
|
uint8 8
|
58
|
-
|
58
|
+
mtef16 16
|
59
59
|
end
|
60
60
|
|
61
61
|
array :embellishment_list,
|
@@ -65,13 +65,7 @@ module Mathtype
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def mt_code_value
|
68
|
-
|
69
|
-
65536 + _mt_code_value # Two's complement
|
70
|
-
else
|
71
|
-
_mt_code_value
|
72
|
-
end
|
73
|
-
|
74
|
-
sprintf("0x%04X", mt_code)
|
68
|
+
sprintf("0x%04X", _mt_code_value)
|
75
69
|
end
|
76
70
|
|
77
71
|
def typeface
|
@@ -11,23 +11,23 @@
|
|
11
11
|
# absence of the color and 1000 is a fully saturated color. So, an RGB color
|
12
12
|
# definition for black has all three components at 0.
|
13
13
|
|
14
|
-
module
|
14
|
+
module Mathtype5
|
15
15
|
class RecordColorDef < BinData::Record
|
16
16
|
endian :little
|
17
17
|
|
18
18
|
int8 :options
|
19
19
|
|
20
20
|
struct :rgb, onlyif: lambda { options & OPTIONS["mtefCOLOR_CMYK"] == 0 } do
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
mtef16 :r
|
22
|
+
mtef16 :g
|
23
|
+
mtef16 :b
|
24
24
|
end
|
25
25
|
|
26
26
|
struct :cmyk, onlyif: lambda { options & OPTIONS["mtefCOLOR_CMYK"] > 0} do
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
mtef16 :c
|
28
|
+
mtef16 :m
|
29
|
+
mtef16 :y
|
30
|
+
mtef16 :k
|
31
31
|
end
|
32
32
|
|
33
33
|
stringz :color_name, onlyif: (lambda do
|
@@ -46,7 +46,7 @@ require_relative "snapshot"
|
|
46
46
|
# 36 embU_R1ARROW under right arrow (1 barb)
|
47
47
|
# 37 embU_L1ARROW under left arrow (1 barb)
|
48
48
|
|
49
|
-
module
|
49
|
+
module Mathtype5
|
50
50
|
class RecordEmbell < BinData::Record
|
51
51
|
include Snapshot
|
52
52
|
EXPOSED_IN_SNAPSHOT = %i(options nudge embell)
|
@@ -92,7 +92,7 @@ module Mathtype
|
|
92
92
|
|
93
93
|
int8 :options
|
94
94
|
|
95
|
-
|
95
|
+
record_nudge :nudge, onlyif: lambda { options & OPTIONS["mtefOPT_NUDGE"] > 0 }
|
96
96
|
|
97
97
|
int8 :_embell
|
98
98
|
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# to have an index of 5. See Extending MathType's Font and Character Information
|
16
16
|
# and MathType's Character Encodings for more information on font encodings.
|
17
17
|
|
18
|
-
module
|
18
|
+
module Mathtype5
|
19
19
|
class RecordEncodingDef < BinData::Record
|
20
20
|
stringz :name
|
21
21
|
end
|
@@ -13,13 +13,12 @@
|
|
13
13
|
# If the array is longer than expected, the extra values must be skipped to stay
|
14
14
|
# in sync with the MTEF stream.
|
15
15
|
|
16
|
-
module
|
16
|
+
module Mathtype5
|
17
17
|
class Entry < BinData::Record
|
18
18
|
bit4 :unit
|
19
19
|
array :nibbles, read_until: lambda { element == 0xF } do
|
20
20
|
bit4
|
21
21
|
end
|
22
|
-
resume_byte_alignment
|
23
22
|
end
|
24
23
|
|
25
24
|
class RecordEqnPrefs < BinData::Record
|
@@ -40,5 +39,6 @@ module Mathtype
|
|
40
39
|
int8 :font_def
|
41
40
|
int8 :font_style, onlyif: lambda { font_def != 0x00 }
|
42
41
|
end
|
42
|
+
resume_byte_alignment
|
43
43
|
end
|
44
44
|
end
|
@@ -6,7 +6,7 @@
|
|
6
6
|
# might be handy if all records had such a length value, it will only be present
|
7
7
|
# on future expansion records (i.e. those with record types >= 100).
|
8
8
|
|
9
|
-
module
|
9
|
+
module Mathtype5
|
10
10
|
class RecordFuture < BinData::Record
|
11
11
|
uint8 :skip
|
12
12
|
skip length: :skip
|
@@ -9,15 +9,15 @@
|
|
9
9
|
# The line spacing value, if present, is the distance between the baseline of
|
10
10
|
# this line and the line above it.
|
11
11
|
|
12
|
-
module
|
12
|
+
module Mathtype5
|
13
13
|
class NamedRecord < BinData::Record; end
|
14
14
|
class RecordLine < BinData::Record
|
15
15
|
endian :little
|
16
16
|
int8 :options
|
17
17
|
|
18
|
-
|
18
|
+
record_nudge :nudge, onlyif: lambda { options & OPTIONS["mtefOPT_NUDGE"] > 0 }
|
19
19
|
|
20
|
-
|
20
|
+
mtef16 :line_spacing, onlyif: (lambda do
|
21
21
|
options & OPTIONS["mtefOPT_LINE_LSPACE"] > 0
|
22
22
|
end)
|
23
23
|
|
@@ -21,14 +21,14 @@ require_relative "snapshot"
|
|
21
21
|
# (0 for none, 1 for solid, 2 for dashed, or 3 for dotted). Similarly for the
|
22
22
|
# column partition lines.
|
23
23
|
|
24
|
-
module
|
24
|
+
module Mathtype5
|
25
25
|
class RecordMatrix < BinData::Record
|
26
26
|
include Snapshot
|
27
27
|
EXPOSED_IN_SNAPSHOT = %i(options nudge valign h_just v_just rows cols
|
28
28
|
row_parts col_parts object_list)
|
29
29
|
int8 :options
|
30
30
|
|
31
|
-
|
31
|
+
record_nudge :nudge, onlyif: lambda { options & OPTIONS["mtefOPT_NUDGE"] > 0 }
|
32
32
|
|
33
33
|
int8 :_valign
|
34
34
|
int8 :_h_just
|
@@ -36,10 +36,14 @@ module Mathtype
|
|
36
36
|
int8 :rows
|
37
37
|
int8 :cols
|
38
38
|
|
39
|
+
bit :_realign_rows, nbits: lambda { realign(rows) }
|
40
|
+
|
39
41
|
array :row_parts, initial_length: lambda { rows + 1 } do
|
40
42
|
bit nbits: 2
|
41
43
|
end
|
42
44
|
|
45
|
+
bit :_realign_cols, nbits: lambda { realign(cols) }
|
46
|
+
|
43
47
|
array :col_parts, initial_length: lambda { cols + 1 } do
|
44
48
|
bit nbits: 2
|
45
49
|
end
|
@@ -53,11 +57,15 @@ module Mathtype
|
|
53
57
|
end
|
54
58
|
|
55
59
|
def h_just
|
56
|
-
HALIGN[_h_just
|
60
|
+
HALIGN[_h_just]
|
57
61
|
end
|
58
62
|
|
59
63
|
def v_just
|
60
64
|
VALIGN[_v_just]
|
61
65
|
end
|
66
|
+
def realign (nparts)
|
67
|
+
offset = (((nparts + 1) * 2) % 8)
|
68
|
+
return offset == 0 ? 0 : (8 - offset)
|
69
|
+
end
|
62
70
|
end
|
63
71
|
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require_relative "line"
|
2
|
+
require_relative "embell"
|
3
|
+
require_relative "char"
|
4
|
+
require_relative "pile"
|
5
|
+
require_relative "tmpl"
|
6
|
+
require_relative "eqn_prefs"
|
7
|
+
require_relative "font_def"
|
8
|
+
require_relative "font_style_def"
|
9
|
+
require_relative "matrix"
|
10
|
+
require_relative "encoding_def"
|
11
|
+
require_relative "embell"
|
12
|
+
require_relative "size"
|
13
|
+
require_relative "color"
|
14
|
+
require_relative "color_def"
|
15
|
+
require_relative "future"
|
16
|
+
|
17
|
+
module Mathtype5
|
18
|
+
class RecordEnd < Mathtype::RecordEnd; end
|
19
|
+
class RecordNudge < Mathtype::RecordNudge; end
|
20
|
+
class RecordRuler < Mathtype::RecordRuler; end
|
21
|
+
class RecordNudge < Mathtype::RecordNudge; end
|
22
|
+
class RecordFull < Mathtype::RecordFull; end
|
23
|
+
class RecordSub < Mathtype::RecordSub; end
|
24
|
+
class RecordSub2 < Mathtype::RecordSub2; end
|
25
|
+
class RecordSym < Mathtype::RecordSym; end
|
26
|
+
class RecordSubsym < Mathtype::RecordSubsym; end
|
27
|
+
|
28
|
+
HALIGN = Mathtype::HALIGN
|
29
|
+
VALIGN = Mathtype::VALIGN
|
30
|
+
|
31
|
+
RECORD_NAMES = {
|
32
|
+
0 => "end",
|
33
|
+
1 => "slot",
|
34
|
+
2 => "char",
|
35
|
+
3 => "tmpl",
|
36
|
+
4 => "pile",
|
37
|
+
5 => "matrix",
|
38
|
+
6 => "embell",
|
39
|
+
7 => "ruler",
|
40
|
+
8 => "font_style_def",
|
41
|
+
9 => "size",
|
42
|
+
10 => "full",
|
43
|
+
11 => "sub",
|
44
|
+
12 => "sub2",
|
45
|
+
13 => "sym",
|
46
|
+
14 => "subsym",
|
47
|
+
15 => "color",
|
48
|
+
16 => "color_def",
|
49
|
+
17 => "font_def",
|
50
|
+
18 => "eqn_prefs",
|
51
|
+
19 => "encoding_def",
|
52
|
+
100 => "future"
|
53
|
+
}
|
54
|
+
|
55
|
+
OPTIONS = {
|
56
|
+
# value => symbol # description
|
57
|
+
# Option flag values for all equation structure records:
|
58
|
+
"mtefOPT_NUDGE" => 0x08, # nudge values follow tag
|
59
|
+
# Option flag values for CHAR records:
|
60
|
+
"mtefOPT_CHAR_EMBELL" => 0x01, # character is followed by an embellishment list
|
61
|
+
"mtefOPT_CHAR_FUNC_START" => 0x02, # character starts a function (sin, cos, etc.)
|
62
|
+
"mtefOPT_CHAR_ENC_CHAR_8" => 0x04, # character is written with an 8-bit encoded value
|
63
|
+
"mtefOPT_CHAR_ENC_CHAR_16" => 0x10, # character is written with an 16-bit encoded value
|
64
|
+
"mtefOPT_CHAR_ENC_NO_MTCODE" => 0x20, # character is written without an 16-bit MTCode value
|
65
|
+
# Option flag values for LINE records:
|
66
|
+
"mtefOPT_LINE_NULL" => 0x01, # line is a placeholder only (i.e. not displayed)
|
67
|
+
"mtefOPT_LINE_LSPACE" => 0x04, # line spacing value follows tag
|
68
|
+
# Option flag values for LINE and PILE records:
|
69
|
+
"mtefOPT_LP_RULER" => 0x02, # RULER record follows LINE or PILE record
|
70
|
+
# Option flag values for COLOR_DEF records:
|
71
|
+
"mtefCOLOR_CMYK" => 0x01, # color model is CMYK, else RGB
|
72
|
+
"mtefCOLOR_SPOT" => 0x02, # color is a spot color, else a process color
|
73
|
+
"mtefCOLOR_NAME" => 0x04, # color has a name, else no name
|
74
|
+
}
|
75
|
+
|
76
|
+
## Payload is the most important class to understand.
|
77
|
+
## This abstraction allows recursive formats.
|
78
|
+
## eg. lists can contain lists can contain lists.
|
79
|
+
|
80
|
+
class Payload < BinData::Choice
|
81
|
+
opt = {:_options => :options}
|
82
|
+
record_end 0 # end is a reserved keyword
|
83
|
+
record_line 1
|
84
|
+
record_char 2
|
85
|
+
record_tmpl 3
|
86
|
+
record_pile 4
|
87
|
+
record_matrix 5
|
88
|
+
record_embell 6
|
89
|
+
record_ruler 7
|
90
|
+
record_font_style_def 8
|
91
|
+
record_size 9
|
92
|
+
record_full 10
|
93
|
+
record_sub 11
|
94
|
+
record_sub2 12
|
95
|
+
record_sym 13
|
96
|
+
record_subsym 14
|
97
|
+
record_color 15
|
98
|
+
record_color_def 16
|
99
|
+
record_font_def 17
|
100
|
+
record_eqn_prefs 18
|
101
|
+
record_encoding_def 19
|
102
|
+
record_future 100
|
103
|
+
end
|
104
|
+
|
105
|
+
class NamedRecord < BinData::Record
|
106
|
+
int8 :record_type
|
107
|
+
payload :payload, :onlyif => :not_end_tag?, :selection => :record_type, :options => :record_options
|
108
|
+
|
109
|
+
def not_end_tag?
|
110
|
+
record_type != 0
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
class Equation < Mathtype::Equation
|
115
|
+
EXPOSED_IN_SNAPSHOT = %i(mtef_version platform product product_version
|
116
|
+
product_subversion application_key equation_options equation)
|
117
|
+
|
118
|
+
stringz :application_key
|
119
|
+
uint8 :_equation_options
|
120
|
+
|
121
|
+
def equation_options
|
122
|
+
_equation_options == 1 ? "inline" : "block"
|
123
|
+
end
|
124
|
+
|
125
|
+
array :equation, read_until: lambda { element.record_type == 0 } do
|
126
|
+
named_record
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -12,14 +12,14 @@ require_relative "snapshot"
|
|
12
12
|
# [[RULER record]] if mtefOPT_LP_RULER is set
|
13
13
|
# [object list] list of lines contained by the pile
|
14
14
|
|
15
|
-
module
|
15
|
+
module Mathtype5
|
16
16
|
class RecordPile < BinData::Record
|
17
17
|
include Snapshot
|
18
18
|
EXPOSED_IN_SNAPSHOT = %i(options halign valign object_list)
|
19
19
|
|
20
20
|
int8 :options
|
21
21
|
|
22
|
-
|
22
|
+
record_nudge :nudge, onlyif: lambda { options & OPTIONS["mtefOPT_NUDGE"] > 0 }
|
23
23
|
|
24
24
|
int8 :_halign
|
25
25
|
int8 :_valign
|
@@ -23,7 +23,7 @@ require_relative "snapshot"
|
|
23
23
|
# Simple typesizes, without a delta value, are written using the records
|
24
24
|
# described in the next section.
|
25
25
|
|
26
|
-
module
|
26
|
+
module Mathtype5
|
27
27
|
class RecordSize < BinData::Record
|
28
28
|
include Snapshot
|
29
29
|
EXPOSED_IN_SNAPSHOT = %i(lsize dsize point_size)
|
@@ -31,25 +31,27 @@ module Mathtype
|
|
31
31
|
endian :little
|
32
32
|
int8 :_size_select
|
33
33
|
|
34
|
-
|
34
|
+
mtef16 :_point_size, onlyif: lambda { _size_select == 101 }
|
35
35
|
uint8 :_lsize_large_delta, onlyif: lambda { _size_select == 100 }
|
36
36
|
|
37
37
|
uint8 :_dsize, onlyif: lambda { _size_select != 100 && _size_select != 101 }
|
38
|
-
|
38
|
+
mtef16 :_dsize_large, onlyif: lambda { _size_select == 100 }
|
39
39
|
|
40
40
|
def dsize
|
41
|
+
__dsize = nil
|
41
42
|
case _size_select
|
42
43
|
when 100
|
43
44
|
if _dsize_large > 255
|
44
|
-
|
45
|
+
__dsize = -(_dsize_large.getlow)
|
45
46
|
else
|
46
|
-
|
47
|
+
__dsize = _dsize_large
|
47
48
|
end
|
48
49
|
when 101
|
49
|
-
nil
|
50
|
+
__dsize = nil
|
50
51
|
else
|
51
|
-
(_dsize - 128)
|
52
|
+
__dsize = (_dsize - 128) # in 32nds of a point
|
52
53
|
end
|
54
|
+
__dsize / 32
|
53
55
|
end
|
54
56
|
|
55
57
|
def lsize
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "bindata"
|
2
|
+
|
3
|
+
module Mathtype5
|
4
|
+
module Snapshot
|
5
|
+
def snapshot
|
6
|
+
snapshot = BinData::Record::Snapshot.new
|
7
|
+
exposed = self.class.const_get(:EXPOSED_IN_SNAPSHOT)
|
8
|
+
exposed.each do |name|
|
9
|
+
obj = find_obj_for_name(name)
|
10
|
+
if obj
|
11
|
+
snapshot[name] = obj.snapshot if include_obj?(obj)
|
12
|
+
else
|
13
|
+
snapshot[name] = self.send(name)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
snapshot
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|