diff --git a/mozilla/content/html/style/public/nsCSSAtoms.h b/mozilla/content/html/style/public/nsCSSAtoms.h
new file mode 100644
index 00000000000..661fc1fc347
--- /dev/null
+++ b/mozilla/content/html/style/public/nsCSSAtoms.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public License
+ * Version 1.0 (the "NPL"); you may not use this file except in
+ * compliance with the NPL. You may obtain a copy of the NPL at
+ * http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the NPL is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
+ * for the specific language governing rights and limitations under the
+ * NPL.
+ *
+ * The Initial Developer of this code under the NPL is Netscape
+ * Communications Corporation. Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All Rights
+ * Reserved.
+ */
+#ifndef nsCSSAtoms_h___
+#define nsCSSAtoms_h___
+
+#include "nsIAtom.h"
+
+/**
+ * This class wraps up the creation (and destruction) of the standard
+ * set of CSS atoms used during normal CSS handling. These objects
+ * are created when the first CSS style sheet is created and they
+ * are destroyed when the last CSS style sheet is destroyed.
+ */
+class nsCSSAtoms {
+public:
+
+ static void AddrefAtoms();
+ static void ReleaseAtoms();
+
+ // Alphabetical list of html attribute atoms
+ static nsIAtom* activePseudo;
+
+ static nsIAtom* firstChildPseudo;
+ static nsIAtom* focusPseudo;
+
+ static nsIAtom* hoverPseudo;
+
+ static nsIAtom* langPseudo;
+ static nsIAtom* linkPseudo;
+
+ static nsIAtom* outOfDatePseudo; // Netscape extension
+
+ static nsIAtom* universalSelector;
+
+ static nsIAtom* visitedPseudo;
+};
+
+#endif /* nsCSSAtoms_h___ */
diff --git a/mozilla/content/shared/public/nsCSSAtoms.h b/mozilla/content/shared/public/nsCSSAtoms.h
new file mode 100644
index 00000000000..661fc1fc347
--- /dev/null
+++ b/mozilla/content/shared/public/nsCSSAtoms.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public License
+ * Version 1.0 (the "NPL"); you may not use this file except in
+ * compliance with the NPL. You may obtain a copy of the NPL at
+ * http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the NPL is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
+ * for the specific language governing rights and limitations under the
+ * NPL.
+ *
+ * The Initial Developer of this code under the NPL is Netscape
+ * Communications Corporation. Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All Rights
+ * Reserved.
+ */
+#ifndef nsCSSAtoms_h___
+#define nsCSSAtoms_h___
+
+#include "nsIAtom.h"
+
+/**
+ * This class wraps up the creation (and destruction) of the standard
+ * set of CSS atoms used during normal CSS handling. These objects
+ * are created when the first CSS style sheet is created and they
+ * are destroyed when the last CSS style sheet is destroyed.
+ */
+class nsCSSAtoms {
+public:
+
+ static void AddrefAtoms();
+ static void ReleaseAtoms();
+
+ // Alphabetical list of html attribute atoms
+ static nsIAtom* activePseudo;
+
+ static nsIAtom* firstChildPseudo;
+ static nsIAtom* focusPseudo;
+
+ static nsIAtom* hoverPseudo;
+
+ static nsIAtom* langPseudo;
+ static nsIAtom* linkPseudo;
+
+ static nsIAtom* outOfDatePseudo; // Netscape extension
+
+ static nsIAtom* universalSelector;
+
+ static nsIAtom* visitedPseudo;
+};
+
+#endif /* nsCSSAtoms_h___ */
diff --git a/mozilla/content/shared/src/nsCSSAtoms.cpp b/mozilla/content/shared/src/nsCSSAtoms.cpp
new file mode 100644
index 00000000000..0c75595e424
--- /dev/null
+++ b/mozilla/content/shared/src/nsCSSAtoms.cpp
@@ -0,0 +1,84 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public License
+ * Version 1.0 (the "NPL"); you may not use this file except in
+ * compliance with the NPL. You may obtain a copy of the NPL at
+ * http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the NPL is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
+ * for the specific language governing rights and limitations under the
+ * NPL.
+ *
+ * The Initial Developer of this code under the NPL is Netscape
+ * Communications Corporation. Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All Rights
+ * Reserved.
+ */
+#include "nsCSSAtoms.h"
+
+// XXX make this be autogenerated. doh!
+
+nsIAtom* nsCSSAtoms::activePseudo;
+
+nsIAtom* nsCSSAtoms::firstChildPseudo;
+nsIAtom* nsCSSAtoms::focusPseudo;
+
+nsIAtom* nsCSSAtoms::hoverPseudo;
+
+nsIAtom* nsCSSAtoms::langPseudo;
+nsIAtom* nsCSSAtoms::linkPseudo;
+
+nsIAtom* nsCSSAtoms::outOfDatePseudo;
+
+nsIAtom* nsCSSAtoms::universalSelector;
+
+nsIAtom* nsCSSAtoms::visitedPseudo;
+
+
+static nsrefcnt gRefCnt;
+
+void nsCSSAtoms::AddrefAtoms()
+{
+ if (0 == gRefCnt) {
+ activePseudo = NS_NewAtom(":ACTIVE");
+
+ firstChildPseudo = NS_NewAtom(":FIRST-CHILD");
+ focusPseudo = NS_NewAtom(":FOCUS");
+
+ hoverPseudo = NS_NewAtom(":HOVER");
+
+ langPseudo = NS_NewAtom(":LANG");
+ linkPseudo = NS_NewAtom(":LINK");
+
+ outOfDatePseudo = NS_NewAtom(":OUT-OF-DATE");
+
+ universalSelector = NS_NewAtom("*");
+
+ visitedPseudo = NS_NewAtom(":VISITED");
+ }
+ ++gRefCnt;
+}
+
+void nsCSSAtoms::ReleaseAtoms()
+{
+ NS_PRECONDITION(gRefCnt != 0, "bad release atoms");
+ if (--gRefCnt == 0) {
+ NS_RELEASE(activePseudo);
+
+ NS_RELEASE(firstChildPseudo);
+ NS_RELEASE(focusPseudo);
+
+ NS_RELEASE(hoverPseudo);
+
+ NS_RELEASE(langPseudo);
+ NS_RELEASE(linkPseudo);
+
+ NS_RELEASE(outOfDatePseudo);
+
+ NS_RELEASE(universalSelector);
+
+ NS_RELEASE(visitedPseudo);
+ }
+}
+
diff --git a/mozilla/layout/html/style/public/MANIFEST b/mozilla/layout/html/style/public/MANIFEST
index 284524ad3e5..afdf492359e 100644
--- a/mozilla/layout/html/style/public/MANIFEST
+++ b/mozilla/layout/html/style/public/MANIFEST
@@ -2,6 +2,7 @@
# This is a list of local files which get copied to the mozilla:dist:layout directory
#
+nsCSSAtoms.h
nsICSSParser.h
nsICSSStyleSheet.h
nsStyleUtil.h
diff --git a/mozilla/layout/html/style/public/Makefile.in b/mozilla/layout/html/style/public/Makefile.in
index cb11f5b3a42..7cd778d73df 100644
--- a/mozilla/layout/html/style/public/Makefile.in
+++ b/mozilla/layout/html/style/public/Makefile.in
@@ -25,6 +25,7 @@ include $(DEPTH)/config/autoconf.mk
MODULE = raptor
EXPORTS = \
+ nsCSSAtoms.h \
nsICSSParser.h \
nsICSSStyleSheet.h \
nsStyleUtil.h \
diff --git a/mozilla/layout/html/style/public/makefile.win b/mozilla/layout/html/style/public/makefile.win
index 43bf79d4c8c..f7c2a4ea1e1 100644
--- a/mozilla/layout/html/style/public/makefile.win
+++ b/mozilla/layout/html/style/public/makefile.win
@@ -17,7 +17,7 @@
DEPTH=..\..\..\..
-EXPORTS=nsICSSParser.h nsICSSStyleSheet.h nsStyleUtil.h
+EXPORTS=nsCSSAtoms.h nsICSSParser.h nsICSSStyleSheet.h nsStyleUtil.h
MODULE=raptor
include <$(DEPTH)\layout\config\rules.mak>
diff --git a/mozilla/layout/html/style/public/nsCSSAtoms.h b/mozilla/layout/html/style/public/nsCSSAtoms.h
new file mode 100644
index 00000000000..661fc1fc347
--- /dev/null
+++ b/mozilla/layout/html/style/public/nsCSSAtoms.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public License
+ * Version 1.0 (the "NPL"); you may not use this file except in
+ * compliance with the NPL. You may obtain a copy of the NPL at
+ * http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the NPL is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
+ * for the specific language governing rights and limitations under the
+ * NPL.
+ *
+ * The Initial Developer of this code under the NPL is Netscape
+ * Communications Corporation. Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All Rights
+ * Reserved.
+ */
+#ifndef nsCSSAtoms_h___
+#define nsCSSAtoms_h___
+
+#include "nsIAtom.h"
+
+/**
+ * This class wraps up the creation (and destruction) of the standard
+ * set of CSS atoms used during normal CSS handling. These objects
+ * are created when the first CSS style sheet is created and they
+ * are destroyed when the last CSS style sheet is destroyed.
+ */
+class nsCSSAtoms {
+public:
+
+ static void AddrefAtoms();
+ static void ReleaseAtoms();
+
+ // Alphabetical list of html attribute atoms
+ static nsIAtom* activePseudo;
+
+ static nsIAtom* firstChildPseudo;
+ static nsIAtom* focusPseudo;
+
+ static nsIAtom* hoverPseudo;
+
+ static nsIAtom* langPseudo;
+ static nsIAtom* linkPseudo;
+
+ static nsIAtom* outOfDatePseudo; // Netscape extension
+
+ static nsIAtom* universalSelector;
+
+ static nsIAtom* visitedPseudo;
+};
+
+#endif /* nsCSSAtoms_h___ */
diff --git a/mozilla/layout/html/style/src/Makefile.in b/mozilla/layout/html/style/src/Makefile.in
index 54ce3a66c79..b52182f6eec 100644
--- a/mozilla/layout/html/style/src/Makefile.in
+++ b/mozilla/layout/html/style/src/Makefile.in
@@ -30,6 +30,7 @@ DEFINES += -D_IMPL_NS_HTML
# Note the sophisticated alphabetical ordering :-|
CPPSRCS = \
+ nsCSSAtoms.cpp \
nsCSSKeywords.cpp \
nsCSSDeclaration.cpp \
nsCSSParser.cpp \
diff --git a/mozilla/layout/html/style/src/makefile.win b/mozilla/layout/html/style/src/makefile.win
index 4d06f81b677..8b45040ef7d 100644
--- a/mozilla/layout/html/style/src/makefile.win
+++ b/mozilla/layout/html/style/src/makefile.win
@@ -36,6 +36,7 @@ EXPORTS = \
$(NULL)
CPPSRCS= \
+ nsCSSAtoms.cpp \
nsCSSKeywords.cpp \
nsCSSDeclaration.cpp \
nsCSSParser.cpp \
@@ -55,6 +56,7 @@ CPPSRCS= \
$(NULL)
CPP_OBJS = \
+ .\$(OBJDIR)\nsCSSAtoms.obj \
.\$(OBJDIR)\nsCSSKeywords.obj \
.\$(OBJDIR)\nsCSSDeclaration.obj \
.\$(OBJDIR)\nsCSSParser.obj \
diff --git a/mozilla/layout/html/style/src/nsCSSAtoms.cpp b/mozilla/layout/html/style/src/nsCSSAtoms.cpp
new file mode 100644
index 00000000000..0c75595e424
--- /dev/null
+++ b/mozilla/layout/html/style/src/nsCSSAtoms.cpp
@@ -0,0 +1,84 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * The contents of this file are subject to the Netscape Public License
+ * Version 1.0 (the "NPL"); you may not use this file except in
+ * compliance with the NPL. You may obtain a copy of the NPL at
+ * http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the NPL is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
+ * for the specific language governing rights and limitations under the
+ * NPL.
+ *
+ * The Initial Developer of this code under the NPL is Netscape
+ * Communications Corporation. Portions created by Netscape are
+ * Copyright (C) 1998 Netscape Communications Corporation. All Rights
+ * Reserved.
+ */
+#include "nsCSSAtoms.h"
+
+// XXX make this be autogenerated. doh!
+
+nsIAtom* nsCSSAtoms::activePseudo;
+
+nsIAtom* nsCSSAtoms::firstChildPseudo;
+nsIAtom* nsCSSAtoms::focusPseudo;
+
+nsIAtom* nsCSSAtoms::hoverPseudo;
+
+nsIAtom* nsCSSAtoms::langPseudo;
+nsIAtom* nsCSSAtoms::linkPseudo;
+
+nsIAtom* nsCSSAtoms::outOfDatePseudo;
+
+nsIAtom* nsCSSAtoms::universalSelector;
+
+nsIAtom* nsCSSAtoms::visitedPseudo;
+
+
+static nsrefcnt gRefCnt;
+
+void nsCSSAtoms::AddrefAtoms()
+{
+ if (0 == gRefCnt) {
+ activePseudo = NS_NewAtom(":ACTIVE");
+
+ firstChildPseudo = NS_NewAtom(":FIRST-CHILD");
+ focusPseudo = NS_NewAtom(":FOCUS");
+
+ hoverPseudo = NS_NewAtom(":HOVER");
+
+ langPseudo = NS_NewAtom(":LANG");
+ linkPseudo = NS_NewAtom(":LINK");
+
+ outOfDatePseudo = NS_NewAtom(":OUT-OF-DATE");
+
+ universalSelector = NS_NewAtom("*");
+
+ visitedPseudo = NS_NewAtom(":VISITED");
+ }
+ ++gRefCnt;
+}
+
+void nsCSSAtoms::ReleaseAtoms()
+{
+ NS_PRECONDITION(gRefCnt != 0, "bad release atoms");
+ if (--gRefCnt == 0) {
+ NS_RELEASE(activePseudo);
+
+ NS_RELEASE(firstChildPseudo);
+ NS_RELEASE(focusPseudo);
+
+ NS_RELEASE(hoverPseudo);
+
+ NS_RELEASE(langPseudo);
+ NS_RELEASE(linkPseudo);
+
+ NS_RELEASE(outOfDatePseudo);
+
+ NS_RELEASE(universalSelector);
+
+ NS_RELEASE(visitedPseudo);
+ }
+}
+