/*
 * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT.
 *
 * This file was generated by the dom/make_names.pl script.
 *
 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "config.h"

#ifdef SKIP_STATIC_CONSTRUCTORS_ON_GCC
#define DOM_MathML_NAMES_HIDE_GLOBALS 1
#else
#define QNAME_DEFAULT_CONSTRUCTOR 1
#endif

#include "MathMLNames.h"

namespace WebCore {

namespace MathMLNames {

using namespace WebCore;

MainThreadLazyNeverDestroyed<const AtomString> mathmlNamespaceURI;

#if COMPILER(MSVC)
#pragma warning(push)
#pragma warning(disable: 4307)
#endif

static constexpr StringImpl::StaticStringImpl accentData("accent");
static constexpr StringImpl::StaticStringImpl accentunderData("accentunder");
static constexpr StringImpl::StaticStringImpl actiontypeData("actiontype");
static constexpr StringImpl::StaticStringImpl alttextData("alttext");
static constexpr StringImpl::StaticStringImpl annotationData("annotation");
static constexpr StringImpl::StaticStringImpl annotation_xmlData("annotation-xml");
static constexpr StringImpl::StaticStringImpl backgroundData("background");
static constexpr StringImpl::StaticStringImpl closeData("close");
static constexpr StringImpl::StaticStringImpl colorData("color");
static constexpr StringImpl::StaticStringImpl columnspanData("columnspan");
static constexpr StringImpl::StaticStringImpl definitionURLData("definitionURL");
static constexpr StringImpl::StaticStringImpl denomalignData("denomalign");
static constexpr StringImpl::StaticStringImpl depthData("depth");
static constexpr StringImpl::StaticStringImpl dirData("dir");
static constexpr StringImpl::StaticStringImpl displayData("display");
static constexpr StringImpl::StaticStringImpl displaystyleData("displaystyle");
static constexpr StringImpl::StaticStringImpl encodingData("encoding");
static constexpr StringImpl::StaticStringImpl fenceData("fence");
static constexpr StringImpl::StaticStringImpl fontfamilyData("fontfamily");
static constexpr StringImpl::StaticStringImpl fontsizeData("fontsize");
static constexpr StringImpl::StaticStringImpl fontstyleData("fontstyle");
static constexpr StringImpl::StaticStringImpl fontweightData("fontweight");
static constexpr StringImpl::StaticStringImpl formData("form");
static constexpr StringImpl::StaticStringImpl heightData("height");
static constexpr StringImpl::StaticStringImpl hrefData("href");
static constexpr StringImpl::StaticStringImpl largeopData("largeop");
static constexpr StringImpl::StaticStringImpl linethicknessData("linethickness");
static constexpr StringImpl::StaticStringImpl lspaceData("lspace");
static constexpr StringImpl::StaticStringImpl mactionData("maction");
static constexpr StringImpl::StaticStringImpl maligngroupData("maligngroup");
static constexpr StringImpl::StaticStringImpl malignmarkData("malignmark");
static constexpr StringImpl::StaticStringImpl mathData("math");
static constexpr StringImpl::StaticStringImpl mathbackgroundData("mathbackground");
static constexpr StringImpl::StaticStringImpl mathcolorData("mathcolor");
static constexpr StringImpl::StaticStringImpl mathsizeData("mathsize");
static constexpr StringImpl::StaticStringImpl mathvariantData("mathvariant");
static constexpr StringImpl::StaticStringImpl maxsizeData("maxsize");
static constexpr StringImpl::StaticStringImpl mencloseData("menclose");
static constexpr StringImpl::StaticStringImpl merrorData("merror");
static constexpr StringImpl::StaticStringImpl mfencedData("mfenced");
static constexpr StringImpl::StaticStringImpl mfracData("mfrac");
static constexpr StringImpl::StaticStringImpl mglyphData("mglyph");
static constexpr StringImpl::StaticStringImpl miData("mi");
static constexpr StringImpl::StaticStringImpl minsizeData("minsize");
static constexpr StringImpl::StaticStringImpl mlabeledtrData("mlabeledtr");
static constexpr StringImpl::StaticStringImpl mlongdivData("mlongdiv");
static constexpr StringImpl::StaticStringImpl mmultiscriptsData("mmultiscripts");
static constexpr StringImpl::StaticStringImpl mnData("mn");
static constexpr StringImpl::StaticStringImpl moData("mo");
static constexpr StringImpl::StaticStringImpl movablelimitsData("movablelimits");
static constexpr StringImpl::StaticStringImpl moverData("mover");
static constexpr StringImpl::StaticStringImpl mpaddedData("mpadded");
static constexpr StringImpl::StaticStringImpl mphantomData("mphantom");
static constexpr StringImpl::StaticStringImpl mprescriptsData("mprescripts");
static constexpr StringImpl::StaticStringImpl mrootData("mroot");
static constexpr StringImpl::StaticStringImpl mrowData("mrow");
static constexpr StringImpl::StaticStringImpl msData("ms");
static constexpr StringImpl::StaticStringImpl mscarriesData("mscarries");
static constexpr StringImpl::StaticStringImpl mscarryData("mscarry");
static constexpr StringImpl::StaticStringImpl msgroupData("msgroup");
static constexpr StringImpl::StaticStringImpl mslineData("msline");
static constexpr StringImpl::StaticStringImpl mspaceData("mspace");
static constexpr StringImpl::StaticStringImpl msqrtData("msqrt");
static constexpr StringImpl::StaticStringImpl msrowData("msrow");
static constexpr StringImpl::StaticStringImpl mstackData("mstack");
static constexpr StringImpl::StaticStringImpl mstyleData("mstyle");
static constexpr StringImpl::StaticStringImpl msubData("msub");
static constexpr StringImpl::StaticStringImpl msubsupData("msubsup");
static constexpr StringImpl::StaticStringImpl msupData("msup");
static constexpr StringImpl::StaticStringImpl mtableData("mtable");
static constexpr StringImpl::StaticStringImpl mtdData("mtd");
static constexpr StringImpl::StaticStringImpl mtextData("mtext");
static constexpr StringImpl::StaticStringImpl mtrData("mtr");
static constexpr StringImpl::StaticStringImpl munderData("munder");
static constexpr StringImpl::StaticStringImpl munderoverData("munderover");
static constexpr StringImpl::StaticStringImpl noneData("none");
static constexpr StringImpl::StaticStringImpl notationData("notation");
static constexpr StringImpl::StaticStringImpl numalignData("numalign");
static constexpr StringImpl::StaticStringImpl openData("open");
static constexpr StringImpl::StaticStringImpl rowspanData("rowspan");
static constexpr StringImpl::StaticStringImpl rspaceData("rspace");
static constexpr StringImpl::StaticStringImpl selectionData("selection");
static constexpr StringImpl::StaticStringImpl semanticsData("semantics");
static constexpr StringImpl::StaticStringImpl separatorData("separator");
static constexpr StringImpl::StaticStringImpl separatorsData("separators");
static constexpr StringImpl::StaticStringImpl srcData("src");
static constexpr StringImpl::StaticStringImpl stretchyData("stretchy");
static constexpr StringImpl::StaticStringImpl subscriptshiftData("subscriptshift");
static constexpr StringImpl::StaticStringImpl superscriptshiftData("superscriptshift");
static constexpr StringImpl::StaticStringImpl symmetricData("symmetric");
static constexpr StringImpl::StaticStringImpl voffsetData("voffset");
static constexpr StringImpl::StaticStringImpl widthData("width");

#if COMPILER(MSVC)
#pragma warning(pop)
#endif

// Tags
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> annotationTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> annotation_xmlTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mactionTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> maligngroupTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> malignmarkTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mathTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mencloseTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> merrorTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mfencedTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mfracTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mglyphTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> miTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mlabeledtrTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mlongdivTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mmultiscriptsTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mnTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> moTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> moverTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mpaddedTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mphantomTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mprescriptsTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mrootTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mrowTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> msTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mscarriesTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mscarryTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> msgroupTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mslineTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mspaceTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> msqrtTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> msrowTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mstackTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mstyleTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> msubTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> msubsupTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> msupTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mtableTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mtdTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mtextTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> mtrTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> munderTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> munderoverTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> noneTag;
WEBCORE_EXPORT LazyNeverDestroyed<const MathMLQualifiedName> semanticsTag;


const WebCore::MathMLQualifiedName* const* getMathMLTags()
{
    static const WebCore::MathMLQualifiedName* const MathMLTags[] = {
        &annotationTag.get(),
        &annotation_xmlTag.get(),
        &mactionTag.get(),
        &maligngroupTag.get(),
        &malignmarkTag.get(),
        &mathTag.get(),
        &mencloseTag.get(),
        &merrorTag.get(),
        &mfencedTag.get(),
        &mfracTag.get(),
        &mglyphTag.get(),
        &miTag.get(),
        &mlabeledtrTag.get(),
        &mlongdivTag.get(),
        &mmultiscriptsTag.get(),
        &mnTag.get(),
        &moTag.get(),
        &moverTag.get(),
        &mpaddedTag.get(),
        &mphantomTag.get(),
        &mprescriptsTag.get(),
        &mrootTag.get(),
        &mrowTag.get(),
        &msTag.get(),
        &mscarriesTag.get(),
        &mscarryTag.get(),
        &msgroupTag.get(),
        &mslineTag.get(),
        &mspaceTag.get(),
        &msqrtTag.get(),
        &msrowTag.get(),
        &mstackTag.get(),
        &mstyleTag.get(),
        &msubTag.get(),
        &msubsupTag.get(),
        &msupTag.get(),
        &mtableTag.get(),
        &mtdTag.get(),
        &mtextTag.get(),
        &mtrTag.get(),
        &munderTag.get(),
        &munderoverTag.get(),
        &noneTag.get(),
        &semanticsTag.get(),
    };
    return MathMLTags;
}

// Attributes
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> accentAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> accentunderAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> actiontypeAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> alttextAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> backgroundAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> closeAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> colorAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> columnspanAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> definitionURLAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> denomalignAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> depthAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> dirAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> displayAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> displaystyleAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> encodingAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> fenceAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> fontfamilyAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> fontsizeAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> fontstyleAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> fontweightAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> formAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> heightAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> hrefAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> largeopAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> linethicknessAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> lspaceAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> mathbackgroundAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> mathcolorAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> mathsizeAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> mathvariantAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> maxsizeAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> minsizeAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> movablelimitsAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> notationAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> numalignAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> openAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> rowspanAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> rspaceAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> selectionAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> separatorAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> separatorsAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> srcAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> stretchyAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> subscriptshiftAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> superscriptshiftAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> symmetricAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> voffsetAttr;
WEBCORE_EXPORT LazyNeverDestroyed<const QualifiedName> widthAttr;


const WebCore::QualifiedName* const* getMathMLAttrs()
{
    static const WebCore::QualifiedName* const MathMLAttrs[] = {
        &accentAttr.get(),
        &accentunderAttr.get(),
        &actiontypeAttr.get(),
        &alttextAttr.get(),
        &backgroundAttr.get(),
        &closeAttr.get(),
        &colorAttr.get(),
        &columnspanAttr.get(),
        &definitionURLAttr.get(),
        &denomalignAttr.get(),
        &depthAttr.get(),
        &dirAttr.get(),
        &displayAttr.get(),
        &displaystyleAttr.get(),
        &encodingAttr.get(),
        &fenceAttr.get(),
        &fontfamilyAttr.get(),
        &fontsizeAttr.get(),
        &fontstyleAttr.get(),
        &fontweightAttr.get(),
        &formAttr.get(),
        &heightAttr.get(),
        &hrefAttr.get(),
        &largeopAttr.get(),
        &linethicknessAttr.get(),
        &lspaceAttr.get(),
        &mathbackgroundAttr.get(),
        &mathcolorAttr.get(),
        &mathsizeAttr.get(),
        &mathvariantAttr.get(),
        &maxsizeAttr.get(),
        &minsizeAttr.get(),
        &movablelimitsAttr.get(),
        &notationAttr.get(),
        &numalignAttr.get(),
        &openAttr.get(),
        &rowspanAttr.get(),
        &rspaceAttr.get(),
        &selectionAttr.get(),
        &separatorAttr.get(),
        &separatorsAttr.get(),
        &srcAttr.get(),
        &stretchyAttr.get(),
        &subscriptshiftAttr.get(),
        &superscriptshiftAttr.get(),
        &symmetricAttr.get(),
        &voffsetAttr.get(),
        &widthAttr.get(),
    };
    return MathMLAttrs;
}

void init()
{
    static bool initialized = false;
    if (initialized)
        return;
    initialized = true;

    // Use placement new to initialize the globals.
    AtomString mathmlNS("http://www.w3.org/1998/Math/MathML"_s);

    // Namespace
    mathmlNamespaceURI.construct(mathmlNS);

#ifndef NDEBUG
    reinterpret_cast<const StringImpl*>(&accentData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&accentunderData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&actiontypeData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&alttextData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&annotationData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&annotation_xmlData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&backgroundData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&closeData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&colorData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&columnspanData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&definitionURLData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&denomalignData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&depthData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&dirData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&displayData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&displaystyleData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&encodingData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&fenceData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&fontfamilyData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&fontsizeData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&fontstyleData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&fontweightData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&formData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&heightData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&hrefData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&largeopData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&linethicknessData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&lspaceData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mactionData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&maligngroupData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&malignmarkData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mathData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mathbackgroundData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mathcolorData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mathsizeData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mathvariantData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&maxsizeData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mencloseData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&merrorData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mfencedData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mfracData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mglyphData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&miData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&minsizeData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mlabeledtrData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mlongdivData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mmultiscriptsData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mnData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&moData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&movablelimitsData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&moverData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mpaddedData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mphantomData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mprescriptsData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mrootData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mrowData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&msData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mscarriesData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mscarryData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&msgroupData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mslineData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mspaceData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&msqrtData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&msrowData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mstackData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mstyleData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&msubData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&msubsupData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&msupData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mtableData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mtdData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mtextData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&mtrData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&munderData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&munderoverData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&noneData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&notationData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&numalignData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&openData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&rowspanData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&rspaceData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&selectionData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&semanticsData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&separatorData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&separatorsData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&srcData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&stretchyData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&subscriptshiftData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&superscriptshiftData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&symmetricData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&voffsetData)->assertHashIsCorrect();
    reinterpret_cast<const StringImpl*>(&widthData)->assertHashIsCorrect();
#endif // NDEBUG


    struct TagsTableEntry {
        LazyNeverDestroyed<const QualifiedName>* targetAddress;
        const StaticStringImpl& name;
    };

    static const TagsTableEntry tagsTable[] = {
        { (LazyNeverDestroyed<const QualifiedName>*)&annotationTag, *(&annotationData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&annotation_xmlTag, *(&annotation_xmlData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mactionTag, *(&mactionData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&maligngroupTag, *(&maligngroupData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&malignmarkTag, *(&malignmarkData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mathTag, *(&mathData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mencloseTag, *(&mencloseData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&merrorTag, *(&merrorData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mfencedTag, *(&mfencedData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mfracTag, *(&mfracData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mglyphTag, *(&mglyphData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&miTag, *(&miData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mlabeledtrTag, *(&mlabeledtrData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mlongdivTag, *(&mlongdivData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mmultiscriptsTag, *(&mmultiscriptsData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mnTag, *(&mnData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&moTag, *(&moData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&moverTag, *(&moverData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mpaddedTag, *(&mpaddedData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mphantomTag, *(&mphantomData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mprescriptsTag, *(&mprescriptsData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mrootTag, *(&mrootData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mrowTag, *(&mrowData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&msTag, *(&msData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mscarriesTag, *(&mscarriesData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mscarryTag, *(&mscarryData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&msgroupTag, *(&msgroupData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mslineTag, *(&mslineData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mspaceTag, *(&mspaceData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&msqrtTag, *(&msqrtData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&msrowTag, *(&msrowData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mstackTag, *(&mstackData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mstyleTag, *(&mstyleData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&msubTag, *(&msubData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&msubsupTag, *(&msubsupData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&msupTag, *(&msupData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mtableTag, *(&mtableData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mtdTag, *(&mtdData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mtextTag, *(&mtextData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&mtrTag, *(&mtrData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&munderTag, *(&munderData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&munderoverTag, *(&munderoverData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&noneTag, *(&noneData) },
        { (LazyNeverDestroyed<const QualifiedName>*)&semanticsTag, *(&semanticsData) },
    };

    for (auto& entry : tagsTable)
        entry.targetAddress->construct(nullAtom(), AtomString(&entry.name), mathmlNS);

    struct AttributesTableEntry {
        LazyNeverDestroyed<const QualifiedName>* targetAddress;
        const StaticStringImpl& name;
    };

    static const AttributesTableEntry attributesTable[] = {
        { &accentAttr, *(&accentData) },
        { &accentunderAttr, *(&accentunderData) },
        { &actiontypeAttr, *(&actiontypeData) },
        { &alttextAttr, *(&alttextData) },
        { &backgroundAttr, *(&backgroundData) },
        { &closeAttr, *(&closeData) },
        { &colorAttr, *(&colorData) },
        { &columnspanAttr, *(&columnspanData) },
        { &definitionURLAttr, *(&definitionURLData) },
        { &denomalignAttr, *(&denomalignData) },
        { &depthAttr, *(&depthData) },
        { &dirAttr, *(&dirData) },
        { &displayAttr, *(&displayData) },
        { &displaystyleAttr, *(&displaystyleData) },
        { &encodingAttr, *(&encodingData) },
        { &fenceAttr, *(&fenceData) },
        { &fontfamilyAttr, *(&fontfamilyData) },
        { &fontsizeAttr, *(&fontsizeData) },
        { &fontstyleAttr, *(&fontstyleData) },
        { &fontweightAttr, *(&fontweightData) },
        { &formAttr, *(&formData) },
        { &heightAttr, *(&heightData) },
        { &hrefAttr, *(&hrefData) },
        { &largeopAttr, *(&largeopData) },
        { &linethicknessAttr, *(&linethicknessData) },
        { &lspaceAttr, *(&lspaceData) },
        { &mathbackgroundAttr, *(&mathbackgroundData) },
        { &mathcolorAttr, *(&mathcolorData) },
        { &mathsizeAttr, *(&mathsizeData) },
        { &mathvariantAttr, *(&mathvariantData) },
        { &maxsizeAttr, *(&maxsizeData) },
        { &minsizeAttr, *(&minsizeData) },
        { &movablelimitsAttr, *(&movablelimitsData) },
        { &notationAttr, *(&notationData) },
        { &numalignAttr, *(&numalignData) },
        { &openAttr, *(&openData) },
        { &rowspanAttr, *(&rowspanData) },
        { &rspaceAttr, *(&rspaceData) },
        { &selectionAttr, *(&selectionData) },
        { &separatorAttr, *(&separatorData) },
        { &separatorsAttr, *(&separatorsData) },
        { &srcAttr, *(&srcData) },
        { &stretchyAttr, *(&stretchyData) },
        { &subscriptshiftAttr, *(&subscriptshiftData) },
        { &superscriptshiftAttr, *(&superscriptshiftData) },
        { &symmetricAttr, *(&symmetricData) },
        { &voffsetAttr, *(&voffsetData) },
        { &widthAttr, *(&widthData) },
    };

    for (auto& entry : attributesTable)
        entry.targetAddress->construct(nullAtom(), AtomString(&entry.name), nullAtom());
}

} }

