]> git.lyx.org Git - lyx.git/blob - src/encoding.h
* InsetMathNest.C (handleFont): avoid crash on undo when
[lyx.git] / src / encoding.h
1 // -*- C++ -*-
2 /**
3  * \file encoding.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Lars Gullik Bjønnes
8  * \author Jean-Marc Lasgouttes
9  *
10  * Full author contact details are available in file CREDITS.
11  */
12
13 #ifndef ENCODING_H
14 #define ENCODING_H
15
16 #include <map>
17 #include <string>
18
19 #include "support/types.h"
20
21 namespace lyx {
22
23 namespace support { class FileName; }
24
25 ///
26 class Encoding {
27 public:
28         ///
29         Encoding() {}
30         ///
31         Encoding(std::string const & n, std::string const & l,
32                  std::string const & i)
33                 : Name_(n), LatexName_(l), iconvName_(i)
34         {
35         }
36         ///
37         std::string const & name() const { return Name_; }
38         ///
39         std::string const & latexName() const { return LatexName_; }
40         ///
41         std::string const & iconvName() const { return iconvName_; }
42 private:
43         ///
44         std::string Name_;
45         ///
46         std::string LatexName_;
47         ///
48         std::string iconvName_;
49 };
50
51 class Encodings {
52 public:
53         ///
54         typedef std::map<std::string, Encoding> EncodingList;
55         /// iterator to iterate over all encodings.
56         /// We hide the fact that our encoding list is implemented as a map.
57         class const_iterator : public EncodingList::const_iterator {
58                 typedef EncodingList::const_iterator base;
59         public:
60                 const_iterator() : base() {}
61                 const_iterator(base const & b) : base(b) {}
62                 Encoding const & operator*() const { return base::operator*().second; }
63                 Encoding const * operator->() const { return &(base::operator*().second); }
64         };
65         ///
66         Encodings();
67         ///
68         void read(support::FileName const & filename);
69         /// Get encoding from LyX name \p name
70         Encoding const * getFromLyXName(std::string const & name) const;
71         /// Get encoding from LaTeX name \p name
72         Encoding const * getFromLaTeXName(std::string const & name) const;
73
74         ///
75         const_iterator begin() const { return encodinglist.begin(); }
76         ///
77         const_iterator end() const { return encodinglist.end(); }
78
79         ///
80         enum Letter_Form {
81                 ///
82                 FORM_ISOLATED,
83                 ///
84                 FORM_FINAL,
85                 ///
86                 FORM_INITIAL,
87                 ///
88                 FORM_MEDIAL
89         };
90         ///
91         static bool isComposeChar_hebrew(char_type c);
92         ///
93         static bool isComposeChar_arabic(char_type c);
94         ///
95         static bool is_arabic_special(char_type c);
96         ///
97         static bool is_arabic(char_type c);
98         ///
99         static char_type transformChar(char_type c, Letter_Form form);
100
101 private:
102         ///
103         EncodingList encodinglist;
104 };
105
106 extern Encodings encodings;
107
108
109 } // namespace lyx
110
111 #endif