[Libreoffice-commits] core.git: include/sfx2 sw/inc sw/qa sw/source sw/uiconfig

2023-11-08 Thread László Németh (via logerrit)
 include/sfx2/AccessibilityIssue.hxx  |1 
 sw/inc/AccessibilityCheckStrings.hrc |1 
 sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx |   12 
 sw/qa/core/accessibilitycheck/data/LinkedImageTest.fodt  |   18 ++
 sw/source/core/access/AccessibilityCheck.cxx |   42 +-
 sw/source/core/access/AccessibilityIssue.cxx |1 
 sw/source/core/inc/AccessibilityIssue.hxx|1 
 sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx|   40 +++--
 sw/source/uibase/sidebar/A11yCheckIssuesPanel.hxx|3 +
 sw/uiconfig/swriter/ui/a11ycheckissuespanel.ui   |   44 ---
 10 files changed, 146 insertions(+), 17 deletions(-)

New commits:
commit 0156cba6e34026f8fa0f2912e503378a5ec2208d
Author: László Németh 
AuthorDate: Wed Nov 8 11:04:40 2023 +0100
Commit: László Németh 
CommitDate: Wed Nov 8 21:16:59 2023 +0100

tdf#43784 tdf#158114 sw accessibility: check missing linked graphic

Show missing linked graphics and their abbreviated paths,
(and as tooltips, full paths) in the accessibility checker.

Change-Id: Ia378f4ea3260251d1b2530fadc48aea6e0323a08
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159150
Tested-by: Jenkins
Reviewed-by: László Németh 

diff --git a/include/sfx2/AccessibilityIssue.hxx 
b/include/sfx2/AccessibilityIssue.hxx
index ac9ad6adb73b..92bef3d7d6a2 100644
--- a/include/sfx2/AccessibilityIssue.hxx
+++ b/include/sfx2/AccessibilityIssue.hxx
@@ -27,6 +27,7 @@ enum class AccessibilityIssueID
 DOCUMENT_LANGUAGE,
 DOCUMENT_BACKGROUND,
 STYLE_LANGUAGE,
+LINKED_GRAPHIC,
 NO_ALT_OLE,
 NO_ALT_GRAPHIC,
 NO_ALT_SHAPE,
diff --git a/sw/inc/AccessibilityCheckStrings.hrc 
b/sw/inc/AccessibilityCheckStrings.hrc
index 44dd7217dc04..8073f9cc1c73 100644
--- a/sw/inc/AccessibilityCheckStrings.hrc
+++ b/sw/inc/AccessibilityCheckStrings.hrc
@@ -14,6 +14,7 @@
 #define NC_(Context, String) TranslateId(Context, u8##String)
 
 #define STR_NO_ALT  NC_("STR_NO_ALT", "%OBJECT_NAME%")
+#define STR_LINKED_GRAPHIC  NC_("STR_LINKED_GRAPHIC", 
"“%OBJECT_NAME%” referenced as “%LINK%”.")
 #define STR_TABLE_MERGE_SPLIT   NC_("STR_TABLE_MERGE_SPLIT", "Table 
“%OBJECT_NAME%” contains merges or splits.")
 #define STR_FAKE_NUMBERING  NC_("STR_FAKE_NUMBERING", "Simulated 
numbering “%NUMBERING%”.")
 #define STR_HYPERLINK_TEXT_IS_LINK  NC_("STR_HYPERLINK_TEXT_IS_LINK", 
"Hyperlink text is the same as the link address “%LINK%”.")
diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx 
b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
index 72337e62d6e0..117b48d01661 100644
--- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -84,6 +84,18 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testCheckBackgroundImage)
 CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DOCUMENT_BACKGROUND, 
aIssues[0]->m_eIssueID);
 }
 
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckLinkedImage)
+{
+createSwDoc("LinkedImageTest.fodt");
+SwDoc* pDoc = getSwDoc();
+CPPUNIT_ASSERT(pDoc);
+sw::AccessibilityCheck aCheck(pDoc);
+aCheck.check();
+auto& aIssues = aCheck.getIssueCollection().getIssues();
+CPPUNIT_ASSERT_EQUAL(size_t(4), aIssues.size());
+CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::LINKED_GRAPHIC, 
aIssues[1]->m_eIssueID);
+}
+
 CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckNewlineSpace)
 {
 createSwDoc("NewlineTest.odt");
diff --git a/sw/qa/core/accessibilitycheck/data/LinkedImageTest.fodt 
b/sw/qa/core/accessibilitycheck/data/LinkedImageTest.fodt
new file mode 100644
index ..c73162b18372
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/LinkedImageTest.fodt
@@ -0,0 +1,18 @@
+
+http://www.w3.org/1999/xlink"; 
xmlns:dc="http://purl.org/dc/elements/1.1/"; 
xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" 
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" 
xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" 
xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" 
xmlns:math="http://www.w3.org/1998/Math/MathML"; 
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" 
xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" 
xmlns:config="urn:oas
 is:names:tc:opendocument:xmlns:config:1.0" 
xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:ooow="http://openoffice.org/2004/writer"; 
xmlns:oooc="http://openoffice.org/2004/calc"; 
xmlns:dom="http://www.w3.org/2001/xml-events"; 
xmlns:xforms="http://www.w3.org/2002/xforms"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:rpt="http://openoffice.org/2005/report"; 
xmlns:of="urn:oasis:n

[Libreoffice-commits] core.git: include/sfx2 sw/inc sw/qa sw/source

2022-11-02 Thread Paris Oplopoios (via logerrit)
 include/sfx2/AccessibilityIssue.hxx|1 
 sw/inc/AccessibilityCheckStrings.hrc   |1 
 sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx   |   11 ++
 sw/qa/core/accessibilitycheck/data/TableFormattingTest.odt |binary
 sw/source/core/access/AccessibilityCheck.cxx   |   49 +
 5 files changed, 62 insertions(+)

New commits:
commit 5c8934809ac60488d6160e27ff5962350c612a09
Author: Paris Oplopoios 
AuthorDate: Thu Nov 3 01:02:40 2022 +0200
Commit: Tomaž Vajngerl 
CommitDate: Thu Nov 3 07:53:53 2022 +0100

a11y: Add check for table used for text formatting

Add accessibility check and relevant test for a document that uses a
table for text formatting

Change-Id: I20290a3ec89cd5333f3c66867b50aa7b80ed494f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142188
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl 

diff --git a/include/sfx2/AccessibilityIssue.hxx 
b/include/sfx2/AccessibilityIssue.hxx
index b9e3266c73a2..0c22d9e19238 100644
--- a/include/sfx2/AccessibilityIssue.hxx
+++ b/include/sfx2/AccessibilityIssue.hxx
@@ -29,6 +29,7 @@ enum class AccessibilityIssueID
 NO_ALT_SHAPE,
 TABLE_MERGE_SPLIT,
 TEXT_FORMATTING,
+TABLE_FORMATTING,
 HYPERLINK_IS_TEXT,
 HYPERLINK_SHORT,
 FAKE_FOOTNOTE,
diff --git a/sw/inc/AccessibilityCheckStrings.hrc 
b/sw/inc/AccessibilityCheckStrings.hrc
index e63d304d1063..7245a2b8d3e0 100644
--- a/sw/inc/AccessibilityCheckStrings.hrc
+++ b/sw/inc/AccessibilityCheckStrings.hrc
@@ -34,6 +34,7 @@
 #define STR_HEADING_IN_TABLENC_("STR_HEADING_IN_TABLE", "Tables 
must not contain headings.")
 #define STR_HEADING_ORDER   NC_("STR_HEADING_ORDER", "Keep 
headings' levels ordered. Heading level %LEVEL_CURRENT% must not go after 
%LEVEL_PREV%.")
 #define STR_FONTWORKS   NC_("STR_FONTWORKS", "Avoid Fontwork 
objects in your documents. Make sure you use it for samples or other 
meaningless text.")
+#define STR_TABLE_FORMATTINGNC_("STR_TABLE_FORMATTING", "Avoid 
using empty table cells for formatting.")
 
 #define STR_DOCUMENT_DEFAULT_LANGUAGE   NC_("STR_DOCUMENT_DEFAULT_LANGUAGE", 
"Document default language is not set")
 #define STR_STYLE_NO_LANGUAGE   NC_("STR_STYLE_NO_LANGUAGE", "Style 
'%STYLE_NAME%' has no language set")
diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx 
b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
index 02912e4c9d35..b7561ad01764 100644
--- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -154,6 +154,17 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testCheckFakeCaption)
 CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_CAPTION, 
aIssues[0]->m_eIssueID);
 }
 
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckTableFormatting)
+{
+SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "TableFormattingTest.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::TABLE_FORMATTING, 
aIssues[0]->m_eIssueID);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/accessibilitycheck/data/TableFormattingTest.odt 
b/sw/qa/core/accessibilitycheck/data/TableFormattingTest.odt
new file mode 100644
index ..adc63daaf7cb
Binary files /dev/null and 
b/sw/qa/core/accessibilitycheck/data/TableFormattingTest.odt differ
diff --git a/sw/source/core/access/AccessibilityCheck.cxx 
b/sw/source/core/access/AccessibilityCheck.cxx
index 0170003c4a48..ce0409d6ba5b 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -236,6 +236,50 @@ public:
 }
 };
 
+class TableFormattingCheck : public NodeCheck
+{
+private:
+void checkTableNode(SwTableNode* pTableNode)
+{
+if (!pTableNode)
+return;
+
+const SwTable& rTable = pTableNode->GetTable();
+if (!rTable.IsTableComplex())
+{
+size_t nEmptyBoxes = 0;
+size_t nBoxCount = 0;
+for (const SwTableLine* pTableLine : rTable.GetTabLines())
+{
+nBoxCount += pTableLine->GetTabBoxes().size();
+for (const SwTableBox* pBox : pTableLine->GetTabBoxes())
+if (pBox->IsEmpty())
+++nEmptyBoxes;
+}
+// If more than half of the boxes are empty we can assume that it 
is used for formatting
+if (nEmptyBoxes > nBoxCount / 2)
+lclAddIssue(m_rIssueCollection, SwResId(STR_TABLE_FORMATTING),
+sfx::AccessibilityIssueID::TABLE_FORMATTING);
+}
+}
+
+public:
+TableForma

[Libreoffice-commits] core.git: include/sfx2 sw/inc sw/qa sw/source

2022-11-02 Thread Paris Oplopoios (via logerrit)
 include/sfx2/AccessibilityIssue.hxx  |1 
 sw/inc/AccessibilityCheckStrings.hrc |1 
 sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx |   11 ++
 sw/qa/core/accessibilitycheck/data/FakeCaptionTest.odt   |binary
 sw/source/core/access/AccessibilityCheck.cxx |   66 +++
 5 files changed, 79 insertions(+)

New commits:
commit 766151ff6ec759563583abfa43f5bb3755ee2603
Author: Paris Oplopoios 
AuthorDate: Fri Oct 28 13:14:36 2022 +0300
Commit: Tomaž Vajngerl 
CommitDate: Thu Nov 3 07:43:09 2022 +0100

a11y: Add check for fake captions

Add accessibility check and relevant test for a document that has
fake captions

Change-Id: If22999378fd7467151c1d400662858fe1cb0319d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141964
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl 

diff --git a/include/sfx2/AccessibilityIssue.hxx 
b/include/sfx2/AccessibilityIssue.hxx
index 9d1023053515..b9e3266c73a2 100644
--- a/include/sfx2/AccessibilityIssue.hxx
+++ b/include/sfx2/AccessibilityIssue.hxx
@@ -32,6 +32,7 @@ enum class AccessibilityIssueID
 HYPERLINK_IS_TEXT,
 HYPERLINK_SHORT,
 FAKE_FOOTNOTE,
+FAKE_CAPTION,
 MANUAL_NUMBERING
 };
 
diff --git a/sw/inc/AccessibilityCheckStrings.hrc 
b/sw/inc/AccessibilityCheckStrings.hrc
index 86be8b494c90..e63d304d1063 100644
--- a/sw/inc/AccessibilityCheckStrings.hrc
+++ b/sw/inc/AccessibilityCheckStrings.hrc
@@ -22,6 +22,7 @@
 #define STR_TEXT_BLINKING   NC_("STR_TEXT_BLINKING", "Blinking 
text.")
 #define STR_AVOID_FOOTNOTES NC_("STR_AVOID_FOOTNOTES", "Avoid 
footnotes.")
 #define STR_AVOID_FAKE_FOOTNOTESNC_("STR_AVOID_FAKE_FOOTNOTES", "Avoid 
fake footnotes.")
+#define STR_AVOID_FAKE_CAPTIONS NC_("STR_AVOID_FAKE_CAPTIONS", "Avoid 
fake captions.")
 #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_SPACENC_("STR_AVOID_NEWLINES_SPACE", "Avoid 
newlines to create space.")
diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx 
b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
index 39f094a38c2a..02912e4c9d35 100644
--- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -143,6 +143,17 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testCheckFakeFootnote)
 CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_FOOTNOTE, 
aIssues[1]->m_eIssueID);
 }
 
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckFakeCaption)
+{
+SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "FakeCaptionTest.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::FAKE_CAPTION, 
aIssues[0]->m_eIssueID);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/accessibilitycheck/data/FakeCaptionTest.odt 
b/sw/qa/core/accessibilitycheck/data/FakeCaptionTest.odt
new file mode 100644
index ..9630bfcf73d7
Binary files /dev/null and 
b/sw/qa/core/accessibilitycheck/data/FakeCaptionTest.odt differ
diff --git a/sw/source/core/access/AccessibilityCheck.cxx 
b/sw/source/core/access/AccessibilityCheck.cxx
index 3860eb8904e0..0170003c4a48 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -11,12 +11,14 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -26,11 +28,13 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -841,6 +845,67 @@ public:
 }
 };
 
+class FakeCaptionCheck : public NodeCheck
+{
+public:
+FakeCaptionCheck(sfx::AccessibilityIssueCollection& rIssueCollection)
+: NodeCheck(rIssueCollection)
+{
+}
+void check(SwNode* pCurrent) override
+{
+if (!pCurrent->IsTextNode())
+return;
+
+SwTextNode* pTextNode = pCurrent->GetTextNode();
+const OUString& sText = pTextNode->GetText();
+
+if (sText.getLength() == 0)
+return;
+
+// Check if it's a real caption
+const SwNode* aStartFly = pCurrent->FindFlyStartNode();
+if (aStartFly
+&& aStartFly->GetFlyFormat()->GetAnchor().GetAnchorId() != 
RndStdIds::FLY_AS_CHAR)
+return;
+
+auto aIter = SwIterator(*pTextNode);
+auto nCount = 0;
+for (auto aTextFrame = aIter.First(); aTextFrame; aTextFrame = 
aIter.Next())
+{
+aut

[Libreoffice-commits] core.git: include/sfx2 sw/inc sw/qa sw/source

2022-11-02 Thread Paris Oplopoios (via logerrit)
 include/sfx2/AccessibilityIssue.hxx  |1 
 sw/inc/AccessibilityCheckStrings.hrc |1 
 sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx |   12 ++
 sw/qa/core/accessibilitycheck/data/FakeFootnoteTest.odt  |binary
 sw/source/core/access/AccessibilityCheck.cxx |   72 +++
 5 files changed, 86 insertions(+)

New commits:
commit a1ae31bd248ab62a0614f3a25f1abfcc214ff431
Author: Paris Oplopoios 
AuthorDate: Tue Oct 25 23:53:32 2022 +0300
Commit: Tomaž Vajngerl 
CommitDate: Thu Nov 3 07:41:22 2022 +0100

a11y: Add check for fake footnotes

Add accessibility check and relevant test for a document that has
fake footnotes

Change-Id: I22682a161a858f45c956660a51849bd18fcee0e5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141832
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl 

diff --git a/include/sfx2/AccessibilityIssue.hxx 
b/include/sfx2/AccessibilityIssue.hxx
index 7ca02ef3b7e9..9d1023053515 100644
--- a/include/sfx2/AccessibilityIssue.hxx
+++ b/include/sfx2/AccessibilityIssue.hxx
@@ -31,6 +31,7 @@ enum class AccessibilityIssueID
 TEXT_FORMATTING,
 HYPERLINK_IS_TEXT,
 HYPERLINK_SHORT,
+FAKE_FOOTNOTE,
 MANUAL_NUMBERING
 };
 
diff --git a/sw/inc/AccessibilityCheckStrings.hrc 
b/sw/inc/AccessibilityCheckStrings.hrc
index 77b93378869f..86be8b494c90 100644
--- a/sw/inc/AccessibilityCheckStrings.hrc
+++ b/sw/inc/AccessibilityCheckStrings.hrc
@@ -21,6 +21,7 @@
 #define STR_TEXT_CONTRAST   NC_("STR_TEXT_CONTRAST", "Text 
contrast is too low.")
 #define STR_TEXT_BLINKING   NC_("STR_TEXT_BLINKING", "Blinking 
text.")
 #define STR_AVOID_FOOTNOTES NC_("STR_AVOID_FOOTNOTES", "Avoid 
footnotes.")
+#define STR_AVOID_FAKE_FOOTNOTESNC_("STR_AVOID_FAKE_FOOTNOTES", "Avoid 
fake footnotes.")
 #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_SPACENC_("STR_AVOID_NEWLINES_SPACE", "Avoid 
newlines to create space.")
diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx 
b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
index 91d6be266a8c..39f094a38c2a 100644
--- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -131,6 +131,18 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testNumberingCheck)
 CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::MANUAL_NUMBERING, 
aIssues[4]->m_eIssueID);
 }
 
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckFakeFootnote)
+{
+SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "FakeFootnoteTest.odt");
+CPPUNIT_ASSERT(pDoc);
+sw::AccessibilityCheck aCheck(pDoc);
+aCheck.check();
+auto& aIssues = aCheck.getIssueCollection().getIssues();
+CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size());
+CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_FOOTNOTE, 
aIssues[0]->m_eIssueID);
+CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_FOOTNOTE, 
aIssues[1]->m_eIssueID);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/accessibilitycheck/data/FakeFootnoteTest.odt 
b/sw/qa/core/accessibilitycheck/data/FakeFootnoteTest.odt
new file mode 100644
index ..fdacf6cb35de
Binary files /dev/null and 
b/sw/qa/core/accessibilitycheck/data/FakeFootnoteTest.odt differ
diff --git a/sw/source/core/access/AccessibilityCheck.cxx 
b/sw/source/core/access/AccessibilityCheck.cxx
index 0763ff0e90c5..3860eb8904e0 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -23,6 +23,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -770,6 +771,76 @@ public:
 }
 };
 
+class FakeFootnoteCheck : public NodeCheck
+{
+private:
+void checkAutoFormat(SwTextNode* pTextNode, const SwTextAttr* pTextAttr)
+{
+const SwFormatAutoFormat& rAutoFormat = pTextAttr->GetAutoFormat();
+SfxItemIter aItemIter(*rAutoFormat.GetStyleHandle());
+const SfxPoolItem* pItem = aItemIter.GetCurItem();
+while (pItem)
+{
+if (pItem->Which() == RES_CHRATR_ESCAPEMENT)
+{
+auto pEscapementItem = static_cast(pItem);
+if (pEscapementItem->GetEscapement() == 
SvxEscapement::Superscript
+&& pTextAttr->GetStart() == 0 && pTextAttr->GetAnyEnd() == 
1)
+{
+auto pIssue = lclAddIssue(m_rIssueCollection, 
SwResId(STR_AVOID_FAKE_FOOTNOTES),
+  
sfx::AccessibilityIssueID::FAKE_FOOTNOTE);
+pIssue->setIssueObject(IssueObject::TEXT);
+pIssue->setNode(pTextNode);
+SwDoc& rDocument 

[Libreoffice-commits] core.git: include/sfx2 sw/inc sw/qa sw/source

2022-10-20 Thread offtkp (via logerrit)
 include/sfx2/AccessibilityIssue.hxx  |2 +
 sw/inc/AccessibilityCheckStrings.hrc |1 
 sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx |   12 
 sw/qa/core/accessibilitycheck/data/HyperlinkTest.odt |binary
 sw/source/core/access/AccessibilityCheck.cxx |   21 ---
 5 files changed, 33 insertions(+), 3 deletions(-)

New commits:
commit de02e5560168060af0b0c9be847af01c4fadec0b
Author: offtkp 
AuthorDate: Thu Oct 13 19:35:06 2022 +0300
Commit: Tomaž Vajngerl 
CommitDate: Fri Oct 21 08:53:31 2022 +0200

a11y: Add check for short hyperlinks

Add accessibility check and relevant test for a document that uses
short hyperlinks

Change-Id: I5d6bfe345b50d6d42dc04e9e2f7f853cf5f63a84
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141338
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl 

diff --git a/include/sfx2/AccessibilityIssue.hxx 
b/include/sfx2/AccessibilityIssue.hxx
index 085863cbd405..60700bad8d35 100644
--- a/include/sfx2/AccessibilityIssue.hxx
+++ b/include/sfx2/AccessibilityIssue.hxx
@@ -29,6 +29,8 @@ enum class AccessibilityIssueID
 NO_ALT_SHAPE,
 TABLE_MERGE_SPLIT,
 TEXT_FORMATTING,
+HYPERLINK_IS_TEXT,
+HYPERLINK_SHORT,
 };
 
 class SFX2_DLLPUBLIC AccessibilityIssue
diff --git a/sw/inc/AccessibilityCheckStrings.hrc 
b/sw/inc/AccessibilityCheckStrings.hrc
index 9c45cb84ecd9..77b93378869f 100644
--- a/sw/inc/AccessibilityCheckStrings.hrc
+++ b/sw/inc/AccessibilityCheckStrings.hrc
@@ -17,6 +17,7 @@
 #define STR_TABLE_MERGE_SPLIT   NC_("STR_TABLE_MERGE_SPLIT", "Table 
'%OBJECT_NAME%' contains merges or splits")
 #define STR_FAKE_NUMBERING  NC_("STR_FAKE_NUMBERING", "Fake 
numbering '%NUMBERING%'")
 #define STR_HYPERLINK_TEXT_IS_LINK  NC_("STR_HYPERLINK_TEXT_IS_LINK", 
"Hyperlink text is the same as the link address '%LINK%'")
+#define STR_HYPERLINK_TEXT_IS_SHORT NC_("STR_HYPERLINK_TEXT_IS_SHORT", 
"Hyperlink text is too short.")
 #define STR_TEXT_CONTRAST   NC_("STR_TEXT_CONTRAST", "Text 
contrast is too low.")
 #define STR_TEXT_BLINKING   NC_("STR_TEXT_BLINKING", "Blinking 
text.")
 #define STR_AVOID_FOOTNOTES NC_("STR_AVOID_FOOTNOTES", "Avoid 
footnotes.")
diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx 
b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
index 98b08b5a207c..75cf071c1e69 100644
--- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -93,6 +93,18 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testCheckSpacebarSpace)
 CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, 
aIssues[0]->m_eIssueID);
 }
 
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testHyperlinks)
+{
+SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "HyperlinkTest.odt");
+CPPUNIT_ASSERT(pDoc);
+sw::AccessibilityCheck aCheck(pDoc);
+aCheck.check();
+auto& aIssues = aCheck.getIssueCollection().getIssues();
+CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size());
+CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_SHORT, 
aIssues[0]->m_eIssueID);
+CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_IS_TEXT, 
aIssues[1]->m_eIssueID);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/accessibilitycheck/data/HyperlinkTest.odt 
b/sw/qa/core/accessibilitycheck/data/HyperlinkTest.odt
new file mode 100644
index ..1eba1932ce21
Binary files /dev/null and 
b/sw/qa/core/accessibilitycheck/data/HyperlinkTest.odt differ
diff --git a/sw/source/core/access/AccessibilityCheck.cxx 
b/sw/source/core/access/AccessibilityCheck.cxx
index 9746e17c0794..9195fcfcbd52 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -254,7 +254,8 @@ public:
 class HyperlinkCheck : public NodeCheck
 {
 private:
-void checkTextRange(uno::Reference const& xTextRange)
+void checkTextRange(uno::Reference const& xTextRange, 
SwTextNode* pTextNode,
+sal_Int32 nStart)
 {
 uno::Reference xProperties(xTextRange, 
uno::UNO_QUERY);
 if 
(!xProperties->getPropertySetInfo()->hasPropertyByName("HyperLinkURL"))
@@ -269,7 +270,19 @@ private:
 {
 OUString sIssueText
 = 
SwResId(STR_HYPERLINK_TEXT_IS_LINK).replaceFirst("%LINK%", sHyperlink);
-lclAddIssue(m_rIssueCollection, sIssueText);
+lclAddIssue(m_rIssueCollection, sIssueText,
+sfx::AccessibilityIssueID::HYPERLINK_IS_TEXT);
+}
+else if (sText.getLength() <= 5)
+{
+auto pIssue = lclAddIssue(m_rIssueCollection, 
SwResId(STR_HYPERLINK_TEXT_IS_SHORT),
+  
sfx::AccessibilityIssueID::HYPERLINK_SH

[Libreoffice-commits] core.git: include/sfx2 sw/inc sw/qa sw/source

2022-10-15 Thread offtkp (via logerrit)
 include/sfx2/AccessibilityIssue.hxx|1 
 sw/inc/AccessibilityCheckStrings.hrc   |1 
 sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx   |   11 +++
 sw/qa/core/accessibilitycheck/data/BackgroundImageTest.odt |binary
 sw/source/core/access/AccessibilityCheck.cxx   |   42 +
 5 files changed, 55 insertions(+)

New commits:
commit f9eb59a59723275f7057419d2c05393ac2781972
Author: offtkp 
AuthorDate: Tue Oct 11 19:02:39 2022 +0300
Commit: Tomaž Vajngerl 
CommitDate: Sat Oct 15 10:34:28 2022 +0200

a11y: Add check for background image

Add accessibility check and relevant test for a document with a
background image

Change-Id: I7b97cff27af66c2614bfc535d369b17ec048e8d9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141230
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl 

diff --git a/include/sfx2/AccessibilityIssue.hxx 
b/include/sfx2/AccessibilityIssue.hxx
index 4cc9a72e7c19..085863cbd405 100644
--- a/include/sfx2/AccessibilityIssue.hxx
+++ b/include/sfx2/AccessibilityIssue.hxx
@@ -22,6 +22,7 @@ enum class AccessibilityIssueID
 UNSPECIFIED, // TODO: remove - temporary
 DOCUMENT_TITLE,
 DOCUMENT_LANGUAGE,
+DOCUMENT_BACKGROUND,
 STYLE_LANGUAGE,
 NO_ALT_OLE,
 NO_ALT_GRAPHIC,
diff --git a/sw/inc/AccessibilityCheckStrings.hrc 
b/sw/inc/AccessibilityCheckStrings.hrc
index 2c098e50edc8..858de1a47d93 100644
--- a/sw/inc/AccessibilityCheckStrings.hrc
+++ b/sw/inc/AccessibilityCheckStrings.hrc
@@ -21,6 +21,7 @@
 #define STR_TEXT_BLINKING   NC_("STR_TEXT_BLINKING", "Blinking 
text.")
 #define STR_AVOID_FOOTNOTES NC_("STR_AVOID_FOOTNOTES", "Avoid 
footnotes.")
 #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_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 d7ad7674c13b..2c36d2b5d4e7 100644
--- a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -59,6 +59,17 @@ CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, 
testCheckParagraphIssues)
 CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, 
aIssues[0]->m_eIssueID);
 }
 
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckBackgroundImage)
+{
+SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "BackgroundImageTest.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::DOCUMENT_BACKGROUND, 
aIssues[0]->m_eIssueID);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/accessibilitycheck/data/BackgroundImageTest.odt 
b/sw/qa/core/accessibilitycheck/data/BackgroundImageTest.odt
new file mode 100644
index ..eff6f178394b
Binary files /dev/null and 
b/sw/qa/core/accessibilitycheck/data/BackgroundImageTest.odt differ
diff --git a/sw/source/core/access/AccessibilityCheck.cxx 
b/sw/source/core/access/AccessibilityCheck.cxx
index f6c6ec7b43d5..de0a5bf63472 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -21,6 +21,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -898,6 +899,46 @@ public:
 }
 };
 
+class BackgroundImageCheck : public DocumentCheck
+{
+public:
+BackgroundImageCheck(sfx::AccessibilityIssueCollection& rIssueCollection)
+: DocumentCheck(rIssueCollection)
+{
+}
+void check(SwDoc* pDoc) override
+{
+uno::Reference xDoc = 
pDoc->GetDocShell()->GetBaseModel();
+uno::Reference 
xStyleFamiliesSupplier(xDoc, uno::UNO_QUERY);
+if (!xStyleFamiliesSupplier.is())
+return;
+uno::Reference xStyleFamilies
+= xStyleFamiliesSupplier->getStyleFamilies();
+uno::Reference 
xStyleFamily(xStyleFamilies->getByName("PageStyles"),
+uno::UNO_QUERY);
+if (!xStyleFamily.is())
+return;
+const uno::Sequence& xStyleFamilyNames = 
xStyleFamily->getElementNames();
+for (const OUString& rStyleFamilyName : xStyleFamilyNames)
+{
+uno::Reference xPropertySet(
+xStyleFamily->getByN