X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fencoding.h;h=51d105ca258bf1b93448f0ace406f31f36d11e70;hb=7338f3b980d4dc5793ff80be814b7a74e1c72274;hp=4f21877e5cf530357a76d8063012549c65729621;hpb=b51e368b2b3e3ddd29b3dbcdb9b07a1d911188fb;p=lyx.git diff --git a/src/encoding.h b/src/encoding.h index 4f21877e5c..51d105ca25 100644 --- a/src/encoding.h +++ b/src/encoding.h @@ -1,13 +1,14 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. +/** + * \file encoding.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * ====================================================== */ + * \author Lars Gullik Bjønnes + * \author Jean-Marc Lasgouttes + * + * Full author contact details are available in file CREDITS. + */ #ifndef ENCODING_H #define ENCODING_H @@ -15,20 +16,26 @@ #include "LString.h" #include "lyxrc.h" +#include + +/// typedef unsigned short int Uchar; +/// class Encoding { public: /// - enum Letter_Form { - FORM_ISOLATED, - FORM_FINAL, - FORM_INITIAL, - FORM_MEDIAL - }; + Encoding() {} + /// + Encoding(string const & n, string const & l, Uchar const * e) + : Name_(n), LatexName_(l) { + for (int i = 0; i < 256; ++i) + encoding_table[i] = e[i]; + } /// - Encoding(string const & l, Uchar const * e) - : LatexName_(l) , encoding_table(e) {} + string const & Name() const { + return Name_; + } /// string const & LatexName() const { return LatexName_; @@ -37,6 +44,43 @@ public: Uchar ucs(unsigned char c) const { return encoding_table[c]; } +private: + /// + string Name_; + /// + string LatexName_; + /// + Uchar encoding_table[256]; +}; + +extern Encoding symbol_encoding; + +class Encodings { +public: + /// + typedef std::map EncodingList; + /// + Encodings(); + /// + void read(string const & filename); + /// + Encoding const * getEncoding(string const & encoding) const; + /// + Encoding const * symbol_encoding() { + return &symbol_encoding_; + } + + /// + enum Letter_Form { + /// + FORM_ISOLATED, + /// + FORM_FINAL, + /// + FORM_INITIAL, + /// + FORM_MEDIAL + }; /// static bool IsComposeChar_hebrew(unsigned char c); @@ -45,65 +89,21 @@ public: bool IsComposeChar_arabic(unsigned char c); /// static + bool is_arabic_special(unsigned char c); + /// + static bool is_arabic(unsigned char c); /// static unsigned char TransformChar(unsigned char c, Letter_Form form); + private: /// - string LatexName_; + EncodingList encodinglist; /// - Uchar const * encoding_table; + Encoding symbol_encoding_; }; - -extern Encoding iso8859_1; -extern Encoding iso8859_2; -extern Encoding iso8859_4; -extern Encoding iso8859_6; -extern Encoding iso8859_7; -extern Encoding cp1255; -extern Encoding koi8; - - -inline -bool Encoding::IsComposeChar_hebrew(unsigned char c) -{ - return c <= 0xd2 && c >= 0xc0 && - c != 0xce && c != 0xd0; -} - - -inline -bool Encoding::IsComposeChar_arabic(unsigned char c) -{ - return c >= 0xeb && c <= 0xf2; -} - - -extern unsigned char arabic_table[][2]; -extern unsigned char arabic_table2[][4]; -unsigned char const arabic_start = 0xc1; - - -inline -bool Encoding::is_arabic(unsigned char c) -{ - return c >= arabic_start && arabic_table[c-arabic_start][0]; -} - - -inline -unsigned char Encoding::TransformChar(unsigned char c, Encoding::Letter_Form form) -{ - if (!is_arabic(c)) - return c; - - if (lyxrc.font_norm == "iso10646-1") - return arabic_table2[c-arabic_start][form]; - else - return arabic_table[c-arabic_start][form >> 1]; -} - +extern Encodings encodings; #endif