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