[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