[Libreoffice-commits] core.git: include/sfx2 sw/inc sw/qa sw/source sw/uiconfig
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
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
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
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
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
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