[Libreoffice-commits] core.git: sw/inc sw/source
Ivan Stefanenko (via logerrit)
logerrit at kemper.freedesktop.org
Thu Nov 5 08:35:25 UTC 2020
sw/inc/AccessibilityCheckStrings.hrc | 1
sw/source/core/access/AccessibilityCheck.cxx | 43 +++++++++++++++++++++++++++
2 files changed, 44 insertions(+)
New commits:
commit c21dd1a08e7cb776a0d7170001ee8ea3b88f1367
Author: Ivan Stefanenko <ivan.stefanenko at collabora.com>
AuthorDate: Tue Nov 3 23:52:23 2020 +0300
Commit: Mike Kaganski <mike.kaganski at collabora.com>
CommitDate: Thu Nov 5 09:34:41 2020 +0100
tdf#137968 Added check for the headings order
Headings' levels order is important for readers and converters.
Check firstly finds out if the node is a TextNode, then gets it's OutlineLevel.
If it is greater than 0, i.e. the node is a heading, then it checks if
node's heading level is greater then previous one's by more than 1.
If so, warning is thrown.
So the first heading level is always 1 and no heading levels are greater then previous
by more than 1.
Change-Id: I39d230d747699eddd36610193bde9b23f348e257
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105274
Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>
Tested-by: Jenkins
diff --git a/sw/inc/AccessibilityCheckStrings.hrc b/sw/inc/AccessibilityCheckStrings.hrc
index 73ac5043e57b..7470ab4b9248 100644
--- a/sw/inc/AccessibilityCheckStrings.hrc
+++ b/sw/inc/AccessibilityCheckStrings.hrc
@@ -26,6 +26,7 @@
#define STR_NON_INTERACTIVE_FORMS NC_("STR_NON_INTERACTIVE_FORMS", "An input form is not interactive.")
#define STR_FLOATING_TEXT NC_("STR_FLOATING_TEXT", "Avoid floating text.")
#define STR_HEADING_IN_TABLE NC_("STR_HEADING_IN_TABLE", "Tables must not contain headings.")
+#define STR_HEADING_ORDER NC_("STR_HEADING_ORDER", "Keep headings' levels ordered. Heading level %LEVEL_CURRENT% must not go after %LEVEL_PREV%.")
#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 08e8f1d47051..3f97837d97d0 100644
--- a/sw/source/core/access/AccessibilityCheck.cxx
+++ b/sw/source/core/access/AccessibilityCheck.cxx
@@ -726,6 +726,48 @@ public:
}
};
+/// Checking if headings are ordered correctly.
+class HeadingOrderCheck : public NodeCheck
+{
+public:
+ HeadingOrderCheck(sfx::AccessibilityIssueCollection& rIssueCollection)
+ : NodeCheck(rIssueCollection)
+ {
+ }
+
+ void check(SwNode* pCurrent) override
+ {
+ const SwTextNode* pTextNode = pCurrent->GetTextNode();
+ if (!pTextNode)
+ return;
+
+ // If outline level stands for heading level...
+ const int currentLevel = pTextNode->GetAttrOutlineLevel();
+ if (currentLevel)
+ {
+ // ... and if is bigger than previous by more than 1, warn.
+ if (currentLevel - m_prevLevel > 1)
+ {
+ // Preparing and posting a warning.
+ OUString resultString = SwResId(STR_HEADING_ORDER);
+ resultString
+ = resultString.replaceAll("%LEVEL_CURRENT%", OUString::number(currentLevel));
+ resultString
+ = resultString.replaceAll("%LEVEL_PREV%", OUString::number(m_prevLevel));
+
+ lclAddIssue(m_rIssueCollection, resultString);
+ }
+
+ // Updating previous level.
+ m_prevLevel = currentLevel;
+ }
+ }
+
+private:
+ // Previous heading level to compare with.
+ int m_prevLevel = 0;
+};
+
class DocumentCheck : public BaseCheck
{
public:
@@ -879,6 +921,7 @@ void AccessibilityCheck::check()
aNodeChecks.push_back(std::make_unique<NonInteractiveFormCheck>(m_aIssueCollection));
aNodeChecks.push_back(std::make_unique<FloatingTextCheck>(m_aIssueCollection));
aNodeChecks.push_back(std::make_unique<TableHeadingCheck>(m_aIssueCollection));
+ aNodeChecks.push_back(std::make_unique<HeadingOrderCheck>(m_aIssueCollection));
auto const& pNodes = m_pDoc->GetNodes();
SwNode* pNode = nullptr;
More information about the Libreoffice-commits
mailing list