lyx_mirror/src/insets/InsetCitation.h
Julien Rioux 1e947e3a18 Move the citation engine machinery to layouts.
Add a new layout syntax CiteEngine to define the citation commands
available for a given citation engine.

Also extend the CiteFormat syntax to allow more customization. This
mechanism, previously used to produce bibliography entries in the
citation GUI based on the BibTeX entrytype, is now also used to
produce the textual labels for citation insets in the buffer view.

Thus citation styles are almost completely customizable by modules.
Modules for the basic, jurabib and natbib engines are implemented.

Layout format incremented to 37.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40820 a592a061-630c-0410-9148-cb99ea01b6c8
2012-03-01 00:41:30 +00:00

121 lines
2.7 KiB
C++

// -*- C++ -*-
/**
* \file InsetCitation.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Angus Leeming
* \author Herbert Voß
*
* Full author contact details are available in file CREDITS.
*/
#ifndef INSET_CITATION_H
#define INSET_CITATION_H
#include "InsetCommand.h"
#include "Citation.h"
namespace lyx {
/////////////////////////////////////////////////////////////////////////
//
// InsetCitation
//
/////////////////////////////////////////////////////////////////////////
/// Used to insert citations
class InsetCitation : public InsetCommand
{
public:
///
InsetCitation(Buffer * buf, InsetCommandParams const &);
/// \name Public functions inherited from Inset class
//@{
///
bool isLabeled() const { return true; }
///
bool hasSettings() const { return true; }
///
docstring toolTip(BufferView const & bv, int x, int y) const;
///
void doDispatch(Cursor & cur, FuncRequest & cmd);
///
InsetCode lyxCode() const { return CITE_CODE; }
///
void latex(otexstream &, OutputParams const &) const;
///
int plaintext(odocstream &, OutputParams const &) const;
///
int docbook(odocstream &, OutputParams const &) const;
///
docstring xhtml(XHTMLStream &, OutputParams const &) const;
///
void toString(odocstream &) const;
///
void forToc(docstring &, size_t) const;
///
void validate(LaTeXFeatures &) const {}
///
void updateBuffer(ParIterator const & it, UpdateType);
///
void addToToc(DocIterator const &) const;
///
std::string contextMenuName() const;
//@}
/// \name Static public methods obligated for InsetCommand derived classes
//@{
///
static ParamInfo const & findInfo(std::string const &);
///
static std::string defaultCommand() { return "cite"; }
///
static bool isCompatibleCommand(std::string const & cmd);
//@}
private:
/// tries to make a pretty label and makes a basic one if not
docstring generateLabel(bool for_xhtml = false) const;
/// makes a pretty label
docstring complexLabel(bool for_xhtml = false) const;
/// makes a very basic label, in case we can't make a pretty one
docstring basicLabel(bool for_xhtml = false) const;
/// \name Private functions inherited from Inset class
//@{
///
Inset * clone() const { return new InsetCitation(*this); }
//@}
/// \name Private functions inherited from InsetCommand class
//@{
///
docstring screenLabel() const;
//@}
/// we'll eventually want to be able to get info on this from the
/// various CiteEngines
static ParamInfo param_info_;
///
struct Cache {
Cache() : recalculate(true) {};
///
bool recalculate;
///
docstring generated_label;
///
docstring screen_label;
};
///
mutable Cache cache;
};
} // namespace lyx
#endif // INSET_CITATION_H