Lines 26-32
Link Here
|
26 |
<p> |
26 |
<p> |
27 |
Any numbers or strings stored in the records are always stored in |
27 |
Any numbers or strings stored in the records are always stored in |
28 |
Little Endian format (least important bytes first). This is the case |
28 |
Little Endian format (least important bytes first). This is the case |
29 |
no matter what platform the file was written on - be that a |
29 |
no matter what platform the file was written on - be that a |
30 |
Little Endian or a Big Endian system. |
30 |
Little Endian or a Big Endian system. |
31 |
</p> |
31 |
</p> |
32 |
<p> |
32 |
<p> |
Lines 36-42
Link Here
|
36 |
records. |
36 |
records. |
37 |
</p> |
37 |
</p> |
38 |
</section> |
38 |
</section> |
39 |
|
39 |
|
40 |
<section><title>Record Headers</title> |
40 |
<section><title>Record Headers</title> |
41 |
<p> |
41 |
<p> |
42 |
All records, be they containers or atoms, have the same standard |
42 |
All records, be they containers or atoms, have the same standard |
Lines 88-94
Link Here
|
88 |
</p> |
88 |
</p> |
89 |
<p> |
89 |
<p> |
90 |
The UserEditAtom contains two byte level offsets (again as 32 bit |
90 |
The UserEditAtom contains two byte level offsets (again as 32 bit |
91 |
little endian numbers). At byte 12 is the offset to the |
91 |
little endian numbers). At byte 12 is the offset to the |
92 |
PersistPtrIncrementalBlock associated with this UserEditAtom |
92 |
PersistPtrIncrementalBlock associated with this UserEditAtom |
93 |
(each UserEditAtom has one and only one PersistPtrIncrementalBlock). |
93 |
(each UserEditAtom has one and only one PersistPtrIncrementalBlock). |
94 |
At byte 8, there's the offset to the previous UserEditAtom. If this |
94 |
At byte 8, there's the offset to the previous UserEditAtom. If this |
Lines 96-102
Link Here
|
96 |
</p> |
96 |
</p> |
97 |
<p> |
97 |
<p> |
98 |
Every time you do a non full save in PowerPoint, it tacks on another |
98 |
Every time you do a non full save in PowerPoint, it tacks on another |
99 |
UserEditAtom and another PersistPtrIncrementalBlock. The |
99 |
UserEditAtom and another PersistPtrIncrementalBlock. The |
100 |
CurrentUserAtom is updated to point to this new UserEditAtom, and the |
100 |
CurrentUserAtom is updated to point to this new UserEditAtom, and the |
101 |
new UserEditAtom points back to the previous UserEditAtom. You then |
101 |
new UserEditAtom points back to the previous UserEditAtom. You then |
102 |
end up with a chain, starting from the CurrentUserAtom, linking |
102 |
end up with a chain, starting from the CurrentUserAtom, linking |
Lines 139-145
Link Here
|
139 |
The PersistPtrIncrementalBlock contains byte offsets to all the |
139 |
The PersistPtrIncrementalBlock contains byte offsets to all the |
140 |
Slides, Notes, Documents and MasterSlides in the file. The first |
140 |
Slides, Notes, Documents and MasterSlides in the file. The first |
141 |
PersistPtrIncrementalBlock will point to all the ones that |
141 |
PersistPtrIncrementalBlock will point to all the ones that |
142 |
were present the first time the file was saved. Subsequent |
142 |
were present the first time the file was saved. Subsequent |
143 |
PersistPtrIncrementalBlocks will contain pointers to all the ones |
143 |
PersistPtrIncrementalBlocks will contain pointers to all the ones |
144 |
that were changed in that edit. To find the offset to a given |
144 |
that were changed in that edit. To find the offset to a given |
145 |
sheet in the latest version, then start with the most recent |
145 |
sheet in the latest version, then start with the most recent |
Lines 155-161
Link Here
|
155 |
into memory, the lower 20 bits contain the starting number for the |
155 |
into memory, the lower 20 bits contain the starting number for the |
156 |
sequence of sheets to be described. The higher 12 bits contain |
156 |
sequence of sheets to be described. The higher 12 bits contain |
157 |
the count of the number of sheets described. Following that is |
157 |
the count of the number of sheets described. Following that is |
158 |
one 32 bit little endian integer for each sheet in the sequence, |
158 |
one 32 bit little endian integer for each sheet in the sequence, |
159 |
the value being the offset to that sheet. If there is any data |
159 |
the value being the offset to that sheet. If there is any data |
160 |
left after parsing a block, then it corresponds to the next block. |
160 |
left after parsing a block, then it corresponds to the next block. |
161 |
</p> |
161 |
</p> |
Lines 178-183
Link Here
|
178 |
</source> |
178 |
</source> |
179 |
</section> |
179 |
</section> |
180 |
|
180 |
|
|
|
181 |
<section> |
182 |
<title>Fonts in PowerPoint</title> |
183 |
PowerPoint stores information about used fonts in FontEntityAtoms wich live inside Document.Environment.FontCollection. |
184 |
For every font used, a FontEntityAtom must exist for that font. There is always at least one FontEntityAtom |
185 |
in Document.Environment.FontCollection which describes the default font. |
186 |
|
187 |
<title>FontEntityAtom</title> |
188 |
<p>The instance field of the record header contains the zero based index of the font. |
189 |
It is used to refer to the font in StyleTextPropAtoms. |
190 |
The length of FontEntityAtom is always 68 bytes. |
191 |
</p> |
192 |
|
193 |
<p>Record Structure</p> |
194 |
<table> |
195 |
<tr> |
196 |
<td>Offset</td> |
197 |
<td>Type</td> |
198 |
<td>Name</td> |
199 |
<td>Contents</td> |
200 |
</tr> |
201 |
|
202 |
<tr> |
203 |
<td>0</td> |
204 |
<td>String</td> |
205 |
<td>font name</td> |
206 |
<td> A null-terminated string that specifies the typeface name of the font in UTF-16LE encoding. |
207 |
The length of this string must not exceed 32 characters, including the null terminator. |
208 |
</td> |
209 |
</tr> |
210 |
|
211 |
<tr> |
212 |
<td>64</td> |
213 |
<td>byte</td> |
214 |
<td>output precision</td> |
215 |
<td> The bitmask which specifies the output precision. It defines how closely |
216 |
the output must match the requested font's height, width, character orientation, |
217 |
escapement, pitch, and font type. For more information, consult the Windows API (LOGFONT) structure. |
218 |
</td> |
219 |
</tr> |
220 |
|
221 |
<tr> |
222 |
<td>65</td> |
223 |
<td>byte</td> |
224 |
<td>clipping precision</td> |
225 |
<td> The bitmask which specifies the clipping precision. The clipping precision defines how to |
226 |
clip characters that are partially outside the clipping region. |
227 |
For more information, consult the Windows API (LOGFONT) structure. |
228 |
</td> |
229 |
</tr> |
230 |
|
231 |
<tr> |
232 |
<td>66</td> |
233 |
<td>byte</td> |
234 |
<td>output quality</td> |
235 |
<td> The bitmask which specifies the output quality. The output quality defines how carefully |
236 |
the graphics device interface (GDI) must attempt to match the logical-font attributes to those of an actual physical font. |
237 |
For more information, consult the Windows API (LOGFONT) structure. |
238 |
</td> |
239 |
</tr> |
240 |
|
241 |
<tr> |
242 |
<td>67</td> |
243 |
<td>byte</td> |
244 |
<td>pitch and family</td> |
245 |
<td>The bitmask which specifies the pitch and family of the font. |
246 |
For more information, consult the Windows API (LOGFONT) structure. |
247 |
</td> |
248 |
</tr> |
249 |
</table> |
250 |
</section> |
251 |
|
181 |
<section><title>Paragraph and Text Styling</title> |
252 |
<section><title>Paragraph and Text Styling</title> |
182 |
<p> |
253 |
<p> |
183 |
There are quite a number of records that affect the styling |
254 |
There are quite a number of records that affect the styling |
Lines 196-204
Link Here
|
196 |
</p> |
267 |
</p> |
197 |
<p> |
268 |
<p> |
198 |
Normally, powerpoint will have one text record (TextBytesAtom |
269 |
Normally, powerpoint will have one text record (TextBytesAtom |
199 |
or TextCharsAtom) for every paragraph, with a preceeding |
270 |
or TextCharsAtom) for every paragraph, with a preceeding |
200 |
TextHeaderAtom to describe what sort of paragraph it is. |
271 |
TextHeaderAtom to describe what sort of paragraph it is. |
201 |
If any of the stylings differ from the master's, then a |
272 |
If any of the stylings differ from the master's, then a |
202 |
StyleTextPropAtom will follow the text record. This contains |
273 |
StyleTextPropAtom will follow the text record. This contains |
203 |
the paragraph style information, and the styling information |
274 |
the paragraph style information, and the styling information |
204 |
for each section of the text which has a different style. |
275 |
for each section of the text which has a different style. |
Lines 206-212
Link Here
|
206 |
</p> |
277 |
</p> |
207 |
<p> |
278 |
<p> |
208 |
For every font used, a FontEntityAtom must exist for that font. |
279 |
For every font used, a FontEntityAtom must exist for that font. |
209 |
The FontEntityAtoms live inside a FontCollection record, and |
280 |
The FontEntityAtoms live inside a FontCollection record, and |
210 |
there's one of those inside Environment record inside the |
281 |
there's one of those inside Environment record inside the |
211 |
Document record. <em>(More on Fonts to be discovered)</em> |
282 |
Document record. <em>(More on Fonts to be discovered)</em> |
212 |
</p> |
283 |
</p> |
Lines 273-276
Link Here
|
273 |
</source> |
344 |
</source> |
274 |
</section> |
345 |
</section> |
275 |
</body> |
346 |
</body> |
276 |
</document> |
347 |
</document> |