]> git.lyx.org Git - lyx.git/blob - src/encoding.h
d4c16709338776b8fcd4d60ac805e9f8af2f4b04
[lyx.git] / src / encoding.h
1 // -*- C++ -*-
2 /* This file is part of
3  * ====================================================== 
4  * 
5  *           LyX, The Document Processor
6  *       
7  *           Copyright 1995 Matthias Ettrich
8  *           Copyright 1995-2000 The LyX Team.
9  *
10  * ====================================================== */
11
12 #ifndef ENCODING_H
13 #define ENCODING_H
14
15 #ifdef __GNUG__
16 #pragma interface
17 #endif
18
19 #include "LString.h"
20 #include "lyxrc.h"
21
22 typedef unsigned short int Uchar;
23
24 class Encoding {
25 public:
26         ///
27         enum Letter_Form {
28                 FORM_ISOLATED,
29                 FORM_FINAL,
30                 FORM_INITIAL,
31                 FORM_MEDIAL
32         };
33         ///
34         Encoding(string const & l, Uchar const * e)
35                 : LatexName_(l) , encoding_table(e) {}
36         ///
37         string const & LatexName() const {
38                 return LatexName_;
39         }
40         ///
41         Uchar ucs(unsigned char c) const {
42                 return encoding_table[c];
43         }
44         ///
45         static
46         bool IsComposeChar_hebrew(unsigned char c);
47         ///
48         static
49         bool IsComposeChar_arabic(unsigned char c);
50         ///
51         static
52         bool is_arabic(unsigned char c);
53         ///
54         static
55         unsigned char TransformChar(unsigned char c, Letter_Form form);
56 private:
57         ///
58         string LatexName_;
59         ///
60         Uchar const * encoding_table;
61 };
62
63
64 extern Encoding iso8859_1;
65 extern Encoding iso8859_2;
66 extern Encoding iso8859_3;
67 extern Encoding iso8859_4;
68 extern Encoding iso8859_6;
69 extern Encoding iso8859_7;
70 extern Encoding iso8859_9;
71 extern Encoding cp1255;
72 extern Encoding koi8;
73 extern Encoding symbol_encoding;
74
75 inline
76 bool Encoding::IsComposeChar_hebrew(unsigned char c)
77 {
78         return c <= 0xd2 && c >= 0xc0 &&
79                 c != 0xce && c != 0xd0;
80 }
81
82
83 inline
84 bool Encoding::IsComposeChar_arabic(unsigned char c)
85 {
86         return c >= 0xeb && c <= 0xf2;
87 }
88
89
90 extern unsigned char arabic_table[][2];
91 extern unsigned char arabic_table2[][4];
92 unsigned char const arabic_start = 0xc1;
93
94
95 inline
96 bool Encoding::is_arabic(unsigned char c)
97 {
98         return c >= arabic_start && arabic_table[c-arabic_start][0];
99 }
100
101
102 inline
103 unsigned char Encoding::TransformChar(unsigned char c, Encoding::Letter_Form form)
104 {
105         if (!is_arabic(c))
106                 return c;
107
108         if (lyxrc.font_norm == "iso10646-1")
109                 return arabic_table2[c-arabic_start][form];
110         else
111                 return arabic_table[c-arabic_start][form >> 1];
112 }
113
114
115 #endif