Files
loongoffice/sw/inc/IDocumentSettingAccess.hxx
Justin Luth a2d8a737f4 tdf#142404 DOCX c15: add compat flag TabOverSpacing
DOCX in 2013 (compatibilityMode 15) no longer supports
TabOverMargin (i.e. the text margin),
but it does a similar kind of thing if the tab goes
into the spacing-after of a paragraph.
So add a compat flag to handle this in-between
kind of situation.

I grepped -i "tab_*over_*margin" to see if I was missing
anything. Decimal/Center proved to be only tabOverMargin.
IsInSect shouldn't matter since it fits inside the printing range.
The other places where I didn't insert TabOverSpacing
didn't seem relevant based on a code read.

Tab-after-tab still doesn't work great, but what we have is
already a massive house of cards that will just collapse if changed.
No real provision for handling tabs-over-paragraph-end.
-auto-tabs are created instead of "beyond nMyRight" tab,
 unless it is the first tab defined.
-doesn't allow auto-tabs to fill the remaining space.

But on the other hand, MS Word's implementation of tabs
follows some kind of incomprehensible bizarre logic,
so just ignore the tabs completely, please.

Change-Id: I3723107b29ec3e287ea8661544711c13eee3ca48
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116667
Tested-by: Jenkins
Reviewed-by: Justin Luth <justin_luth@sil.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2021-06-08 15:23:29 +02:00

262 lines
7.7 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::sun::star::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,
ADD_PARA_LINE_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,
// tdf#128197 MS Word in some modes can have line height based on shape height, not on font
MS_WORD_COMP_MIN_LINE_HEIGHT_BY_FLY,
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,
TAB_OVER_SPACING,
// 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,
PROTECT_BOOKMARKS,
PROTECT_FIELDS,
HEADER_SPACING_BELOW_LAST_PARA,
FRAME_AUTOWIDTH_WITH_MORE_PARA,
GUTTER_AT_TOP,
};
/** 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 n32DummyCompatibilityOptions1
*/
virtual sal_uInt32 Getn32DummyCompatibilityOptions1() const = 0;
/** Set the n32DummyCompatibilityOptions1
*/
virtual void Setn32DummyCompatibilityOptions1(const sal_uInt32 CompatibilityOptions1) = 0;
/** Get the n32DummyCompatibilityOptions2
*/
virtual sal_uInt32 Getn32DummyCompatibilityOptions2() const = 0;
/** Set the n32DummyCompatibilityOptions2
*/
virtual void Setn32DummyCompatibilityOptions2(const sal_uInt32 CompatibilityOptions2) = 0;
protected:
virtual ~IDocumentSettingAccess(){};
};
#endif // INCLUDED_SW_INC_IDOCUMENTSETTINGACCESS_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */