X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FEncoding.h;h=00d0106b543fc36c1925d6e61e9b04e4d4c8fb60;hb=858c12c6bb850b7ed7a708e3e66fd58ba6f06cb9;hp=5f788f936502c26df7db74b91a2b8229a83d1a0a;hpb=c6c07d28ae99a0dee5fc4b76aae2827d3d09cf93;p=lyx.git diff --git a/src/Encoding.h b/src/Encoding.h index 5f788f9365..00d0106b54 100644 --- a/src/Encoding.h +++ b/src/Encoding.h @@ -14,6 +14,7 @@ #define ENCODING_H #include "support/docstring.h" +#include "support/trivstring.h" #include "support/types.h" #include @@ -29,7 +30,7 @@ public: EncodingException(char_type c); virtual ~EncodingException() throw() {} virtual const char * what() const throw(); - + char_type failed_char; int par_id; pos_type pos; @@ -57,11 +58,11 @@ enum CharInfoFlags { /// Information about a single UCS4 character class CharInfo { public: - CharInfo() {} + CharInfo() : flags_(0) {} CharInfo( - docstring const textcommand, docstring const mathcommand, - std::string const textpreamble, std::string const mathpreamble, - std::string const tipashortcut, unsigned int flags); + docstring const & textcommand, docstring const & mathcommand, + std::string const & textpreamble, std::string const & mathpreamble, + std::string const & tipashortcut, unsigned int flags); // we assume that at least one command is nonempty when using unicodesymbols bool isUnicodeSymbol() const { return !textcommand_.empty() || !mathcommand_.empty(); } /// LaTeX command (text mode) for this character @@ -94,21 +95,25 @@ public: /// private: /// LaTeX command (text mode) for this character - docstring textcommand_; + trivdocstring textcommand_; /// LaTeX command (math mode) for this character - docstring mathcommand_; + trivdocstring mathcommand_; /// Needed LaTeX preamble (or feature) for text mode - std::string textpreamble_; + trivstring textpreamble_; /// Needed LaTeX preamble (or feature) for math mode - std::string mathpreamble_; + trivstring mathpreamble_; /// TIPA shortcut - std::string tipashortcut_; + trivstring tipashortcut_; /// feature flags unsigned int flags_; }; -/// +/** + * An encoding as defined in lib/encodings. + * All const methods are thread-safe, so the caller does not need any locking. + * This property must be kept when changing the class. + */ class Encoding { public: /// Which LaTeX package handles this encoding? @@ -121,7 +126,7 @@ public: /// Represent any of the above packages static int const any; /// - Encoding() {} + Encoding() : fixedwidth_(true), unsafe_(false), complete_(false) {} /// Encoding(std::string const & n, std::string const & l, std::string const & g, std::string const & i, @@ -129,13 +134,13 @@ public: /// void init() const; /// - std::string const & name() const { return name_; } + std::string const name() const { return name_; } /// - std::string const & latexName() const { return latexName_; } + std::string const latexName() const { return latexName_; } /// - std::string const & guiName() const { return guiName_; } + std::string const guiName() const { return guiName_; } /// - std::string const & iconvName() const { return iconvName_; } + std::string const iconvName() const { return iconvName_; } /// bool hasFixedWidth() const { return fixedwidth_; } /// @@ -164,7 +169,7 @@ public: * \p dryrun specifies whether the string is used within source * preview (which yields a special warning). */ - std::pair latexString(docstring const input, + std::pair latexString(docstring const & input, bool dryrun = false) const; /// Which LaTeX package handles this encoding? Package package() const { return package_; } @@ -178,13 +183,13 @@ private: */ bool isForced(char_type c) const; /// - std::string name_; + trivstring name_; /// - std::string latexName_; + trivstring latexName_; /// - std::string guiName_; + trivstring guiName_; /// - std::string iconvName_; + trivstring iconvName_; /// Is this a fixed width encoding? bool fixedwidth_; /// Is this encoding TeX unsafe, e.g. control characters like {, } @@ -194,13 +199,13 @@ private: typedef std::set CharSet; /// Set of UCS4 characters that we can encode (for singlebyte /// encodings only) - mutable CharSet encodable_; + CharSet encodable_; /// Set of UCS4 characters that we can't encode CharSet const * forced_; /// All code points below this are encodable. This helps us to avoid /// lokup of ASCII characters in encodable_ and gives about 1 sec /// speedup on export of the Userguide. - mutable char_type start_encodable_; + char_type start_encodable_; /// Which LaTeX package handles this encoding? Package package_; /** @@ -210,7 +215,7 @@ private: * This is needed especially for the multibyte encodings, if we * complete all encoding info on startup it takes 2-3 minutes. */ - mutable bool complete_; + bool complete_; }; class Encodings { @@ -222,7 +227,7 @@ public: /// typedef std::set MathSymbolSet; /// - typedef std::map EncodingList; + typedef std::map EncodingList; /// iterator to iterate over all encodings. /// We hide the fact that our encoding list is implemented as a map. class const_iterator : public EncodingList::const_iterator { @@ -255,29 +260,8 @@ public: /// const_iterator end() const { return encodinglist.end(); } - /// - enum LetterForm { - /// - FORM_ISOLATED, - /// - FORM_FINAL, - /// - FORM_INITIAL, - /// - FORM_MEDIAL - }; - /// - static bool isHebrewComposeChar(char_type c); - /// - static bool isArabicComposeChar(char_type c); - /// - static bool isArabicSpecialChar(char_type c); - /// - static bool isArabicChar(char_type c); /// Accessor for the unicode information table. static CharInfo const & unicodeCharInfo(char_type c); - /// - static char_type transformChar(char_type c, LetterForm form); /// Is this a combining char? static bool isCombiningChar(char_type c); /// Return the TIPA shortcut