#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
'''
import meaning
import structs
class Entry:
""" This class contains the entries that belong together on one page.
On Wiktionaries that are still on first character capitalization, this means both [[Kind]] and [[kind]].
Terms in different languages can be described. Usually there is one entry for each language.
"""
def __init__(self,entrylang,meaning=""):
""" Constructor
Called with one parameter:
- the language of this entry
and can optionally be initialized with a first meaning
"""
self.entrylang=entrylang
self.meanings = {} # a dictionary containing the meanings for this term grouped by part of speech
if meaning:
self.addMeaning(meaning)
self.posorder = [] # we don't want to shuffle the order of the parts of speech, so we keep a list to keep the order in which they were encountered
def addMeaning(self,meaning):
""" Lets you add another meaning to this entry """
term = meaning.term # fetch the term, in order to be able to determine its part of speech in the next step
self.meanings.setdefault( term.pos, [] ).append(meaning)
if not term.pos in self.posorder: # we only need each part of speech once in our list where we keep track of the order
self.posorder.append(term.pos)
def getMeanings(self):
""" Returns a dictionary containing all the meaning objects for this entry
"""
return self.meanings
def wikiWrap(self,wikilang):
""" Returns a string for this entry in a format ready for Wiktionary
"""
entry = structs.wiktionaryformats[wikilang]['langheader'].replace('%%langname%%',langnames[wikilang][self.entrylang]).replace('%%ISOLangcode%%',self.entrylang) + '\n'
for pos in self.posorder:
meanings = self.meanings[pos]
entry += structs.wiktionaryformats[wikilang]['posheader'][pos]
entry +='\n'
if wikilang=='en':
entry = entry + meanings[0].term.wikiWrapAsExample(wikilang) + '\n\n'
for meaning in meanings:
entry = entry + '#' + meaning.getLabel() + ' ' + meaning.definition + '\n'
entry = entry + meaning.wikiWrapExamples()
entry +='\n'
if wikilang=='nl':
for meaning in meanings:
term=meaning.term
entry = entry + meaning.getLabel() + term.wikiWrapAsExample(wikilang) + '; ' + meaning.definition + '\n'
entry = entry + meaning.wikiWrapExamples()
entry +='\n'
if meaning.hasSynonyms():
entry = entry + structs.wiktionaryformats[wikilang]['synonymsheader'] + '\n'
for meaning in meanings:
entry = entry + '*' + meaning.getLabel() + "'''" + meaning.getConciseDef() + "''': " + meaning.wikiWrapSynonyms(wikilang)
entry +='\n'
if meaning.hasTranslations():
entry = entry + structs.wiktionaryformats[wikilang]['translationsheader'] + '\n'
for meaning in meanings:
entry = entry + meaning.getLabel() + "'''" + meaning.getConciseDef() + "'''" + '\n' + meaning.wikiWrapTranslations(wikilang,self.entrylang) + '\n\n'
entry +='\n'
return entry
def showContents(self,indentation):
""" Prints the contents of all the subobjects contained in this entry.
Every subobject is indented a little further on the screen.
The primary purpose is to help keep your sanity while debugging.
"""
print ' ' * indentation + 'entrylang = %s'% self.entrylang
print ' ' * indentation + 'posorder:' + repr(self.posorder)
meaningkeys = self.meanings.keys()
for meaningkey in meaningkeys:
for meaning in self.meanings[meaningkey]:
meaning.showContents(indentation+2)
|