sw/source/core/access/AccessibilityCheck.cxx | 87 +++++++++++++++++++++++++++ 1 file changed, 87 insertions(+)
New commits: commit 071dd016424fce45e3c38172d92716e052dde1ff Author: Tomaž Vajngerl <[email protected]> AuthorDate: Sun Dec 15 19:02:16 2019 +0100 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Sun Dec 15 19:02:16 2019 +0100 acc. check: check for endnotes and footnotes Endnotes and footnotes cause problems for accessibility and should be avoided. Change-Id: Ibbce4d246f76feb8d389a7ba588836e2fef8f5d5 diff --git a/sw/source/core/access/AccessibilityCheck.cxx b/sw/source/core/access/AccessibilityCheck.cxx index 90e1a6eb658c..c37f5975a04b 100644 --- a/sw/source/core/access/AccessibilityCheck.cxx +++ b/sw/source/core/access/AccessibilityCheck.cxx @@ -25,6 +25,8 @@ #include <charatr.hxx> #include <svx/xfillit0.hxx> #include <svx/xflclit.hxx> +#include <ftnidx.hxx> +#include <txtftn.hxx> namespace sw { @@ -40,6 +42,8 @@ OUString sStyleNoLanguage("Style '%STYLE_NAME%' has no language set"); OUString sDocumentTitle("Document title is not set"); OUString sTextContrast("Text contrast is too low."); OUString sTextBlinking("Blinking text."); +OUString sAvoidFootnotes("Avoid footnotes."); +OUString sAvoidEndnotes("Avoid endnotes."); } class BaseCheck @@ -529,6 +533,35 @@ public: } }; +class FootnoteEndnoteCheck : public DocumentCheck +{ +public: + FootnoteEndnoteCheck(std::vector<svx::AccessibilityCheckResult>& rResultCollection) + : DocumentCheck(rResultCollection) + { + } + + void check(SwDoc* pDoc) override + { + for (SwTextFootnote const* pTextFootnote : pDoc->GetFootnoteIdxs()) + { + SwFormatFootnote const& rFootnote = pTextFootnote->GetFootnote(); + if (rFootnote.IsEndNote()) + { + svx::AccessibilityCheckResult aResult; + aResult.m_aIssueText = sAvoidEndnotes; + m_rResultCollection.push_back(aResult); + } + else + { + svx::AccessibilityCheckResult aResult; + aResult.m_aIssueText = sAvoidFootnotes; + m_rResultCollection.push_back(aResult); + } + } + } +}; + // Check Shapes, TextBox void AccessibilityCheck::checkObject(SdrObject* pObject) { @@ -556,6 +589,7 @@ void AccessibilityCheck::check() std::vector<std::unique_ptr<DocumentCheck>> aDocumentChecks; aDocumentChecks.push_back(std::make_unique<DocumentDefaultLanguageCheck>(m_aResultCollection)); aDocumentChecks.push_back(std::make_unique<DocumentTitleCheck>(m_aResultCollection)); + aDocumentChecks.push_back(std::make_unique<FootnoteEndnoteCheck>(m_aResultCollection)); for (std::unique_ptr<DocumentCheck>& rpDocumentCheck : aDocumentChecks) { commit ff3efe7b148eb2b50beb379221f8f919275fcaf3 Author: Tomaž Vajngerl <[email protected]> AuthorDate: Sun Dec 15 17:36:24 2019 +0100 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Sun Dec 15 17:36:24 2019 +0100 acc. check: check for blinking text Change-Id: If023c9b6c6225a3889f2fd68b8ed62abb4365d48 diff --git a/sw/source/core/access/AccessibilityCheck.cxx b/sw/source/core/access/AccessibilityCheck.cxx index 062bea8f18fb..90e1a6eb658c 100644 --- a/sw/source/core/access/AccessibilityCheck.cxx +++ b/sw/source/core/access/AccessibilityCheck.cxx @@ -39,6 +39,7 @@ OUString sDocumentDefaultLanguage("Document default language is not set"); OUString sStyleNoLanguage("Style '%STYLE_NAME%' has no language set"); OUString sDocumentTitle("Document title is not set"); OUString sTextContrast("Text contrast is too low."); +OUString sTextBlinking("Blinking text."); } class BaseCheck @@ -399,6 +400,57 @@ public: } }; +class BlinkingTextCheck : public NodeCheck +{ +private: + void checkTextRange(uno::Reference<text::XTextRange> const& xTextRange) + { + uno::Reference<beans::XPropertySet> xProperties(xTextRange, uno::UNO_QUERY); + if (xProperties.is() && xProperties->getPropertySetInfo()->hasPropertyByName("CharFlash")) + { + bool bBlinking = false; + xProperties->getPropertyValue("CharFlash") >>= bBlinking; + + if (bBlinking) + { + svx::AccessibilityCheckResult aResult; + aResult.m_aIssueText = sTextBlinking; + m_rResultCollection.push_back(aResult); + } + } + } + +public: + BlinkingTextCheck( + std::vector<svx::AccessibilityCheckResult>& rAccessibilityCheckResultCollection) + : NodeCheck(rAccessibilityCheckResultCollection) + { + } + + void check(SwNode* pCurrent) override + { + if (pCurrent->IsTextNode()) + { + SwTextNode* pTextNode = pCurrent->GetTextNode(); + uno::Reference<text::XTextContent> xParagraph; + xParagraph = SwXParagraph::CreateXParagraph(*pTextNode->GetDoc(), pTextNode); + if (xParagraph.is()) + { + uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParagraph, + uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xRunEnum + = xRunEnumAccess->createEnumeration(); + while (xRunEnum->hasMoreElements()) + { + uno::Reference<text::XTextRange> xRun(xRunEnum->nextElement(), uno::UNO_QUERY); + if (xRun.is()) + checkTextRange(xRun); + } + } + } + } +}; + class DocumentCheck : public BaseCheck { public: @@ -516,6 +568,7 @@ void AccessibilityCheck::check() aNodeChecks.push_back(std::make_unique<NumberingCheck>(m_aResultCollection)); aNodeChecks.push_back(std::make_unique<HyperlinkCheck>(m_aResultCollection)); aNodeChecks.push_back(std::make_unique<TextContrastCheck>(m_aResultCollection)); + aNodeChecks.push_back(std::make_unique<BlinkingTextCheck>(m_aResultCollection)); auto const& pNodes = m_pDoc->GetNodes(); SwNode* pNode = nullptr; _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
