diff options
Diffstat (limited to 'sw/README')
-rw-r--r-- | sw/README | 211 |
1 files changed, 0 insertions, 211 deletions
diff --git a/sw/README b/sw/README deleted file mode 100644 index 54feb78fa7d1..000000000000 --- a/sw/README +++ /dev/null @@ -1,211 +0,0 @@ -Writer application code. - -Exact history was lost before Sept. 18th, 2000, but old source code -comments show that Writer core dates back until at least November -1990. - -== Module contents == - * inc: headers available to all source files inside the module - * qa: unit, slow and subsequent tests - * sdi - * source: see below - * uiconfig: user interface configuration - * util: UNO passive registration config - -== Source contents == - * core: Writer core (document model, layout, UNO API implementation) - * filter: Writer internal filters - * ascii: plain text filter - * basflt - * docx: wrapper for the UNO DOCX import filter (in writerfilter) for autotext purposes - * html: HTML filter - * inc: include files for filters - * rtf: thin copy&paste helper around the UNO RTF import filter (in writerfilter) - * writer - * ww8: DOC import, DOC/DOCX/RTF export - * xml: ODF import/export, subclassed from xmloff (where most of the work is done) - * uibase: user interface (those parts that are linked into sw & always loaded) - * ui: user interface (optional parts that are loaded on demand (swui)) - -== Core == - -There is a good overview documentation of basic architecture of Writer core -in the OOo wiki: - -http://wiki.openoffice.org/wiki/Writer/Core_And_Layout -http://wiki.openoffice.org/wiki/Writer/Text_Formatting - -Writer specific WhichIds are defined in sw/inc/hintids.hxx. - -The details below are mainly about details missing from the Wiki pages. - -=== SwDoc === - -The central class for a document is SwDoc, which represents a document. - -A lot of the functionality is split out into separate Manager classes, -each of which implements some IDocument* interface; there are -SwDoc::getIDocument*() methods to retrieve the managers. - -However there are still too many members and methods in this class, -many of which could be moved to some Manager or other... - -=== SwNodes === - -Basically a (fancy) array of SwNode pointers. There are special subclasses of -SwNode (SwStartNode and SwEndNode) which are used to encode a nested tree -structure into the flat array; the range of nodes from SwStartNode to its -corresponding SwEndNode is sometimes called a "section" (but is not necessarily -what the high-level document model calls a "Section"; that is just one of the -possibilities). - -The SwNodes contains the following top-level sections: - -1. Empty -2. Footnote content -3. Frame / Header / Footer content -4. Deleted Change Tracking content -5. Body content - -=== Undo === - -The Undo/Redo information is stored in a sw::UndoManager member of SwDoc, -which implements the IDocumentUndoRedo interface. -Its members include a SwNodes array containing the document content that -is currently not in the actual document but required for Undo/Redo, and -a stack of SwUndo actions, each of which represents one user-visible -Undo/Redo step. - -There are also ListActions which internally contain several individual SwUndo -actions; these are created by the StartUndo/EndUndo wrapper methods. - -=== Text Attributes === - -The sub-structure of paragraphs is stored in the SwpHintsArray member -SwTextNode::m_pSwpHints. There is a base class SwTextAttr with numerous -subclasses; the SwTextAttr has a start and end index and a SfxPoolItem -to store the actual formatting attribute. - -There are several sub-categories of SwTextAttr: - -- formatting attributes: Character Styles (SwTextCharFormat, RES_TXTATR_CHARFMT) - and Automatic Styles (no special class, RES_TXTATR_AUTOFMT): - these are handled by SwpHintsArray::BuildPortions and MergePortions, - which create non-overlapping portions of formatting attributes. - -- nesting attributes: Hyperlinks (SwTextINetFormat, RES_TXTATR_INETFMT), - Ruby (SwTextRuby, RES_TXTATR_CJK_RUBY) and Meta/MetaField (SwTextMeta, - RES_TXTATR_META/RES_TXTATR_METAFIELD): - these maintain a properly nested tree structure. - The Meta/Metafield are "special" because they have both start/end - and a dummy character at the start. - -- misc. attributes: Reference Marks, ToX Marks - -- attributes without end: Fields, Footnotes, Flys (AS_CHAR) - These all have a corresponding dummy character in the paragraph text, which - is a placeholder for the "expansion" of the attribute, e.g. field content. - -=== Fields === - -There are multiple model classes involved for fields: - -- enum SwFieldIds enumerates the different types of fields. -- SwFieldType contains some shared stuff for all fields of a type. - There are many subclasses of SwFieldType, one for each different type - of field. - For most types of fields there is one shared instance of this per type, - which is created in DocumentFieldsManager::InitFieldTypes() - but for some there are more than one, and they are dynamically created, see - DocumentFieldsManager::InsertFieldType(). An example for the latter are - variable fields (SwFieldIds::GetExp/SwFieldIds::SetExp), with one SwFieldType per - variable. -- SwXFieldMaster is the UNO wrapper of a field type. - It is a SwClient registered at the SwFieldType. - Its life-cycle is determined by UNO clients outside of sw; it will get - disposed when the SwFieldType dies. -- SwFormatField is the SfxPoolItem of a field. - The SwFormatField is a SwClient registered at its SwFieldType. - The SwFormatField owns the SwField of the field. -- SwField contains the core logic of a field. - The SwField is owned by the SwFormatField of the field. - There are many subclasses of SwField, one for each different type of field. - Note that there are not many places that can Expand the field to its - correct value, since for example page number fields require a View - with an up to date layout; therefore the correct expansion is cached. -- SwTextField is the text attribute of a field. - It owns the SwFormatField of the field (like all text attributes). -- SwXTextField is the UNO wrapper object of a field. - It is a SwClient registered at the SwFormatField. - Its life-cycle is determined by UNO clients outside of sw; it will get - disposed when the SwFormatField dies. - -=== Lists === - -- SwNumFormat (subclass of SvxNumFormat) determines the formatting of a single - numbering level. - -- SwNumRule (NOT a subclass of SvxNumRule) is a *list style*, containing one - SwNumFormat per list level. - SwNumRule::maTextNodeList is the list of SwTextNode that have this list style - applied. - -- SwNumberTreeNode is a base class that represents an abstract node in a - hierarchical tree of numbered nodes. - -- SwNodeNum is the subclass of SwNumberTreeNode that connects it with an - actual SwTextNode and also with a SwNumRule; - SwTextNode::mpNodeNum points back in the other direction - -- SwList represents a list, which is (mostly) a vector of SwNodeNum trees, - one per SwNodes top-level section (why that?). - -- IDocumentListsAccess, sw::DocumentListsManager owns all SwList instances, - and maintains mappings: - + from list-id to SwList - + from list style name to SwList (the "default" SwList for that list style) - -- IDocumentListItems, sw::DocumentListItemsManager contains a set of all - SwNodeNum instances, ordered by SwNode index - -- the special Outline numbering rule: SwDoc::mpOutlineRule - -- IDocumentOutlineNodes, sw::DocumentOutlineNodesManager maintain - a list (which is actually stored in SwNodes::m_pOutlineNodes) of SwTextNodes - that either have the Outline numrule applied, - or have the RES_PARATR_OUTLINELEVEL item set (note that in the latter case, - the SwTextNode does not have a SwNodeNum and is not associated with the - SwDoc::mpOutlineRule). - -- SwTextNodes and paragraph styles have items/properties: - + RES_PARATR_OUTLINELEVEL/"OutlineLevel" to specify an outline level without - necessarily having the outline SwNumRule assigned - + RES_PARATR_NUMRULE/"NumberingStyleName" the list style to apply; may be - empty "" which means no list style (to override inherited value) - Only SwTextNode has these items: - + RES_PARATR_LIST_ID/"ListId" - determines the SwList to which the node is added - + RES_PARATR_LIST_LEVEL/"NumberingLevel" - the level at which the SwTextNode will appear in the list - + RES_PARATR_LIST_ISRESTART/"ParaIsNumberingRestart" - restart numbering sequence at this SwTextNode - + RES_PARATR_LIST_RESTARTVALUE/"NumberingStartValue" - restart numbering sequence at this SwTextNode with this value - + RES_PARATR_LIST_ISCOUNTED/"NumberingIsNumber" - determines if the node is actually counted in the numbering sequence; - these are different from "phantoms" because there's still a SwTextNode. - -Note that there is no UNO service to represent a list. - -=== Layout === - -The layout is a tree of SwFrame subclasses, the following relationships are -possible between frames: - -- You can visit the tree by following the upper, lower, next and previous pointers. -- The functionality of flowing of a frame across multiple parents (e.g. pages) - is implemented in SwFlowFrame, which is not an SwFrame subclass. The logical - chain of such frames can be visited using the follow and precede pointers. - ("Leaf" is a term that refers to such a relationship.) -- In case a frame is split into multiple parts, then the first one is called - master, while the others are called follows. |