office-gobmx/sw/inc/IDocumentSettingAccess.hxx
Miklos Vajna 4814e8caa5 tdf#124601 sw: add ContinuousEndnotes layout compat option
Writer has two cases for laying out endnotes: either they are at the end
of the section or are on a separate endnote page at the end of the
document.

Word always puts endnotes as continuous content at the end of the
document, not on a separate page.

Given that this continuous / separate page behavior difference seems to
be not part of the ODF or OOXML file format and neither UI allows to
configure this, the best way to resolve this looks like a new layout
compat option.

At a layout level, the "endnotes at the end of the section" code is
close to what we need, we just need to make sure that:

1) Endnotes are never moved backwards, even if their reference moves
back.

2) When appending an endnote, they should go to the footnote container
on the last page, not close to their reference.

With this, the page number in Word and Writer now match for the bugdoc.

Change-Id: I6fd0ee191e001d7c3a6df46d5e9fe8d7eb0327dc
Reviewed-on: https://gerrit.libreoffice.org/79857
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
2019-09-30 21:49:33 +02:00

247 lines
7.4 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SW_INC_IDOCUMENTSETTINGACCESS_HXX
#define INCLUDED_SW_INC_IDOCUMENTSETTINGACCESS_HXX
#include <sal/types.h>
#include "fldupde.hxx"
#include <i18nlangtag/lang.h>
#include <memory>
class SvxForbiddenCharactersTable;
namespace com { namespace sun { namespace star { namespace i18n { struct ForbiddenCharacters; } } } }
enum class CharCompressType;
enum class DocumentSettingId
{
// COMPATIBILITY FLAGS START
PARA_SPACE_MAX,
PARA_SPACE_MAX_AT_PAGES,
TAB_COMPAT,
ADD_FLY_OFFSETS,
ADD_VERTICAL_FLY_OFFSETS,
OLD_NUMBERING,
ADD_EXT_LEADING,
USE_VIRTUAL_DEVICE,
USE_HIRES_VIRTUAL_DEVICE,
OLD_LINE_SPACING,
ADD_PARA_SPACING_TO_TABLE_CELLS,
USE_FORMER_OBJECT_POS,
USE_FORMER_TEXT_WRAPPING,
CONSIDER_WRAP_ON_OBJECT_POSITION,
IGNORE_FIRST_LINE_INDENT_IN_NUMBERING,
DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK,
TREAT_SINGLE_COLUMN_BREAK_AS_PAGE_BREAK,
DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT,
DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE,
TABLE_ROW_KEEP,
IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION,
CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAME,
// tdf#104349 tdf#104668
MS_WORD_COMP_TRAILING_BLANKS,
UNIX_FORCE_ZERO_EXT_LEADING,
TABS_RELATIVE_TO_INDENT,
PROTECT_FORM,
// #i89181#
TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST,
INVERT_BORDER_SPACING,
COLLAPSE_EMPTY_CELL_PARA,
SMALL_CAPS_PERCENTAGE_66,
TAB_OVERFLOW,
UNBREAKABLE_NUMBERINGS,
CLIPPED_PICTURES,
BACKGROUND_PARA_OVER_DRAWINGS,
TAB_OVER_MARGIN,
// MS Word still wraps text around objects with less space than LO would.
SURROUND_TEXT_WRAP_SMALL,
PROP_LINE_SPACING_SHRINKS_FIRST_LINE,
SUBTRACT_FLYS,
// tdf#112443 disable off-page content positioning
DISABLE_OFF_PAGE_POSITIONING,
EMPTY_DB_FIELD_HIDES_PARA,
// COMPATIBILITY FLAGS END
BROWSE_MODE,
HTML_MODE,
GLOBAL_DOCUMENT,
GLOBAL_DOCUMENT_SAVE_LINKS,
LABEL_DOCUMENT,
PURGE_OLE,
KERN_ASIAN_PUNCTUATION,
MATH_BASELINE_ALIGNMENT,
STYLES_NODEFAULT,
FLOATTABLE_NOMARGINS,
EMBED_FONTS,
EMBED_USED_FONTS,
EMBED_LATIN_SCRIPT_FONTS,
EMBED_ASIAN_SCRIPT_FONTS,
EMBED_COMPLEX_SCRIPT_FONTS,
EMBED_SYSTEM_FONTS,
APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING,
CONTINUOUS_ENDNOTES,
};
/** Provides access to settings of a document
*/
class IDocumentSettingAccess
{
public:
/** Return the specified document setting.
@param id
[in] the identifier of the document setting to be returned.
See above for a list of valid document setting identifiers.
@returns
the value of the requested document setting.
*/
virtual bool get(/*[in]*/ DocumentSettingId id) const = 0;
/** Set the specified document setting.
@param id
[in] the identifier of the document setting to be set.
See above for a list of valid document setting identifiers.
@param value
[in] the new value of the specified document setting.
*/
virtual void set(/*[in]*/ DocumentSettingId id, /*[in]*/ bool value) = 0;
/** Return the forbidden characters.
@param nLang
[in] the language for which the forbidden character list is returned.
@param bLocaleData
[in] if set and there is no user defined forbidden character list for
language lang, the default list for language lang will be returned.
@returns
a list of forbidden characters.
*/
virtual const css::i18n::ForbiddenCharacters*
getForbiddenCharacters(/*[in]*/ LanguageType nLang, /*[in]*/ bool bLocaleData ) const = 0;
/** Set the forbidden characters.
@param nLang
[in] the language for which the forbidden character list should be set.
@param rForbiddenCharacters
[in] the new list of forbidden characters for language lang.
*/
virtual void setForbiddenCharacters(/*[in]*/ LanguageType nLang,
/*[in]*/ const css::i18n::ForbiddenCharacters& rForbiddenCharacters ) = 0;
/** Get the forbidden character table and creates one if necessary.
@returns
the forbidden characters table.
*/
virtual std::shared_ptr<SvxForbiddenCharactersTable>& getForbiddenCharacterTable() = 0;
/** Get the forbidden character table.
@returns
the forbidden characters table.
*/
virtual const std::shared_ptr<SvxForbiddenCharactersTable>& getForbiddenCharacterTable() const = 0;
/** Get the current link update mode.
@param bGlobalSettings
[in] if set, the link update mode is obtained from the module,
if it is set to GLOBALSETTING
@returns
the current link update mode.
*/
virtual sal_uInt16 getLinkUpdateMode( /*[in]*/bool bGlobalSettings ) const = 0;
/** Set the current link update mode.
@param nMode
[in] the new link update mode.
*/
virtual void setLinkUpdateMode( /*[in]*/ sal_uInt16 nMode ) = 0;
/** Get the current field update mode.
@param bGlobalSettings
[in] if set, the field update mode is obtained from the module,
if it is set to GLOBALSETTING
@returns
the current field update mode.
*/
virtual SwFieldUpdateFlags getFieldUpdateFlags( /*[in]*/bool bGlobalSettings ) const = 0;
/** Set the current field update mode.
@param nMode
[in] the new field update mode.
*/
virtual void setFieldUpdateFlags( /*[in]*/ SwFieldUpdateFlags nMode ) = 0;
/** Get the character compression type for Asian characters.
@returns
the current character compression mode.
*/
virtual CharCompressType getCharacterCompressionType() const = 0;
/** Set the character compression type for Asian characters.
@param nMode
[in] the new character compression type.
*/
virtual void setCharacterCompressionType( /*[in]*/CharCompressType nType ) = 0;
/** Get the n32DummyCompatabilityOptions1
*/
virtual sal_uInt32 Getn32DummyCompatibilityOptions1() const = 0;
/** Set the n32DummyCompatabilityOptions1
*/
virtual void Setn32DummyCompatibilityOptions1( const sal_uInt32 CompatibilityOptions1 ) = 0;
/** Get the n32DummyCompatabilityOptions2
*/
virtual sal_uInt32 Getn32DummyCompatibilityOptions2() const = 0;
/** Set the n32DummyCompatabilityOptions2
*/
virtual void Setn32DummyCompatibilityOptions2( const sal_uInt32 CompatibilityOptions2 ) = 0;
protected:
virtual ~IDocumentSettingAccess() {};
};
#endif // INCLUDED_SW_INC_IDOCUMENTSETTINGACCESS_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */