]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/controllers/biblio.h
Convert most of the bibtex machinery to docstring.
[lyx.git] / src / frontends / controllers / biblio.h
index 0c37e8dce9d41c4a5f09293d2e3cad60af56e8bd..55882cff56cbf998853885fe5f15ed1454d206f5 100644 (file)
 #ifndef BIBLIOHELPERS_H
 #define BIBLIOHELPERS_H
 
+#include "support/docstring.h"
+
 #include <map>
-#include <string>
 #include <vector>
 
+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,
@@ -31,44 +39,48 @@ enum CiteStyle {
        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, std::string> InfoMap;
+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. */
-std::string const getInfo(InfoMap const &, std::string const &);
+docstring const getInfo(InfoMap const &, std::string const & key);
 
-// rturn the year from the bibtex data record
-std::string const getYear(InfoMap const & map, 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
-std::string const getAbbreviatedAuthor(InfoMap const & map, std::string const & key);
+docstring const getAbbreviatedAuthor(InfoMap const & map, std::string const & key);
 
 // return only the family name
-std::string const familyName(std::string const & name);
+docstring const familyName(docstring 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);
+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.
@@ -85,16 +97,22 @@ std::string const parseBibTeX(std::string data, std::string const & findkey);
 std::vector<std::string>::const_iterator
 searchKeys(InfoMap const & map,
           std::vector<std::string> const & keys_to_search,
-          std::string const & search_expression,
+          docstring const & search_expression,
           std::vector<std::string>::const_iterator start,
           Search,
           Direction,
           bool caseSensitive=false);
 
-/// Type returned by getCitationStyle, below
-struct CitationStyle {
+
+class CitationStyle {
+public:
        ///
-       CitationStyle() : style(CITE), full(false), forceUCase(false) {}
+       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;
        ///
@@ -103,20 +121,9 @@ struct CitationStyle {
        bool forceUCase;
 };
 
-/// Given the LaTeX command, return the appropriate CitationStyle
-CitationStyle const getCitationStyle(std::string const & command);
-
-/** Returns the LaTeX citation command
-
-User supplies :
-The CiteStyle enum,
-a flag forcing the full author list,
-a flag forcing upper case, e.g. "della Casa" becomes "Della Case"
-*/
-std::string const getCiteCommand(CiteStyle, bool full, bool forceUCase);
 
 /// Returns a vector of available Citation styles.
-std::vector<CiteStyle> const getCiteStyles(bool usingNatbib);
+std::vector<CiteStyle> const getCiteStyles(CiteEngine_enum const &);
 
 /**
    "Translates" the available Citation Styles into strings for this key.
@@ -131,7 +138,7 @@ std::vector<CiteStyle> const getCiteStyles(bool usingNatbib);
    the InfoMap of bibkeys info,
    the available citation styles
 */
-std::vector<std::string> const
+std::vector<docstring> const
 getNumericalStrings(std::string const & key,
                    InfoMap const & map,
                    std::vector<CiteStyle> const & styles);
@@ -148,10 +155,12 @@ getNumericalStrings(std::string const & key,
    the InfoMap of bibkeys info,
    the available citation styles
 */
-std::vector<std::string> const
+std::vector<docstring> const
 getAuthorYearStrings(std::string const & key,
                     InfoMap const & map,
                     std::vector<CiteStyle> const & styles);
+
 } // namespace biblio
+} // namespace lyx
 
 #endif // BIBLIOHELPERS_H