accessible/src/base/nsTextEquivUtils.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* vim:expandtab:shiftwidth=2:tabstop=2:
     3  */
     4 /* This Source Code Form is subject to the terms of the Mozilla Public
     5  * License, v. 2.0. If a copy of the MPL was not distributed with this
     6  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     8 #ifndef _nsTextEquivUtils_H_
     9 #define _nsTextEquivUtils_H_
    11 #include "Accessible.h"
    12 #include "Role.h"
    14 class nsIContent;
    16 /**
    17  * Text equivalent computation rules (see nsTextEquivUtils::gRoleToNameRulesMap)
    18  */
    19 enum ETextEquivRule
    20 {
    21   // No rule.
    22   eNoNameRule = 0x00,
    24   // Walk into subtree only if the currently navigated accessible is not root
    25   // accessible (i.e. if the accessible is part of text equivalent computation).
    26   eNameFromSubtreeIfReqRule = 0x01,
    28   // Text equivalent computation from subtree is allowed.
    29   eNameFromSubtreeRule = 0x03,
    31   // The accessible allows to append its value to text equivalent.
    32   // XXX: This is temporary solution. Once we move accessible value of links
    33   // and linkable accessibles to MSAA part we can remove this.
    34   eNameFromValueRule = 0x04
    35 };
    37 /**
    38  * The class provides utils methods to compute the accessible name and
    39  * description.
    40  */
    41 class nsTextEquivUtils
    42 {
    43 public:
    44   typedef mozilla::a11y::Accessible Accessible;
    46   /**
    47    * Determines if the accessible has a given name rule.
    48    *
    49    * @param aAccessible [in] the given accessible
    50    * @param aRule       [in] a given name rule
    51    * @return true if the accessible has the rule
    52    */
    53   static inline bool HasNameRule(Accessible* aAccessible, ETextEquivRule aRule)
    54   {
    55     return (GetRoleRule(aAccessible->Role()) & aRule) == aRule;
    56   }
    58   /**
    59    * Calculates the name from accessible subtree if allowed.
    60    *
    61    * @param aAccessible [in] the given accessible
    62    * @param aName       [out] accessible name
    63    */
    64   static nsresult GetNameFromSubtree(Accessible* aAccessible,
    65                                      nsAString& aName);
    67   /**
    68    * Calculates text equivalent from the subtree. Similar to GetNameFromSubtree.
    69    * However it returns not empty result for things like HTML p.
    70    */
    71   static void GetTextEquivFromSubtree(Accessible* aAccessible,
    72                                       nsString& aTextEquiv)
    73   {
    74     aTextEquiv.Truncate();
    76     AppendFromAccessibleChildren(aAccessible, &aTextEquiv);
    77     aTextEquiv.CompressWhitespace();
    78   }
    80   /**
    81    * Calculates text equivalent for the given accessible from its IDRefs
    82    * attribute (like aria-labelledby or aria-describedby).
    83    *
    84    * @param aAccessible  [in] the accessible text equivalent is computed for
    85    * @param aIDRefsAttr  [in] IDRefs attribute on DOM node of the accessible
    86    * @param aTextEquiv   [out] result text equivalent
    87    */
    88   static nsresult GetTextEquivFromIDRefs(Accessible* aAccessible,
    89                                          nsIAtom *aIDRefsAttr,
    90                                          nsAString& aTextEquiv);
    92   /**
    93    * Calculates the text equivalent from the given content and its subtree if
    94    * allowed and appends it to the given string.
    95    *
    96    * @param aInitiatorAcc  [in] the accessible text equivalent is computed for
    97    *                       in the end (root accessible of text equivalent
    98    *                       calculation recursion)
    99    * @param aContent       [in] the given content the text equivalent is
   100    *                       computed from
   101    * @param aString        [in, out] the string
   102    */
   103   static nsresult AppendTextEquivFromContent(Accessible* aInitiatorAcc,
   104                                              nsIContent *aContent,
   105                                              nsAString *aString);
   107   /**
   108    * Calculates the text equivalent from the given text content (may be text
   109    * node or html:br) and appends it to the given string.
   110    *
   111    * @param aContent       [in] the text content
   112    * @param aString        [in, out] the string
   113    */
   114   static nsresult AppendTextEquivFromTextContent(nsIContent *aContent,
   115                                                  nsAString *aString);
   117 private:
   118   /**
   119    * Iterates accessible children and calculates text equivalent from each
   120    * child.
   121    */
   122   static nsresult AppendFromAccessibleChildren(Accessible* aAccessible,
   123                                                nsAString *aString);
   125   /**
   126    * Calculates text equivalent from the given accessible and its subtree if
   127    * allowed.
   128    */
   129   static nsresult AppendFromAccessible(Accessible* aAccessible,
   130                                        nsAString *aString);
   132   /**
   133    * Calculates text equivalent from the value of given accessible.
   134    */
   135   static nsresult AppendFromValue(Accessible* aAccessible,
   136                                   nsAString *aString);
   137   /**
   138    * Iterates DOM children and calculates text equivalent from each child node.
   139    */
   140   static nsresult AppendFromDOMChildren(nsIContent *aContent,
   141                                         nsAString *aString);
   143   /**
   144    * Calculates text equivalent from the given DOM node and its subtree if
   145    * allowed.
   146    */
   147   static nsresult AppendFromDOMNode(nsIContent *aContent, nsAString *aString);
   149   /**
   150    * Concatenates strings and appends space between them. Returns true if
   151    * text equivalent string was appended.
   152    */
   153   static bool AppendString(nsAString *aString,
   154                              const nsAString& aTextEquivalent);
   156   /**
   157    * Returns the rule (constant of ETextEquivRule) for a given role.
   158    */
   159   static uint32_t GetRoleRule(mozilla::a11y::roles::Role aRole);
   160 };
   162 #endif

mercurial