[Libreoffice-commits] core.git: include/sfx2 sw/inc sw/source
Tomaž Vajngerl (via logerrit)
logerrit at kemper.freedesktop.org
Sun Jan 26 09:42:03 UTC 2020
include/sfx2/AccessibilityIssue.hxx | 1
sw/inc/AccessibilityCheckStrings.hrc | 1
sw/source/core/access/AccessibilityCheck.cxx | 110 +++++++++++++++++++++++++++
3 files changed, 112 insertions(+)
New commits:
commit d750f25c013bde5b3282ce5fa0388dc2f3da6546
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Wed Jan 22 17:01:05 2020 +0100
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Sun Jan 26 10:41:30 2020 +0100
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 at gmail.com>
diff --git a/include/sfx2/AccessibilityIssue.hxx b/include/sfx2/AccessibilityIssue.hxx
index 8e0d85cdd7ae..32522ff63f47 100644
--- a/include/sfx2/AccessibilityIssue.hxx
+++ b/include/sfx2/AccessibilityIssue.hxx
@@ -28,6 +28,7 @@ enum class AccessibilityIssueID
NO_ALT_GRAPHIC,
NO_ALT_SHAPE,
TABLE_MERGE_SPLIT,
+ TEXT_FORMATTING,
};
class SFX2_DLLPUBLIC AccessibilityIssue
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;
More information about the Libreoffice-commits
mailing list