~anna-g/micronaet/anna

« back to all changes in this revision

Viewing changes to mws_amazon/mws/requests/packages/chardet2/charsetgroupprober.py

  • Committer: Anna Micronaet
  • Date: 2013-07-18 09:08:36 UTC
  • Revision ID: anna@micronaet.it-20130718090836-ssmst48rrnvcd69w
Tolti tutti i moduli

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
######################## BEGIN LICENSE BLOCK ########################
2
 
# The Original Code is Mozilla Communicator client code.
3
 
4
 
# The Initial Developer of the Original Code is
5
 
# Netscape Communications Corporation.
6
 
# Portions created by the Initial Developer are Copyright (C) 1998
7
 
# the Initial Developer. All Rights Reserved.
8
 
9
 
# Contributor(s):
10
 
#   Mark Pilgrim - port to Python
11
 
#
12
 
# This library is free software; you can redistribute it and/or
13
 
# modify it under the terms of the GNU Lesser General Public
14
 
# License as published by the Free Software Foundation; either
15
 
# version 2.1 of the License, or (at your option) any later version.
16
 
17
 
# This library is distributed in the hope that it will be useful,
18
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
19
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20
 
# Lesser General Public License for more details.
21
 
22
 
# You should have received a copy of the GNU Lesser General Public
23
 
# License along with this library; if not, write to the Free Software
24
 
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
25
 
# 02110-1301  USA
26
 
######################### END LICENSE BLOCK #########################
27
 
 
28
 
from . import constants
29
 
import sys
30
 
from .charsetprober import CharSetProber
31
 
 
32
 
class CharSetGroupProber(CharSetProber):
33
 
    def __init__(self):
34
 
        CharSetProber.__init__(self)
35
 
        self._mActiveNum = 0
36
 
        self._mProbers = []
37
 
        self._mBestGuessProber = None
38
 
        
39
 
    def reset(self):
40
 
        CharSetProber.reset(self)
41
 
        self._mActiveNum = 0
42
 
        for prober in self._mProbers:
43
 
            if prober:
44
 
                prober.reset()
45
 
                prober.active = True
46
 
                self._mActiveNum += 1
47
 
        self._mBestGuessProber = None
48
 
 
49
 
    def get_charset_name(self):
50
 
        if not self._mBestGuessProber:
51
 
            self.get_confidence()
52
 
            if not self._mBestGuessProber: return None
53
 
#                self._mBestGuessProber = self._mProbers[0]
54
 
        return self._mBestGuessProber.get_charset_name()
55
 
 
56
 
    def feed(self, aBuf):
57
 
        for prober in self._mProbers:
58
 
            if not prober: continue
59
 
            if not prober.active: continue
60
 
            st = prober.feed(aBuf)
61
 
            if not st: continue
62
 
            if st == constants.eFoundIt:
63
 
                self._mBestGuessProber = prober
64
 
                return self.get_state()
65
 
            elif st == constants.eNotMe:
66
 
                prober.active = False
67
 
                self._mActiveNum -= 1
68
 
                if self._mActiveNum <= 0:
69
 
                    self._mState = constants.eNotMe
70
 
                    return self.get_state()
71
 
        return self.get_state()
72
 
 
73
 
    def get_confidence(self):
74
 
        st = self.get_state()
75
 
        if st == constants.eFoundIt:
76
 
            return 0.99
77
 
        elif st == constants.eNotMe:
78
 
            return 0.01
79
 
        bestConf = 0.0
80
 
        self._mBestGuessProber = None
81
 
        for prober in self._mProbers:
82
 
            if not prober: continue
83
 
            if not prober.active:
84
 
                if constants._debug:
85
 
                    sys.stderr.write(prober.get_charset_name() + ' not active\n')
86
 
                continue
87
 
            cf = prober.get_confidence()
88
 
            if constants._debug:
89
 
                sys.stderr.write('%s confidence = %s\n' % (prober.get_charset_name(), cf))
90
 
            if bestConf < cf:
91
 
                bestConf = cf
92
 
                self._mBestGuessProber = prober
93
 
        if not self._mBestGuessProber: return 0.0
94
 
        return bestConf
95
 
#        else:
96
 
#            self._mBestGuessProber = self._mProbers[0]
97
 
#            return self._mBestGuessProber.get_confidence()