Compare commits

..

4 Commits

Author SHA1 Message Date
waterson%netscape.com
802dbc4a66 Test 2.
git-svn-id: svn://10.0.0.236/branches/TEST_BRANCH@95362 18797224-902f-48f8-a5cc-f745e15eee43
2001-05-18 02:01:27 +00:00
waterson%netscape.com
0e716a7aaf Test 1.
git-svn-id: svn://10.0.0.236/branches/TEST_BRANCH@95361 18797224-902f-48f8-a5cc-f745e15eee43
2001-05-18 02:00:53 +00:00
waterson%netscape.com
5990cba7bc Force revision on branch.
git-svn-id: svn://10.0.0.236/branches/TEST_BRANCH@95360 18797224-902f-48f8-a5cc-f745e15eee43
2001-05-18 02:00:23 +00:00
(no author)
ddd19d9d94 This commit was manufactured by cvs2svn to create branch 'TEST_BRANCH'.
git-svn-id: svn://10.0.0.236/branches/TEST_BRANCH@13484 18797224-902f-48f8-a5cc-f745e15eee43
1998-10-26 21:26:21 +00:00
6 changed files with 148 additions and 5885 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,219 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* ex: set tabstop=8 softtabstop=2 shiftwidth=2 expandtab:
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef nsFontMetricsGTK_h__
#define nsFontMetricsGTK_h__
#include "nsDeviceContextGTK.h"
#include "nsIFontMetrics.h"
#include "nsIFontEnumerator.h"
#include "nsFont.h"
#include "nsString.h"
#include "nsUnitConversion.h"
#include "nsIDeviceContext.h"
#include "nsCRT.h"
#include "nsCOMPtr.h"
#include "nsRenderingContextGTK.h"
#include "nsICharRepresentable.h"
#include <gdk/gdk.h>
#include <gdk/gdkx.h>
#undef FONT_HAS_GLYPH
#define FONT_HAS_GLYPH(map, char) IS_REPRESENTABLE(map, char)
typedef struct nsFontCharSetInfo nsFontCharSetInfo;
typedef gint (*nsFontCharSetConverter)(nsFontCharSetInfo* aSelf,
XFontStruct* aFont, const PRUnichar* aSrcBuf, PRInt32 aSrcLen,
char* aDestBuf, PRInt32 aDestLen);
struct nsFontCharSet;
struct nsFontFamily;
struct nsFontNode;
struct nsFontStretch;
class nsFontGTKUserDefined;
class nsFontMetricsGTK;
class nsFontGTK
{
public:
nsFontGTK();
virtual ~nsFontGTK();
NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW
void LoadFont(void);
PRBool IsEmptyFont(GdkFont*);
inline int SupportsChar(PRUnichar aChar)
{ return mFont && FONT_HAS_GLYPH(mMap, aChar); };
virtual GdkFont* GetGDKFont(void);
virtual PRBool GetGDKFontIs10646(void);
virtual gint GetWidth(const PRUnichar* aString, PRUint32 aLength) = 0;
virtual gint DrawString(nsRenderingContextGTK* aContext,
nsDrawingSurfaceGTK* aSurface, nscoord aX,
nscoord aY, const PRUnichar* aString,
PRUint32 aLength) = 0;
#ifdef MOZ_MATHML
// bounding metrics for a string
// remember returned values are not in app units
// - to emulate GetWidth () above
virtual nsresult
GetBoundingMetrics(const PRUnichar* aString,
PRUint32 aLength,
nsBoundingMetrics& aBoundingMetrics) = 0;
#endif
PRUint32* mMap;
nsFontCharSetInfo* mCharSetInfo;
char* mName;
nsFontGTKUserDefined* mUserDefinedFont;
PRUint16 mSize;
PRInt16 mBaselineAdjust;
protected:
GdkFont* mFont;
PRBool mAlreadyCalledLoadFont;
};
class nsFontMetricsGTK : public nsIFontMetrics
{
public:
nsFontMetricsGTK();
virtual ~nsFontMetricsGTK();
NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW
NS_DECL_ISUPPORTS
NS_IMETHOD Init(const nsFont& aFont, nsIAtom* aLangGroup,
nsIDeviceContext* aContext);
NS_IMETHOD Destroy();
NS_IMETHOD GetXHeight(nscoord& aResult);
NS_IMETHOD GetSuperscriptOffset(nscoord& aResult);
NS_IMETHOD GetSubscriptOffset(nscoord& aResult);
NS_IMETHOD GetStrikeout(nscoord& aOffset, nscoord& aSize);
NS_IMETHOD GetUnderline(nscoord& aOffset, nscoord& aSize);
NS_IMETHOD GetHeight(nscoord &aHeight);
NS_IMETHOD GetNormalLineHeight(nscoord &aHeight);
NS_IMETHOD GetLeading(nscoord &aLeading);
NS_IMETHOD GetEmHeight(nscoord &aHeight);
NS_IMETHOD GetEmAscent(nscoord &aAscent);
NS_IMETHOD GetEmDescent(nscoord &aDescent);
NS_IMETHOD GetMaxHeight(nscoord &aHeight);
NS_IMETHOD GetMaxAscent(nscoord &aAscent);
NS_IMETHOD GetMaxDescent(nscoord &aDescent);
NS_IMETHOD GetMaxAdvance(nscoord &aAdvance);
NS_IMETHOD GetFont(const nsFont *&aFont);
NS_IMETHOD GetLangGroup(nsIAtom** aLangGroup);
NS_IMETHOD GetFontHandle(nsFontHandle &aHandle);
virtual nsresult GetSpaceWidth(nscoord &aSpaceWidth);
nsFontGTK* FindFont(PRUnichar aChar);
nsFontGTK* FindUserDefinedFont(PRUnichar aChar);
nsFontGTK* FindStyleSheetSpecificFont(PRUnichar aChar);
nsFontGTK* FindStyleSheetGenericFont(PRUnichar aChar);
nsFontGTK* FindLangGroupPrefFont(nsIAtom* aLangGroup, PRUnichar aChar);
nsFontGTK* FindLangGroupFont(nsIAtom* aLangGroup, PRUnichar aChar, nsCString* aName);
nsFontGTK* FindAnyFont(PRUnichar aChar);
nsFontGTK* FindSubstituteFont(PRUnichar aChar);
nsFontGTK* SearchNode(nsFontNode* aNode, PRUnichar aChar);
nsFontGTK* TryAliases(nsCString* aName, PRUnichar aChar);
nsFontGTK* TryFamily(nsCString* aName, PRUnichar aChar);
nsFontGTK* TryNode(nsCString* aName, PRUnichar aChar);
nsFontGTK* TryNodes(nsAWritableCString &aFFREName, PRUnichar aChar);
nsFontGTK* TryLangGroup(nsIAtom* aLangGroup, nsCString* aName, PRUnichar aChar);
nsFontGTK* AddToLoadedFontsList(nsFontGTK* aFont);
nsFontGTK* PickASizeAndLoad(nsFontStretch* aStretch,
nsFontCharSetInfo* aCharSet,
PRUnichar aChar,
const char *aName);
static nsresult FamilyExists(const nsString& aFontName);
//friend struct nsFontGTK;
nsFontGTK **mLoadedFonts;
PRUint16 mLoadedFontsAlloc;
PRUint16 mLoadedFontsCount;
nsFontGTK *mSubstituteFont;
nsCStringArray mFonts;
PRUint16 mFontsIndex;
nsVoidArray mFontIsGeneric;
nsCAutoString mDefaultFont;
nsCString *mGeneric;
nsCOMPtr<nsIAtom> mLangGroup;
nsCAutoString mUserDefined;
PRUint8 mTriedAllGenerics;
PRUint8 mIsUserDefined;
protected:
void RealizeFont();
nsIDeviceContext *mDeviceContext;
nsFont *mFont;
nsFontGTK *mWesternFont;
nscoord mLeading;
nscoord mEmHeight;
nscoord mEmAscent;
nscoord mEmDescent;
nscoord mMaxHeight;
nscoord mMaxAscent;
nscoord mMaxDescent;
nscoord mMaxAdvance;
nscoord mXHeight;
nscoord mSuperscriptOffset;
nscoord mSubscriptOffset;
nscoord mStrikeoutSize;
nscoord mStrikeoutOffset;
nscoord mUnderlineSize;
nscoord mUnderlineOffset;
nscoord mSpaceWidth;
PRUint16 mPixelSize;
PRUint8 mStretchIndex;
PRUint8 mStyleIndex;
nsFontCharSetConverter mDocConverterType;
};
class nsFontEnumeratorGTK : public nsIFontEnumerator
{
public:
nsFontEnumeratorGTK();
NS_DECL_ISUPPORTS
NS_DECL_NSIFONTENUMERATOR
};
#endif

View File

@@ -0,0 +1,148 @@
<RDF:RDF>
<Topic id="root" name="Wired Digital" largeIcon="http://static.wired.com/rdf/objects/w_largeIcon.gif" smallIcon="http://static.wired.com/rdf/objects/w_smallIcon.gif">
<child rdf:href="http://www.hotwired.com" name="HotWired Home Page" largeIcon="http://static.wired.com/rdf/objects/w_largeIcon.gif" smallIcon="http://static.wired.com/rdf/objects/w_smallIcon.gif"/>
<child>
<Topic id="Webmonkey" name="Webmonkey" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif">
<child rdf:href="http://www.webmonkey.com" name="Webmonkey Frontdoor" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif">
<child>
<Topic id="Crash Courses" name="Crash Courses" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif">
<child>
<Topic id="Web Design" name="Web Design" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif">
<child rdf:href="http://www.hotwired.com/webmonkey/98/07/index0a.html?collection=design" name="Day 1: The Foundations of Web Design" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/07/index1a.html?collection=design" name="Day 2: Aesthetics for the Web" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/07/index3a.html?collection=design" name="Day 3: Beyond The Basics" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/html/97/05/index2a.html?collection=design" name="Web Design 101" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/97/45/index0a.html?collection=design" name="Building a Better Monkey" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/11/index0a.html?collection=design" name="Ecological Design Moves Online" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/39/index0a.html?collection=design" name="Test Your Designs - on People!" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/13/index0a.html?collection=design" name="Big Minds on Web Design" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/01/index0a.html?collection=design" name="Be Your Own Design Team" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/22/index0a.html?collection=design" name="BLINK vs. MARQUEE" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/33/index0a.html?collection=design" name="The Future of Web Navigation" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/10/index0a.html?collection=design" name="Cultural Context Revisted" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/html/96/53/index3a.html?collection=design" name="Degrading Pages" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/04/index0a.html?collection=design" name="Design that Communicates Your Message" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/96/41/index0a.html?collection=design" name="Hypertext: The Web's Unsung Hero" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/30/index0a.html?collection=design" name="Why Channels Suck"/>
</Topic>
</child>
<child>
<Topic id="Javascript" name="Javascript" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif">
<child rdf:href="http://www.hotwired.com/webmonkey/98/03/index0a.html?collection=javascript" name="Thau's JavaScript Tutorial: Day 1" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/03/index2a.html?collection=javascript" name="Thau's JavaScript Tutorial: Day 2" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/03/index3a.html?collection=javascript" name="Thau's JavaScript Tutorial: Day 3" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/04/index1a.html?collection=javascript" name="Thau's JavaScript Tutorial: Day 4" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/04/index3a.html?collection=javascript" name="Thau's JavaScript Tutorial: Day 5 " smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
</Topic>
</child>
</Topic>
</child>
<child>
<Topic id="Dynamic HTML" name="Dynamic HTML" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif">
<child rdf:href="http://www.hotwired.com/webmonkey/98/10/index0a.html?collection=dynamic_html" name="Taylor's Dynamic HTML Tutorial - Day 1" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/10/index1a.html?collection=dynamic_html" name="Taylor's Dynamic HTML Tutorial - Day 2" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/10/index2a.html?collection=dynamic_html" name="Taylor's Dynamic HTML Tutorial - Day 3" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/10/index3a.html?collection=dynamic_html" name="Taylor's Dynamic HTML Tutorial - Day 4" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/98/10/index4a.html?collection=dynamic_html" name="Taylor's Dynamic HTML Tutorial - Day 5" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
</Topic>
</child>
<child>
<Topic id="HTML" name="HTML" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif">
<child rdf:href="http://www.hotwired.com/webmonkey/teachingtool/" name="Webmonkey: HTML Tutorial" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/17/index0a.html?collection=html" name="The History of HTML " smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/32/index0a.html?collection=html" name="What You Should Know about HTML 4.0" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/06/index0a.html?collection=html" name="HTML for Smart People" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/geektalk/97/11/index4a.html?collection=html" name="Accessible HTML" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/07/index0a.html?collection=html" name="Getting It Right" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/geektalk/97/36/index3a.html?collection=html" name="Symbols, Accents, and Funky Characters " smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/html/97/06/index2a.html?collection=html" name="Form(s) over Function" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child>
<Topic id="Frames" name="Frames" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif">
<child rdf:href="http://www.hotwired.com/webmonkey/html/96/31/index3a.html?collection=html" name="Frames Are A Picnic (Metaphorically Speaking)" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/geektalk/97/24/index3a.html?collection=html" name="Basic Frames Rehash" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/geektalk/97/02/index4a.html?collection=html" name="Changing Two Frames at Once" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/html/96/36/index2a.html?collection=html" name="Let's Talk Targeting" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/html/96/33/index2a.html?collection=html" name="Don't Forget the Non-Frames Folks" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
</Topic>
</child>
<child>
<Topic id="Tables" name="Tables" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif">
<child rdf:href="http://www.hotwired.com/webmonkey/html/96/47/index3a.html?collection=html" name="The Basic, Basic Table" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/html/96/48/index2a.html?collection=html" name="The Not-So-Basic Table" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/html/96/38/index2a.html?collection=html" name="The Well-Dressed Table" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
</Topic>
</child>
</Topic>
</child>
<child>
<Topic id="XML" name="XML" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif">
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/27/index0a.html?collection=html" name="XML: Metadata for the Rest of Us (Part 1)" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/28/index0a.html?collection=html" name="XML: Roll Your Own Markup Language (Part 2)" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/43/index0a.html?collection=html" name="Acronyms You Can't Live Without" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/97/48/index0a.html?collection=design" name="Smart Web Publishing into the Future" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
</Topic>
</child>
<child>
<Topic id="Stylesheets" name="Stylesheets" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif">
<child rdf:href="http://www.hotwired.com/webmonkey/html/96/34/index2a.html?collection=stylesheets" name="Inject some style (sheets) into your HTML" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/96/33/index0a.html?collection=stylesheets" name="The Wonderful World of Stylesheets" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/35/index0a.html?collection=stylesheets" name="Stylesheets - the next generation" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/demo/96/43/index4a.html?collection=stylesheets" name="Where are All the GIFs?" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/html/97/25/index2a.html?collection=stylesheets" name="Positioning with Stylesheets " smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/34/index0a.html?collection=stylesheets" name="CSS Filters and the Future" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/html/97/33/index1a.html?collection=stylesheets" name="Image Filtering with CSS" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/html/97/38/index1a.html?collection=stylesheets" name="Captain CURSOR!!!" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tools/97/13/index0a.html?collection=stylesheets" name="Time for stylesheets? Not quite yet." smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
</Topic>
</child>
</child>
<child rdf:href="http://www.hotwired.com/webmonkey/mail/mail.html" name="Subscribe to Webmonkey!" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/tuneup/" name="Browser Tuneup" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
<child rdf:href="http://www.hotwired.com/webmonkey/hideout/" name="About Webmonkey" smallIcon="http://static.wired.com/rdf/objects/webmonkey_small.gif"/>
</Topic>
</child>
<child>
<Topic name="Wired News" smallIcon="http://static.wired.com/rdf/objects/wirednews_small.gif">
<child rdf:href="http://www.wired.com/news/" name="Wired News Home Page" smallIcon="http://static.wired.com/rdf/objects/wirednews_small.gif"/>
<child rdf:href="http://www.wired.com/news/business/" name="Business" smallIcon="http://static.wired.com/rdf/objects/finance_small.gif"/>
<child rdf:href="http://www.wired.com/news/culture/" name="Culture" smallIcon="http://static.wired.com/rdf/objects/culture_small.gif"/>
<child rdf:href="http://www.wired.com/news/technology/" name="Technology" smallIcon="http://static.wired.com/rdf/objects/tech_small.gif"/>
<child rdf:href="http://www.wired.com/news/politics/" name="Politics" smallIcon="http://static.wired.com/rdf/objects/politics_small.gif"/>
<child rdf:href="http://www.wired.com/news/worldnews/" name="Global News" smallIcon="http://static.wired.com/rdf/objects/wirednews_small.gif"/>
</Topic>
</child>
<child>
<Topic name="HotBot" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif">
<child rdf:href="http://www.hotbot.com/" name="HotBot" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif"/>
<child rdf:href="http://www.hotbot.com/super.html" name="SuperSearch" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif"/>
<child>
<Topic id="Other Search Tools" name="Other Search Tools" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif">
<child rdf:href="http://www.hotbot.com/usenet/" name="Usenet" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif"/>
<child rdf:href="http://www.newsbot.com/" name="Top News Sites" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif"/>
<child rdf:href="http://www.hotbot.com/partners/business.html" name="Businesses" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif"/>
<child rdf:href="http://www.hotbot.com/partners/people.html" name="People" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif"/>
<child rdf:href="http://www.hotbot.com/partners/email.html" name="Email Adresses" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif"/>
<child rdf:href="http://www.classifieds2000.com/cgi-cls/display.exe?hotbot+class" name="Classifieds" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif"/>
<child rdf:href="http://www.hotbot.com/partners/websitez.html" name="Domain Names" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif"/>
<child rdf:href="http://stocks.hotbot.com/" name="Stocks" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif"/>
<child rdf:href="http://www.hotbot.com/partners/filez.html" name="ShareWare" smallIcon="http://static.wired.com/rdf/objects/hotbot_small.gif"/>
</Topic>
</child>
</Topic>
</child>
<child>
<Topic name="Wired Magazine" smallIcon="http://static.wired.com/rdf/objects/wiredmagazine_small.gif">
<child rdf:href="http://www.wired.com/wired/" name="Wired Magazine Archives" smallIcon="http://static.wired.com/rdf/objects/wiredmagazine_small.gif"/>
<child rdf:href="http://www.wired.com/wired/subscribe/" name="Subscribe to Wired Magazine" smallIcon="http://static.wired.com/rdf/objects/wiredmagazine_small.gif"/>
</Topic>
</child>
<child rdf:href="http://www.livewired.com/" name="LiveWired" smallIcon="http://static.wired.com/rdf/objects/livewired_small.gif"/>

View File

@@ -1,134 +0,0 @@
#
# The contents of this file are subject to the Netscape Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/NPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is mozilla.org code.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
#
DEPTH = ../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = xpcom
XPIDL_MODULE = xpcom_ds
LIBRARY_NAME = xpcomds_s
REQUIRES = unicharutil string
CSRCS = \
pldhash.c \
plvector.c \
$(NULL)
CPPSRCS = \
nsArena.cpp \
nsAtomTable.cpp \
nsAtomService.cpp \
nsAVLTree.cpp \
nsByteBuffer.cpp \
nsCRT.cpp \
nsConjoiningEnumerator.cpp \
nsDeque.cpp \
nsEmptyEnumerator.cpp \
nsEnumeratorUtils.cpp \
nsFixedSizeAllocator.cpp \
nsHashtable.cpp \
nsHashtableEnumerator.cpp \
nsObserver.cpp \
nsObserverList.cpp \
nsObserverService.cpp \
nsProperties.cpp \
nsPersistentProperties.cpp \
nsQuickSort.cpp \
nsSizeOfHandler.cpp \
nsStaticNameTable.cpp \
nsStatistics.cpp \
nsStringMap.cpp \
nsSupportsArray.cpp \
nsSupportsArrayEnumerator.cpp \
nsSupportsPrimitives.cpp \
nsUnicharBuffer.cpp \
nsVoidArray.cpp \
nsVoidBTree.cpp \
nsTextFormatter.cpp \
nsTimelineService.cpp \
$(NULL)
EXPORTS = \
nsAVLTree.h \
nsAtomService.h \
nsCppSharedAllocator.h \
nsCRT.h \
nsDeque.h \
nsEnumeratorUtils.h \
nsFixedSizeAllocator.h \
nsHashtable.h \
nsHashtableEnumerator.h \
nsIArena.h \
nsIByteBuffer.h \
nsIObserverList.h \
nsISimpleEnumerator.h \
nsISizeOfHandler.h \
nsIUnicharBuffer.h \
nsInt64.h \
nsQuickSort.h \
nsStaticNameTable.h \
nsStatistics.h \
nsStringMap.h \
nsSupportsArray.h \
nsSupportsPrimitives.h \
nsTime.h \
nsUnitConversion.h \
nsVector.h \
nsVoidArray.h \
nsVoidBTree.h \
pldhash.h \
plvector.h \
nsTextFormatter.h \
$(NULL)
XPIDLSRCS = \
nsIAtom.idl \
nsIAtomService.idl \
nsICollection.idl \
nsIEnumerator.idl \
nsIObserver.idl \
nsIObserverService.idl \
nsIPersistentProperties2.idl \
nsIProperties.idl \
nsISerializable.idl \
nsIStopwatch.idl \
nsISupportsArray.idl \
nsISupportsIterators.idl \
nsISupportsPrimitives.idl \
nsITimelineService.idl \
$(NULL)
EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS))
# we don't want the shared lib, but we want to force the creation of a static lib.
FORCE_STATIC_LIB = 1
# Force use of PIC
FORCE_USE_PIC = 1
include $(topsrcdir)/config/rules.mk
DEFINES += -D_IMPL_NS_COM -D_IMPL_NS_BASE

View File

@@ -1,300 +0,0 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code.
*
* The Initial Developer of the Original Code is James L. Nance
* Portions created by James L. Nance are Copyright (C) 2001
* James L. Nance. All Rights Reserved.
*
* Contributor(s): Patricia Jewell Nance, Jesse Jacob Nance
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
* "GPL"), in which case the provisions of the GPL are applicable
* instead of those above. If you wish to allow use of your
* version of this file only under the terms of the GPL and not to
* allow others to use your version of this file under the MPL,
* indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by
* the GPL. If you do not delete the provisions above, a recipient
* may use your version of this file under either the MPL or the
* GPL.
*/
// #define TEST_PATRICIA
#if defined(TEST_PATRICIA)
# include "stdlib.h"
# include "stdio.h"
# include "string.h"
# define PRBool bool
# define PRUint32 unsigned int
# define PRInt32 int
# define PR_CALLBACK
# define PLArenaPool int
# define PL_FinishArenaPool(a)
# define PL_InitArenaPool(a, b, c, d)
# define PL_ArenaAllocate(a, size) malloc(size)
# define PR_TRUE true
# define PR_FALSE false
struct nsCRT {
static int strlen(const char *a) {return ::strlen(a);}
static int memcmp(const void *a, const void *b, PRUint32 c) {
return ::memcmp(a,b,c);
}
};
#else
# include "nsCRT.h"
#endif
#include "nsStringMap.h"
const char nsStringMap::zero_str[] = "\0";
nsStringMap::~nsStringMap()
{
// Get rid of the arena memory
PL_FinishArenaPool(&mPool);
}
nsStringMap::nsStringMap() : numEntries(0)
{
// Initialize the head
head.l = head.r = &head;
head.bit = ~0;
head.key = zero_str;
head.len = 1;
head.obj = 0;
// Initialize the arena. Guess that a 512 byte block size is good
PL_InitArenaPool(&mPool, "nsStringMap", 512, sizeof(void*));
}
void
nsStringMap::Reset()
{
// Initialize the head
head.l = head.r = &head;
head.bit = ~0;
head.key = zero_str;
head.len = 1;
head.obj = 0;
// Reinitialize the Arena
PL_FinishArenaPool(&mPool);
PL_InitArenaPool(&mPool, "nsStringMap", 512, sizeof(void*));
}
void
nsStringMap::Reset(nsStringMapEnumFunc destroyFunc, void *aClosure)
{
Enumerate(destroyFunc, aClosure);
Reset();
}
nsStringMap::Patricia *
nsStringMap::newNode()
{
return (Patricia*) PL_ArenaAllocate(&mPool, sizeof(Patricia));
}
nsStringMap::Patricia *
nsStringMap::searchDown(BitTester &key)
{
// The head node only branches to the left, so we can optimize here.
Patricia *x = head.l;
PRUint32 lastBits;
do {
lastBits = x->bit;
if(key.isset(lastBits))
x = x->r;
else
x = x->l;
} while(lastBits > x->bit);
return x;
}
void*
nsStringMap::Get(const char *str, PRUint32 slen)
{
BitTester key(str, slen);
Patricia *t = searchDown(key);
if(!key.memcmp(t->key, t->len)) {
return t->obj;
}
return 0;
}
void*
nsStringMap::Get(const char *str)
{
BitTester key(str);
Patricia *t = searchDown(key);
if(!key.memcmp(t->key, t->len)) {
return t->obj;
}
return 0;
}
PRBool
nsStringMap::Put(const char *str, void *obj, PRBool copy)
{
PRUint32 slen = nsCRT::strlen(str);
return Put(str, slen, obj, copy);
}
PRBool
nsStringMap::Put(const char *str, PRUint32 slen, void *obj, PRBool copy)
{
if(copy) {
PRUint32 mask = sizeof(double) - 1;
PRUint32 asize = (slen+mask) & ~mask;
char *tstr = (char*) PL_ArenaAllocate(&mPool, asize);
memcpy(tstr, str, slen);
str = tstr;
}
BitTester key(str, slen);
Patricia *t = searchDown(key);
if(!key.memcmp(t->key, t->len)) {
t->obj = obj;
return PR_TRUE;
}
// This is somewhat ugly. We need to find the maximum bit position that
// differs, but this is complicated by the fact that we have random length
// data. Assume that data past the end of the string is 0.
const PRUint32 klen = key.datalen();
const PRUint32 tlen = t->len;
PRUint32 bpos;
if(klen>tlen) {
bpos = 8 * klen - 1;
while(!BitTester::isset_checked(str, bpos)) --bpos;
} else if(tlen>klen) {
bpos = 8 * tlen - 1;
while(!BitTester::isset_checked(t->key, bpos)) --bpos;
} else /* equal */ {
bpos = 8 * tlen - 1;
while(BitTester::bitsequal(t->key, str, bpos)) --bpos;
}
Patricia *p, *x = &head;
do {
p = x;
x = key.isset(x->bit) ? x->r : x->l;
} while(x->bit > bpos && p->bit > x->bit);
t = newNode();
if(!t) {
return PR_FALSE;
}
t->key = str;
t->len = key.datalen();
t->obj = obj;
t->bit = bpos;
if(key.isset(t->bit)) {
t->r = t;
t->l = x;
} else {
t->r = x;
t->l = t;
}
if(key.isset(p->bit)) {
p->r = t;
} else {
p->l = t;
}
return PR_TRUE;
}
void
nsStringMap::enumerate_recurse(
nsStringMapEnumFunc aEnumFunc, void* aClosure, Patricia *node)
{
aEnumFunc(node->key, node->obj, aClosure);
if(node->l && node->l->bit<node->bit)
enumerate_recurse(aEnumFunc, aClosure, node->l);
if(node->r && node->r->bit<node->bit)
enumerate_recurse(aEnumFunc, aClosure, node->r);
}
void
nsStringMap::Enumerate(nsStringMapEnumFunc aEnumFunc, void *aClosure)
{
// We dont want to process head, its a sentinal
if(head.l && head.l->bit<head.bit)
enumerate_recurse(aEnumFunc, aClosure, head.l);
if(head.r && head.r->bit<head.bit)
enumerate_recurse(aEnumFunc, aClosure, head.r);
}
#if defined(TEST_PATRICIA)
PRBool etest(const char *key, void *data, void *closure)
{
printf("%s\n", key);
return PR_TRUE;
}
int main()
{
nsStringMap map;
const char *strings[] = {
"I am number 1 string",
"I am number 2 string",
"I am number 3 string",
"a different string",
"a similar string",
"I am a very long string and I want to make sure we can handle this",
"I am a very long string and I want to make sure we can handle this too",
0
};
int idx;
for(idx=0; strings[idx]; ++idx) {
map.Put(strings[idx], (void*)(1+idx));
}
printf("Lookup Test\n");
while(--idx>=0) {
void *ptr = map.Get(strings[idx]);
printf("%d: %s\n", (long)ptr, strings[idx]);
}
printf("\nEnumeration Test\n");
map.Enumerate(etest, 0);
return 0;
}
#endif

View File

@@ -1,112 +0,0 @@
#ifndef nsStringMap_h__
#define nsStringMap_h__
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla Communicator client code.
*
* The Initial Developer of the Original Code is James L. Nance
* Portions created by James L. Nance are Copyright (C) 2001
* James L. Nance. All Rights Reserved.
*
* Contributor(s): Patricia Jewell Nance, Jesse Jacob Nance
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
* "GPL"), in which case the provisions of the GPL are applicable
* instead of those above. If you wish to allow use of your
* version of this file only under the terms of the GPL and not to
* allow others to use your version of this file under the MPL,
* indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by
* the GPL. If you do not delete the provisions above, a recipient
* may use your version of this file under either the MPL or the
* GPL.
*/
#if !defined(TEST_PATRICIA)
# include "nscore.h"
# include "prtypes.h"
# include "plarena.h"
#endif
typedef PRBool (*PR_CALLBACK nsStringMapEnumFunc) (
const char *aKey, void *aData, void *aClosure);
class nsStringMap
{
public:
nsStringMap();
~nsStringMap();
PRBool Put(const char *str, PRUint32 slen, void *obj, PRBool copy=PR_FALSE);
PRBool Put(const char *str, void *obj, PRBool copy=PR_FALSE);
void* Get(const char *str);
void* Get(const char *str, PRUint32 slen);
void Reset();
void Reset(nsStringMapEnumFunc destroyFunc, void *aClosure = 0);
void Enumerate(nsStringMapEnumFunc aEnumFunc, void *aClosure = 0);
struct Patricia {
Patricia *l, *r;
PRUint32 bit; // Bit position for l/r comp
const char *key;
PRUint32 len;
void *obj;
};
// The BitTester class is used to test a particular bit position in an
// array of characters. It does not assign any special meaning to 0
// characters. Bits past the end of the array are treated as 0
class BitTester {
const PRUint32 slen;
const char *cstr;
public:
BitTester(const char *s) : slen(nsCRT::strlen(s)), cstr(s) {}
BitTester(const char *s, PRUint32 l) : slen(l), cstr(s) {}
PRInt32 memcmp(const char *ostr, PRUint32 olen) {
if(olen==slen) {
return ::memcmp((void*)cstr, ostr, slen);
} else {
return olen - slen;
}
}
PRUint32 datalen() const {return slen;}
static PRBool isset_checked(const char *str, PRUint32 idx) {
return (str[idx/8] & (1<<(idx & 7))) != 0;
}
static PRBool
bitsequal(const char *str1, const char*str2, PRUint32 idx) {
return (str1[idx/8] & (1<<(idx&7)))==(str2[idx/8] & (1<<(idx&7)));
}
PRBool isset(PRUint32 idx) {
const PRUint32 base = idx/8;
if(base>=slen) return 0;
return (cstr[base] & (1<<(idx & 7))) != 0;
}
};
private:
PLArenaPool mPool;
Patricia *newNode();
Patricia *searchDown(BitTester&);
void enumerate_recurse(nsStringMapEnumFunc, void*, Patricia*);
Patricia head; // Sentinal node
PRInt32 numEntries;
static const char zero_str[];
};
#endif