# Path: ermesms/plugins/CaptchaDecoder.py
# class CaptchaDecoder(PriorityPlugin):
#     """Classe base dei plugin per la decodifica dei captcha."""
# 
#     def decodeCaptcha(self, stream, senderName):
#         """Questo metodo ritorna la stringa corrispondente all'immagine
#         leggibile dallo stream specificato."""
#         raise NotImplementedError()
# 
# Path: ermesms/errors/CaptchaError.py
# class CaptchaError(SenderError):
#     """Errore per indicare un problema con la connessione ad un sito (scaricamento captcha)."""
# 
#     def __init__(self):
#         """Costruttore standard."""
#         SenderError.__init__(self, repr('Captcha'))
# 
#     def __str__(self):
#         return u"Impossibile decodificare l'immagine captcha."


import sys
import os
import re
import platform
import subprocess
from cStringIO import StringIO
from ermesms.plugins.CaptchaDecoder import CaptchaDecoder
from ermesms.plugins.captchadecoders.Data import charData, lengthData, methodsData, bayesData
from ermesms.errors.CaptchaError import CaptchaError
        consentiti."""
        result1=s.strip().upper()
        result2=""
        for i in result1:
            if i not in self.chars:
                result2+="_"
            else:
                result2+=i
        result3=result2[:self.length]+(self.length-len(result2[:self.length]))*"_"
        return result3

    def gocr(self, stream, gmParams="", gocrParams=""):
        """Decodifica l'immagine leggibile dallo stream specificato filtrandola attraverso
        gm ed utilizzando gocr, con i parametri specificati."""
        guess = self.getOutput(self.gmCommand + " convert " + gmParams + " jpg:- pbm:- |" +
            self.gocrCommand + " " + gocrParams, stream)
        if re.search("NOT NORMAL", guess) is not None:
            raise CaptchaError()
        #Correzione di alcuni "errori frequenti", grazie Fernando
        if len(guess)>self.length:
            guess = guess.replace("LI","U")
            guess = guess.replace("IJ","U")
        return self.normalize(guess)

    def ocrad(self, stream, gmParams="", ocradParams=""):
        """Decodifica l'immagine leggibile dallo stream specificato filtrandola attraverso
        gm ed utilizzando ocrad, con i parametri specificati."""
        guess = self.getOutput(self.gmCommand + " convert " + gmParams + " jpg:- pnm:- |" +
            self.ocradCommand + " " + ocradParams, stream)
        if re.search("convert:", guess) is not None:

# Path: ermesms/plugins/CaptchaDecoder.py
# class CaptchaDecoder(PriorityPlugin):
#     """Classe base dei plugin per la decodifica dei captcha."""
# 
#     def decodeCaptcha(self, stream, senderName):
#         """Questo metodo ritorna la stringa corrispondente all'immagine
#         leggibile dallo stream specificato."""
#         raise NotImplementedError()
# 
# Path: ermesms/errors/CaptchaError.py
# class CaptchaError(SenderError):
#     """Errore per indicare un problema con la connessione ad un sito (scaricamento captcha)."""
# 
#     def __init__(self):
#         """Costruttore standard."""
#         SenderError.__init__(self, repr('Captcha'))
# 
#     def __str__(self):
#         return u"Impossibile decodificare l'immagine captcha."


# Path: ermesms/plugins/captchadecoders/OCRCaptchaDecoder.py
import sys
import os
import re
import platform
import subprocess
from cStringIO import StringIO
from ermesms.plugins.CaptchaDecoder import CaptchaDecoder
from ermesms.plugins.captchadecoders.Data import charData, lengthData, methodsData, bayesData
from ermesms.errors.CaptchaError import CaptchaError

        consentiti."""
        result1=s.strip().upper()
        result2=""
        for i in result1:
            if i not in self.chars:
                result2+="_"
            else:
                result2+=i
        result3=result2[:self.length]+(self.length-len(result2[:self.length]))*"_"
        return result3

    def gocr(self, stream, gmParams="", gocrParams=""):
        """Decodifica l'immagine leggibile dallo stream specificato filtrandola attraverso
        gm ed utilizzando gocr, con i parametri specificati."""
        guess = self.getOutput(self.gmCommand + " convert " + gmParams + " jpg:- pbm:- |" +
            self.gocrCommand + " " + gocrParams, stream)
        if re.search("NOT NORMAL", guess) is not None:
            raise CaptchaError()
        #Correzione di alcuni "errori frequenti", grazie Fernando
        if len(guess)>self.length:
            guess = guess.replace("LI","U")
            guess = guess.replace("IJ","U")
        return self.normalize(guess)

    def ocrad(self, stream, gmParams="", ocradParams=""):
        """Decodifica l'immagine leggibile dallo stream specificato filtrandola attraverso
        gm ed utilizzando ocrad, con i parametri specificati."""
        guess = self.getOutput(self.gmCommand + " convert " + gmParams + " jpg:- pnm:- |" +
            self.ocradCommand + " " + ocradParams, stream)
        if re.search("convert:", guess) is not None:

            raise CaptchaError()