Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/layout/mathml/   (Firefox Browser Version 153.0.1©)  Datei vom 27.6.2026 mit Größe 3 kB image not shown  

Quelle  nsMathMLOperators.h

  Sprache: C
 

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#ifndef nsMathMLOperators_h_
#define nsMathMLOperators_h_

#include <stdint.h>

#include "mozilla/EnumSet.h"
#include "mozilla/FloatingPoint.h"
#include "nsStringFwd.h"

enum class StretchDirection : uint8_t {
  Unsupported,
  Default,
  Horizontal,
  Vertical,
};

enum class OperatorBoolean : uint16_t {
  ForcesMathMLChar,
  Mutable,
  HasEmbellishAncestor,
  EmbellishIsIsolated,
  Invisible,
  Stretchy,
  Fence,
  Accent,
  LargeOperator,
  Separator,
  MovableLimits,
  Symmetric,
  MinSizeIsAbsolute,
  MaxSizeIsAbsolute,
  HasLSpaceAttribute,
  HasRSpaceAttribute,
};
using OperatorBooleans = mozilla::EnumSet<OperatorBoolean>;

enum class OperatorForm : uint8_t {
  Unknown,
  Infix,
  Prefix,
  Postfix,
};
constexpr uint8_t OperatorFormMask = 0x3;

enum class OperatorDirection : uint8_t {
  Unknown,
  Horizontal,
  Vertical,
};
constexpr uint8_t OperatorDirectionShift = 2;
constexpr uint8_t OperatorDirectionMask = 0x3 << OperatorDirectionShift;

class nsOperatorFlags {
 public:
  OperatorBooleans& Booleans() { return mBooleans; }
  const OperatorBooleans& Booleans() const { return mBooleans; }
  OperatorForm Form() const {
    return static_cast<OperatorForm>(mFormAndDirection & OperatorFormMask);
  }
  OperatorDirection Direction() const {
    return static_cast<OperatorDirection>(
        (mFormAndDirection & OperatorDirectionMask) >> OperatorDirectionShift);
  }
  void SetForm(OperatorForm aForm) {
    mFormAndDirection &= ~OperatorFormMask;
    mFormAndDirection |= static_cast<uint8_t>(aForm);
  }
  void SetDirection(OperatorDirection aDirection) {
    mFormAndDirection &= ~OperatorDirectionMask;
    mFormAndDirection |= static_cast<uint8_t>(aDirection)
                         << OperatorDirectionShift;
  }
  void Clear() {
    mBooleans.clear();
    mFormAndDirection = 0;
  }

 private:
  OperatorBooleans mBooleans;
  uint8_t mFormAndDirection = 0;
};

constexpr inline float kMathMLOperatorSizeInfinity =
    mozilla::PositiveInfinity<float>();

class nsMathMLOperators {
 public:
  static void AddRefTable(void);
  static void ReleaseTable(void);
  static void CleanUp();

  // LookupOperator:
  // Given the string value of an operator and its form (last two bits of
  // flags), this method returns attributes of the operator in the output
  // parameters. The return value indicates whether an entry was found.
  static bool LookupOperator(const nsString& aOperator,
                             const OperatorForm aForm, nsOperatorFlags* aFlags,
                             float* aLeadingSpace, float* aTrailingSpace);

  // LookupOperatorWithFallback:
  // Same as LookupOperator but if the operator is not found under the supplied
  // form, then the other forms are tried in the following order: infix, postfix
  // prefix. The caller can test the output parameter aFlags to know exactly
  // under which form the operator was found in the Operator Dictionary.
  static bool LookupOperatorWithFallback(const nsString& aOperator,
                                         const OperatorForm aForm,
                                         nsOperatorFlags* aFlags,
                                         float* aLeadingSpace,
                                         float* aTrailingSpace);

  // Helper functions used by the nsMathMLChar class.
  static bool IsMirrorableOperator(const nsString& aOperator);
  static nsString GetMirroredOperator(const nsString& aOperator);

  // Helper functions used by the nsMathMLChar class to determine whether
  // aOperator corresponds to an integral operator.
  static bool IsIntegralOperator(const nsString& aOperator);

  // Helper function used by the nsMathMLChar class.
  static StretchDirection GetStretchyDirection(const nsString& aOperator);
};

#endif /* nsMathMLOperators_h_ */

Messung V0.5 in Prozent
C=89 H=100 G=94

¤ Dauer der Verarbeitung: 0.24 Sekunden  (vorverarbeitet am  2026-08-23) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.