1 // -*- C++ -*- 2 /** 3 * \file InsetCitation.h 4 * This file is part of LyX, the document processor. 5 * Licence details can be found in the file COPYING. 6 * 7 * \author Angus Leeming 8 * \author Herbert Voß 9 * 10 * Full author contact details are available in file CREDITS. 11 */ 12 13 #ifndef INSET_CITATION_H 14 #define INSET_CITATION_H 15 16 #include "InsetCommand.h" 17 #include "Citation.h" 18 19 namespace lyx { 20 21 ///////////////////////////////////////////////////////////////////////// 22 // 23 // InsetCitation 24 // 25 ///////////////////////////////////////////////////////////////////////// 26 27 /// Used to insert citations 28 class InsetCitation : public InsetCommand 29 { 30 public: 31 /// 32 InsetCitation(Buffer * buf, InsetCommandParams const &); 33 /// 34 ~InsetCitation(); 35 36 /// 37 bool addKey(std::string const & key); 38 39 /// \name Public functions inherited from Inset class 40 //@{ 41 /// isLabeled()42 bool isLabeled() const { return true; } 43 /// hasSettings()44 bool hasSettings() const { return true; } 45 /// 46 docstring toolTip(BufferView const & bv, int x, int y) const; 47 /// 48 void doDispatch(Cursor & cur, FuncRequest & cmd); 49 /// 50 bool getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus &) const; 51 /// lyxCode()52 InsetCode lyxCode() const { return CITE_CODE; } 53 /// 54 void latex(otexstream &, OutputParams const &) const; 55 /// 56 int plaintext(odocstringstream & ods, OutputParams const & op, 57 size_t max_length = INT_MAX) const; 58 /// 59 int docbook(odocstream &, OutputParams const &) const; 60 /// 61 docstring xhtml(XHTMLStream &, OutputParams const &) const; 62 /// 63 void toString(odocstream &) const; 64 /// 65 void forOutliner(docstring &, size_t const, bool const) const; 66 /// 67 void updateBuffer(ParIterator const & it, UpdateType); 68 /// 69 void addToToc(DocIterator const & di, bool output_active, 70 UpdateType utype, TocBackend & backend) const; 71 /// 72 std::string contextMenuName() const; 73 /// 74 bool forceLTR(OutputParams const &) const; 75 //@} 76 77 /// \name Static public methods obligated for InsetCommand derived classes 78 //@{ 79 /// 80 static ParamInfo const & findInfo(std::string const &); 81 /// defaultCommand()82 static std::string defaultCommand() { return "cite"; } 83 /// 84 static bool isCompatibleCommand(std::string const &); 85 //@} 86 /// redoLabel()87 void redoLabel() { cache.recalculate = true; } 88 /// 89 CitationStyle getCitationStyle(BufferParams const & bp, std::string const & input, 90 std::vector<CitationStyle> const & valid_styles) const; 91 /// 92 std::map<docstring, docstring> getQualifiedLists(docstring const p) const; 93 /// 94 static bool last_literal; 95 96 private: 97 /// tries to make a pretty label and makes a basic one if not 98 docstring generateLabel(bool for_xhtml = false) const; 99 /// makes a pretty label 100 docstring complexLabel(bool for_xhtml = false) const; 101 /// makes a very basic label, in case we can't make a pretty one 102 docstring basicLabel(bool for_xhtml = false) const; 103 104 /// \name Private functions inherited from Inset class 105 //@{ 106 /// clone()107 Inset * clone() const { return new InsetCitation(*this); } 108 //@} 109 110 /// \name Private functions inherited from InsetCommand class 111 //@{ 112 /// 113 docstring screenLabel() const; 114 //@} 115 116 /// 117 struct Cache { CacheCache118 Cache() : recalculate(true) {} 119 /// 120 bool recalculate; 121 /// 122 docstring generated_label; 123 /// 124 docstring screen_label; 125 }; 126 /// 127 mutable Cache cache; 128 }; 129 130 131 } // namespace lyx 132 133 #endif // INSET_CITATION_H 134