+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<std::string, docstring> InfoMap;
+
+/// Returns a vector of bibliography keys
+std::vector<std::string> const getKeys(InfoMap const &);
+
+/** Returns the BibTeX data associated with a given key.
+ Empty if no info exists. */
+docstring const getInfo(InfoMap const &, std::string const & key);
+
+/// return the year from the bibtex data record
+docstring const getYear(InfoMap const & map, std::string const & key);
+
+/// return the short form of an authorlist
+docstring const getAbbreviatedAuthor(InfoMap const & map, std::string const & key);
+
+// return only the family name
+docstring const familyName(docstring const & name);
+
+/** Search a BibTeX info field for the given key and return the
+ associated field. */
+docstring const parseBibTeX(docstring 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<std::string>::const_iterator
+searchKeys(InfoMap const & map,
+ std::vector<std::string> const & keys_to_search,
+ docstring const & search_expression,
+ std::vector<std::string>::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;