X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FEncoding.h;h=c78972a1c8b71e0a341f0e9e4a57cce9ec2ec633;hb=4056f0ddb150d0e5d60bc5941d51e365eed0ac86;hp=b8cf8c59d9fe929fe8e6e727eff7c19d22548ad5;hpb=80b94c6bf50dfb5c96ad1ca6003bac93d844e6ce;p=lyx.git diff --git a/src/Encoding.h b/src/Encoding.h index b8cf8c59d9..c78972a1c8 100644 --- a/src/Encoding.h +++ b/src/Encoding.h @@ -14,6 +14,7 @@ #define ENCODING_H #include "support/docstring.h" +#include "support/types.h" #include #include @@ -24,6 +25,17 @@ namespace support { class FileName; } class LaTeXFeatures; +class EncodingException : public std::exception { +public: + EncodingException(char_type c); + virtual ~EncodingException() throw() {} + virtual const char * what() const throw(); + + char_type failed_char; + int par_id; + pos_type pos; +}; + /// class Encoding { @@ -38,7 +50,7 @@ public: Encoding() {} /// Encoding(std::string const & n, std::string const & l, - std::string const & i, bool f, Package p); + std::string const & i, bool f, Package p); /// void init() const; /// @@ -58,6 +70,8 @@ public: docstring const latexChar(char_type c) const; /// Which LaTeX package handles this encoding? Package package() const { return package_; } + /// A list of all characters usable in this encoding + std::set getSymbolsList() const; private: /// std::string Name_; @@ -108,7 +122,7 @@ public: /// \param encfile encodings definition file /// \param symbolsfile unicode->LaTeX mapping file void read(support::FileName const & encfile, - support::FileName const & symbolsfile); + support::FileName const & symbolsfile); /// Get encoding from LyX name \p name Encoding const * getFromLyXName(std::string const & name) const; /// Get encoding from LaTeX name \p name @@ -142,6 +156,15 @@ public: static char_type transformChar(char_type c, Letter_Form form); /// Is this a combining char? static bool isCombiningChar(char_type c); + /** + * Is this a known char from some language? + * If \p preamble is empty and code point \p c is known to belong + * to a supported script, true is returned and \p preamble is set + * to the corresponding entry in the unicodesymbols file. + * If \p preamble is not empty, a check is made whether code point + * \p c is a known character matching the preamble entry. + */ + static bool isKnownScriptChar(char_type const c, std::string & preamble); /** * Add the preamble snippet needed for the output of \p c to * \p features.