summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2019-12-15 10:19:24 +0100
committerTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2019-12-25 13:39:17 +0100
commitc173cce99f0226cd0f0d7a8be672110926972d85 (patch)
tree5879c1451b35e86be7ffe8fb410a79f0f025180e
parentacc. check: check hyperlink text doesn't contain the link (diff)
downloadcore-c173cce99f0226cd0f0d7a8be672110926972d85.tar.gz
core-c173cce99f0226cd0f0d7a8be672110926972d85.zip
acc. check: check document default language and style language
This checks hat the defualt language of the document is set and in addition that the used styles also have the default language set. Accessibility requires the language always be set. Change-Id: I6ea36e6e8b30289cdb35311da9470f856a847b38
-rw-r--r--sw/source/core/access/AccessibilityCheck.cxx77
1 files changed, 74 insertions, 3 deletions
diff --git a/sw/source/core/access/AccessibilityCheck.cxx b/sw/source/core/access/AccessibilityCheck.cxx
index 230a006a7294..e342df2e5bd2 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -19,6 +19,8 @@
#include <com/sun/star/text/XTextContent.hpp>
#include <unoparagraph.hxx>
#include <tools/urlobj.hxx>
+#include <editeng/langitem.hxx>
+#include <charatr.hxx>
namespace sw
{
@@ -29,19 +31,31 @@ OUString sNoAlt("No alt text for graphic '%OBJECT_NAME%'");
OUString sTableMergeSplit("Table '%OBJECT_NAME%' contains merges or splits");
OUString sFakeNumbering("Fake numbering '%NUMBERING%'");
OUString sHyperlinkTextIsLink("Hyperlink text is the same as the link address '%LINK%'");
+OUString sDocumentDefaultLanguage("Document default language is not set");
+OUString sStyleNoLanguage("Style '%STYLE_NAME%' has no language set");
}
-class NodeCheck
+class BaseCheck
{
protected:
std::vector<svx::AccessibilityCheckResult>& m_rResultCollection;
public:
- NodeCheck(std::vector<svx::AccessibilityCheckResult>& rResultCollection)
+ BaseCheck(std::vector<svx::AccessibilityCheckResult>& rResultCollection)
: m_rResultCollection(rResultCollection)
{
}
- virtual ~NodeCheck() {}
+ virtual ~BaseCheck() {}
+};
+
+class NodeCheck : public BaseCheck
+{
+public:
+ NodeCheck(std::vector<svx::AccessibilityCheckResult>& rResultCollection)
+ : BaseCheck(rResultCollection)
+ {
+ }
+
virtual void check(SwNode* pCurrent) = 0;
};
@@ -245,6 +259,55 @@ public:
}
};
+class DocumentCheck : public BaseCheck
+{
+public:
+ DocumentCheck(std::vector<svx::AccessibilityCheckResult>& rResultCollection)
+ : BaseCheck(rResultCollection)
+ {
+ }
+
+ virtual void check(SwDoc* pDoc) = 0;
+};
+
+// Check default language
+class DocumentDefaultLanguageCheck : public DocumentCheck
+{
+public:
+ DocumentDefaultLanguageCheck(std::vector<svx::AccessibilityCheckResult>& rResultCollection)
+ : DocumentCheck(rResultCollection)
+ {
+ }
+
+ void check(SwDoc* pDoc) override
+ {
+ // TODO maybe - also check RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CTL_LANGUAGE if CJK or CTL are enabled
+ const SvxLanguageItem& rLang
+ = static_cast<const SvxLanguageItem&>(pDoc->GetDefault(RES_CHRATR_LANGUAGE));
+ LanguageType eLanguage = rLang.GetLanguage();
+ if (eLanguage == LANGUAGE_NONE)
+ {
+ svx::AccessibilityCheckResult aResult;
+ aResult.m_aIssueText = sDocumentDefaultLanguage;
+ m_rResultCollection.push_back(aResult);
+ }
+ else
+ {
+ for (SwTextFormatColl* pTextFormatCollection : *pDoc->GetTextFormatColls())
+ {
+ const SwAttrSet& rAttrSet = pTextFormatCollection->GetAttrSet();
+ if (rAttrSet.GetLanguage(false).GetLanguage() == LANGUAGE_NONE)
+ {
+ svx::AccessibilityCheckResult aResult;
+ OUString sName = pTextFormatCollection->GetName();
+ aResult.m_aIssueText = sStyleNoLanguage.replaceAll("%STYLE_NAME%", sName);
+ m_rResultCollection.push_back(aResult);
+ }
+ }
+ }
+ }
+};
+
// Check Shapes, TextBox
void AccessibilityCheck::checkObject(SdrObject* pObject)
{
@@ -269,6 +332,14 @@ void AccessibilityCheck::check()
if (m_pDoc == nullptr)
return;
+ std::vector<std::unique_ptr<DocumentCheck>> aDocumentChecks;
+ aDocumentChecks.push_back(std::make_unique<DocumentDefaultLanguageCheck>(m_aResultCollection));
+
+ for (std::unique_ptr<DocumentCheck>& rpDocumentCheck : aDocumentChecks)
+ {
+ rpDocumentCheck->check(m_pDoc);
+ }
+
std::vector<std::unique_ptr<NodeCheck>> aNodeChecks;
aNodeChecks.push_back(std::make_unique<NoTextNodeAltTextCheck>(m_aResultCollection));
aNodeChecks.push_back(std::make_unique<TableNodeMergeSplitCheck>(m_aResultCollection));