layout/mathml/nsMathMLOperators.h

Thu, 15 Jan 2015 21:03:48 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 21:03:48 +0100
branch
TOR_BUG_9701
changeset 11
deefc01c0e14
permissions
-rw-r--r--

Integrate friendly tips from Tor colleagues to make (or not) 4.5 alpha 3;
This includes removal of overloaded (but unused) methods, and addition of
a overlooked call to DataStruct::SetData(nsISupports, uint32_t, bool.)

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #ifndef nsMathMLOperators_h___
     7 #define nsMathMLOperators_h___
     9 #include <stdint.h>
    10 #include "nsStringFwd.h"
    12 enum nsStretchDirection {
    13   NS_STRETCH_DIRECTION_UNSUPPORTED = -1,
    14   NS_STRETCH_DIRECTION_DEFAULT     =  0,
    15   NS_STRETCH_DIRECTION_HORIZONTAL  =  1,
    16   NS_STRETCH_DIRECTION_VERTICAL    =  2
    17 };
    19 typedef uint32_t nsOperatorFlags;
    20 enum {
    21   // define the bits used to handle the operator
    22   NS_MATHML_OPERATOR_MUTABLE            = 1<<30,
    23   NS_MATHML_OPERATOR_EMBELLISH_ANCESTOR = 1<<29,
    24   NS_MATHML_OPERATOR_EMBELLISH_ISOLATED = 1<<28,
    25   NS_MATHML_OPERATOR_CENTERED           = 1<<27,
    26   NS_MATHML_OPERATOR_INVISIBLE          = 1<<26,
    28   // define the bits used in the Operator Dictionary
    30   // the very last two bits tell us the form
    31   NS_MATHML_OPERATOR_FORM               = 0x3,
    32   NS_MATHML_OPERATOR_FORM_INFIX         = 1,
    33   NS_MATHML_OPERATOR_FORM_PREFIX        = 2,
    34   NS_MATHML_OPERATOR_FORM_POSTFIX       = 3,
    36   // the next 2 bits tell us the direction
    37   NS_MATHML_OPERATOR_DIRECTION            = 0x3<<2,
    38   NS_MATHML_OPERATOR_DIRECTION_HORIZONTAL = 1<<2,
    39   NS_MATHML_OPERATOR_DIRECTION_VERTICAL   = 2<<2,
    41   // other bits used in the Operator Dictionary
    42   NS_MATHML_OPERATOR_STRETCHY           = 1<<4,
    43   NS_MATHML_OPERATOR_FENCE              = 1<<5,
    44   NS_MATHML_OPERATOR_ACCENT             = 1<<6,
    45   NS_MATHML_OPERATOR_LARGEOP            = 1<<7,
    46   NS_MATHML_OPERATOR_SEPARATOR          = 1<<8,
    47   NS_MATHML_OPERATOR_MOVABLELIMITS      = 1<<9,
    48   NS_MATHML_OPERATOR_SYMMETRIC          = 1<<10,
    49   NS_MATHML_OPERATOR_INTEGRAL           = 1<<11,
    50   NS_MATHML_OPERATOR_MIRRORABLE         = 1<<12,
    52   // Additional bits not stored in the dictionary
    53   NS_MATHML_OPERATOR_MINSIZE_ABSOLUTE   = 1<<13,
    54   NS_MATHML_OPERATOR_MAXSIZE_ABSOLUTE   = 1<<14,
    55   NS_MATHML_OPERATOR_LSPACE_ATTR     = 1<<15,
    56   NS_MATHML_OPERATOR_RSPACE_ATTR    = 1<<16
    57 };
    59 #define NS_MATHML_OPERATOR_SIZE_INFINITY NS_IEEEPositiveInfinity()
    61 class nsMathMLOperators {
    62 public:
    63   static void AddRefTable(void);
    64   static void ReleaseTable(void);
    65   static void CleanUp();
    67   // LookupOperator:
    68   // Given the string value of an operator and its form (last two bits of flags),
    69   // this method returns true if the operator is found in the Operator Dictionary.
    70   // Attributes of the operator are returned in the output parameters.
    71   // If the operator is not found under the supplied form but is found under a 
    72   // different form, the method returns true as well. The caller can test the
    73   // output parameter aFlags to know exactly under which form the operator was
    74   // found in the Operator Dictionary.
    75   static bool
    76   LookupOperator(const nsString&       aOperator,
    77                  const nsOperatorFlags aForm,
    78                  nsOperatorFlags*      aFlags,
    79                  float*                aLeadingSpace,
    80                  float*                aTrailingSpace);
    82    // LookupOperators:
    83    // Helper to return all the forms under which an operator is listed in the
    84    // Operator Dictionary. The caller must pass arrays of size 4, and use 
    85    // aFlags[NS_MATHML_OPERATOR_FORM_{INFIX|POSTFIX|PREFIX}],
    86    // aLeadingSpace[], etc, to access the attributes of the operator under a
    87    // particular form. If the operator wasn't found under a form, its entry
    88    // aFlags[form] is set to zero.
    89    static void
    90    LookupOperators(const nsString&       aOperator,
    91                    nsOperatorFlags*      aFlags,
    92                    float*                aLeadingSpace,
    93                    float*                aTrailingSpace);
    95   // Helper functions used by the nsMathMLChar class.
    96   static bool
    97   IsMirrorableOperator(const nsString& aOperator);
    99   // Helper function used by the nsMathMLChar class.
   100   static nsStretchDirection GetStretchyDirection(const nsString& aOperator);
   101 };
   103 ////////////////////////////////////////////////////////////////////////////
   104 // Macros that retrieve the bits used to handle operators
   106 #define NS_MATHML_OPERATOR_IS_MUTABLE(_flags) \
   107   (NS_MATHML_OPERATOR_MUTABLE == ((_flags) & NS_MATHML_OPERATOR_MUTABLE))
   109 #define NS_MATHML_OPERATOR_HAS_EMBELLISH_ANCESTOR(_flags) \
   110   (NS_MATHML_OPERATOR_EMBELLISH_ANCESTOR == ((_flags) & NS_MATHML_OPERATOR_EMBELLISH_ANCESTOR))
   112 #define NS_MATHML_OPERATOR_EMBELLISH_IS_ISOLATED(_flags) \
   113   (NS_MATHML_OPERATOR_EMBELLISH_ISOLATED == ((_flags) & NS_MATHML_OPERATOR_EMBELLISH_ISOLATED))
   115 #define NS_MATHML_OPERATOR_IS_CENTERED(_flags) \
   116   (NS_MATHML_OPERATOR_CENTERED == ((_flags) & NS_MATHML_OPERATOR_CENTERED))
   118 #define NS_MATHML_OPERATOR_IS_INVISIBLE(_flags) \
   119   (NS_MATHML_OPERATOR_INVISIBLE == ((_flags) & NS_MATHML_OPERATOR_INVISIBLE))
   121 #define NS_MATHML_OPERATOR_GET_FORM(_flags) \
   122   ((_flags) & NS_MATHML_OPERATOR_FORM)
   124 #define NS_MATHML_OPERATOR_GET_DIRECTION(_flags) \
   125   ((_flags) & NS_MATHML_OPERATOR_DIRECTION)
   127 #define NS_MATHML_OPERATOR_FORM_IS_INFIX(_flags) \
   128   (NS_MATHML_OPERATOR_FORM_INFIX == ((_flags) & NS_MATHML_OPERATOR_FORM))
   130 #define NS_MATHML_OPERATOR_FORM_IS_PREFIX(_flags) \
   131   (NS_MATHML_OPERATOR_FORM_PREFIX == ((_flags) & NS_MATHML_OPERATOR_FORM))
   133 #define NS_MATHML_OPERATOR_FORM_IS_POSTFIX(_flags) \
   134   (NS_MATHML_OPERATOR_FORM_POSTFIX == ((_flags) & NS_MATHML_OPERATOR_FORM))
   136 #define NS_MATHML_OPERATOR_IS_DIRECTION_VERTICAL(_flags) \
   137   (NS_MATHML_OPERATOR_DIRECTION_VERTICAL == ((_flags) & NS_MATHML_OPERATOR_DIRECTION))
   139 #define NS_MATHML_OPERATOR_IS_DIRECTION_HORIZONTAL(_flags) \
   140   (NS_MATHML_OPERATOR_DIRECTION_HORIZONTAL == ((_flags) & NS_MATHML_OPERATOR_DIRECTION))
   142 #define NS_MATHML_OPERATOR_IS_STRETCHY(_flags) \
   143   (NS_MATHML_OPERATOR_STRETCHY == ((_flags) & NS_MATHML_OPERATOR_STRETCHY))
   145 #define NS_MATHML_OPERATOR_IS_FENCE(_flags) \
   146   (NS_MATHML_OPERATOR_FENCE == ((_flags) & NS_MATHML_OPERATOR_FENCE))
   148 #define NS_MATHML_OPERATOR_IS_ACCENT(_flags) \
   149   (NS_MATHML_OPERATOR_ACCENT == ((_flags) & NS_MATHML_OPERATOR_ACCENT))
   151 #define NS_MATHML_OPERATOR_IS_LARGEOP(_flags) \
   152   (NS_MATHML_OPERATOR_LARGEOP == ((_flags) & NS_MATHML_OPERATOR_LARGEOP))
   154 #define NS_MATHML_OPERATOR_IS_SEPARATOR(_flags) \
   155   (NS_MATHML_OPERATOR_SEPARATOR == ((_flags) & NS_MATHML_OPERATOR_SEPARATOR))
   157 #define NS_MATHML_OPERATOR_IS_MOVABLELIMITS(_flags) \
   158   (NS_MATHML_OPERATOR_MOVABLELIMITS == ((_flags) & NS_MATHML_OPERATOR_MOVABLELIMITS))
   160 #define NS_MATHML_OPERATOR_IS_SYMMETRIC(_flags) \
   161   (NS_MATHML_OPERATOR_SYMMETRIC == ((_flags) & NS_MATHML_OPERATOR_SYMMETRIC))
   163 #define NS_MATHML_OPERATOR_IS_INTEGRAL(_flags) \
   164   (NS_MATHML_OPERATOR_INTEGRAL == ((_flags) & NS_MATHML_OPERATOR_INTEGRAL))
   166 #define NS_MATHML_OPERATOR_IS_MIRRORABLE(_flags) \
   167   (NS_MATHML_OPERATOR_MIRRORABLE == ((_flags) & NS_MATHML_OPERATOR_MIRRORABLE))
   169 #define NS_MATHML_OPERATOR_MINSIZE_IS_ABSOLUTE(_flags) \
   170   (NS_MATHML_OPERATOR_MINSIZE_ABSOLUTE == ((_flags) & NS_MATHML_OPERATOR_MINSIZE_ABSOLUTE))
   172 #define NS_MATHML_OPERATOR_MAXSIZE_IS_ABSOLUTE(_flags) \
   173   (NS_MATHML_OPERATOR_MAXSIZE_ABSOLUTE == ((_flags) & NS_MATHML_OPERATOR_MAXSIZE_ABSOLUTE))
   175 #define NS_MATHML_OPERATOR_HAS_LSPACE_ATTR(_flags) \
   176   (NS_MATHML_OPERATOR_LSPACE_ATTR == ((_flags) & NS_MATHML_OPERATOR_LSPACE_ATTR))
   178 #define NS_MATHML_OPERATOR_HAS_RSPACE_ATTR(_flags) \
   179   (NS_MATHML_OPERATOR_RSPACE_ATTR == ((_flags) & NS_MATHML_OPERATOR_RSPACE_ATTR))
   181 #endif /* nsMathMLOperators_h___ */

mercurial