basic/qa/basic_coverage/test_declare_from_dll.bas |   36 ++++++++++
 basic/source/runtime/dllmgr-x64.cxx               |   56 ++-------------
 i18npool/source/localedata/data/an_ES.xml         |    4 -
 i18npool/source/localedata/data/es_AR.xml         |    4 -
 i18npool/source/localedata/data/es_BO.xml         |    4 -
 i18npool/source/localedata/data/es_CL.xml         |    4 -
 i18npool/source/localedata/data/es_CO.xml         |    4 -
 i18npool/source/localedata/data/es_CR.xml         |    4 -
 i18npool/source/localedata/data/es_DO.xml         |    4 -
 i18npool/source/localedata/data/es_EC.xml         |    4 -
 i18npool/source/localedata/data/es_ES.xml         |    4 -
 i18npool/source/localedata/data/es_GT.xml         |    4 -
 i18npool/source/localedata/data/es_PE.xml         |    4 -
 sw/qa/extras/htmlexport/htmlexport.cxx            |   79 +++++++++++++++-------
 sw/source/filter/html/htmlatr.cxx                 |   18 +++--
 sw/source/filter/html/htmltab.cxx                 |    6 +
 16 files changed, 142 insertions(+), 97 deletions(-)

New commits:
commit 560bda3e635e45d64222f0125becbc429a7f03d0
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Fri Feb 11 10:28:44 2022 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Mon Feb 14 15:26:17 2022 +0100

    tdf#147364: fix function signature to account to calling convention
    
    First, the integer function result is returned in a 64-bit register (RAX),
    and truncation it to sal_Int32 breaks any pointer return value.
    
    Second, using explicit (not vararg) first function double argument would
    pass it through XMM0, without also copying it to RCX (which is guaranteed
    for varargs).
    
    Ref: https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention
    Change-Id: I08212c44d8690d6910068b13c16af2ce899c94f2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129808
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    (cherry picked from commit 5276177877cc53c53653a87f3038eb208a5580ab)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129832
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/basic/qa/basic_coverage/test_declare_from_dll.bas 
b/basic/qa/basic_coverage/test_declare_from_dll.bas
new file mode 100644
index 000000000000..7bdd1b170492
--- /dev/null
+++ b/basic/qa/basic_coverage/test_declare_from_dll.bas
@@ -0,0 +1,36 @@
+'
+' 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/.
+'
+
+Option Explicit
+
+' We link to shlwapi in many places, so safe to rely on it here
+Declare Function PathFindExtensionA Lib "Shlwapi" (ByVal pszPath As String) As 
String
+
+Function doUnitTest() As String
+    TestUtil.TestInit
+    verify_testPathFindExtensionA
+    doUnitTest = TestUtil.GetResult()
+End Function
+
+Sub verify_testPathFindExtensionA()
+    On Error GoTo errorHandler
+
+    ' Only test on Windows
+    If (GetGUIType() <> 1) Then
+        TestUtil.Assert(True) ' The test passed
+        Exit Sub
+    End If
+
+    ' Without the fix for tdf#147364 in place, the next call would crash in 
64-bit version with
+    '   *** Exception 0xc0000005 occurred ***
+    TestUtil.AssertEqual(PathFindExtensionA("filename.ext"), ".ext", 
"PathFindExtensionA(""filename.ext"")")
+
+    Exit Sub
+errorHandler:
+    TestUtil.ReportErrorHandler("verify_testPathFindExtensionA", Err, Error$, 
Erl)
+End Sub
diff --git a/basic/source/runtime/dllmgr-x64.cxx 
b/basic/source/runtime/dllmgr-x64.cxx
index dad4bea8794a..b2ddbb890da1 100644
--- a/basic/source/runtime/dllmgr-x64.cxx
+++ b/basic/source/runtime/dllmgr-x64.cxx
@@ -512,8 +512,6 @@ ErrCode call(
     // We fake all calls as being to a varargs function,
     // as this means any floating-point argument among the first four
     // ones will end up in a XMM register where the callee expects it.
-    sal_Int32 (*proc_i)(double d, ...) = reinterpret_cast<sal_Int32 
(*)(double, ...)>(proc.proc);
-    double (*proc_d)(double d, ...) = reinterpret_cast<double (*)(double, 
...)>(proc.proc);
 
     sal_Int64 iRetVal = 0;
     double dRetVal = 0.0;
@@ -527,55 +525,21 @@ ErrCode call(
     case SbxBOOL:
     case SbxBYTE:
         {
-            auto const st = stack.data();
-            iRetVal =
-                proc_i(*reinterpret_cast<double *>(st + 0),
-                       *reinterpret_cast<double *>(st + 1*8),
-                       *reinterpret_cast<double *>(st + 2*8),
-                       *reinterpret_cast<double *>(st + 3*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 4*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 5*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 6*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 7*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 8*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 9*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 10*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 11*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 12*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 13*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 14*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 15*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 16*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 17*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 18*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 19*8));
+            auto p = reinterpret_cast<sal_Int64 (*)(...)>(proc.proc);
+            auto const st = reinterpret_cast<double *>(stack.data());
+            iRetVal
+                = p(st[0], st[1], st[2], st[3], st[4], st[5], st[6], st[7], 
st[8], st[9], st[10],
+                    st[11], st[12], st[13], st[14], st[15], st[16], st[17], 
st[18], st[19]);
             break;
         }
     case SbxSINGLE:
     case SbxDOUBLE:
         {
-            auto const st = stack.data();
-            dRetVal =
-                proc_d(*reinterpret_cast<double *>(st + 0),
-                       *reinterpret_cast<double *>(st + 1*8),
-                       *reinterpret_cast<double *>(st + 2*8),
-                       *reinterpret_cast<double *>(st + 3*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 4*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 5*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 6*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 7*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 8*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 9*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 10*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 11*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 12*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 13*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 14*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 15*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 16*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 17*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 18*8),
-                       *reinterpret_cast<sal_uInt64 *>(st + 19*8));
+            auto p = reinterpret_cast<double (*)(...)>(proc.proc);
+            auto const st = reinterpret_cast<double*>(stack.data());
+            dRetVal
+                = p(st[0], st[1], st[2], st[3], st[4], st[5], st[6], st[7], 
st[8], st[9], st[10],
+                    st[11], st[12], st[13], st[14], st[15], st[16], st[17], 
st[18], st[19]);
             break;
         }
     default:
commit a1ffa65e0fa7464db651a4d063e589f4a343f828
Author:     Miklos Vajna <vmik...@collabora.com>
AuthorDate: Fri Feb 11 16:18:26 2022 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Mon Feb 14 15:26:07 2022 +0100

    sw XHTML / ReqIF filter: avoid adding and removing <br>s for trailing <br>s
    
    The sw/ HTML export writes two <br>s for a <br> in the doc model at the
    end of a paragraph, because the last <br> would be ignored by browsers.
    But then the import ignores all <br>s at the end of paragraphs, so the
    import and the export are not a 1:1 mapping; but at least the layout of
    the exported HTML is close to the Writer layout.
    
    ReqIF focuses on the preserving the semantics of the doc model instead:
    it already doesn't open the document in "web view", and it's not
    expected that the number of <br>s change on import or export.
    
    Fix the problem by disabling both the import and the export tweaks in
    the ReqIF case.
    
    It would perhaps make sense to do this in general, but for users who
    only care about the export layout (and never import the result again),
    that would be probably a regression, so don't change this
    unconditionally for now.
    
    Change-Id: Iabd4a462185493c1ece0352069077e04c293816b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129820
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>
    Tested-by: Jenkins
    (cherry picked from commit b86679ea6bd2bb053c3822c4642a62a49e381909)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129834
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx 
b/sw/qa/extras/htmlexport/htmlexport.cxx
index 641a1e1560c8..fa40c8d7d04c 100644
--- a/sw/qa/extras/htmlexport/htmlexport.cxx
+++ b/sw/qa/extras/htmlexport/htmlexport.cxx
@@ -279,6 +279,8 @@ public:
     void ParseOle1FromRtfUrl(const OUString& rRtfUrl, SvMemoryStream& rOle1);
     /// Export using the C++ HTML export filter, with xhtmlns=reqif-xhtml.
     void ExportToReqif();
+    /// Import using the C++ HTML import filter, with xhtmlns=reqif-xhtml.
+    void ImportFromReqif(const OUString& rUrl);
 };
 
 OUString SwHtmlDomExportTest::GetOlePath()
@@ -333,6 +335,15 @@ void SwHtmlDomExportTest::ExportToReqif()
     xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties);
 }
 
+void SwHtmlDomExportTest::ImportFromReqif(const OUString& rUrl)
+{
+    uno::Sequence<beans::PropertyValue> aLoadProperties = {
+        comphelper::makePropertyValue("FilterName", OUString("HTML 
(StarWriter)")),
+        comphelper::makePropertyValue("FilterOptions", 
OUString("xhtmlns=reqif-xhtml")),
+    };
+    mxComponent = loadFromDesktop(rUrl, "com.sun.star.text.TextDocument", 
aLoadProperties);
+}
+
 constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/extras/htmlexport/data/";
 
 DECLARE_HTMLEXPORT_ROUNDTRIP_TEST(testFdo81276, "fdo81276.html")
@@ -757,11 +768,7 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqIfPngImg)
     };
 
     OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + 
"reqif-png-img.xhtml";
-    uno::Sequence<beans::PropertyValue> aLoadProperties = {
-        comphelper::makePropertyValue("FilterName", OUString("HTML 
(StarWriter)")),
-        comphelper::makePropertyValue("FilterOptions", 
OUString("xhtmlns=reqif-xhtml")),
-    };
-    mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", 
aLoadProperties);
+    ImportFromReqif(aURL);
     verify(/*bExported=*/false);
     uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
     uno::Sequence<beans::PropertyValue> aStoreProperties = {
@@ -771,8 +778,7 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqIfPngImg)
     };
     xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties);
     mxComponent->dispose();
-    mxComponent
-        = loadFromDesktop(maTempFile.GetURL(), 
"com.sun.star.text.TextDocument", aLoadProperties);
+    ImportFromReqif(maTempFile.GetURL());
     verify(/*bExported=*/true);
 }
 
@@ -1088,12 +1094,8 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testRTFOLEMimeType)
 {
     // Import a document with an embedded object.
     OUString aType("test/rtf");
-    uno::Sequence<beans::PropertyValue> aLoadProperties = {
-        comphelper::makePropertyValue("FilterName", OUString("HTML 
(StarWriter)")),
-        comphelper::makePropertyValue("FilterOptions", 
OUString("xhtmlns=reqif-xhtml")),
-    };
     OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + 
"reqif-ole-data.xhtml";
-    mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", 
aLoadProperties);
+    ImportFromReqif(aURL);
 
     // Export it.
     uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
@@ -1234,12 +1236,7 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testReqifOle1PDF)
     // Now import this back and check the ODT result.
     mxComponent->dispose();
     mxComponent.clear();
-    uno::Sequence<beans::PropertyValue> aLoadProperties = {
-        comphelper::makePropertyValue("FilterName", OUString("HTML 
(StarWriter)")),
-        comphelper::makePropertyValue("FilterOptions", 
OUString("xhtmlns=reqif-xhtml")),
-    };
-    mxComponent
-        = loadFromDesktop(maTempFile.GetURL(), 
"com.sun.star.text.TextDocument", aLoadProperties);
+    ImportFromReqif(maTempFile.GetURL());
     uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
     utl::TempFile aTempFile;
     aTempFile.EnableKillingFile();
@@ -1267,11 +1264,7 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testReqifOle1Paint)
 {
     // Load the bug document, which has OLE1 data in it, which is not a 
wrapper around OLE2 data.
     OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + 
"paint-ole.xhtml";
-    uno::Sequence<beans::PropertyValue> aLoadProperties = {
-        comphelper::makePropertyValue("FilterName", OUString("HTML 
(StarWriter)")),
-        comphelper::makePropertyValue("FilterOptions", 
OUString("xhtmlns=reqif-xhtml")),
-    };
-    mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", 
aLoadProperties);
+    ImportFromReqif(aURL);
 
     // Save it as ODT to inspect the result of the OLE1 -> OLE2 conversion.
     uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
@@ -2044,6 +2037,46 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, 
testNestedBullets)
         "second");
 }
 
+CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testTrailingLineBreak)
+{
+    // Given a document with a trailing line-break:
+    SwDoc* pDoc = createSwDoc();
+    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+    pWrtShell->Insert("test\n");
+
+    // When exporting to reqif-xhtml:
+    ExportToReqif();
+
+    // Then make sure that we still have a single line-break:
+    SvMemoryStream aStream;
+    HtmlExportTest::wrapFragment(maTempFile, aStream);
+    xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream);
+    CPPUNIT_ASSERT(pDoc);
+    // Without the accompanying fix in place, this test would have failed with:
+    // - Expected: 1
+    // - Actual  : 2
+    // - XPath '//reqif-xhtml:br' number of nodes is incorrect
+    assertXPath(pXmlDoc, "//reqif-xhtml:br", 1);
+
+    // Then test the import side:
+
+    // Given an empty document:
+    mxComponent->dispose();
+
+    // When importing a <br> from reqif-xhtml:
+    ImportFromReqif(maTempFile.GetURL());
+
+    // Then make sure that line-break is not lost:
+    SwXTextDocument* pTextDoc = 
dynamic_cast<SwXTextDocument*>(mxComponent.get());
+    CPPUNIT_ASSERT(pTextDoc);
+    pDoc = pTextDoc->GetDocShell()->GetDoc();
+    pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+    OUString aActual = 
pWrtShell->GetCursor()->GetNode().GetTextNode()->GetText();
+    // Without the accompanying fix in place, this test would have failed, as 
the trailing
+    // line-break was lost.
+    CPPUNIT_ASSERT_EQUAL(OUString("test\n"), aActual);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/html/htmlatr.cxx 
b/sw/source/filter/html/htmlatr.cxx
index 457e8483ec37..a78c5e272d56 100644
--- a/sw/source/filter/html/htmlatr.cxx
+++ b/sw/source/filter/html/htmlatr.cxx
@@ -2348,8 +2348,11 @@ Writer& OutHTML_SwTextNode( Writer& rWrt, const 
SwContentNode& rNode )
     }
 
     bool bWriteBreak = (HtmlTokenId::PREFORMTXT_ON != 
rHTMLWrt.m_nLastParaToken);
-    if( bWriteBreak && pNd->GetNumRule()  )
+    if (bWriteBreak && (pNd->GetNumRule() || rHTMLWrt.mbReqIF))
+    {
+        // One line-break is exactly one <br> in the ReqIF case.
         bWriteBreak = false;
+    }
 
     {
         HTMLOutContext aContext( rHTMLWrt.m_eDestEnc );
@@ -2490,11 +2493,14 @@ Writer& OutHTML_SwTextNode( Writer& rWrt, const 
SwContentNode& rNode )
                     else
                         HTMLOutFuncs::Out_Char( rWrt.Strm(), c, aContext, 
&rHTMLWrt.m_aNonConvertableCharacters );
 
-                    // if a paragraph's last character is a hard line break
-                    // then we need to add an extra <br>
-                    // because browsers like Mozilla wouldn't add a line for 
the next paragraph
-                    bWriteBreak = (0x0a == c) &&
-                                  (HtmlTokenId::PREFORMTXT_ON != 
rHTMLWrt.m_nLastParaToken);
+                    if (!rHTMLWrt.mbReqIF)
+                    {
+                        // if a paragraph's last character is a hard line break
+                        // then we need to add an extra <br>
+                        // because browsers like Mozilla wouldn't add a line 
for the next paragraph
+                        bWriteBreak = (0x0a == c) &&
+                                      (HtmlTokenId::PREFORMTXT_ON != 
rHTMLWrt.m_nLastParaToken);
+                    }
                 }
             }
         }
diff --git a/sw/source/filter/html/htmltab.cxx 
b/sw/source/filter/html/htmltab.cxx
index 1276d2a69654..1167e6b55c49 100644
--- a/sw/source/filter/html/htmltab.cxx
+++ b/sw/source/filter/html/htmltab.cxx
@@ -2663,6 +2663,12 @@ sal_Int32 SwHTMLParser::StripTrailingLF()
 {
     sal_Int32 nStripped = 0;
 
+    if (IsReqIF())
+    {
+        // One <br> is exactly one line-break in the ReqIF case.
+        return nStripped;
+    }
+
     const sal_Int32 nLen = m_pPam->GetPoint()->nContent.GetIndex();
     if( nLen )
     {
commit 0bedd49cde41646585f4f2fa068a23c94a15a2df
Author:     Julien Nabet <serval2...@yahoo.fr>
AuthorDate: Thu Feb 10 17:46:37 2022 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Mon Feb 14 15:26:00 2022 +0100

    tdf#147343: Wrong typo for AM/PM indicator in Spanish locales
    
    Change-Id: I0cc077a94b6f11f67436981033e024e3097c635a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129793
    Tested-by: Jenkins
    Reviewed-by: Julien Nabet <serval2...@yahoo.fr>
    (cherry picked from commit d582bc9735022996a317ed661388621edabf78cc)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129843
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>

diff --git a/i18npool/source/localedata/data/an_ES.xml 
b/i18npool/source/localedata/data/an_ES.xml
index f6063c06e206..217acd57ddc4 100644
--- a/i18npool/source/localedata/data/an_ES.xml
+++ b/i18npool/source/localedata/data/an_ES.xml
@@ -47,8 +47,8 @@
       <DoubleQuotationStart>“</DoubleQuotationStart>
       <DoubleQuotationEnd>”</DoubleQuotationEnd>
     </Markers>
-    <TimeAM>a. m.</TimeAM>
-    <TimePM>p. m.</TimePM>
+    <TimeAM>a. m.</TimeAM>
+    <TimePM>p. m.</TimePM>
     <MeasurementSystem>metric</MeasurementSystem>
   </LC_CTYPE>
   <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$€-665]">
diff --git a/i18npool/source/localedata/data/es_AR.xml 
b/i18npool/source/localedata/data/es_AR.xml
index 84cc34e3bb70..60473d5cd289 100644
--- a/i18npool/source/localedata/data/es_AR.xml
+++ b/i18npool/source/localedata/data/es_AR.xml
@@ -47,8 +47,8 @@
       <DoubleQuotationStart>“</DoubleQuotationStart>
       <DoubleQuotationEnd>”</DoubleQuotationEnd>
     </Markers>
-    <TimeAM>AM</TimeAM>
-    <TimePM>PM</TimePM>
+    <TimeAM>a. m.</TimeAM>
+    <TimePM>p. m.</TimePM>
     <MeasurementSystem>metric</MeasurementSystem>
   </LC_CTYPE>
   <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$$-2C0A]">
diff --git a/i18npool/source/localedata/data/es_BO.xml 
b/i18npool/source/localedata/data/es_BO.xml
index 317ab9406abc..9d9a13047f11 100644
--- a/i18npool/source/localedata/data/es_BO.xml
+++ b/i18npool/source/localedata/data/es_BO.xml
@@ -47,8 +47,8 @@
       <DoubleQuotationStart>“</DoubleQuotationStart>
       <DoubleQuotationEnd>”</DoubleQuotationEnd>
     </Markers>
-    <TimeAM>AM</TimeAM>
-    <TimePM>PM</TimePM>
+    <TimeAM>a. m.</TimeAM>
+    <TimePM>p. m.</TimePM>
     <MeasurementSystem>metric</MeasurementSystem>
   </LC_CTYPE>
   <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$Bs-400A]">
diff --git a/i18npool/source/localedata/data/es_CL.xml 
b/i18npool/source/localedata/data/es_CL.xml
index 3b1605b98ed3..95a865b0589c 100644
--- a/i18npool/source/localedata/data/es_CL.xml
+++ b/i18npool/source/localedata/data/es_CL.xml
@@ -47,8 +47,8 @@
       <DoubleQuotationStart>“</DoubleQuotationStart>
       <DoubleQuotationEnd>”</DoubleQuotationEnd>
     </Markers>
-    <TimeAM>AM</TimeAM>
-    <TimePM>PM</TimePM>
+    <TimeAM>a. m.</TimeAM>
+    <TimePM>p. m.</TimePM>
     <MeasurementSystem>metric</MeasurementSystem>
   </LC_CTYPE>
   <LC_FORMAT>
diff --git a/i18npool/source/localedata/data/es_CO.xml 
b/i18npool/source/localedata/data/es_CO.xml
index f7962ec6f169..cca72c41d169 100644
--- a/i18npool/source/localedata/data/es_CO.xml
+++ b/i18npool/source/localedata/data/es_CO.xml
@@ -47,8 +47,8 @@
       <DoubleQuotationStart>“</DoubleQuotationStart>
       <DoubleQuotationEnd>”</DoubleQuotationEnd>
     </Markers>
-    <TimeAM>AM</TimeAM>
-    <TimePM>PM</TimePM>
+    <TimeAM>a. m.</TimeAM>
+    <TimePM>p. m.</TimePM>
     <MeasurementSystem>metric</MeasurementSystem>
   </LC_CTYPE>
   <LC_FORMAT>
diff --git a/i18npool/source/localedata/data/es_CR.xml 
b/i18npool/source/localedata/data/es_CR.xml
index 23c204fac6c8..d0e33e911d26 100644
--- a/i18npool/source/localedata/data/es_CR.xml
+++ b/i18npool/source/localedata/data/es_CR.xml
@@ -47,8 +47,8 @@
       <DoubleQuotationStart>“</DoubleQuotationStart>
       <DoubleQuotationEnd>”</DoubleQuotationEnd>
     </Markers>
-    <TimeAM>AM</TimeAM>
-    <TimePM>PM</TimePM>
+    <TimeAM>a. m.</TimeAM>
+    <TimePM>p. m.</TimePM>
     <MeasurementSystem>metric</MeasurementSystem>
   </LC_CTYPE>
   <LC_FORMAT>
diff --git a/i18npool/source/localedata/data/es_DO.xml 
b/i18npool/source/localedata/data/es_DO.xml
index 446219719b8a..5c80546c89b9 100644
--- a/i18npool/source/localedata/data/es_DO.xml
+++ b/i18npool/source/localedata/data/es_DO.xml
@@ -47,8 +47,8 @@
       <DoubleQuotationStart>“</DoubleQuotationStart>
       <DoubleQuotationEnd>”</DoubleQuotationEnd>
     </Markers>
-    <TimeAM>a.m.</TimeAM>
-    <TimePM>p.m.</TimePM>
+    <TimeAM>a. m.</TimeAM>
+    <TimePM>p. m.</TimePM>
     <MeasurementSystem>Metric</MeasurementSystem>
   </LC_CTYPE>
   <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$RD$-1C0A] ">
diff --git a/i18npool/source/localedata/data/es_EC.xml 
b/i18npool/source/localedata/data/es_EC.xml
index eea5b1b73173..df07087a1740 100644
--- a/i18npool/source/localedata/data/es_EC.xml
+++ b/i18npool/source/localedata/data/es_EC.xml
@@ -47,8 +47,8 @@
       <DoubleQuotationStart>“</DoubleQuotationStart>
       <DoubleQuotationEnd>”</DoubleQuotationEnd>
     </Markers>
-    <TimeAM>AM</TimeAM>
-    <TimePM>PM</TimePM>
+    <TimeAM>a. m.</TimeAM>
+    <TimePM>p. m.</TimePM>
     <MeasurementSystem>metric</MeasurementSystem>
   </LC_CTYPE>
   <LC_FORMAT>
diff --git a/i18npool/source/localedata/data/es_ES.xml 
b/i18npool/source/localedata/data/es_ES.xml
index 15b25d937aab..c9c99979f748 100644
--- a/i18npool/source/localedata/data/es_ES.xml
+++ b/i18npool/source/localedata/data/es_ES.xml
@@ -47,8 +47,8 @@
       <DoubleQuotationStart>“</DoubleQuotationStart>
       <DoubleQuotationEnd>”</DoubleQuotationEnd>
     </Markers>
-    <TimeAM>AM</TimeAM>
-    <TimePM>PM</TimePM>
+    <TimeAM>a. m.</TimeAM>
+    <TimePM>p. m.</TimePM>
     <MeasurementSystem>metric</MeasurementSystem>
   </LC_CTYPE>
   <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$₧-40A]">
diff --git a/i18npool/source/localedata/data/es_GT.xml 
b/i18npool/source/localedata/data/es_GT.xml
index 5ef3985d0d30..9332399a75b8 100644
--- a/i18npool/source/localedata/data/es_GT.xml
+++ b/i18npool/source/localedata/data/es_GT.xml
@@ -47,8 +47,8 @@
       <DoubleQuotationStart>“</DoubleQuotationStart>
       <DoubleQuotationEnd>”</DoubleQuotationEnd>
     </Markers>
-    <TimeAM>a.m.</TimeAM>
-    <TimePM>p.m.</TimePM>
+    <TimeAM>a. m.</TimeAM>
+    <TimePM>p. m.</TimePM>
     <MeasurementSystem>Metric</MeasurementSystem>
   </LC_CTYPE>
   <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$Q-100A]">
diff --git a/i18npool/source/localedata/data/es_PE.xml 
b/i18npool/source/localedata/data/es_PE.xml
index cf50595b913f..f1bfd15f1bef 100644
--- a/i18npool/source/localedata/data/es_PE.xml
+++ b/i18npool/source/localedata/data/es_PE.xml
@@ -47,8 +47,8 @@
       <DoubleQuotationStart>“</DoubleQuotationStart>
       <DoubleQuotationEnd>”</DoubleQuotationEnd>
     </Markers>
-    <TimeAM>a.m.</TimeAM>
-    <TimePM>p.m.</TimePM>
+    <TimeAM>a. m.</TimeAM>
+    <TimePM>p. m.</TimePM>
     <MeasurementSystem>Metric</MeasurementSystem>
   </LC_CTYPE>
   <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$S/-280A]">

Reply via email to