LFO records and the pllfo

The LFO structure serves primarily as a level of indirection between the paragraph and the LST, but also can be used to override certain features of the list formats (LFO stands for List Format Override). An LFO consists of two main parts: (1) the List ID of the list (LST record) to which this LFO belongs, and an array of overrides to the formatting in that LST. For the vast majority of LFOs, there are no overrides, but if there are any, they reside in an array of LFOLVL structures—one LFOLVL per level of the LST to be overridden. An LFOLVL contains a set of flags to indicate whether just the start-at value of the LST is overridden, or whether just the formatting is overrridden, or both, as well as either a start-at value or a pointer to a LVL record, depending upon the values of the flags. Note that if the LFOLVL says the start-at value should be overridden, what that means is that the FIRST paragraph in the document with this LFO should have a number equal exactly to that start-at value, but any subsequent paragraphs should just follow the previous paragraph in the sequence. Also, if LFOLVL.fFormatting and LFOLVL.fStartAt are both true (rare) then LFOLVL.iStartAt should be ignored in favor of the iStartAt value from the corresponding LVL.

Word writes out the pllfo first by writing out a PL of LFO structures. It then enumerates through each LFO to figure out how many LFOLVLs each one has (LFO.clfolvl), and writes out, in order, each LFOLVL structure followed by its corresponding LVL structure (if LFOLVL.fFormatting is set).