sw/inc/AccessibilityCheckStrings.hrc                     |    1 
 sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx |   11 +++
 sw/qa/core/accessibilitycheck/data/SpaceTest.odt         |binary
 sw/source/core/access/AccessibilityCheck.cxx             |   49 +++++++++++++++
 4 files changed, 61 insertions(+)

New commits:
commit 2c44f57b3f59012057a7a0a4d912648d362cf6f3
Author:     offtkp <[email protected]>
AuthorDate: Wed Oct 12 19:29:28 2022 +0300
Commit:     Tomaž Vajngerl <[email protected]>
CommitDate: Mon Oct 17 16:33:40 2022 +0200

    a11y: Add check for spacing spaces
    
    Add accessibility check and relevant test for a document that uses
    multiple spaces for spacing
    
    Change-Id: Ib92471c50a25ead28f2b6c7d5e00ed222d4b429e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141267
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <[email protected]>

diff --git a/sw/inc/AccessibilityCheckStrings.hrc 
b/sw/inc/AccessibilityCheckStrings.hrc
index 4d65bd095f51..9c45cb84ecd9 100644
--- a/sw/inc/AccessibilityCheckStrings.hrc
+++ b/sw/inc/AccessibilityCheckStrings.hrc
@@ -23,6 +23,7 @@
 #define STR_AVOID_ENDNOTES              NC_("STR_AVOID_ENDNOTES", "Avoid 
endnotes.")
 #define STR_AVOID_BACKGROUND_IMAGES     NC_("STR_AVOID_BACKGROUND_IMAGES", 
"Avoid background images.")
 #define STR_AVOID_NEWLINES_SPACE        NC_("STR_AVOID_NEWLINES_SPACE", "Avoid 
newlines to create space.")
+#define STR_AVOID_SPACES_SPACE          NC_("STR_AVOID_SPACES_SPACE", "Avoid 
spaces to create space.")
 #define STR_HEADINGS_NOT_IN_ORDER       NC_("STR_HEADINGS_NOT_IN_ORDER", 
"Headings not in order.")
 #define STR_TEXT_FORMATTING_CONVEYS_MEANING 
NC_("STR_TEXT_FORMATTING_CONVEYS_MEANING", "The text formatting conveys 
additional meaning.")
 #define STR_NON_INTERACTIVE_FORMS       NC_("STR_NON_INTERACTIVE_FORMS", "An 
input form is not interactive.")
diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx 
b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
index 7a60b1578e21..98b08b5a207c 100644
--- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -82,6 +82,17 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testCheckNewlineSpace)
     CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, 
aIssues[1]->m_eIssueID);
 }
 
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckSpacebarSpace)
+{
+    SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "SpaceTest.odt");
+    CPPUNIT_ASSERT(pDoc);
+    sw::AccessibilityCheck aCheck(pDoc);
+    aCheck.check();
+    auto& aIssues = aCheck.getIssueCollection().getIssues();
+    CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size());
+    CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, 
aIssues[0]->m_eIssueID);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/accessibilitycheck/data/SpaceTest.odt 
b/sw/qa/core/accessibilitycheck/data/SpaceTest.odt
new file mode 100644
index 000000000000..0f00f78f9698
Binary files /dev/null and b/sw/qa/core/accessibilitycheck/data/SpaceTest.odt 
differ
diff --git a/sw/source/core/access/AccessibilityCheck.cxx 
b/sw/source/core/access/AccessibilityCheck.cxx
index f56bdf3e0c7b..9746e17c0794 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -670,6 +670,54 @@ public:
     }
 };
 
+class SpaceSpacingCheck : public NodeCheck
+{
+public:
+    SpaceSpacingCheck(sfx::AccessibilityIssueCollection& rIssueCollection)
+        : NodeCheck(rIssueCollection)
+    {
+    }
+    void check(SwNode* pCurrent) override
+    {
+        if (!pCurrent->IsTextNode())
+            return;
+        SwTextNode* pTextNode = pCurrent->GetTextNode();
+        auto nParagraphLength = pTextNode->GetText().getLength();
+        const OUString& sParagraphText = pTextNode->GetText();
+        sal_Int32 nSpaceCount = 0;
+        sal_Int32 nSpaceStart = 0;
+        bool bNonSpaceFound = false;
+        for (sal_Int32 i = 0; i < nParagraphLength; i++)
+        {
+            if (sParagraphText[i] == ' ')
+            {
+                if (bNonSpaceFound)
+                {
+                    nSpaceCount++;
+                    if (nSpaceCount == 2)
+                        nSpaceStart = i;
+                }
+            }
+            else
+            {
+                if (nSpaceCount >= 2)
+                {
+                    auto pIssue = lclAddIssue(m_rIssueCollection, 
SwResId(STR_AVOID_SPACES_SPACE),
+                                              
sfx::AccessibilityIssueID::TEXT_FORMATTING);
+                    pIssue->setIssueObject(IssueObject::TEXT);
+                    pIssue->setNode(pTextNode);
+                    SwDoc& rDocument = pTextNode->GetDoc();
+                    pIssue->setDoc(rDocument);
+                    pIssue->setStart(nSpaceStart);
+                    pIssue->setEnd(nSpaceStart + nSpaceCount - 1);
+                }
+                bNonSpaceFound = true;
+                nSpaceCount = 0;
+            }
+        }
+    }
+};
+
 class BlinkingTextCheck : public NodeCheck
 {
 private:
@@ -1093,6 +1141,7 @@ void AccessibilityCheck::check()
     
aNodeChecks.push_back(std::make_unique<TableHeadingCheck>(m_aIssueCollection));
     
aNodeChecks.push_back(std::make_unique<HeadingOrderCheck>(m_aIssueCollection));
     
aNodeChecks.push_back(std::make_unique<NewlineSpacingCheck>(m_aIssueCollection));
+    
aNodeChecks.push_back(std::make_unique<SpaceSpacingCheck>(m_aIssueCollection));
 
     auto const& pNodes = m_pDoc->GetNodes();
     SwNode* pNode = nullptr;

Reply via email to