User:MewBot/fiverbformbot.py

From Wiktionary, the free dictionary
Jump to navigation Jump to search
#!/usr/bin/env python
#coding: utf-8

# Copyright CodeCat 2010, 2011

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License for more details.
# 
# You should have received a copy of the GNU Lesser General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# This script is based on parts from
# http://en.wiktionary.org/wiki/User:SemperBlottoBot/verbs

import wikipedia, re
from formbot import *


class FIVerbFormBot(GenericFormBot):
	"""A form bot for Finnish verb forms."""
	
	def __init__(self, head, cleanupCat, simulation = False, force = False, verbose = False):
		GenericFormBot.__init__(
			self, head, [
				u'fi-conj-sanoa',
				u'fi-conj-muistaa',
				u'fi-conj-huutaa',
				u'fi-conj-soutaa',
				u'fi-conj-kaivaa',
				u'fi-conj-saartaa',
				u'fi-conj-laskea',
				u'fi-conj-tuntea',
				u'fi-conj-lähteä',
				u'fi-conj-sallia',
				u'fi-conj-voida',
				u'fi-conj-saada',
				u'fi-conj-juoda',
				u'fi-conj-rohkaista',
				u'fi-conj-tulla',
				u'fi-conj-tupakoida',
				u'fi-conj-valita',
				u'fi-conj-juosta',
				u'fi-conj-nähdä',
				u'fi-conj-vanheta',
				u'fi-conj-salata',
				u'fi-conj-katketa',
				u'fi-conj-selvitä',
				u'fi-conj-taitaa',
				], 'fi', 'Finnish',
			cleanupCat, simulation, force, verbose)
	
	
	def generateEntries(self, template, params):
		"""Overrides base class method."""
		
		forms = {}
		
		if template == u'fi-conj-sanoa':
			forms = self.conjugateSanoa(params)
		elif template == u'fi-conj-muistaa':
			forms = self.conjugateMuistaa(params)
		elif template == u'fi-conj-huutaa':
			forms = self.conjugateHuutaa(params)
		elif template == u'fi-conj-soutaa':
			forms = self.conjugateSoutaa(params)
		elif template == u'fi-conj-kaivaa':
			forms = self.conjugateKaivaa(params)
		elif template == u'fi-conj-saartaa':
			forms = self.conjugateSaartaa(params)
		elif template == u'fi-conj-laskea':
			forms = self.conjugateLaskea(params)
		elif template == u'fi-conj-tuntea':
			forms = self.conjugateTuntea(params)
		elif template == u'fi-conj-lähteä':
			forms = self.conjugateLahtea(params)
		elif template == u'fi-conj-sallia':
			forms = self.conjugateSallia(params)
		elif template == u'fi-conj-voida':
			forms = self.conjugateVoida(params)
		elif template == u'fi-conj-saada':
			forms = self.conjugateSaada(params)
		elif template == u'fi-conj-juoda':
			forms = self.conjugateJuoda(params)
		elif template == u'fi-conj-rohkaista':
			forms = self.conjugateRohkaista(params)
		elif template == u'fi-conj-tulla':
			forms = self.conjugateTulla(params)
		elif template == u'fi-conj-tupakoida':
			forms = self.conjugateTupakoida(params)
		elif template == u'fi-conj-valita':
			forms = self.conjugateValita(params)
		elif template == u'fi-conj-juosta':
			forms = self.conjugateJuosta(params)
		elif template == u'fi-conj-nähdä':
			forms = self.conjugateNahda(params)
		elif template == u'fi-conj-vanheta':
			forms = self.conjugateVanheta(params)
		elif template == u'fi-conj-salata':
			forms = self.conjugateSalata(params)
		elif template == u'fi-conj-katketa':
			forms = self.conjugateKatketa(params)
		elif template == u'fi-conj-selvitä':
			forms = self.conjugateSelvita(params)
		elif template == u'fi-conj-taitaa':
			forms = self.conjugateTaitaa(params)
		else:
			return None
		
		return self.formatEntries(forms)
	
	
	def formatEntries(self, forms):
		# Make a dictionary of lists of the entries, with the word as key
		# That way we automatically group cases where two forms are identical
		entries = {}
		
		# Present
		entries.setdefault(forms['pres_1sg'], []).append('{{fi-verb form of|pn=1s|tm=pres|' + self._head + '}}')
		entries.setdefault(forms.get('pres_1sg_alt', ''), []).append('{{fi-verb form of|pn=1s|tm=pres|' + self._head + '}}')
		entries.setdefault(forms['pres_2sg'], []).append('{{fi-verb form of|pn=2s|tm=pres|' + self._head + '}}')
		entries.setdefault(forms.get('pres_2sg_alt', ''), []).append('{{fi-verb form of|pn=2s|tm=pres|' + self._head + '}}')
		entries.setdefault(forms['pres_3sg'], []).append('{{fi-verb form of|pn=3s|tm=pres|' + self._head + '}}')
		entries.setdefault(forms.get('pres_3sg_alt', ''), []).append('{{fi-verb form of|pn=3s|tm=pres|' + self._head + '}}')
		entries.setdefault(forms['pres_1pl'], []).append('{{fi-verb form of|pn=1p|tm=pres|' + self._head + '}}')
		entries.setdefault(forms.get('pres_1pl_alt', ''), []).append('{{fi-verb form of|pn=1p|tm=pres|' + self._head + '}}')
		entries.setdefault(forms['pres_2pl'], []).append('{{fi-verb form of|pn=2p|tm=pres|' + self._head + '}}')
		entries.setdefault(forms.get('pres_2pl_alt', ''), []).append('{{fi-verb form of|pn=2p|tm=pres|' + self._head + '}}')
		entries.setdefault(forms['pres_3pl'], []).append('{{fi-verb form of|pn=3p|tm=pres|' + self._head + '}}')
		entries.setdefault(forms.get('pres_3pl_alt', ''), []).append('{{fi-verb form of|pn=3p|tm=pres|' + self._head + '}}')
		entries.setdefault(forms['pres_pass'], []).append('{{fi-verb form of|pn=pass|tm=pres|' + self._head + '}}')
		entries.setdefault(forms.get('pres_pass_alt', ''), []).append('{{fi-verb form of|pn=pass|tm=pres|' + self._head + '}}')
		
		entries.setdefault(forms['pres_conn'], []).append('{{fi-verb form of|tm=pres|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('pres_conn_alt', ''), []).append('{{fi-verb form of|tm=pres|c=1|' + self._head + '}}')
		entries.setdefault(forms['pres_pass_conn'], []).append('{{fi-verb form of|pn=pass|tm=pres|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('pres_pass_conn_alt', ''), []).append('{{fi-verb form of|pn=pass|tm=pres|c=1|' + self._head + '}}')
		
		# Past
		entries.setdefault(forms['past_1sg'], []).append('{{fi-verb form of|pn=1s|tm=past|' + self._head + '}}')
		entries.setdefault(forms.get('past_1sg_alt', ''), []).append('{{fi-verb form of|pn=1s|tm=past|' + self._head + '}}')
		entries.setdefault(forms['past_2sg'], []).append('{{fi-verb form of|pn=2s|tm=past|' + self._head + '}}')
		entries.setdefault(forms.get('past_2sg_alt', ''), []).append('{{fi-verb form of|pn=2s|tm=past|' + self._head + '}}')
		entries.setdefault(forms['past_3sg'], []).append('{{fi-verb form of|pn=3s|tm=past|' + self._head + '}}')
		entries.setdefault(forms.get('past_3sg_alt', ''), []).append('{{fi-verb form of|pn=3s|tm=past|' + self._head + '}}')
		entries.setdefault(forms['past_1pl'], []).append('{{fi-verb form of|pn=1p|tm=past|' + self._head + '}}')
		entries.setdefault(forms.get('past_1pl_alt', ''), []).append('{{fi-verb form of|pn=1p|tm=past|' + self._head + '}}')
		entries.setdefault(forms['past_2pl'], []).append('{{fi-verb form of|pn=2p|tm=past|' + self._head + '}}')
		entries.setdefault(forms.get('past_2pl_alt', ''), []).append('{{fi-verb form of|pn=2p|tm=past|' + self._head + '}}')
		entries.setdefault(forms['past_3pl'], []).append('{{fi-verb form of|pn=3p|tm=past|' + self._head + '}}')
		entries.setdefault(forms.get('past_3pl_alt', ''), []).append('{{fi-verb form of|pn=3p|tm=past|' + self._head + '}}')
		entries.setdefault(forms['past_pass'], []).append('{{fi-verb form of|pn=pass|tm=past|' + self._head + '}}')
		entries.setdefault(forms.get('past_pass_alt', ''), []).append('{{fi-verb form of|pn=pass|tm=past|' + self._head + '}}')
		
		entries.setdefault(forms['past_part'], []).append('{{fi-verb form of|tm=past|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('past_part_alt', ''), []).append('{{fi-verb form of|tm=past|c=1|' + self._head + '}}')
		entries.setdefault(forms['past_part_pl'], []).append('{{fi-verb form of|pn=p|tm=past|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('past_part_pl_alt', ''), []).append('{{fi-verb form of|pn=p|tm=past|c=1|' + self._head + '}}')
		entries.setdefault(forms['past_pass_part'], []).append('{{fi-verb form of|pn=pass|tm=past|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('past_pass_part_alt', ''), []).append('{{fi-verb form of|pn=pass|tm=past|c=1|' + self._head + '}}')
		
		# Conditional
		entries.setdefault(forms['cond_1sg'], []).append('{{fi-verb form of|pn=1s|tm=cond|' + self._head + '}}')
		entries.setdefault(forms.get('cond_1sg_alt', ''), []).append('{{fi-verb form of|pn=1s|tm=cond|' + self._head + '}}')
		entries.setdefault(forms['cond_2sg'], []).append('{{fi-verb form of|pn=2s|tm=cond|' + self._head + '}}')
		entries.setdefault(forms.get('cond_2sg_alt', ''), []).append('{{fi-verb form of|pn=2s|tm=cond|' + self._head + '}}')
		entries.setdefault(forms['cond_conn'], []).append('{{fi-verb form of|pn=3s|tm=cond|' + self._head + '}}')
		entries.setdefault(forms.get('cond_conn_alt', ''), []).append('{{fi-verb form of|pn=3s|tm=cond|' + self._head + '}}')
		entries.setdefault(forms['cond_1pl'], []).append('{{fi-verb form of|pn=1p|tm=cond|' + self._head + '}}')
		entries.setdefault(forms.get('cond_1pl_alt', ''), []).append('{{fi-verb form of|pn=1p|tm=cond|' + self._head + '}}')
		entries.setdefault(forms['cond_2pl'], []).append('{{fi-verb form of|pn=2p|tm=cond|' + self._head + '}}')
		entries.setdefault(forms.get('cond_2pl_alt', ''), []).append('{{fi-verb form of|pn=2p|tm=cond|' + self._head + '}}')
		entries.setdefault(forms['cond_3pl'], []).append('{{fi-verb form of|pn=3p|tm=cond|' + self._head + '}}')
		entries.setdefault(forms.get('cond_3pl_alt', ''), []).append('{{fi-verb form of|pn=3p|tm=cond|' + self._head + '}}')
		entries.setdefault(forms['cond_pass'], []).append('{{fi-verb form of|pn=pass|tm=cond|' + self._head + '}}')
		entries.setdefault(forms.get('cond_pass_alt', ''), []).append('{{fi-verb form of|pn=pass|tm=cond|' + self._head + '}}')
		
		entries.setdefault(forms['cond_conn'], []).append('{{fi-verb form of|tm=cond|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('cond_conn_alt', ''), []).append('{{fi-verb form of|tm=cond|c=1|' + self._head + '}}')
		entries.setdefault(forms['cond_pass_conn'], []).append('{{fi-verb form of|pn=pass|tm=cond|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('cond_pass_conn_alt', ''), []).append('{{fi-verb form of|pn=pass|tm=cond|c=1|' + self._head + '}}')
		
		# Imperative
		entries.setdefault(forms['pres_conn'], []).append('{{fi-verb form of|pn=2s|tm=impr|' + self._head + '}}')
		entries.setdefault(forms.get('pres_conn_alt', ''), []).append('{{fi-verb form of|pn=2s|tm=impr|' + self._head + '}}')
		entries.setdefault(forms['impr_3sg'], []).append('{{fi-verb form of|pn=3s|tm=impr|' + self._head + '}}')
		entries.setdefault(forms.get('impr_3sg_alt', ''), []).append('{{fi-verb form of|pn=3s|tm=impr|' + self._head + '}}')
		entries.setdefault(forms['impr_1pl'], []).append('{{fi-verb form of|pn=1p|tm=impr|' + self._head + '}}')
		entries.setdefault(forms.get('impr_1pl_alt', ''), []).append('{{fi-verb form of|pn=1p|tm=impr|' + self._head + '}}')
		entries.setdefault(forms['impr_2pl'], []).append('{{fi-verb form of|pn=2p|tm=impr|' + self._head + '}}')
		entries.setdefault(forms.get('impr_2pl_alt', ''), []).append('{{fi-verb form of|pn=2p|tm=impr|' + self._head + '}}')
		entries.setdefault(forms['impr_3pl'], []).append('{{fi-verb form of|pn=3p|tm=impr|' + self._head + '}}')
		entries.setdefault(forms.get('impr_3pl_alt', ''), []).append('{{fi-verb form of|pn=3p|tm=impr|' + self._head + '}}')
		entries.setdefault(forms['impr_pass'], []).append('{{fi-verb form of|pn=pass|tm=impr|' + self._head + '}}')
		entries.setdefault(forms.get('impr_pass_alt', ''), []).append('{{fi-verb form of|pn=pass|tm=impr|' + self._head + '}}')
		
		entries.setdefault(forms['pres_conn'], []).append('{{fi-verb form of|pn=2s|tm=impr|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('pres_conn_alt', ''), []).append('{{fi-verb form of|pn=2s|tm=impr|c=1|' + self._head + '}}')
		entries.setdefault(forms['impr_conn'], []).append('{{fi-verb form of|tm=impr|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('impr_conn_alt', ''), []).append('{{fi-verb form of|tm=impr|c=1|' + self._head + '}}')
		entries.setdefault(forms['impr_pass_conn'], []).append('{{fi-verb form of|pn=pass|tm=impr|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('impr_pass_conn_alt', ''), []).append('{{fi-verb form of|pn=pass|tm=impr|c=1|' + self._head + '}}')
		
		# Potential
		entries.setdefault(forms['potn_1sg'], []).append('{{fi-verb form of|pn=1s|tm=potn|' + self._head + '}}')
		entries.setdefault(forms.get('potn_1sg_alt', ''), []).append('{{fi-verb form of|pn=1s|tm=potn|' + self._head + '}}')
		entries.setdefault(forms['potn_2sg'], []).append('{{fi-verb form of|pn=2s|tm=potn|' + self._head + '}}')
		entries.setdefault(forms.get('potn_2sg_alt', ''), []).append('{{fi-verb form of|pn=2s|tm=potn|' + self._head + '}}')
		entries.setdefault(forms['potn_3sg'], []).append('{{fi-verb form of|pn=3s|tm=potn|' + self._head + '}}')
		entries.setdefault(forms.get('potn_3sg_alt', ''), []).append('{{fi-verb form of|pn=3s|tm=potn|' + self._head + '}}')
		entries.setdefault(forms['potn_1pl'], []).append('{{fi-verb form of|pn=1p|tm=potn|' + self._head + '}}')
		entries.setdefault(forms.get('potn_1pl_alt', ''), []).append('{{fi-verb form of|pn=1p|tm=potn|' + self._head + '}}')
		entries.setdefault(forms['potn_2pl'], []).append('{{fi-verb form of|pn=2p|tm=potn|' + self._head + '}}')
		entries.setdefault(forms.get('potn_2pl_alt', ''), []).append('{{fi-verb form of|pn=2p|tm=potn|' + self._head + '}}')
		entries.setdefault(forms['potn_3pl'], []).append('{{fi-verb form of|pn=3p|tm=potn|' + self._head + '}}')
		entries.setdefault(forms.get('potn_3pl_alt', ''), []).append('{{fi-verb form of|pn=3p|tm=potn|' + self._head + '}}')
		entries.setdefault(forms['potn_pass'], []).append('{{fi-verb form of|pn=pass|tm=potn|' + self._head + '}}')
		entries.setdefault(forms.get('potn_pass_alt', ''), []).append('{{fi-verb form of|pn=pass|tm=potn|' + self._head + '}}')
		
		entries.setdefault(forms['potn_conn'], []).append('{{fi-verb form of|tm=potn|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('potn_conn_alt', ''), []).append('{{fi-verb form of|tm=potn|c=1|' + self._head + '}}')
		entries.setdefault(forms['potn_pass_conn'], []).append('{{fi-verb form of|pn=pass|tm=potn|c=1|' + self._head + '}}')
		entries.setdefault(forms.get('potn_pass_conn_alt', ''), []).append('{{fi-verb form of|pn=pass|tm=potn|c=1|' + self._head + '}}')
		
		# Infinitive
		entries.setdefault(forms['inf1'] + 'kseen', []).append('{{fi-infinitive of|t=1l|suffix=en|' + self._head + '}}')
		entries.setdefault(forms['inf2_ines'], []).append('{{fi-infinitive of|t=2a|c=ine|' + self._head + '}}')
		entries.setdefault(forms.get('inf2_ines_alt', ''), []).append('{{fi-infinitive of|t=2a|c=ine|' + self._head + '}}')
		entries.setdefault(forms['inf2_pass_ines'], []).append('{{fi-infinitive of|t=2p|c=ine|' + self._head + '}}')
		entries.setdefault(forms.get('inf2_pass_ines_alt', ''), []).append('{{fi-infinitive of|t=2p|c=ine|' + self._head + '}}')
		entries.setdefault(forms['inf2_inst'], []).append('{{fi-infinitive of|t=2a|c=ins|' + self._head + '}}')
		entries.setdefault(forms.get('inf2_inst_alt', ''), []).append('{{fi-infinitive of|t=2a|c=ins|' + self._head + '}}')
		entries.setdefault(forms['inf3_ines'], []).append('{{fi-infinitive of|t=3a|c=ine|' + self._head + '}}')
		entries.setdefault(forms.get('inf3_ines_alt', ''), []).append('{{fi-infinitive of|t=3a|c=ine|' + self._head + '}}')
		entries.setdefault(forms['inf3_elat'], []).append('{{fi-infinitive of|t=3a|c=ela|' + self._head + '}}')
		entries.setdefault(forms.get('inf3_elat_alt', ''), []).append('{{fi-infinitive of|t=3a|c=ela|' + self._head + '}}')
		entries.setdefault(forms['inf3_illa'], []).append('{{fi-infinitive of|t=3a|c=ill|' + self._head + '}}')
		entries.setdefault(forms.get('inf3_illa_alt', ''), []).append('{{fi-infinitive of|t=3a|c=ill|' + self._head + '}}')
		entries.setdefault(forms['inf3_ades'], []).append('{{fi-infinitive of|t=3a|c=ade|' + self._head + '}}')
		entries.setdefault(forms.get('inf3_ades_alt', ''), []).append('{{fi-infinitive of|t=3a|c=ade|' + self._head + '}}')
		entries.setdefault(forms['inf3_abes'], []).append('{{fi-infinitive of|t=3a|c=abe|' + self._head + '}}')
		entries.setdefault(forms.get('inf3_abes_alt', ''), []).append('{{fi-infinitive of|t=3a|c=abe|' + self._head + '}}')
		entries.setdefault(forms['inf3_inst'], []).append('{{fi-infinitive of|t=3a|c=ins|' + self._head + '}}')
		entries.setdefault(forms.get('inf3_inst_alt', ''), []).append('{{fi-infinitive of|t=3a|c=ins|' + self._head + '}}')
		entries.setdefault(forms['inf3_pass_inst'], []).append('{{fi-infinitive of|t=3p|c=ins|' + self._head + '}}')
		entries.setdefault(forms.get('inf3_pass_inst_alt', ''), []).append('{{fi-infinitive of|t=3p|c=ins|' + self._head + '}}')
		entries.setdefault(forms['inf4_nomi'], []).append('{{fi-infinitive of|t=4|c=nom|' + self._head + '}}')
		entries.setdefault(forms.get('inf4_nomi_alt', ''), []).append('{{fi-infinitive of|t=4|c=nom|' + self._head + '}}')
		entries.setdefault(forms['inf4_part'], []).append('{{fi-infinitive of|t=4|c=par|' + self._head + '}}')
		entries.setdefault(forms.get('inf4_part_alt', ''), []).append('{{fi-infinitive of|t=4|c=par|' + self._head + '}}')
		entries.setdefault(forms['inf5'], []).append('{{fi-infinitive of|t=5|suffix=' + forms['inf5'][-2:] + '|' + self._head + '}}')
		entries.setdefault(forms.get('inf5_alt', ''), []).append('{{fi-infinitive of|t=5|suffix=' + forms['inf5'][-2:] + '|' + self._head + '}}')
		
		# Participle
		entries.setdefault(forms['pres_part'], []).append('{{fi-participle of|t=pres|' + self._head + '}}')
		entries.setdefault(forms.get('pres_part_alt', ''), []).append('{{fi-participle of|t=pres|' + self._head + '}}')
		entries.setdefault(forms['pres_pass_part'], []).append('{{fi-participle of|t=pres_pass|' + self._head + '}}')
		entries.setdefault(forms.get('pres_pass_part_alt', ''), []).append('{{fi-participle of|t=pres_pass|' + self._head + '}}')
		entries.setdefault(forms['past_part'], []).append('{{fi-participle of|t=past|' + self._head + '}}')
		entries.setdefault(forms.get('past_part_alt', ''), []).append('{{fi-participle of|t=past|' + self._head + '}}')
		#entries.setdefault(forms['past_part_pl'], []).append('{{fi-participle of|t=|' + self._head + '}}')
		#entries.setdefault(forms.get('past_part_pl_alt', ''), []).append('{{fi-participle of|t=|' + self._head + '}}')
		entries.setdefault(forms['past_pass_part'], []).append('{{fi-participle of|t=past_pass|' + self._head + '}}')
		entries.setdefault(forms.get('past_pass_part_alt', ''), []).append('{{fi-participle of|t=past_pass|' + self._head + '}}')
		entries.setdefault(forms['agnt_part'], []).append('{{fi-participle of|t=agnt|' + self._head + '}}')
		entries.setdefault(forms.get('agnt_part_alt', ''), []).append('{{fi-participle of|t=agnt|' + self._head + '}}')
		entries.setdefault(forms['nega_part'], []).append('{{fi-participle of|t=nega|' + self._head + '}}')
		entries.setdefault(forms.get('nega_part_alt', ''), []).append('{{fi-participle of|t=nega|' + self._head + '}}')
		
		entries = self.zipEntries(entries, '==={0}===\n{{{{head|{1}}}}}\n\n'.format('Verb', self._langCode, 'verb'))
		del entries['']
		
		return entries
	
	
	def conjugateSanoa(self, params):
		"""Conjugate a Finnish verb using {{fi-conj-sanoa}}."""
		
		p1 = params[1]
		p2 = params.get(2, '')
		p3 = params.get(3, '')
		p4 = params.get(4, 'o')
		p5 = params.get(5, 'a')
		p6 = params.get(6, 'u')
		p7 = params.get(7, 'o')
		
		# Create all the forms
		forms = {}
		
		# Present
		forms['pres_1sg'] = u'{1}{3}{4}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_2sg'] = u'{1}{3}{4}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_3sg'] = u'{1}{2}{4}{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_1pl'] = u'{1}{3}{4}mme'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_2pl'] = u'{1}{3}{4}tte'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_3pl'] = u'{1}{2}{4}v{5}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_pass'] = u'{1}{3}{4}t{5}{5}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		
		forms['pres_conn'] = u'{1}{3}{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_pass_conn'] = u'{1}{3}{4}t{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		
		# Past
		forms['past_1sg'] = u'{1}{3}{4}in'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_2sg'] = u'{1}{3}{4}it'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_3sg'] = u'{1}{2}{4}i'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_1pl'] = u'{1}{3}{4}imme'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_2pl'] = u'{1}{3}{4}itte'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_3pl'] = u'{1}{2}{4}iv{5}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_pass'] = u'{1}{3}{4}ttiin'.format('', p1, p2, p3, p4, p5, p6, p7)
		
		# Conditional
		forms['cond_1sg'] = u'{1}{2}{4}isin'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_2sg'] = u'{1}{2}{4}isit'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_1pl'] = u'{1}{2}{4}isimme'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_2pl'] = u'{1}{2}{4}isitte'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_3pl'] = u'{1}{2}{4}isiv{5}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_pass'] = u'{1}{3}{4}tt{5}isiin'.format('', p1, p2, p3, p4, p5, p6, p7)
		
		forms['cond_conn'] = u'{1}{2}{4}isi'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_pass_conn'] = u'{1}{3}{4}tt{5}isi'.format('', p1, p2, p3, p4, p5, p6, p7)
		
		# Imperative
		forms['impr_3sg'] = u'{1}{2}{4}k{7}{7}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['impr_1pl'] = u'{1}{2}{4}k{5}{5}mme'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['impr_2pl'] = u'{1}{2}{4}k{5}{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['impr_3pl'] = u'{1}{2}{4}k{7}{7}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['impr_pass'] = u'{1}{3}{4}tt{5}k{7}{7}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		
		forms['impr_conn'] = u'{1}{2}{4}k{7}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['impr_pass_conn'] = u'{1}{3}{4}tt{5}k{7}'.format('', p1, p2, p3, p4, p5, p6, p7)
		
		# Potential
		forms['potn_1sg'] = u'{1}{2}{4}nen'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_2sg'] = u'{1}{2}{4}net'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_3sg'] = u'{1}{2}{4}nee'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_1pl'] = u'{1}{2}{4}nemme'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_2pl'] = u'{1}{2}{4}nette'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_3pl'] = u'{1}{2}{4}nev{5}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_pass'] = u'{1}{3}{4}tt{5}neen'.format('', p1, p2, p3, p4, p5, p6, p7)
		
		forms['potn_conn'] = u'{1}{2}{4}ne'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_pass_conn'] = u'{1}{3}{4}tt{5}ne'.format('', p1, p2, p3, p4, p5, p6, p7)
		
		# Infinitive
		forms['inf1'] = u'{1}{2}{4}{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf2_ines'] = u'{1}{2}{4}ess{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf2_pass_ines'] = u'{1}{3}{4}tt{5}ess{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf2_inst'] = u'{1}{2}{4}en'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_ines'] = u'{1}{2}{4}m{5}ss{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_elat'] = u'{1}{2}{4}m{5}st{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_illa'] = u'{1}{2}{4}m{5}{5}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_ades'] = u'{1}{2}{4}m{5}ll{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_abes'] = u'{1}{2}{4}m{5}tt{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_inst'] = u'{1}{2}{4}m{5}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_pass_inst'] = u'{1}{3}{4}tt{5}m{5}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf4_nomi'] = u'{1}{2}{4}minen'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf4_part'] = u'{1}{2}{4}mist{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf5'] = u'{1}{2}{4}m{5}isill{5}{5}n'.format('', p1, p2, p3, p4, p5, p6, p7)

		# Participle
		forms['pres_part'] = u'{1}{2}{4}v{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_pass_part'] = u'{1}{3}{4}tt{5}v{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_part'] = u'{1}{2}{4}n{6}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_part_pl'] = u'{1}{2}{4}neet'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_pass_part'] = u'{1}{3}{4}tt{6}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['agnt_part'] = u'{1}{2}{4}m{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['nega_part'] = u'{1}{2}{4}m{5}t{7}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		
		return forms

	
	def conjugateJuosta(self, params):
		"""Conjugate a Finnish verb using {{fi-conj-juosta}}."""
		
		p1 = params[1]
		p2 = params.get(2, 'a')
		p3 = params.get(3, 'u')
		p4 = params.get(4, 'o')
		
		# Create all the forms
		forms = {}

		# Present
		forms['pres_1sg'] = u'{1}ksen'.format('', p1, p2, p3, p4)
		forms['pres_2sg'] = u'{1}kset'.format('', p1, p2, p3, p4)
		forms['pres_3sg'] = u'{1}ksee'.format('', p1, p2, p3, p4)
		forms['pres_1pl'] = u'{1}ksemme'.format('', p1, p2, p3, p4)
		forms['pres_2pl'] = u'{1}ksette'.format('', p1, p2, p3, p4)
		forms['pres_3pl'] = u'{1}ksev{2}t'.format('', p1, p2, p3, p4)
		forms['pres_pass'] = u'{1}st{2}{2}n'.format('', p1, p2, p3, p4)

		forms['pres_conn'] = u'{1}kse'.format('', p1, p2, p3, p4)
		forms['pres_pass_conn'] = u'{1}st{2}'.format('', p1, p2, p3, p4)

		# Past
		forms['past_1sg'] = u'{1}ksin'.format('', p1, p2, p3, p4)
		forms['past_2sg'] = u'{1}ksit'.format('', p1, p2, p3, p4)
		forms['past_3sg'] = u'{1}ksi'.format('', p1, p2, p3, p4)
		forms['past_1pl'] = u'{1}ksimme'.format('', p1, p2, p3, p4)
		forms['past_2pl'] = u'{1}ksitte'.format('', p1, p2, p3, p4)
		forms['past_3pl'] = u'{1}ksiv{2}t'.format('', p1, p2, p3, p4)
		forms['past_pass'] = u'{1}stiin'.format('', p1, p2, p3, p4)

		# Conditional
		forms['cond_1sg'] = u'{1}ksisin'.format('', p1, p2, p3, p4)
		forms['cond_2sg'] = u'{1}ksisit'.format('', p1, p2, p3, p4)
		forms['cond_1pl'] = u'{1}ksisimme'.format('', p1, p2, p3, p4)
		forms['cond_2pl'] = u'{1}ksisitte'.format('', p1, p2, p3, p4)
		forms['cond_3pl'] = u'{1}ksisiv{2}t'.format('', p1, p2, p3, p4)
		forms['cond_pass'] = u'{1}st{2}isiin'.format('', p1, p2, p3, p4)

		forms['cond_conn'] = u'{1}ksisi'.format('', p1, p2, p3, p4)
		forms['cond_pass_conn'] = u'{1}st{2}isi'.format('', p1, p2, p3, p4)

		# Imperative
		forms['impr_3sg'] = u'{1}sk{4}{4}n'.format('', p1, p2, p3, p4)
		forms['impr_1pl'] = u'{1}sk{2}{2}mme'.format('', p1, p2, p3, p4)
		forms['impr_2pl'] = u'{1}sk{2}{2}'.format('', p1, p2, p3, p4)
		forms['impr_3pl'] = u'{1}sk{4}{4}t'.format('', p1, p2, p3, p4)
		forms['impr_pass'] = u'{1}st{2}k{4}{4}n'.format('', p1, p2, p3, p4)

		forms['impr_conn'] = u'{1}sk{4}'.format('', p1, p2, p3, p4)
		forms['impr_pass_conn'] = u'{1}st{2}k{4}'.format('', p1, p2, p3, p4)

		# Potential
		forms['potn_1sg'] = u'{1}ssen'.format('', p1, p2, p3, p4)
		forms['potn_2sg'] = u'{1}sset'.format('', p1, p2, p3, p4)
		forms['potn_3sg'] = u'{1}ssee'.format('', p1, p2, p3, p4)
		forms['potn_1pl'] = u'{1}ssemme'.format('', p1, p2, p3, p4)
		forms['potn_2pl'] = u'{1}ssette'.format('', p1, p2, p3, p4)
		forms['potn_3pl'] = u'{1}ssev{2}t'.format('', p1, p2, p3, p4)
		forms['potn_pass'] = u'{1}st{2}neen'.format('', p1, p2, p3, p4)

		forms['potn_conn'] = u'{1}sse'.format('', p1, p2, p3, p4)
		forms['potn_pass_conn'] = u'{1}st{2}ne'.format('', p1, p2, p3, p4)

		# Infinitive
		forms['inf1'] = u'{1}st{2}'.format('', p1, p2, p3, p4)
		forms['inf2_ines'] = u'{1}stess{2}'.format('', p1, p2, p3, p4)
		forms['inf2_pass_ines'] = u'{1}st{2}ess{2}'.format('', p1, p2, p3, p4)
		forms['inf2_inst'] = u'{1}sten'.format('', p1, p2, p3, p4)
		forms['inf3_ines'] = u'{1}ksem{2}ss{2}'.format('', p1, p2, p3, p4)
		forms['inf3_elat'] = u'{1}ksem{2}st{2}'.format('', p1, p2, p3, p4)
		forms['inf3_illa'] = u'{1}ksem{2}{2}n'.format('', p1, p2, p3, p4)
		forms['inf3_ades'] = u'{1}ksem{2}ll{2}'.format('', p1, p2, p3, p4)
		forms['inf3_abes'] = u'{1}ksem{2}tt{2}'.format('', p1, p2, p3, p4)
		forms['inf3_inst'] = u'{1}ksem{2}n'.format('', p1, p2, p3, p4)
		forms['inf3_pass_inst'] = u'{1}st{2}m{2}n'.format('', p1, p2, p3, p4)
		forms['inf4_nomi'] = u'{1}kseminen'.format('', p1, p2, p3, p4)
		forms['inf4_part'] = u'{1}ksemist{2}'.format('', p1, p2, p3, p4)
		forms['inf5'] = u'{1}ksem{2}isill{2}{2}n'.format('', p1, p2, p3, p4)

		# Participle
		forms['pres_part'] = u'{1}ksev{2}'.format('', p1, p2, p3, p4)
		forms['pres_pass_part'] = u'{1}st{2}v{2}'.format('', p1, p2, p3, p4)
		forms['past_part'] = u'{1}ss{3}t'.format('', p1, p2, p3, p4)
		forms['past_part_pl'] = u'{1}sseet'.format('', p1, p2, p3, p4)
		forms['past_pass_part'] = u'{1}st{3}'.format('', p1, p2, p3, p4)
		forms['agnt_part'] = u'{1}ksem{2}'.format('', p1, p2, p3, p4)
		forms['nega_part'] = u'{1}ksem{2}t{4}n'.format('', p1, p2, p3, p4)
		
		return forms
	
	
	def conjugateNahda(self, params):
		"""Conjugate a Finnish verb using {{fi-conj-nähdä}}."""
		
		p1 = params[1]
		pk = params.get('k', 'k')
		ph = params.get('h', 'h')
		
		# Create all the forms
		forms = {}
		
		# Present
		forms['pres_1sg'] = u'{1}en'.format('', p1, k=pk, h=ph)
		forms['pres_2sg'] = u'{1}et'.format('', p1, k=pk, h=ph)
		forms['pres_3sg'] = u'{1}{k}ee'.format('', p1, k=pk, h=ph)
		forms['pres_1pl'] = u'{1}emme'.format('', p1, k=pk, h=ph)
		forms['pres_2pl'] = u'{1}ette'.format('', p1, k=pk, h=ph)
		forms['pres_3pl'] = u'{1}{k}evät'.format('', p1, k=pk, h=ph)
		forms['pres_pass'] = u'{1}{h}dään'.format('', p1, k=pk, h=ph)

		forms['pres_conn'] = u'{1}e'.format('', p1, k=pk, h=ph)
		forms['pres_pass_conn'] = u'{1}{h}dä'.format('', p1, k=pk, h=ph)

		# Past
		forms['past_1sg'] = u'{1}in'.format('', p1, k=pk, h=ph)
		forms['past_2sg'] = u'{1}it'.format('', p1, k=pk, h=ph)
		forms['past_3sg'] = u'{1}{k}i'.format('', p1, k=pk, h=ph)
		forms['past_1pl'] = u'{1}imme'.format('', p1, k=pk, h=ph)
		forms['past_2pl'] = u'{1}itte'.format('', p1, k=pk, h=ph)
		forms['past_3pl'] = u'{1}{k}ivät'.format('', p1, k=pk, h=ph)
		forms['past_pass'] = u'{1}{h}tiin'.format('', p1, k=pk, h=ph)

		# Conditional
		forms['cond_1sg'] = u'{1}{k}isin'.format('', p1, k=pk, h=ph)
		forms['cond_2sg'] = u'{1}{k}isit'.format('', p1, k=pk, h=ph)
		forms['cond_1pl'] = u'{1}{k}isimme'.format('', p1, k=pk, h=ph)
		forms['cond_2pl'] = u'{1}{k}isitte'.format('', p1, k=pk, h=ph)
		forms['cond_3pl'] = u'{1}{k}isivät'.format('', p1, k=pk, h=ph)
		forms['cond_pass'] = u'{1}{h}täisiin'.format('', p1, k=pk, h=ph)

		forms['cond_conn'] = u'{1}{k}isi'.format('', p1, k=pk, h=ph)
		forms['cond_pass_conn'] = u'{1}{h}täisi'.format('', p1, k=pk, h=ph)

		# Imperative
		forms['impr_3sg'] = u'{1}{h}köön'.format('', p1, k=pk, h=ph)
		forms['impr_1pl'] = u'{1}{h}käämme'.format('', p1, k=pk, h=ph)
		forms['impr_2pl'] = u'{1}{h}kää'.format('', p1, k=pk, h=ph)
		forms['impr_3pl'] = u'{1}{h}kööt'.format('', p1, k=pk, h=ph)
		forms['impr_pass'] = u'{1}{h}täköön'.format('', p1, k=pk, h=ph)

		forms['impr_conn'] = u'{1}{h}kö'.format('', p1, k=pk, h=ph)
		forms['impr_pass_conn'] = u'{1}{h}täkö'.format('', p1, k=pk, h=ph)

		# Potential
		forms['potn_1sg'] = u'{1}{h}nen'.format('', p1, k=pk, h=ph)
		forms['potn_2sg'] = u'{1}{h}net'.format('', p1, k=pk, h=ph)
		forms['potn_3sg'] = u'{1}{h}nee'.format('', p1, k=pk, h=ph)
		forms['potn_1pl'] = u'{1}{h}nemme'.format('', p1, k=pk, h=ph)
		forms['potn_2pl'] = u'{1}{h}nette'.format('', p1, k=pk, h=ph)
		forms['potn_3pl'] = u'{1}{h}nevät'.format('', p1, k=pk, h=ph)
		forms['potn_pass'] = u'{1}{h}täneen'.format('', p1, k=pk, h=ph)

		forms['potn_conn'] = u'{1}{h}ne'.format('', p1, k=pk, h=ph)
		forms['potn_pass_conn'] = u'{1}{h}täne'.format('', p1, k=pk, h=ph)

		# Infinitive
		forms['inf1'] = u'{1}{h}dä'.format('', p1, k=pk, h=ph)
		forms['inf2_ines'] = u'{1}{h}dessä'.format('', p1, k=pk, h=ph)
		forms['inf2_pass_ines'] = u'{1}{h}täessä'.format('', p1, k=pk, h=ph)
		forms['inf2_inst'] = u'{1}{h}den'.format('', p1, k=pk, h=ph)
		forms['inf3_ines'] = u'{1}{k}emässä'.format('', p1, k=pk, h=ph)
		forms['inf3_elat'] = u'{1}{k}emästä'.format('', p1, k=pk, h=ph)
		forms['inf3_illa'] = u'{1}{k}emään'.format('', p1, k=pk, h=ph)
		forms['inf3_ades'] = u'{1}{k}emällä'.format('', p1, k=pk, h=ph)
		forms['inf3_abes'] = u'{1}{k}emättä'.format('', p1, k=pk, h=ph)
		forms['inf3_inst'] = u'{1}{k}emän'.format('', p1, k=pk, h=ph)
		forms['inf3_pass_inst'] = u'{1}{h}tämän'.format('', p1, k=pk, h=ph)
		forms['inf4_nomi'] = u'{1}{k}eminen'.format('', p1, k=pk, h=ph)
		forms['inf4_part'] = u'{1}{k}emistä'.format('', p1, k=pk, h=ph)
		forms['inf5'] = u'{1}{k}emäisillään'.format('', p1, k=pk, h=ph)

		# Participle
		forms['pres_part'] = u'{1}{k}evä'.format('', p1, k=pk, h=ph)
		forms['pres_pass_part'] = u'{1}{h}tävä'.format('', p1, k=pk, h=ph)
		forms['past_part'] = u'{1}{h}nyt'.format('', p1, k=pk, h=ph)
		forms['past_part_pl'] = u'{1}{h}neet'.format('', p1, k=pk, h=ph)
		forms['past_pass_part'] = u'{1}{h}ty'.format('', p1, k=pk, h=ph)
		forms['agnt_part'] = u'{1}{k}emä'.format('', p1, k=pk, h=ph)
		forms['nega_part'] = u'{1}{k}emätön'.format('', p1, k=pk, h=ph)
		
		return forms


	def conjugateTaitaa(self, params):
		"""Conjugate a Finnish verb using {{fi-conj-taitaa}}."""
		
		p1 = params[1]
		p2 = params.get(2, '')
		p3 = params.get(3, '')
		p4 = params.get(4, 'a')
		p5 = params.get(5, 'u')
		p6 = params.get(6, 'o')
		p7 = params.get(7, 's')
		
		# Create all the forms
		forms = {}
		
		# Present
		forms['pres_1sg'] = u'{1}{3}{4}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_2sg'] = u'{1}{3}{4}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_3sg'] = u'{1}{2}{4}{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_1pl'] = u'{1}{3}{4}mme'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_2pl'] = u'{1}{3}{4}tte'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_3pl'] = u'{1}{2}{4}v{4}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_pass'] = u'{1}{3}et{4}{4}n'.format('', p1, p2, p3, p4, p5, p6, p7)

		forms['pres_conn'] = u'{1}{3}{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_pass_conn'] = u'{1}{3}et{4}'.format('', p1, p2, p3, p4, p5, p6, p7)

		# Past
		forms['past_1sg'] = u'{1}{7}in'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_2sg'] = u'{1}{7}it'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_3sg'] = u'{1}{7}i'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_1pl'] = u'{1}{7}imme'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_2pl'] = u'{1}{7}itte'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_3pl'] = u'{1}{7}iv{4}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_pass'] = u'{1}{3}ettiin'.format('', p1, p2, p3, p4, p5, p6, p7)

		# Conditional
		forms['cond_1sg'] = u'{1}{2}{4}isin'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_2sg'] = u'{1}{2}{4}isit'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_1pl'] = u'{1}{2}{4}isimme'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_2pl'] = u'{1}{2}{4}isitte'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_3pl'] = u'{1}{2}{4}isiv{4}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_pass'] = u'{1}{3}ett{4}isiin'.format('', p1, p2, p3, p4, p5, p6, p7)

		forms['cond_conn'] = u'{1}{2}{4}isi'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['cond_pass_conn'] = u'{1}{3}ett{4}isi'.format('', p1, p2, p3, p4, p5, p6, p7)

		# Imperative
		forms['impr_3sg'] = u'{1}{2}{4}k{6}{6}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['impr_1pl'] = u'{1}{2}{4}k{4}{4}mme'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['impr_2pl'] = u'{1}{2}{4}k{4}{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['impr_3pl'] = u'{1}{2}{4}k{6}{6}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['impr_pass'] = u'{1}{3}ett{4}k{6}{6}n'.format('', p1, p2, p3, p4, p5, p6, p7)

		forms['impr_conn'] = u'{1}{2}{4}k{6}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['impr_pass_conn'] = u'{1}{3}ett{4}k{6}'.format('', p1, p2, p3, p4, p5, p6, p7)

		# Potential
		forms['potn_1sg'] = u'{1}{2}{4}nen'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_2sg'] = u'{1}{2}{4}net'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_3sg'] = u'{1}{2}{4}nee'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_3sg_alt'] = u'{1}nnee'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_1pl'] = u'{1}{2}{4}nemme'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_2pl'] = u'{1}{2}{4}nette'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_3pl'] = u'{1}{2}{4}nev{4}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_3pl_alt'] = u'{1}nnev{4}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_pass'] = u'{1}{3}ett{4}neen'.format('', p1, p2, p3, p4, p5, p6, p7)

		forms['potn_conn'] = u'{1}{2}{4}ne'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['potn_pass_conn'] = u'{1}{3}ett{4}ne'.format('', p1, p2, p3, p4, p5, p6, p7)

		# Infinitive
		forms['inf1'] = u'{1}{2}{4}{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf2_ines'] = u'{1}{2}{4}ess{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf2_pass_ines'] = u'{1}{3}ett{4}ess{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf2_inst'] = u'{1}{2}{4}en'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_ines'] = u'{1}{2}{4}m{4}ss{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_elat'] = u'{1}{2}{4}m{4}st{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_illa'] = u'{1}{2}{4}m{4}{4}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_ades'] = u'{1}{2}{4}m{4}ll{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_abes'] = u'{1}{2}{4}m{4}tt{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_inst'] = u'{1}{2}{4}m{4}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf3_pass_inst'] = u'{1}{3}ett{4}m{4}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf4_nomi'] = u'{1}{2}{4}minen'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf4_part'] = u'{1}{2}{4}mist{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['inf5'] = u'{1}{2}{4}m{4}isill{4}{4}n'.format('', p1, p2, p3, p4, p5, p6, p7)

		# Participle
		forms['pres_part'] = u'{1}{2}{4}v{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['pres_pass_part'] = u'{1}{3}ett{4}v{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_part'] = u'{1}nn{5}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_part_alt'] = u'{1}{2}{4}n{5}t'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_part_pl'] = u'{1}nneet'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_part_pl_alt'] = u'{1}{2}{4}neet'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['past_pass_part'] = u'{1}{3}ett{5}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['agnt_part'] = u'{1}{2}{4}m{4}'.format('', p1, p2, p3, p4, p5, p6, p7)
		forms['nega_part'] = u'{1}{2}{4}m{4}t{6}n'.format('', p1, p2, p3, p4, p5, p6, p7)
		
		return forms