summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--i18npool/source/localedata/LocaleNode.cxx6
-rw-r--r--include/i18npool/reservedconstants.hxx21
-rw-r--r--svl/source/numbers/zforlist.cxx7
3 files changed, 31 insertions, 3 deletions
diff --git a/i18npool/source/localedata/LocaleNode.cxx b/i18npool/source/localedata/LocaleNode.cxx
index c79c2dae88bf..11a12bd3d6eb 100644
--- a/i18npool/source/localedata/LocaleNode.cxx
+++ b/i18npool/source/localedata/LocaleNode.cxx
@@ -28,6 +28,7 @@
#include <sal/macros.h>
#include "LocaleNode.hxx"
+#include <i18npool/reservedconstants.hxx>
#include <com/sun/star/i18n/NumberFormatIndex.hpp>
#include <com/sun/star/xml/sax/XAttributeList.hpp>
@@ -574,7 +575,6 @@ void LCFormatNode::generateCode (const OFileWriter &of) const
bool bCtypeIsRef = false;
bool bHaveEngineering = false;
bool bShowNextFreeFormatIndex = false;
- const sal_Int16 nFirstFreeFormatIndex = 60;
for (sal_Int32 i = 0; i< getNumberOfChildren() ; i++, formatCount++)
{
@@ -621,7 +621,7 @@ void LCFormatNode::generateCode (const OFileWriter &of) const
sal_Int16 formatindex = static_cast<sal_Int16>(aFormatIndex.toInt32());
// Ensure the new reserved range is not used anymore, free usage start
// was up'ed from 50 to 60.
- if (50 <= formatindex && formatindex < nFirstFreeFormatIndex)
+ if (50 <= formatindex && formatindex < i18npool::nFirstFreeFormatIndex)
{
incErrorInt( "Error: Reserved formatindex=\"%d\" in FormatElement.\n", formatindex);
bShowNextFreeFormatIndex = true;
@@ -828,7 +828,7 @@ void LCFormatNode::generateCode (const OFileWriter &of) const
if (bShowNextFreeFormatIndex)
{
- sal_Int16 nNext = nFirstFreeFormatIndex;
+ sal_Int16 nNext = i18npool::nFirstFreeFormatIndex;
std::set<sal_Int16>::const_iterator it( aFormatIndexSet.find( nNext));
if (it != aFormatIndexSet.end())
{
diff --git a/include/i18npool/reservedconstants.hxx b/include/i18npool/reservedconstants.hxx
new file mode 100644
index 000000000000..400344ce5a8d
--- /dev/null
+++ b/include/i18npool/reservedconstants.hxx
@@ -0,0 +1,21 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * 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/.
+ */
+
+#include <sal/types.h>
+
+/** Constant values shared between i18npool and, for example, the number formatter. */
+namespace i18npool
+{
+/** The number of reserved (with defined meaning) built-in format code indices,
+ additional locale data format codes can be defined starting at this index
+ value. */
+constexpr sal_Int16 nFirstFreeFormatIndex = 60;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 6d8a906a0038..5b7aadb8ebd5 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -45,6 +45,7 @@
#include "zforscan.hxx"
#include "zforfind.hxx"
#include <svl/zformat.hxx>
+#include <i18npool/reservedconstants.hxx>
#include <unotools/syslocaleoptions.hxx>
#include <unotools/digitgroupingiterator.hxx>
@@ -92,6 +93,12 @@ using namespace ::std;
static_assert( ZF_STANDARD_TEXT == NF_STANDARD_FORMAT_TEXT, "definition mismatch" );
+static_assert( NF_INDEX_TABLE_ENTRIES <= i18npool::nFirstFreeFormatIndex,
+ "NfIndexTableOffset crosses i18npool's locale data reserved format code index bounds.\n"
+ "You will need to adapt all locale data files defining index values "
+ "(formatIndex=\"...\") in that range and increment those and when done "
+ "adjust nFirstFreeFormatIndex in i18npool/reservedconstants.hxx");
+
/* Locale that is set if an unknown locale (from another system) is loaded of
* legacy documents. Can not be SYSTEM because else, for example, a German "DM"
* (old currency) is recognized as a date (#53155#). */