summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2020-01-22 17:01:05 +0100
committerTomaž Vajngerl <quikee@gmail.com>2020-01-26 10:41:30 +0100
commitd750f25c013bde5b3282ce5fa0388dc2f3da6546 (patch)
tree7ad3dbcaa94a1e8f2cd4c7375e9c07ebaf7f6a53 /sw
parent51b5b93092d6231615de470c62494c24e54828a1 (diff)
acc. check: check if text format conveys additional meaning
Change-Id: I8f51248e453018c33ddc64b00cdbc1708309e577 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87420 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/AccessibilityCheckStrings.hrc1
-rw-r--r--sw/source/core/access/AccessibilityCheck.cxx110
2 files changed, 111 insertions, 0 deletions
diff --git a/sw/inc/AccessibilityCheckStrings.hrc b/sw/inc/AccessibilityCheckStrings.hrc
index ade032e13554..e51f26c79e6f 100644
--- a/sw/inc/AccessibilityCheckStrings.hrc
+++ b/sw/inc/AccessibilityCheckStrings.hrc
@@ -22,6 +22,7 @@
#define STR_AVOID_FOOTNOTES NC_("STR_AVOID_FOOTNOTES", "Avoid footnotes.")
#define STR_AVOID_ENDNOTES NC_("STR_AVOID_ENDNOTES", "Avoid endnotes.")
#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_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/source/core/access/AccessibilityCheck.cxx b/sw/source/core/access/AccessibilityCheck.cxx
index aaeacae84bac..2475fb3172fc 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -29,6 +29,7 @@
#include <svx/xflclit.hxx>
#include <ftnidx.hxx>
#include <txtftn.hxx>
+#include <svl/itemiter.hxx>
namespace sw
{
@@ -426,6 +427,114 @@ public:
}
};
+class TextFormattingCheck : public NodeCheck
+{
+private:
+public:
+ TextFormattingCheck(sfx::AccessibilityIssueCollection& rIssueCollection)
+ : NodeCheck(rIssueCollection)
+ {
+ }
+
+ void checkAutoFormat(const SwTextAttr* pTextAttr)
+ {
+ const SwFormatAutoFormat& rAutoFormat = pTextAttr->GetAutoFormat();
+ SfxItemIter aItemIter(*rAutoFormat.GetStyleHandle());
+ const SfxPoolItem* pItem = aItemIter.GetCurItem();
+ std::vector<OUString> aFormattings;
+ while (pItem)
+ {
+ OUString sFormattingType;
+ switch (pItem->Which())
+ {
+ case RES_CHRATR_WEIGHT:
+ case RES_CHRATR_CJK_WEIGHT:
+ case RES_CHRATR_CTL_WEIGHT:
+ sFormattingType = "Weight";
+ break;
+ case RES_CHRATR_POSTURE:
+ case RES_CHRATR_CJK_POSTURE:
+ case RES_CHRATR_CTL_POSTURE:
+ sFormattingType = "Posture";
+ break;
+
+ case RES_CHRATR_SHADOWED:
+ sFormattingType = "Shadowed";
+ break;
+
+ case RES_CHRATR_COLOR:
+ sFormattingType = "Font Color";
+ break;
+
+ case RES_CHRATR_FONTSIZE:
+ case RES_CHRATR_CJK_FONTSIZE:
+ case RES_CHRATR_CTL_FONTSIZE:
+ sFormattingType = "Font Size";
+ break;
+
+ case RES_CHRATR_FONT:
+ case RES_CHRATR_CJK_FONT:
+ case RES_CHRATR_CTL_FONT:
+ sFormattingType = "Font";
+ break;
+
+ case RES_CHRATR_EMPHASIS_MARK:
+ sFormattingType = "Emphasis Mark";
+ break;
+
+ case RES_CHRATR_UNDERLINE:
+ sFormattingType = "Underline";
+ break;
+
+ case RES_CHRATR_OVERLINE:
+ sFormattingType = "Overline";
+ break;
+
+ case RES_CHRATR_CROSSEDOUT:
+ sFormattingType = "Strikethrough";
+ break;
+
+ case RES_CHRATR_RELIEF:
+ sFormattingType = "Relief";
+ break;
+
+ case RES_CHRATR_CONTOUR:
+ sFormattingType = "Outline";
+ break;
+ default:
+ break;
+ }
+ if (!sFormattingType.isEmpty())
+ aFormattings.push_back(sFormattingType);
+ pItem = aItemIter.NextItem();
+ }
+ if (!aFormattings.empty())
+ {
+ lclAddIssue(m_rIssueCollection, SwResId(STR_TEXT_FORMATTING_CONVEYS_MEANING),
+ sfx::AccessibilityIssueID::TEXT_FORMATTING);
+ }
+ }
+ void check(SwNode* pCurrent) override
+ {
+ if (pCurrent->IsTextNode())
+ {
+ SwTextNode* pTextNode = pCurrent->GetTextNode();
+ if (pTextNode->HasHints())
+ {
+ SwpHints& rHints = pTextNode->GetSwpHints();
+ for (size_t i = 0; i < rHints.Count(); ++i)
+ {
+ const SwTextAttr* pTextAttr = rHints.Get(i);
+ if (pTextAttr->Which() == RES_TXTATR_AUTOFMT)
+ {
+ checkAutoFormat(pTextAttr);
+ }
+ }
+ }
+ }
+ }
+};
+
class BlinkingTextCheck : public NodeCheck
{
private:
@@ -648,6 +757,7 @@ void AccessibilityCheck::check()
aNodeChecks.push_back(std::make_unique<TextContrastCheck>(m_aIssueCollection));
aNodeChecks.push_back(std::make_unique<BlinkingTextCheck>(m_aIssueCollection));
aNodeChecks.push_back(std::make_unique<HeaderCheck>(m_aIssueCollection));
+ aNodeChecks.push_back(std::make_unique<TextFormattingCheck>(m_aIssueCollection));
auto const& pNodes = m_pDoc->GetNodes();
SwNode* pNode = nullptr;