#$ neutron_plugin 01
import urllib, htmllib, formatter, htmlentitydefs
lingvo_encoding = 'cp1251'
class MyWriter(formatter.NullWriter):
body = ''
def send_paragraph(self,lines):
self.body += "\n"
def send_flowing_data(self,data):
self.body += data
def send_literal_data(self,data):
self.body += data
def send_label_data(self,data):
self.body += "\n_" + data + "_\n"
def desc_ent(m,defs=htmlentitydefs.entitydefs):
try:
return defs[m.group(1)]
except KeyError:
return m.group(0)
def desc_amp(m):
s = "\\u%04X" % int(m.group(1))
return unichr(int(m.group(1))).encode(lingvo_encoding)
def descape(txt):
ent = re.compile("&(\w+?);")
amp = re.compile("&#([0-9]+);")
ret = ent.sub(desc_ent, txt)
return amp.sub(desc_amp, ret)
def eat(m):
return ''
def detag(text):
img = re.compile(r'<IMG.+?>')
nob = text.replace('<B>','*').replace('</B>','*')
nobr = nob.replace('<BR>', '').replace('<BR/>','')
noimg = img.sub(eat,nobr)
return noimg
def doLingvo(phrase):
phrase = ' '.join(string.replace(phrase.strip(), "\n", ' ').split())
params = urllib.urlencode( { 'words' : phrase.encode(lingvo_encoding,'replace'),
'Ln' : '1',
'lingvoaction' : 'translate',
'VTI-GROUP' : '0'
} )
try:
response = urllib.urlopen('http://www.lingvo.ru/lingvo/Translate.asp',params);
except IOError, what:
print "Unexpected error:", sys.exc_info()[0]
html = response.read()
response.close()
regs = [ re.compile(r'<DIV LANG=[rR][uU]>(.+?)<\/DIV>',re.M|re.S) ,
re.compile(r'<DIV LANG=[eE][nN]-[uU][sS]>(.+?)<\/DIV>',re.M|re.S)]
for reg in regs:
match = reg.search(html)
if match: break
if not match: return 'Cant recognize result string.'
tr = match.group(1)
txt = descape(detag(tr))
w = MyWriter()
f = formatter.AbstractFormatter(w)
p = htmllib.HTMLParser(f)
p.feed(txt)
p.close()
out = w.body
ret = unicode(out,lingvo_encoding)
return ret
def handler_lingvo_lingvo(type, source, parameters):
results = doLingvo(parameters)
smsg(type, source, results)
register_command_handler(handler_lingvo_lingvo, 'lingvo', 0, 'Translate a word on Lingvo.ru.', 'lingvo ', ['lingvo neutron'])
as you can see it in russian, but may be helpful for someone
Just for reference, there is
Just for reference, there is a related plugin in gh0st-dev branch: