The `DiffAlgorithm` and `MergeAlgorithm` are used to provide the merge capabilities of this project.

Merge is useful when an `OfficeDocument` is converted to a "Device" `Document` format, and the "Device" `Document` version is modified. Those changes can be merged back into the original `OfficeDocument` with the merger. The merger is capable of doing this even if the "Device" format is lossy in comparison to the `OfficeDocument` format.

The `DiffAlgorithm` generates a list of `Difference` objects that represent the differences between two `OfficeDocument` objects. It is assumed that one is the original `OfficeDocument` object and the other is a "lossy" version of the same `Document` with edits to be merged. Typically the "lossy" version is created by converting a "Device" `Document` back into an `OfficeDocument`.

The `MergeAlgorithm` takes the `Difference` objects as input, and creates a merged `OfficeDocument`. A merged `OfficeDocument` has the following features:

- Tags in the `OfficeDocument` that are not supported in the device format are not altered or removed.
- Changes made to the device format are merged back into the `OfficeDocument` in the location determined by the `DiffAlgorithm`.

Each converter provides an implementation of the {@link org.openoffice.xmerge.ConverterCapabilities ConverterCapabilities} which specifies which `OfficeDocument` tags are supported for the device format.