office-gobmx/sw
Thomas Arnhold 9aede3befb fdo#80534 bad default value (0) for the number of rows
Change-Id: I39604cf13d1e5714f701dd663ab37a8aed924fa2
2014-08-23 06:14:41 +02:00
..
inc Simplify autocorrect loading - removing redundant parameter. 2014-08-22 16:22:12 +01:00
qa CppunitTest_sw_ooxmlfieldexport: enable on Windows 2014-08-22 18:07:54 +02:00
sdi fdo#80651 - Add 'Single Page' button to Page Preview Toolbar 2014-07-21 08:29:34 +00:00
source fdo#80534 bad default value (0) for the number of rows 2014-08-23 06:14:41 +02:00
uiconfig Related: fdo#45588 Use of different items for Formatting Marks 2014-08-16 23:02:26 +02:00
util
AllLangResTarget_sw.mk move strings to global file 2014-08-18 03:57:30 +02:00
CppunitTest_sw_filters_test.mk
CppunitTest_sw_htmlexport.mk
CppunitTest_sw_layout_test.mk
CppunitTest_sw_macros_test.mk
CppunitTest_sw_odfexport.mk
CppunitTest_sw_odfimport.mk
CppunitTest_sw_ooxmlexport.mk try to fix windows build 2014-08-19 18:30:11 +02:00
CppunitTest_sw_ooxmlexport2.mk fix last commit 2014-08-19 18:35:35 +02:00
CppunitTest_sw_ooxmlexport3.mk fix last commit 2014-08-19 18:35:35 +02:00
CppunitTest_sw_ooxmlexport4.mk fix last commit 2014-08-19 18:35:35 +02:00
CppunitTest_sw_ooxmlexport5.mk fix last commit 2014-08-19 18:35:35 +02:00
CppunitTest_sw_ooxmlfieldexport.mk fix deps for sw_ooxmlfieldexport test 2014-08-02 19:16:36 +02:00
CppunitTest_sw_ooxmlimport.mk fdo#76803: Unit test so that this never regresses. 2014-07-15 09:16:08 +02:00
CppunitTest_sw_ooxmlsdrexport.mk fix deps for sw_ooxmlsdrexport test 2014-08-02 19:16:36 +02:00
CppunitTest_sw_ooxmlw14export.mk
CppunitTest_sw_rtfexport.mk
CppunitTest_sw_rtfimport.mk
CppunitTest_sw_uiwriter.mk try to fix linker error on Windows caused by last commit 2014-06-24 17:17:40 +02:00
CppunitTest_sw_uwriter.mk sw: _one_ unit test with use_library_objects sw ought to be enough 2014-08-21 21:49:42 +02:00
CppunitTest_sw_ww8export.mk
CppunitTest_sw_ww8import.mk
Executable_tiledrendering.mk
JunitTest_sw_complex.mk
JunitTest_sw_unoapi.mk
Library_msword.mk
Library_sw.mk Refactored IDocumentExternalData out of SwDoc. 2014-08-12 23:26:39 +02:00
Library_swd.mk
Library_swui.mk new loplugin: externalandnotdefined 2014-07-11 14:12:25 +02:00
Library_vbaswobj.mk
Makefile
Module_sw.mk sw: _one_ unit test with use_library_objects sw ought to be enough 2014-08-21 21:49:42 +02:00
ooxmlexport_setup.mk split CppunitTest_sw_ooxmlexport into several tests 2014-08-19 17:25:00 +02:00
PythonTest_sw_python.mk
README sw/README: document refactor-god-objects progress 2014-08-20 16:40:08 +02:00
UIConfig_qa.mk
UIConfig_sglobal.mk
UIConfig_sweb.mk
UIConfig_swform.mk
UIConfig_swreport.mk
UIConfig_swriter.mk DLG_MAILMERGE conversion to .ui 2014-08-06 14:57:42 +00:00
UIConfig_swxform.mk

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: plan text filter
   * basflt
   * html: HTML filter
   * inc: include files for filters
   * rtf: thin copy&paste helper around the UNO RTF import filter (in writerfilter)
   * writer
   * ww1
   * 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
SwTxtNode::m_pSwpHints.  There is a base class SwTxtAttr with numerous
subclasses; the SwTxtAttr has a start and end index and a SfxPoolItem
to store the actual formatting attribute.

There are several sub-categories of SwTxtAttr:

- formatting attributes: Character Styles (SwTxtCharFmt, 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 (SwTxtINetFmt, RES_TXTATR_INETFMT),
  Ruby (SwTxtRuby, RES_TXTATR_CJK_RUBY) and Meta/MetaField (SwTxtMeta,
  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 RES_FIELDS 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::InsertFldType().  An example for the latter are
  variable fields (RES_GETEXPFLD/RES_SETEXPFLD), with one SwFldType 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.
- SwFmtFld is the SfxPoolItem of a field.
  The SwFmtFld is a SwClient registered at its SwFldType.
  The SwFmtFld owns the SwField of the field.
- SwField contains the core logic of a field.
  The SwField is owned by the SwFmtFld 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.
- SwTxtFld is the text attribute of a field.
  It owns the SwFmtFld of the field (like all text attributes).
- SwXTextField is the UNO wrapper object of a field.
  It is a SwClient registered at the SwFmtFld.
  Its life-cycle is determined by UNO clients outside of sw; it will get
  disposed when the SwFmtFld dies.