File Coverage

src/nsEscCharsetProber.cpp
Criterion Covered Total %
statement 0 38 0.0
branch 0 26 0.0
condition n/a
subroutine n/a
pod n/a
total 0 64 0.0


line stmt bran cond sub pod time code
1             /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2             /* ***** BEGIN LICENSE BLOCK *****
3             * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4             *
5             * The contents of this file are subject to the Mozilla Public License Version
6             * 1.1 (the "License"); you may not use this file except in compliance with
7             * the License. You may obtain a copy of the License at
8             * http://www.mozilla.org/MPL/
9             *
10             * Software distributed under the License is distributed on an "AS IS" basis,
11             * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12             * for the specific language governing rights and limitations under the
13             * License.
14             *
15             * The Original Code is mozilla.org code.
16             *
17             * The Initial Developer of the Original Code is
18             * Netscape Communications Corporation.
19             * Portions created by the Initial Developer are Copyright (C) 1998
20             * the Initial Developer. All Rights Reserved.
21             *
22             * Contributor(s):
23             *
24             * Alternatively, the contents of this file may be used under the terms of
25             * either the GNU General Public License Version 2 or later (the "GPL"), or
26             * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27             * in which case the provisions of the GPL or the LGPL are applicable instead
28             * of those above. If you wish to allow use of your version of this file only
29             * under the terms of either the GPL or the LGPL, and not to allow others to
30             * use your version of this file under the terms of the MPL, indicate your
31             * decision by deleting the provisions above and replace them with the notice
32             * and other provisions required by the GPL or the LGPL. If you do not delete
33             * the provisions above, a recipient may use your version of this file under
34             * the terms of any one of the MPL, the GPL or the LGPL.
35             *
36             * ***** END LICENSE BLOCK ***** */
37              
38              
39             #include "nsEscCharsetProber.h"
40              
41 0           nsEscCharSetProber::nsEscCharSetProber(void)
42             {
43 0 0         mCodingSM[0] = new nsCodingStateMachine(&HZSMModel);
44 0 0         mCodingSM[1] = new nsCodingStateMachine(&ISO2022CNSMModel);
45 0 0         mCodingSM[2] = new nsCodingStateMachine(&ISO2022JPSMModel);
46 0 0         mCodingSM[3] = new nsCodingStateMachine(&ISO2022KRSMModel);
47 0           mActiveSM = NUM_OF_ESC_CHARSETS;
48 0           mState = eDetecting;
49 0           mDetectedCharset = nsnull;
50 0           }
51              
52 0           nsEscCharSetProber::~nsEscCharSetProber(void)
53             {
54 0 0         for (PRUint32 i = 0; i < NUM_OF_ESC_CHARSETS; i++)
55 0           delete mCodingSM[i];
56 0           }
57              
58 0           void nsEscCharSetProber::Reset(void)
59             {
60 0           mState = eDetecting;
61 0 0         for (PRUint32 i = 0; i < NUM_OF_ESC_CHARSETS; i++)
62 0           mCodingSM[i]->Reset();
63 0           mActiveSM = NUM_OF_ESC_CHARSETS;
64 0           mDetectedCharset = nsnull;
65 0           }
66              
67 0           nsProbingState nsEscCharSetProber::HandleData(const char* aBuf, PRUint32 aLen)
68             {
69             nsSMState codingState;
70             PRInt32 j;
71             PRUint32 i;
72              
73 0 0         for ( i = 0; i < aLen && mState == eDetecting; i++)
    0          
74             {
75 0 0         for (j = mActiveSM-1; j>= 0; j--)
76             {
77             //byte is feed to all active state machine
78 0           codingState = mCodingSM[j]->NextState(aBuf[i]);
79 0 0         if (codingState == eError)
80             {
81             //got negative answer for this state machine, make it inactive
82 0           mActiveSM--;
83 0 0         if (mActiveSM == 0)
84             {
85 0           mState = eNotMe;
86 0           return mState;
87             }
88 0 0         else if (j != (PRInt32)mActiveSM)
89             {
90             nsCodingStateMachine* t;
91 0           t = mCodingSM[mActiveSM];
92 0           mCodingSM[mActiveSM] = mCodingSM[j];
93 0           mCodingSM[j] = t;
94             }
95             }
96 0 0         else if (codingState == eItsMe)
97             {
98 0           mState = eFoundIt;
99 0           mDetectedCharset = mCodingSM[j]->GetCodingStateMachine();
100 0           return mState;
101             }
102             }
103             }
104              
105 0           return mState;
106             }
107