#ifndef LATEXFEATURES_H
#define LATEXFEATURES_H
-#include "OutputParams.h"
#include "support/docstring.h"
#include <set>
#include <list>
#include <map>
+#include <vector>
namespace lyx {
class BufferParams;
class InsetLayout;
class Language;
+class otexstream;
+class OutputParams;
+struct TexString;
/** The packages and commands that a buffer needs. This class
* contains a list<string>. Each of the LaTeX packages that a buffer needs
OutputParams const &);
/// The color packages
std::string const getColorOptions() const;
+ /// The requested package options
+ std::string const getPackageOptions() const;
/// The packages needed by the document
std::string const getPackages() const;
/// The macros definitions needed by the document
- docstring const getMacros() const;
+ TexString getMacros() const;
/// Extra preamble code before babel is called
- std::string const getBabelPresettings() const;
+ docstring const getBabelPresettings() const;
/// Extra preamble code after babel is called
- std::string const getBabelPostsettings() const;
- /// Do we need to pass the languages to babel directly?
- bool needBabelLangOptions() const;
+ docstring const getBabelPostsettings() const;
/// Load AMS packages when appropriate
std::string const loadAMSPackages() const;
/// The definitions needed by the document's textclass
docstring const getTClassPreamble() const;
/// The language dependent definitions needed by the document's textclass
- docstring const getTClassI18nPreamble(bool use_babel, bool use_polyglossia) const;
+ docstring const getTClassI18nPreamble(bool use_babel,
+ bool use_polyglossia, bool use_minted) const;
///
docstring const getTClassHTMLStyles() const;
///
docstring const getTClassHTMLPreamble() const;
- /// The sgml definitions needed by the document (docbook)
- docstring const getLyXSGMLEntities() const;
- /// The SGML Required to include the files added with includeFile();
- docstring const getIncludedFiles(std::string const & fname) const;
/// Include a file for use with the SGML entities
void includeFile(docstring const & key, std::string const & name);
/// The float definitions.
- void getFloatDefinitions(odocstream & os) const;
+ void getFloatDefinitions(otexstream & os) const;
/// Print requirements to lyxerr
void showStruct() const;
- ///
- void addPreambleSnippet(std::string const &);
- ///
- std::string getPreambleSnippets() const;
- ///
+ /// Add preamble snippet with TexRow information
+ void addPreambleSnippet(TexString snippet, bool allowdupes = false);
+ /// Add preamble snippet without TexRow information
+ void addPreambleSnippet(docstring const & snippet, bool allowdupes = false);
+ ///
+ TexString getPreambleSnippets() const;
+ /// Adds CSS information for HTML export.
+ /// Note that addPreambleSnippet is for LaTeX-type export
void addCSSSnippet(std::string const &);
///
- std::string getCSSSnippets() const;
+ docstring getCSSSnippets() const;
/// Add a feature name requirements
void require(std::string const & name);
/// Add a set of feature names requirements
void require(std::set<std::string> const & names);
+ /// Add a feature name provision
+ void provide(std::string const & name);
/// Is the (required) package available?
static bool isAvailable(std::string const & name);
+ /// Is the (required) package available at least as of version
+ /// y/m/d?
+ static bool isAvailableAtLeastFrom(std::string const & name,
+ int const y, int const m, int const d = 1);
/// Has the package been required?
bool isRequired(std::string const & name) const;
/** Is this feature already provided
bool hasOnlyPolyglossiaLanguages() const;
/// check if a language is supported only by polyglossia
bool hasPolyglossiaExclusiveLanguages() const;
+ /// A vector of all used languages supported only by polyglossia
+ std::vector<std::string> getPolyglossiaExclusiveLanguages() const;
+ /// A vector of all used languages supported only by babel
+ std::vector<std::string> getBabelExclusiveLanguages() const;
///
std::string getBabelLanguages() const;
///
- std::map<std::string, std::string> getPolyglossiaLanguages() const;
+ std::set<std::string> getPolyglossiaLanguages() const;
+ ///
+ std::string getActiveChars() const;
///
std::set<std::string> getEncodingSet(std::string const & doc_encoding) const;
///
- void useLayout(docstring const & lyt);
+ void getFontEncodings(std::vector<std::string> & encodings,
+ bool const onlylangs = false) const;
+ ///
+ void useLayout(docstring const & layoutname);
///
void useInsetLayout(InsetLayout const & lay);
///
/** Which language package do we require? \p englishbabel determines
* if we require babel even if English is the only language.
*/
- LangPackage langPackage(bool englishbabel = false) const;
+ LangPackage langPackage() const;
/// Convenience function to test if we use babel
- bool useBabel(bool englishbabel = false) const { return langPackage(englishbabel) == LANG_PACK_BABEL; }
+ bool useBabel() const { return langPackage() == LANG_PACK_BABEL; }
/// Convenience function to test if we use polyglossia
bool usePolyglossia() const { return langPackage() == LANG_PACK_POLYGLOSSIA; }
/// are we in a float?
bool inFloat() const { return in_float_; }
/// are we in a float?
void inFloat(bool const b) { in_float_ = b; }
+ /// are we in a deleted inset?
+ bool inDeletedInset() const { return in_deleted_inset_; }
+ /// are we in a deleted inset?
+ void inDeletedInset(bool const b) { in_deleted_inset_ = b; }
+ /// set savenote environment (footnote package)
+ std::string saveNoteEnv() const { return savenote_env_; }
+ /// return savenote environment
+ void saveNoteEnv(std::string const & s) { savenote_env_ = s; }
/// Runparams that will be used for exporting this file.
OutputParams const & runparams() const { return runparams_; }
/// Resolve alternatives like "esint|amsmath|wasysym"
void resolveAlternatives();
+ /// Expand multiple requirements like "textcomp,lyxmathsym,amstext"
+ void expandMultiples();
///
void setHTMLTitle(docstring const & t) { htmltitle_ = t; }
///
docstring const & htmlTitle() const { return htmltitle_; }
+ ///
+ bool hasRTLLanguage() const;
private:
+ ///
+ void useLayout(docstring const &, int);
///
std::list<docstring> usedLayouts_;
///
std::list<docstring> usedInsetLayouts_;
- /// The features that are needed by the document
- typedef std::set<std::string> Features;
///
+ typedef std::set<std::string> Features;
+ /// The features that are needed by the document
Features features_;
+ /// Features that are provided
+ Features provides_;
/// Static preamble bits, from external templates, or anywhere else
- typedef std::list<std::string> SnippetList;
+ typedef std::list<TexString> SnippetList;
///
SnippetList preamble_snippets_;
///
///
bool in_float_;
///
+ bool in_deleted_inset_;
+ ///
docstring htmltitle_;
+ ///
+ std::string savenote_env_;
};