/* $Id: conjugation.h,v 1.12 2011/01/08 19:07:36 sarrazip Exp $
conjugation.h - Generic conjugation interface
verbiste - French conjugation system
Copyright (C) 2003-2006 Pierre Sarrazin
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
*/
#ifndef _H_conjugation
#define _H_conjugation
#include
#include
#include
typedef std::vector VS;
typedef std::vector VVS;
typedef std::vector VVVS;
/** Obtains the conjugation of the given infinitive.
@param fvd verb dictionary from which to obtain
the conjugation
@param infinitive UTF-8 string containing the infinitive form
of the verb to conjugate (e.g., "manger")
@param tname conjugation template name to use (e.g., "aim:er")
@param dest structure into which the conjugated is written
@param includePronouns put pronouns before conjugated verbs in the
modes where pronouns are used
*/
void getConjugation(const verbiste::FrenchVerbDictionary &fvd,
const std::string &infinitive,
const std::string &tname,
VVVS &dest,
bool includePronouns = false);
/** Get the tense name for a certain cell of the conjugation table.
The conjugation table is a 4x4 grid and 11 of the 16 cells are
used by the tenses to be displayed.
@param row row number (0..3)
@param col column number (0..3)
@param isItalian language used (true for Italian, false for French)
@returns an internationalized (and possibly abbreviated) name
(in UTF-8) for the tense that goes in the cell
designated by row and col;
the returned string is empty if no tense (in the
language used) goes in the designated cell
*/
std::string getTenseNameForTableCell(int row, int col, bool isItalian);
/** Composes the text of the conjugation in a certain tense.
The words of this conjugation that match a certain user text
are marked specially.
@param tense structure that represents a certain
tense of a certain verb
@param lowerCaseUTF8UserText conjugated verb as entered by the
user, but converted to lower-case,
and assumed to be in UTF-8
@param openMark ASCII string to be used before verbs
that match lowerCaseUTF8UserText
(e.g., "")
@param closeMark ASCII string to be used after verbs
that match lowerCaseUTF8UserText
(e.g., "")
@returns a UTF-8 string containing several
lines of text, each line being
separated by a newline ('\n')
character; the string does not end
the last line with a newline however;
e.g., "aie\nayons\nayez"
*/
std::string createTableCellText(verbiste::FrenchVerbDictionary &fvd,
const VVS &tense,
const std::string &lowerCaseUTF8UserText,
const std::string &openMark,
const std::string &closeMark);
#endif /* _H_conjugation */