summaryrefslogtreecommitdiffstats
path: root/extensions/universalchardet/src/xpcom/nsUdetXPCOMWrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/universalchardet/src/xpcom/nsUdetXPCOMWrapper.cpp')
-rw-r--r--extensions/universalchardet/src/xpcom/nsUdetXPCOMWrapper.cpp130
1 files changed, 130 insertions, 0 deletions
diff --git a/extensions/universalchardet/src/xpcom/nsUdetXPCOMWrapper.cpp b/extensions/universalchardet/src/xpcom/nsUdetXPCOMWrapper.cpp
new file mode 100644
index 000000000..750b1fd07
--- /dev/null
+++ b/extensions/universalchardet/src/xpcom/nsUdetXPCOMWrapper.cpp
@@ -0,0 +1,130 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nscore.h"
+
+#include "nsUniversalDetector.h"
+#include "nsUdetXPCOMWrapper.h"
+#include "nsCharSetProber.h" // for DumpStatus
+
+#include "nsUniversalCharDetDll.h"
+//---- for XPCOM
+#include "nsIFactory.h"
+#include "nsISupports.h"
+#include "nsCOMPtr.h"
+
+//---------------------------------------------------------------------
+nsXPCOMDetector:: nsXPCOMDetector()
+ : nsUniversalDetector()
+{
+}
+//---------------------------------------------------------------------
+nsXPCOMDetector::~nsXPCOMDetector()
+{
+}
+//---------------------------------------------------------------------
+
+NS_IMPL_ISUPPORTS(nsXPCOMDetector, nsICharsetDetector)
+
+//---------------------------------------------------------------------
+NS_IMETHODIMP nsXPCOMDetector::Init(
+ nsICharsetDetectionObserver* aObserver)
+{
+ NS_ASSERTION(mObserver == nullptr , "Init twice");
+ if(nullptr == aObserver)
+ return NS_ERROR_ILLEGAL_VALUE;
+
+ mObserver = aObserver;
+ return NS_OK;
+}
+//----------------------------------------------------------
+NS_IMETHODIMP nsXPCOMDetector::DoIt(const char* aBuf,
+ uint32_t aLen, bool* oDontFeedMe)
+{
+ NS_ASSERTION(mObserver != nullptr , "have not init yet");
+
+ if((nullptr == aBuf) || (nullptr == oDontFeedMe))
+ return NS_ERROR_ILLEGAL_VALUE;
+
+ this->Reset();
+ nsresult rv = this->HandleData(aBuf, aLen);
+ if (NS_FAILED(rv))
+ return rv;
+
+ if (mDone)
+ {
+ if (mDetectedCharset)
+ Report(mDetectedCharset);
+
+ *oDontFeedMe = true;
+ }
+ *oDontFeedMe = false;
+ return NS_OK;
+}
+//----------------------------------------------------------
+NS_IMETHODIMP nsXPCOMDetector::Done()
+{
+ NS_ASSERTION(mObserver != nullptr , "have not init yet");
+#ifdef DEBUG_chardet
+ for (int32_t i = 0; i < NUM_OF_CHARSET_PROBERS; i++)
+ {
+ // If no data was received the array might stay filled with nulls
+ // the way it was initialized in the constructor.
+ if (mCharSetProbers[i])
+ mCharSetProbers[i]->DumpStatus();
+ }
+#endif
+
+ this->DataEnd();
+ return NS_OK;
+}
+//----------------------------------------------------------
+void nsXPCOMDetector::Report(const char* aCharset)
+{
+ NS_ASSERTION(mObserver != nullptr , "have not init yet");
+#ifdef DEBUG_chardet
+ printf("Universal Charset Detector report charset %s . \r\n", aCharset);
+#endif
+ mObserver->Notify(aCharset, eBestAnswer);
+}
+
+
+//---------------------------------------------------------------------
+nsXPCOMStringDetector:: nsXPCOMStringDetector()
+ : nsUniversalDetector()
+{
+}
+//---------------------------------------------------------------------
+nsXPCOMStringDetector::~nsXPCOMStringDetector()
+{
+}
+//---------------------------------------------------------------------
+NS_IMPL_ISUPPORTS(nsXPCOMStringDetector, nsIStringCharsetDetector)
+//---------------------------------------------------------------------
+void nsXPCOMStringDetector::Report(const char *aCharset)
+{
+ mResult = aCharset;
+#ifdef DEBUG_chardet
+ printf("New Charset Prober report charset %s . \r\n", aCharset);
+#endif
+}
+//---------------------------------------------------------------------
+NS_IMETHODIMP nsXPCOMStringDetector::DoIt(const char* aBuf,
+ uint32_t aLen, const char** oCharset,
+ nsDetectionConfident &oConf)
+{
+ mResult = nullptr;
+ this->Reset();
+ nsresult rv = this->HandleData(aBuf, aLen);
+ if (NS_FAILED(rv))
+ return rv;
+ this->DataEnd();
+ if (mResult)
+ {
+ *oCharset=mResult;
+ oConf = eBestAnswer;
+ }
+ return NS_OK;
+}