// -*- C++ -*- /** * \file biblio.h * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \author Angus Leeming * * Full author contact details are available in file CREDITS. */ #ifndef BIBLIOHELPERS_H #define BIBLIOHELPERS_H #include #include #include class Buffer; /** Functions of use to citation and bibtex GUI controllers and views */ namespace lyx { namespace biblio { class CiteEngine_enum; CiteEngine_enum getEngine(Buffer const &); enum CiteStyle { CITE, CITET, CITEP, CITEALT, CITEALP, CITEAUTHOR, CITEYEAR, CITEYEARPAR }; enum Search { SIMPLE, REGEX }; enum Direction { FORWARD, BACKWARD }; /** Each citation engine recognizes only a subset of all possible * citation commands. Given a latex command \c input, this function * returns an appropriate command, valid for \c engine. */ std::string const asValidLatexCommand(std::string const & input, CiteEngine_enum const & engine); /// First entry is the bibliography key, second the data typedef std::map InfoMap; /// Returns a vector of bibliography keys std::vector const getKeys(InfoMap const &); /** Returns the BibTeX data associated with a given key. Empty if no info exists. */ std::string const getInfo(InfoMap const &, std::string const &); // rturn the year from the bibtex data record std::string const getYear(InfoMap const & map, std::string const & key); /// return the short form of an authorlist std::string const getAbbreviatedAuthor(InfoMap const & map, std::string const & key); // return only the family name std::string const familyName(std::string const & name); /** Search a BibTeX info field for the given key and return the associated field. */ std::string const parseBibTeX(std::string data, std::string const & findkey); /** Returns an iterator to the first key that meets the search criterion, or end() if unsuccessful. User supplies : the InfoMap of bibkeys info, the vector of keys to be searched, the search criterion, an iterator defining the starting point of the search, an enum defining a Simple or Regex search, an enum defining the search direction. */ std::vector::const_iterator searchKeys(InfoMap const & map, std::vector const & keys_to_search, std::string const & search_expression, std::vector::const_iterator start, Search, Direction, bool caseSensitive=false); class CitationStyle { public: /// CitationStyle(CiteStyle s = CITE, bool f = false, bool force = false) : style(s), full(f), forceUCase(force) {} /// \param latex_str a LaTeX command, "cite", "Citep*", etc CitationStyle(std::string const & latex_str); /// std::string const asLatexStr() const; /// CiteStyle style; /// bool full; /// bool forceUCase; }; /// Returns a vector of available Citation styles. std::vector const getCiteStyles(CiteEngine_enum const &); /** "Translates" the available Citation Styles into strings for this key. The returned string is displayed by the GUI. [XX] is used in place of the actual reference Eg, the vector will contain: [XX], Jones et al. [XX], ... User supplies : the key, the InfoMap of bibkeys info, the available citation styles */ std::vector const getNumericalStrings(std::string const & key, InfoMap const & map, std::vector const & styles); /** "Translates" the available Citation Styles into strings for this key. The returned string is displayed by the GUI. Eg, the vector will contain: Jones et al. (1990), (Jones et al. 1990), Jones et al. 1990, ... User supplies : the key, the InfoMap of bibkeys info, the available citation styles */ std::vector const getAuthorYearStrings(std::string const & key, InfoMap const & map, std::vector const & styles); } // namespace biblio } // namespace lyx #endif // BIBLIOHELPERS_H