X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FEncoding.h;h=33919281d1322c7d42061c9c7757c6774c83a106;hb=f7418758ab6501171f732552c4f5d8eec3d11fe8;hp=fb36e726511736be548ee43b7d185785748bb7c3;hpb=2eea1590b1016d873608e6b86d2a8dd08f01ed65;p=lyx.git diff --git a/src/Encoding.h b/src/Encoding.h index fb36e72651..33919281d1 100644 --- a/src/Encoding.h +++ b/src/Encoding.h @@ -24,9 +24,6 @@ namespace lyx { namespace support { class FileName; } -class Buffer; -class LaTeXFeatures; - class EncodingException : public std::exception { public: EncodingException(char_type c); @@ -39,6 +36,78 @@ public: }; +enum CharInfoFlags { + /// + CharInfoCombining = 1, + /// + CharInfoTextFeature = 2, + /// + CharInfoMathFeature = 4, + /// + CharInfoForce = 8, + /// + CharInfoTextNoTermination = 16, + /// + CharInfoMathNoTermination = 32, + /// + CharInfoForceSelected = 64, +}; + + +/// Information about a single UCS4 character +class CharInfo { +public: + 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); + // 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 + docstring const textcommand() const { return textcommand_; } + /// LaTeX command (math mode) for this character + docstring mathcommand() const { return mathcommand_; } + /// Needed LaTeX preamble (or feature) for text mode + std::string textpreamble() const { return textpreamble_; } + /// Needed LaTeX preamble (or feature) for math mode + std::string mathpreamble() const { return mathpreamble_; } + /// Is this a combining character? + bool combining() const { return flags_ & CharInfoCombining ? true : false; } + /// Is \c textpreamble a feature known by LaTeXFeatures, or a raw LaTeX + /// command? + bool textfeature() const { return flags_ & CharInfoTextFeature ? true : false; } + /// Is \c mathpreamble a feature known by LaTeXFeatures, or a raw LaTeX + /// command? + bool mathfeature() const { return flags_ & CharInfoMathFeature ? true : false; } + /// Always force the LaTeX command, even if the encoding contains + /// this character? + bool force() const { return flags_ & CharInfoForce ? true : false; } + /// Force the LaTeX command for some encodings? + bool forceselected() const { return flags_ & CharInfoForceSelected ? true : false; } + /// TIPA shortcut + std::string const tipashortcut() const { return tipashortcut_; } + /// \c textcommand needs no termination (such as {} or space). + bool textnotermination() const { return flags_ & CharInfoTextNoTermination ? true : false; } + /// \c mathcommand needs no termination (such as {} or space). + bool mathnotermination() const { return flags_ & CharInfoMathNoTermination ? true : false; } + /// +private: + /// LaTeX command (text mode) for this character + docstring textcommand_; + /// LaTeX command (math mode) for this character + docstring mathcommand_; + /// Needed LaTeX preamble (or feature) for text mode + std::string textpreamble_; + /// Needed LaTeX preamble (or feature) for math mode + std::string mathpreamble_; + /// TIPA shortcut + std::string tipashortcut_; + /// feature flags + unsigned int flags_; +}; + + /// class Encoding { public: @@ -50,9 +119,9 @@ public: japanese = 8 }; /// Represent any of the above packages - static int const any = -1; + 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, @@ -95,7 +164,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_; } @@ -186,27 +255,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); - /// - static char_type transformChar(char_type c, LetterForm form); + /// Accessor for the unicode information table. + static CharInfo const & unicodeCharInfo(char_type c); /// Is this a combining char? static bool isCombiningChar(char_type c); /// Return the TIPA shortcut @@ -250,10 +300,6 @@ public: * Tell whether \p c is registered as a mathmode symbol. */ static bool isMathSym(char_type c) { return mathsym.count(c); } - /** - * Initialize mathcmd, textcmd, and mathsym sets. - */ - static void initUnicodeMath(Buffer const & buffer, bool for_master = true); /** * If \p c cannot be encoded in the given \p encoding, convert * it to something that LaTeX can understand in mathmode. @@ -293,16 +339,8 @@ public: static docstring fromLaTeXCommand(docstring const & cmd, int cmdtype, bool & needsTermination, docstring & rem, std::set * req = 0); - /** - * Add the preamble snippet needed for the output of \p c to - * \p features. - * This does not depend on the used encoding, since the inputenc - * package only maps the code point \p c to a command, it does not - * make this command available. - */ - static void validate(char_type c, LaTeXFeatures & features, bool for_mathed = false); -private: +protected: /// EncodingList encodinglist; ///