|  | @@ -1,205 +0,0 @@
 | 
	
		
			
				|  |  | -from .translation import translation
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -class phrasebook:
 | 
	
		
			
				|  |  | -    """ It store single collection of phrases.
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | -    This is responsible for searching phrases in the phrasebook, or when
 | 
	
		
			
				|  |  | -    object exists, then also in the object notation.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    Methods
 | 
	
		
			
				|  |  | -    -------
 | 
	
		
			
				|  |  | -    tr(phrase: str) -> translation
 | 
	
		
			
				|  |  | -        Translate phrase, short version of translate.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    translate(phrase: str) -> translation
 | 
	
		
			
				|  |  | -        Translate phrase.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    prepare(phrase: str) -> str
 | 
	
		
			
				|  |  | -        This prepare phrase, remove dots and white chars.  
 | 
	
		
			
				|  |  | -    """
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    def __init__(self, phrases: dict, objects: dict|None = None) -> None:
 | 
	
		
			
				|  |  | -        """ This initialize new phrasebook.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        It require phrases dict and also objects for objects notation. Objects
 | 
	
		
			
				|  |  | -        is optional, could be leave empty.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Parameters
 | 
	
		
			
				|  |  | -        ----------
 | 
	
		
			
				|  |  | -        phrases : dict
 | 
	
		
			
				|  |  | -            Dictionary with phrases.
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | -        objects : dict | None, default: None
 | 
	
		
			
				|  |  | -            Objects to take phrases for object notation.
 | 
	
		
			
				|  |  | -        """
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        self.__phrases = self.__parse_phrases(phrases)
 | 
	
		
			
				|  |  | -        self.__objects = objects
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    def __parse_phrases(self, phrases: dict) -> dict:
 | 
	
		
			
				|  |  | -        """ This prepare phrasebook, by flattending dictionary keys.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Parameters
 | 
	
		
			
				|  |  | -        ----------
 | 
	
		
			
				|  |  | -        phrases : dict
 | 
	
		
			
				|  |  | -            Dictionary to parse
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Returns
 | 
	
		
			
				|  |  | -        -------
 | 
	
		
			
				|  |  | -        dict
 | 
	
		
			
				|  |  | -            Flattened dictionary with phrases.
 | 
	
		
			
				|  |  | -        """
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        flattened = dict()
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        for key in phrases.keys():
 | 
	
		
			
				|  |  | -            flat_key = phrasebook.prepare(key)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if flat_key in flattened:
 | 
	
		
			
				|  |  | -                raise TypeError("Key \"" + flat_key + "\" exists twice.")
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            flattened[flat_key] = phrases[key]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return flattened
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    def tr(self, phrase: str) -> translation:
 | 
	
		
			
				|  |  | -        """ This translate phrase, from phrases or objects.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Parameters
 | 
	
		
			
				|  |  | -        ----------
 | 
	
		
			
				|  |  | -        phrase : str
 | 
	
		
			
				|  |  | -            Phrase to translate.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Returns
 | 
	
		
			
				|  |  | -        -------
 | 
	
		
			
				|  |  | -        translation
 | 
	
		
			
				|  |  | -            Translated phrase.
 | 
	
		
			
				|  |  | -        """
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return self.translate(phrase)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    def translate(self, phrase: str) -> translation:
 | 
	
		
			
				|  |  | -        """ This translate phrase, from phrases or objects.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Parameters
 | 
	
		
			
				|  |  | -        ----------
 | 
	
		
			
				|  |  | -        phrase : str
 | 
	
		
			
				|  |  | -            Phrase to translate.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Returns
 | 
	
		
			
				|  |  | -        -------
 | 
	
		
			
				|  |  | -        translation
 | 
	
		
			
				|  |  | -            Translated phrase.
 | 
	
		
			
				|  |  | -        """
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | -        if self.__is_nested(phrase):
 | 
	
		
			
				|  |  | -            return self.__translate_nested(phrase)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return self.__translate_flat(phrasebook.prepare(phrase))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    def __translate_nested(self, phrase: str) -> translation:
 | 
	
		
			
				|  |  | -        """ This translate nested phrase.
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | -        This transalate nested phrase, that mean phrase in object 
 | 
	
		
			
				|  |  | -        notation. When objects is not set, then return phrase as
 | 
	
		
			
				|  |  | -        failed translation.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Parameters
 | 
	
		
			
				|  |  | -        ----------
 | 
	
		
			
				|  |  | -        phrase : str
 | 
	
		
			
				|  |  | -            Nested phrase to translate.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Raises
 | 
	
		
			
				|  |  | -        ------
 | 
	
		
			
				|  |  | -        SyntaxError
 | 
	
		
			
				|  |  | -            When two dots '..' found in phrase.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Returns
 | 
	
		
			
				|  |  | -        -------
 | 
	
		
			
				|  |  | -        translation
 | 
	
		
			
				|  |  | -            Translated nested phrase.
 | 
	
		
			
				|  |  | -        """
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if phrase.find("..") != -1:
 | 
	
		
			
				|  |  | -            raise SyntaxError("Symbol \"..\" in \"" + phrase + "\".")
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if self.__objects is None:
 | 
	
		
			
				|  |  | -            return translation(phrase, False)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        parts = phrase.split(".")
 | 
	
		
			
				|  |  | -        current = self.__objects
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        for part in parts:
 | 
	
		
			
				|  |  | -            if type(current) is not dict:
 | 
	
		
			
				|  |  | -                return translation(phrase, False)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if not part in current:
 | 
	
		
			
				|  |  | -                return translation(phrase, False)
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | -            current = current[part]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if type(current) is str:
 | 
	
		
			
				|  |  | -            return translation(current, True)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return translation(phrase, False)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    def __is_nested(self, phrase: str) -> bool:
 | 
	
		
			
				|  |  | -        """ This check that phrase is nested or not. 
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | -        When phrase contain white chars, or dot only as last chat, then
 | 
	
		
			
				|  |  | -        it is not nested. When phrase contain dot, then phrase is nested.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Parameters
 | 
	
		
			
				|  |  | -        ----------
 | 
	
		
			
				|  |  | -        phrase : str
 | 
	
		
			
				|  |  | -            Phrase to check.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Returns
 | 
	
		
			
				|  |  | -        -------
 | 
	
		
			
				|  |  | -        bool
 | 
	
		
			
				|  |  | -            True when phrase is nested, False if not.
 | 
	
		
			
				|  |  | -        """
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if phrase.find(" ") != -1:
 | 
	
		
			
				|  |  | -            return False
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if phrase[-1] == ".":
 | 
	
		
			
				|  |  | -            return False
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return phrase.find(".") != -1
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    def __translate_flat(self, phrase: str) -> translation:
 | 
	
		
			
				|  |  | -        """ This translate standard flat phrase.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Parameters
 | 
	
		
			
				|  |  | -        ----------
 | 
	
		
			
				|  |  | -        phrase : str
 | 
	
		
			
				|  |  | -            Phrase to translate.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Returns
 | 
	
		
			
				|  |  | -        -------
 | 
	
		
			
				|  |  | -        translation
 | 
	
		
			
				|  |  | -            Translation of the phrase.
 | 
	
		
			
				|  |  | -        """
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if phrase in self.__phrases:
 | 
	
		
			
				|  |  | -            return translation(self.__phrases[phrase], True)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return translation(phrase, False)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    def prepare(phrase: str) -> str:
 | 
	
		
			
				|  |  | -        """ This prepare phrase to being phrasebook dict key.
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | -        Parameters
 | 
	
		
			
				|  |  | -        ----------
 | 
	
		
			
				|  |  | -        phrase : str
 | 
	
		
			
				|  |  | -            Phrase to translate.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        Returns
 | 
	
		
			
				|  |  | -        -------
 | 
	
		
			
				|  |  | -        str
 | 
	
		
			
				|  |  | -            Prepared phrase.
 | 
	
		
			
				|  |  | -        """
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        return phrase.lower().replace(" ", "_").replace(".", "")
 |