extensions/universalchardet/src/base/nsEscCharsetProber.cpp

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

michael@0 1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
michael@0 2 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 3 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 5
michael@0 6
michael@0 7 #include "nsEscCharsetProber.h"
michael@0 8 #include "nsUniversalDetector.h"
michael@0 9
michael@0 10 nsEscCharSetProber::nsEscCharSetProber(uint32_t aLanguageFilter)
michael@0 11 {
michael@0 12 for (uint32_t i = 0; i < NUM_OF_ESC_CHARSETS; i++)
michael@0 13 mCodingSM[i] = nullptr;
michael@0 14 if (aLanguageFilter & NS_FILTER_CHINESE_SIMPLIFIED)
michael@0 15 {
michael@0 16 mCodingSM[0] = new nsCodingStateMachine(&HZSMModel);
michael@0 17 mCodingSM[1] = new nsCodingStateMachine(&ISO2022CNSMModel);
michael@0 18 }
michael@0 19 if (aLanguageFilter & NS_FILTER_JAPANESE)
michael@0 20 mCodingSM[2] = new nsCodingStateMachine(&ISO2022JPSMModel);
michael@0 21 if (aLanguageFilter & NS_FILTER_KOREAN)
michael@0 22 mCodingSM[3] = new nsCodingStateMachine(&ISO2022KRSMModel);
michael@0 23 mActiveSM = NUM_OF_ESC_CHARSETS;
michael@0 24 mState = eDetecting;
michael@0 25 mDetectedCharset = nullptr;
michael@0 26 }
michael@0 27
michael@0 28 nsEscCharSetProber::~nsEscCharSetProber(void)
michael@0 29 {
michael@0 30 for (uint32_t i = 0; i < NUM_OF_ESC_CHARSETS; i++)
michael@0 31 delete mCodingSM[i];
michael@0 32 }
michael@0 33
michael@0 34 void nsEscCharSetProber::Reset(void)
michael@0 35 {
michael@0 36 mState = eDetecting;
michael@0 37 for (uint32_t i = 0; i < NUM_OF_ESC_CHARSETS; i++)
michael@0 38 if (mCodingSM[i])
michael@0 39 mCodingSM[i]->Reset();
michael@0 40 mActiveSM = NUM_OF_ESC_CHARSETS;
michael@0 41 mDetectedCharset = nullptr;
michael@0 42 }
michael@0 43
michael@0 44 nsProbingState nsEscCharSetProber::HandleData(const char* aBuf, uint32_t aLen)
michael@0 45 {
michael@0 46 nsSMState codingState;
michael@0 47 int32_t j;
michael@0 48 uint32_t i;
michael@0 49
michael@0 50 for ( i = 0; i < aLen && mState == eDetecting; i++)
michael@0 51 {
michael@0 52 for (j = mActiveSM-1; j>= 0; j--)
michael@0 53 {
michael@0 54 if (mCodingSM[j])
michael@0 55 {
michael@0 56 codingState = mCodingSM[j]->NextState(aBuf[i]);
michael@0 57 if (codingState == eItsMe)
michael@0 58 {
michael@0 59 mState = eFoundIt;
michael@0 60 mDetectedCharset = mCodingSM[j]->GetCodingStateMachine();
michael@0 61 return mState;
michael@0 62 }
michael@0 63 }
michael@0 64 }
michael@0 65 }
michael@0 66
michael@0 67 return mState;
michael@0 68 }
michael@0 69

mercurial