140e58f91712f13c75e9837dc1026e446fbe2d92
[WebKit-https.git] / JavaScriptCore / wtf / unicode / qt4 / UnicodeQt4.h
1 // -*- c-basic-offset: 2 -*-
2 /*
3  *  This file is part of the KDE libraries
4  *  Copyright (C) 2006 George Staikos <staikos@kde.org>
5  *  Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com>
6  *
7  *  This library is free software; you can redistribute it and/or
8  *  modify it under the terms of the GNU Library General Public
9  *  License as published by the Free Software Foundation; either
10  *  version 2 of the License, or (at your option) any later version.
11  *
12  *  This library is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  *  Library General Public License for more details.
16  *
17  *  You should have received a copy of the GNU Library General Public License
18  *  along with this library; see the file COPYING.LIB.  If not, write to
19  *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  *  Boston, MA 02110-1301, USA.
21  *
22  */
23
24 #ifndef KJS_UNICODE_QT4_H
25 #define KJS_UNICODE_QT4_H
26
27 #include <QChar>
28
29 #include "../UnicodeCategory.h"
30
31 namespace KXMLCore {
32   namespace Unicode {
33     inline int toLower(uint16_t* str, int strLength, uint16_t*& destIfNeeded)
34     {
35       destIfNeeded = 0;
36
37       for (int i = 0; i < strLength; ++i)
38         str[i] = QChar(str[i]).toLower().unicode();
39
40       return strLength;
41     }
42
43     inline int toUpper(uint16_t* str, int strLength, uint16_t*& destIfNeeded)
44     {
45       destIfNeeded = 0;
46
47       for (int i = 0; i < strLength; ++i)
48         str[i] = QChar(str[i]).toUpper().unicode();
49
50       return strLength;
51     }
52
53     inline bool isFormatChar(int32_t c)
54     {
55       return (c & 0xFFFF == 0) && (QChar(c).category() == QChar::Other_Format);
56     }
57
58     inline bool isSeparatorSpace(int32_t c)
59     {
60       return (c & 0xFFFF == 0) && (QChar(c).category() == QChar::Separator_Space);
61     }
62
63     inline CharCategory category(int32_t c)
64     {
65       // FIXME: implement support for non-BMP code points
66       if (c & 0xFFFF != 0)
67         return NoCategory;
68         
69       switch (QChar((unsigned short)c).category()) {
70         case QChar::Mark_NonSpacing:
71           return Mark_NonSpacing;
72         case QChar::Mark_SpacingCombining:
73           return Mark_SpacingCombining;
74         case QChar::Mark_Enclosing:
75           return Mark_Enclosing;
76         case QChar::Number_DecimalDigit:
77           return Number_DecimalDigit;
78         case QChar::Number_Letter:
79           return Number_Letter;
80         case QChar::Number_Other:
81           return Number_Other;
82         case QChar::Separator_Space:
83           return Separator_Space;
84         case QChar::Separator_Line:
85           return Separator_Line;
86         case QChar::Separator_Paragraph:
87           return Separator_Paragraph;
88         case QChar::Other_Control:
89           return Other_Control;
90         case QChar::Other_Format:
91           return Other_Format;
92         case QChar::Other_Surrogate:
93           return Other_Surrogate;
94         case QChar::Other_PrivateUse:
95           return Other_PrivateUse;
96         case QChar::Other_NotAssigned:
97           return Other_NotAssigned;
98         case QChar::Letter_Uppercase:
99           return Letter_Uppercase;
100         case QChar::Letter_Lowercase:
101           return Letter_Lowercase;
102         case QChar::Letter_Titlecase:
103           return Letter_Titlecase;
104         case QChar::Letter_Modifier:
105           return Letter_Modifier;
106         case QChar::Letter_Other:
107           return Letter_Other;
108         case QChar::Punctuation_Connector:
109           return Punctuation_Connector;
110         case QChar::Punctuation_Dash:
111           return Punctuation_Dash;
112         case QChar::Punctuation_Open:
113           return Punctuation_Open;
114         case QChar::Punctuation_Close:
115           return Punctuation_Close;
116         case QChar::Punctuation_InitialQuote:
117           return Punctuation_InitialQuote;
118         case QChar::Punctuation_FinalQuote:
119           return Punctuation_FinalQuote;
120         case QChar::Punctuation_Other:
121           return Punctuation_Other;
122         case QChar::Symbol_Math:
123           return Symbol_Math;
124         case QChar::Symbol_Currency:
125           return Symbol_Currency;
126         case QChar::Symbol_Modifier:
127           return Symbol_Modifier;
128         case QChar::Symbol_Other:
129           return Symbol_Other;
130         default:
131           return NoCategory;
132       }
133     }
134   }
135 }
136
137 #endif
138 // vim: ts=2 sw=2 et