]> git.lyx.org Git - lyx.git/blob - src/frontends/controllers/ControlCitation.C
Overhaul the branches code.
[lyx.git] / src / frontends / controllers / ControlCitation.C
1 /**
2  * \file ControlCitation.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Angus Leeming
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "ControlCitation.h"
14
15 #include "buffer.h"
16 #include "bufferparams.h"
17
18
19 using std::string;
20 using std::vector;
21 using std::pair;
22
23
24 vector<biblio::CiteStyle> ControlCitation::citeStyles_;
25
26
27 ControlCitation::ControlCitation(Dialog & d)
28         : ControlCommand(d, "citation")
29 {}
30
31
32 bool ControlCitation::initialiseParams(string const & data)
33 {
34         ControlCommand::initialiseParams(data);
35
36         vector<pair<string, string> > blist;
37         kernel().buffer().fillWithBibKeys(blist);
38
39         typedef std::map<string, string>::value_type InfoMapValue;
40
41         for (vector<pair<string,string> >::size_type i = 0;
42              i < blist.size(); ++i) {
43                 bibkeysInfo_.insert(InfoMapValue(blist[i].first,
44                                                  blist[i].second));
45         }
46
47         if (citeStyles_.empty())
48                 citeStyles_ = biblio::getCiteStyles(usingNatbib());
49         else {
50                 if ((usingNatbib() && citeStyles_.size() == 1) ||
51                     (!usingNatbib() && citeStyles_.size() != 1))
52                         citeStyles_ = biblio::getCiteStyles(usingNatbib());
53         }
54
55         return true;
56 }
57
58
59
60 void ControlCitation::clearParams()
61 {
62         ControlCommand::clearParams();
63         bibkeysInfo_.clear();
64 }
65
66
67 biblio::InfoMap const & ControlCitation::bibkeysInfo() const
68 {
69         return bibkeysInfo_;
70 }
71
72
73 bool ControlCitation::usingNatbib() const
74 {
75     return kernel().buffer().params().use_natbib;
76 }
77
78
79 vector<string> const ControlCitation::getCiteStrings(string const & key) const
80 {
81         vector<string> styles;
82
83         vector<biblio::CiteStyle> const cs =
84                 biblio::getCiteStyles(usingNatbib());
85
86         if (kernel().buffer().params().use_numerical_citations)
87                 styles = biblio::getNumericalStrings(key, bibkeysInfo_, cs);
88         else
89                 styles = biblio::getAuthorYearStrings(key, bibkeysInfo_, cs);
90
91         return styles;
92 }