File Coverage

src/nsCodingStateMachine.h
Criterion Covered Total %
statement 10 10 100.0
branch 2 2 100.0
condition n/a
subroutine n/a
pod n/a
total 12 12 100.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             #ifndef nsCodingStateMachine_h__
38             #define nsCodingStateMachine_h__
39              
40             #include "nsPkgInt.h"
41              
42             typedef enum {
43             eStart = 0,
44             eError = 1,
45             eItsMe = 2
46             } nsSMState;
47              
48             #define GETCLASS(c) GETFROMPCK(((unsigned char)(c)), mModel->classTable)
49              
50             //state machine model
51             typedef struct
52             {
53             nsPkgInt classTable;
54             PRUint32 classFactor;
55             nsPkgInt stateTable;
56             const PRUint32* charLenTable;
57             const char* name;
58             } SMModel;
59              
60             class nsCodingStateMachine {
61             public:
62             nsCodingStateMachine(SMModel* sm){
63             mCurrentState = eStart;
64             mModel = sm;
65             };
66 6           nsSMState NextState(char c){
67             //for each byte we get its class , if it is first byte, we also get byte length
68 6           PRUint32 byteCls = GETCLASS(c);
69 6 100         if (mCurrentState == eStart)
70             {
71 4           mCurrentBytePos = 0;
72 4           mCurrentCharLen = mModel->charLenTable[byteCls];
73             }
74             //from byte's class and stateTable, we get its next state
75 6           mCurrentState=(nsSMState)GETFROMPCK(mCurrentState*(mModel->classFactor)+byteCls,
76 6           mModel->stateTable);
77 6           mCurrentBytePos++;
78 6           return mCurrentState;
79             };
80             PRUint32 GetCurrentCharLen(void) {return mCurrentCharLen;};
81 8           void Reset(void) {mCurrentState = eStart;};
82             const char * GetCodingStateMachine() {return mModel->name;};
83              
84             protected:
85             nsSMState mCurrentState;
86             PRUint32 mCurrentCharLen;
87             PRUint32 mCurrentBytePos;
88              
89             SMModel *mModel;
90             };
91              
92             extern SMModel UTF8SMModel;
93             extern SMModel Big5SMModel;
94             extern SMModel EUCJPSMModel;
95             extern SMModel EUCKRSMModel;
96             extern SMModel EUCTWSMModel;
97             extern SMModel GB18030SMModel;
98             extern SMModel SJISSMModel;
99             extern SMModel UCS2BESMModel;
100              
101              
102             extern SMModel HZSMModel;
103             extern SMModel ISO2022CNSMModel;
104             extern SMModel ISO2022JPSMModel;
105             extern SMModel ISO2022KRSMModel;
106              
107             #endif /* nsCodingStateMachine_h__ */
108