diff --git a/mozilla/content/base/public/nsIDocument.h b/mozilla/content/base/public/nsIDocument.h index 8f23c49a7f7..17ca2a93d70 100644 --- a/mozilla/content/base/public/nsIDocument.h +++ b/mozilla/content/base/public/nsIDocument.h @@ -50,6 +50,7 @@ class nsXIFConverter; class nsINameSpaceManager; class nsIDOMSelection; class nsIDOMDocumentFragment; +class nsILineBreaker; // IID for the nsIDocument interface #define NS_IDOCUMENT_IID \ @@ -111,6 +112,12 @@ public: virtual nsString* GetDocumentCharacterSet() const = 0; virtual void SetDocumentCharacterSet(nsString* aCharSetID) = 0; + /** + * Return the Line Breaker for the document + */ + NS_IMETHOD GetLineBreaker(nsILineBreaker** aResult) = 0; + NS_IMETHOD SetLineBreaker(nsILineBreaker* aLineBreaker) = 0; + /** * Access HTTP header data (this may also get set from other sources, like * HTML META tags). diff --git a/mozilla/content/base/src/nsDocument.cpp b/mozilla/content/base/src/nsDocument.cpp index e9838d40bf3..595c46d1fbf 100644 --- a/mozilla/content/base/src/nsDocument.cpp +++ b/mozilla/content/base/src/nsDocument.cpp @@ -95,6 +95,12 @@ static NS_DEFINE_IID(kIEnumeratorIID, NS_IENUMERATOR_IID); static NS_DEFINE_IID(kIDOMScriptObjectFactoryIID, NS_IDOM_SCRIPT_OBJECT_FACTORY_IID); static NS_DEFINE_IID(kDOMScriptObjectFactoryCID, NS_DOM_SCRIPT_OBJECT_FACTORY_CID); + +#include "nsILineBreakerFactory.h" +#include "nsLWBrkCIID.h" +static NS_DEFINE_IID(kLWBrkCID, NS_LWBRK_CID); +static NS_DEFINE_IID(kILineBreakerFactoryIID, NS_ILINEBREAKERFACTORY_IID); + class nsDOMStyleSheetCollection : public nsIDOMStyleSheetCollection, public nsIScriptObjectOwner, public nsIDocumentObserver @@ -561,6 +567,7 @@ nsDocument::nsDocument() mDOMStyleSheets = nsnull; mNameSpaceManager = nsnull; mHeaderData = nsnull; + mLineBreaker = nsnull; Init();/* XXX */ } @@ -614,6 +621,7 @@ nsDocument::~nsDocument() delete mHeaderData; mHeaderData = nsnull; } + NS_IF_RELEASE(mLineBreaker); } nsresult nsDocument::QueryInterface(REFNSIID aIID, void** aInstancePtr) @@ -803,6 +811,37 @@ void nsDocument::SetDocumentCharacterSet(nsString* aCharSetID) mCharacterSet = aCharSetID; } +NS_IMETHODIMP nsDocument::GetLineBreaker(nsILineBreaker** aResult) +{ + if(nsnull == mLineBreaker ) { + // no line breaker, find a default one + nsILineBreakerFactory *lf; + nsresult result; + result = nsServiceManager::GetService(kLWBrkCID, + kILineBreakerFactoryIID, + (nsISupports **)&lf); + if (NS_SUCCEEDED(result)) { + nsILineBreaker *lb = nsnull ; + nsAutoString lbarg(""); + result = lf->GetBreaker(lbarg, &lb); + if(NS_SUCCEEDED(result)) { + mLineBreaker = lb; + } + result = nsServiceManager::ReleaseService(kLWBrkCID, lf); + } + } + *aResult = mLineBreaker; + NS_IF_ADDREF(mLineBreaker); + return NS_OK; // XXX we should do error handling here +} +NS_IMETHODIMP nsDocument::SetLineBreaker(nsILineBreaker* aLineBreaker) +{ + NS_IF_RELEASE(mLineBreaker); + mLineBreaker = aLineBreaker; + NS_IF_ADDREF(mLineBreaker); + return NS_OK; +} + NS_IMETHODIMP nsDocument::GetHeaderData(nsIAtom* aHeaderField, nsString& aData) const { diff --git a/mozilla/content/base/src/nsDocument.h b/mozilla/content/base/src/nsDocument.h index 0bbe79aa4df..c9c8108f84c 100644 --- a/mozilla/content/base/src/nsDocument.h +++ b/mozilla/content/base/src/nsDocument.h @@ -121,6 +121,12 @@ public: virtual nsString* GetDocumentCharacterSet() const; virtual void SetDocumentCharacterSet(nsString* aCharSetID); + /** + * Return the Line Breaker for the document + */ + NS_IMETHOD GetLineBreaker(nsILineBreaker** aResult) ; + NS_IMETHOD SetLineBreaker(nsILineBreaker* aLineBreaker) ; + /** * Access HTTP header data (this may also get set from other sources, like * HTML META tags). @@ -362,6 +368,7 @@ protected: nsDOMStyleSheetCollection *mDOMStyleSheets; nsINameSpaceManager* mNameSpaceManager; nsDocHeaderData* mHeaderData; + nsILineBreaker* mLineBreaker; }; #endif /* nsDocument_h___ */ diff --git a/mozilla/content/xul/document/src/nsXULDocument.cpp b/mozilla/content/xul/document/src/nsXULDocument.cpp index 40359d127d3..69f8f9488f8 100644 --- a/mozilla/content/xul/document/src/nsXULDocument.cpp +++ b/mozilla/content/xul/document/src/nsXULDocument.cpp @@ -83,6 +83,9 @@ #include "plstr.h" #include "rdfutil.h" + +#include "nsILineBreakerFactory.h" +#include "nsLWBrkCIID.h" //////////////////////////////////////////////////////////////////////// static NS_DEFINE_IID(kICSSParserIID, NS_ICSS_PARSER_IID); // XXX grr.. @@ -128,6 +131,9 @@ static NS_DEFINE_CID(kWellFormedDTDCID, NS_WELLFORMEDDTD_CID); static NS_DEFINE_CID(kXULContentSinkCID, NS_XULCONTENTSINK_CID); static NS_DEFINE_CID(kXULDataSourceCID, NS_XULDATASOURCE_CID); +static NS_DEFINE_IID(kLWBrkCID, NS_LWBRK_CID); +static NS_DEFINE_IID(kILineBreakerFactoryIID, NS_ILINEBREAKERFACTORY_IID); + //////////////////////////////////////////////////////////////////////// enum nsContentType { @@ -334,6 +340,9 @@ public: virtual void SetDocumentCharacterSet(nsString* aCharSetID); + NS_IMETHOD GetLineBreaker(nsILineBreaker** aResult) ; + NS_IMETHOD SetLineBreaker(nsILineBreaker* aLineBreaker) ; + NS_IMETHOD GetHeaderData(nsIAtom* aHeaderField, nsString& aData) const; NS_IMETHOD SetHeaderData(nsIAtom* aheaderField, const nsString& aData); @@ -591,6 +600,7 @@ protected: nsIRDFDataSource* mLocalDataSource; nsIRDFDataSource* mDocumentDataSource; nsIParser* mParser; + nsILineBreaker* mLineBreaker; }; @@ -614,10 +624,12 @@ XULDocumentImpl::XULDocumentImpl(void) mXULBuilder(nsnull), mLocalDataSource(nsnull), mDocumentDataSource(nsnull), + mLineBreaker(nsnull), mParser(nsnull) { NS_INIT_REFCNT(); + nsresult rv; // construct a selection object @@ -650,6 +662,7 @@ XULDocumentImpl::~XULDocumentImpl() NS_IF_RELEASE(mArena); NS_IF_RELEASE(mNameSpaceManager); NS_IF_RELEASE(mParser); + NS_IF_RELEASE(mLineBreaker); } @@ -960,6 +973,42 @@ XULDocumentImpl::SetDocumentCharacterSet(nsString* aCharSetID) mCharSetID = aCharSetID; } + +NS_IMETHODIMP +XULDocumentImpl::GetLineBreaker(nsILineBreaker** aResult) +{ + if(nsnull == mLineBreaker ) { + // no line breaker, find a default one + nsILineBreakerFactory *lf; + nsresult result; + result = nsServiceManager::GetService(kLWBrkCID, + kILineBreakerFactoryIID, + (nsISupports **)&lf); + if (NS_SUCCEEDED(result)) { + nsILineBreaker *lb = nsnull ; + nsAutoString lbarg(""); + result = lf->GetBreaker(lbarg, &lb); + if(NS_SUCCEEDED(result)) { + mLineBreaker = lb; + } + result = nsServiceManager::ReleaseService(kLWBrkCID, lf); + } + } + *aResult = mLineBreaker; + NS_IF_ADDREF(mLineBreaker); + return NS_OK; // XXX we should do error handling here +} + +NS_IMETHODIMP +XULDocumentImpl::SetLineBreaker(nsILineBreaker* aLineBreaker) +{ + NS_IF_RELEASE(mLineBreaker); + mLineBreaker = aLineBreaker; + NS_IF_ADDREF(mLineBreaker); + return NS_OK; +} + + NS_IMETHODIMP XULDocumentImpl::GetHeaderData(nsIAtom* aHeaderField, nsString& aData) const { diff --git a/mozilla/layout/base/public/nsIDocument.h b/mozilla/layout/base/public/nsIDocument.h index 8f23c49a7f7..17ca2a93d70 100644 --- a/mozilla/layout/base/public/nsIDocument.h +++ b/mozilla/layout/base/public/nsIDocument.h @@ -50,6 +50,7 @@ class nsXIFConverter; class nsINameSpaceManager; class nsIDOMSelection; class nsIDOMDocumentFragment; +class nsILineBreaker; // IID for the nsIDocument interface #define NS_IDOCUMENT_IID \ @@ -111,6 +112,12 @@ public: virtual nsString* GetDocumentCharacterSet() const = 0; virtual void SetDocumentCharacterSet(nsString* aCharSetID) = 0; + /** + * Return the Line Breaker for the document + */ + NS_IMETHOD GetLineBreaker(nsILineBreaker** aResult) = 0; + NS_IMETHOD SetLineBreaker(nsILineBreaker* aLineBreaker) = 0; + /** * Access HTTP header data (this may also get set from other sources, like * HTML META tags). diff --git a/mozilla/layout/base/src/makefile.win b/mozilla/layout/base/src/makefile.win index a72293e885b..69cbdc9ebe6 100644 --- a/mozilla/layout/base/src/makefile.win +++ b/mozilla/layout/base/src/makefile.win @@ -95,7 +95,8 @@ CPP_OBJS= \ LINCS=-I$(PUBLIC)\xpcom -I$(PUBLIC)\raptor \ -I$(PUBLIC)\dom -I$(PUBLIC)\js -I$(PUBLIC)\netlib \ - -I$(PUBLIC)\pref -I..\..\html\base\src -I..\..\html\style\src + -I$(PUBLIC)\pref -I..\..\html\base\src -I..\..\html\style\src \ + -I$(PUBLIC)\lwbrk LCFLAGS = \ $(LCFLAGS) \ diff --git a/mozilla/layout/base/src/nsDocument.cpp b/mozilla/layout/base/src/nsDocument.cpp index e9838d40bf3..595c46d1fbf 100644 --- a/mozilla/layout/base/src/nsDocument.cpp +++ b/mozilla/layout/base/src/nsDocument.cpp @@ -95,6 +95,12 @@ static NS_DEFINE_IID(kIEnumeratorIID, NS_IENUMERATOR_IID); static NS_DEFINE_IID(kIDOMScriptObjectFactoryIID, NS_IDOM_SCRIPT_OBJECT_FACTORY_IID); static NS_DEFINE_IID(kDOMScriptObjectFactoryCID, NS_DOM_SCRIPT_OBJECT_FACTORY_CID); + +#include "nsILineBreakerFactory.h" +#include "nsLWBrkCIID.h" +static NS_DEFINE_IID(kLWBrkCID, NS_LWBRK_CID); +static NS_DEFINE_IID(kILineBreakerFactoryIID, NS_ILINEBREAKERFACTORY_IID); + class nsDOMStyleSheetCollection : public nsIDOMStyleSheetCollection, public nsIScriptObjectOwner, public nsIDocumentObserver @@ -561,6 +567,7 @@ nsDocument::nsDocument() mDOMStyleSheets = nsnull; mNameSpaceManager = nsnull; mHeaderData = nsnull; + mLineBreaker = nsnull; Init();/* XXX */ } @@ -614,6 +621,7 @@ nsDocument::~nsDocument() delete mHeaderData; mHeaderData = nsnull; } + NS_IF_RELEASE(mLineBreaker); } nsresult nsDocument::QueryInterface(REFNSIID aIID, void** aInstancePtr) @@ -803,6 +811,37 @@ void nsDocument::SetDocumentCharacterSet(nsString* aCharSetID) mCharacterSet = aCharSetID; } +NS_IMETHODIMP nsDocument::GetLineBreaker(nsILineBreaker** aResult) +{ + if(nsnull == mLineBreaker ) { + // no line breaker, find a default one + nsILineBreakerFactory *lf; + nsresult result; + result = nsServiceManager::GetService(kLWBrkCID, + kILineBreakerFactoryIID, + (nsISupports **)&lf); + if (NS_SUCCEEDED(result)) { + nsILineBreaker *lb = nsnull ; + nsAutoString lbarg(""); + result = lf->GetBreaker(lbarg, &lb); + if(NS_SUCCEEDED(result)) { + mLineBreaker = lb; + } + result = nsServiceManager::ReleaseService(kLWBrkCID, lf); + } + } + *aResult = mLineBreaker; + NS_IF_ADDREF(mLineBreaker); + return NS_OK; // XXX we should do error handling here +} +NS_IMETHODIMP nsDocument::SetLineBreaker(nsILineBreaker* aLineBreaker) +{ + NS_IF_RELEASE(mLineBreaker); + mLineBreaker = aLineBreaker; + NS_IF_ADDREF(mLineBreaker); + return NS_OK; +} + NS_IMETHODIMP nsDocument::GetHeaderData(nsIAtom* aHeaderField, nsString& aData) const { diff --git a/mozilla/layout/base/src/nsDocument.h b/mozilla/layout/base/src/nsDocument.h index 0bbe79aa4df..c9c8108f84c 100644 --- a/mozilla/layout/base/src/nsDocument.h +++ b/mozilla/layout/base/src/nsDocument.h @@ -121,6 +121,12 @@ public: virtual nsString* GetDocumentCharacterSet() const; virtual void SetDocumentCharacterSet(nsString* aCharSetID); + /** + * Return the Line Breaker for the document + */ + NS_IMETHOD GetLineBreaker(nsILineBreaker** aResult) ; + NS_IMETHOD SetLineBreaker(nsILineBreaker* aLineBreaker) ; + /** * Access HTTP header data (this may also get set from other sources, like * HTML META tags). @@ -362,6 +368,7 @@ protected: nsDOMStyleSheetCollection *mDOMStyleSheets; nsINameSpaceManager* mNameSpaceManager; nsDocHeaderData* mHeaderData; + nsILineBreaker* mLineBreaker; }; #endif /* nsDocument_h___ */ diff --git a/mozilla/rdf/content/src/makefile.win b/mozilla/rdf/content/src/makefile.win index 150bb705b0c..1593ffc530f 100644 --- a/mozilla/rdf/content/src/makefile.win +++ b/mozilla/rdf/content/src/makefile.win @@ -48,6 +48,7 @@ LINCS= -I$(PUBLIC)\rdf \ -I$(PUBLIC)\xpcom \ -I$(PUBLIC)\netlib \ -I$(PUBLIC)\raptor \ + -I$(PUBLIC)\lwbrk \ -I$(PUBLIC)\js \ -I$(PUBLIC)\dom \ -I$(DEPTH)\rdf\base\src \ diff --git a/mozilla/rdf/content/src/nsXULDocument.cpp b/mozilla/rdf/content/src/nsXULDocument.cpp index 40359d127d3..69f8f9488f8 100644 --- a/mozilla/rdf/content/src/nsXULDocument.cpp +++ b/mozilla/rdf/content/src/nsXULDocument.cpp @@ -83,6 +83,9 @@ #include "plstr.h" #include "rdfutil.h" + +#include "nsILineBreakerFactory.h" +#include "nsLWBrkCIID.h" //////////////////////////////////////////////////////////////////////// static NS_DEFINE_IID(kICSSParserIID, NS_ICSS_PARSER_IID); // XXX grr.. @@ -128,6 +131,9 @@ static NS_DEFINE_CID(kWellFormedDTDCID, NS_WELLFORMEDDTD_CID); static NS_DEFINE_CID(kXULContentSinkCID, NS_XULCONTENTSINK_CID); static NS_DEFINE_CID(kXULDataSourceCID, NS_XULDATASOURCE_CID); +static NS_DEFINE_IID(kLWBrkCID, NS_LWBRK_CID); +static NS_DEFINE_IID(kILineBreakerFactoryIID, NS_ILINEBREAKERFACTORY_IID); + //////////////////////////////////////////////////////////////////////// enum nsContentType { @@ -334,6 +340,9 @@ public: virtual void SetDocumentCharacterSet(nsString* aCharSetID); + NS_IMETHOD GetLineBreaker(nsILineBreaker** aResult) ; + NS_IMETHOD SetLineBreaker(nsILineBreaker* aLineBreaker) ; + NS_IMETHOD GetHeaderData(nsIAtom* aHeaderField, nsString& aData) const; NS_IMETHOD SetHeaderData(nsIAtom* aheaderField, const nsString& aData); @@ -591,6 +600,7 @@ protected: nsIRDFDataSource* mLocalDataSource; nsIRDFDataSource* mDocumentDataSource; nsIParser* mParser; + nsILineBreaker* mLineBreaker; }; @@ -614,10 +624,12 @@ XULDocumentImpl::XULDocumentImpl(void) mXULBuilder(nsnull), mLocalDataSource(nsnull), mDocumentDataSource(nsnull), + mLineBreaker(nsnull), mParser(nsnull) { NS_INIT_REFCNT(); + nsresult rv; // construct a selection object @@ -650,6 +662,7 @@ XULDocumentImpl::~XULDocumentImpl() NS_IF_RELEASE(mArena); NS_IF_RELEASE(mNameSpaceManager); NS_IF_RELEASE(mParser); + NS_IF_RELEASE(mLineBreaker); } @@ -960,6 +973,42 @@ XULDocumentImpl::SetDocumentCharacterSet(nsString* aCharSetID) mCharSetID = aCharSetID; } + +NS_IMETHODIMP +XULDocumentImpl::GetLineBreaker(nsILineBreaker** aResult) +{ + if(nsnull == mLineBreaker ) { + // no line breaker, find a default one + nsILineBreakerFactory *lf; + nsresult result; + result = nsServiceManager::GetService(kLWBrkCID, + kILineBreakerFactoryIID, + (nsISupports **)&lf); + if (NS_SUCCEEDED(result)) { + nsILineBreaker *lb = nsnull ; + nsAutoString lbarg(""); + result = lf->GetBreaker(lbarg, &lb); + if(NS_SUCCEEDED(result)) { + mLineBreaker = lb; + } + result = nsServiceManager::ReleaseService(kLWBrkCID, lf); + } + } + *aResult = mLineBreaker; + NS_IF_ADDREF(mLineBreaker); + return NS_OK; // XXX we should do error handling here +} + +NS_IMETHODIMP +XULDocumentImpl::SetLineBreaker(nsILineBreaker* aLineBreaker) +{ + NS_IF_RELEASE(mLineBreaker); + mLineBreaker = aLineBreaker; + NS_IF_ADDREF(mLineBreaker); + return NS_OK; +} + + NS_IMETHODIMP XULDocumentImpl::GetHeaderData(nsIAtom* aHeaderField, nsString& aData) const {