office-gobmx/include/vcl/font/FeatureParser.hxx
Khaled Hosny 783f166793 tdf#127423: Allow disabling default features in Font Features dialog
In OpenType fonts we have no way if detecting what features are on by
default and what not (short of hard-coding this, since HarfBuzz has no
API of giving us this information, and it is also not a fixed set
per-font, depends also on the text being shaped).

The dialog currently does not differentiate between a disabled feature
and unset feature. To make this distinction, feature value is now signed
and negative value means the feature is unset (i.e. the default is
used), and the checkbox is now a try state one to reflect this.

Change-Id: Iba5d13f02610e7b761677acc19872788c72afde1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138729
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2022-08-23 16:59:56 +02:00

48 lines
1.3 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/.
*/
#ifndef INCLUDED_VCL_FONT_FEATUREPASER_HXX
#define INCLUDED_VCL_FONT_FEATUREPASER_HXX
#include <vcl/dllapi.h>
#include <rtl/ustring.hxx>
#include <vector>
#include <unordered_map>
#include <vcl/font/Feature.hxx>
namespace vcl::font
{
// These must not conflict with font name lists which use ; and ,
constexpr const char FeaturePrefix = ':';
constexpr const char FeatureSeparator = '&';
VCL_DLLPUBLIC OUString trimFontNameFeatures(OUString const& rFontName);
class VCL_DLLPUBLIC FeatureParser
{
private:
OUString m_sLanguage;
std::vector<FeatureSetting> m_aFeatures;
public:
FeatureParser(std::u16string_view sFontName);
OUString const& getLanguage() const { return m_sLanguage; }
std::vector<FeatureSetting> const& getFeatures() const { return m_aFeatures; }
std::unordered_map<uint32_t, int32_t> getFeaturesMap() const;
};
} // namespace vcl::font
#endif // INCLUDED_VCL_FONT_FEATUREPASER_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */