source: vendor/trolltech/current/src/codecs/qfonttwcodec.cpp

Last change on this file was 2, checked in by dmik, 20 years ago

Imported xplatform parts of the official release 3.3.1 from Trolltech

  • Property svn:keywords set to Id
File size: 4.3 KB
Line 
1/****************************************************************************
2** $Id: qfonttwcodec.cpp 2 2005-11-16 15:49:26Z dmik $
3**
4** Taiwan Font utilities for X11
5**
6** Created : 20010130
7**
8** Copyright (C) 1992-2002 Trolltech AS. All rights reserved.
9**
10** This file is part of the tools module of the Qt GUI Toolkit.
11**
12** This file may be distributed under the terms of the Q Public License
13** as defined by Trolltech AS of Norway and appearing in the file
14** LICENSE.QPL included in the packaging of this file.
15**
16** This file may be distributed and/or modified under the terms of the
17** GNU General Public License version 2 as published by the Free Software
18** Foundation and appearing in the file LICENSE.GPL included in the
19** packaging of this file.
20**
21** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
22** licenses may use this file in accordance with the Qt Commercial License
23** Agreement provided with the Software.
24**
25** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
26** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27**
28** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
29** information about Qt Commercial License Agreements.
30** See http://www.trolltech.com/qpl/ for QPL licensing information.
31** See http://www.trolltech.com/gpl/ for GPL licensing information.
32**
33** Contact info@trolltech.com if any conditions of this licensing are
34** not clear to you.
35**
36**********************************************************************/
37
38#include "private/qfontcodecs_p.h"
39
40#ifndef QT_NO_CODECS
41#ifndef QT_NO_BIG_CODECS
42
43extern int qt_UnicodeToBig5hkscs(uint wc, uchar *r);
44
45
46int QFontBig5Codec::heuristicContentMatch(const char *, int) const
47{
48 return 0;
49}
50
51
52int QFontBig5Codec::heuristicNameMatch(const char* hint) const
53{
54 //qDebug("QFontBig5Codec::heuristicNameMatch(const char* hint = \"%s\")", hint);
55 return ( qstricmp(hint, "big5-0") == 0 ||
56 qstricmp(hint, "big5.eten-0") == 0 )
57 ? 13 : 0;
58}
59
60
61QFontBig5Codec::QFontBig5Codec()
62{
63 //qDebug("QFontBig5Codec::QFontBig5Codec()");
64}
65
66
67const char* QFontBig5Codec::name() const
68{
69 //qDebug("QFontBig5Codec::name() = \"big5-0\"");
70 return "big5-0";
71}
72
73
74int QFontBig5Codec::mibEnum() const
75{
76 //qDebug("QFontBig5Codec::mibEnum() = -2026");
77 return -2026;
78}
79
80
81QString QFontBig5Codec::toUnicode(const char* /*chars*/, int /*len*/) const
82{
83 return QString::null;
84}
85
86unsigned short QFontBig5Codec::characterFromUnicode(const QString &str, int pos) const
87{
88 uchar c[2];
89 if (qt_UnicodeToBig5hkscs((str.unicode() + pos)->unicode(), c) == 2 &&
90 c[0] >= 0xa1 && c[0] <= 0xf9 )
91 return (c[0] << 8) + c[1];
92 return 0;
93}
94
95QCString QFontBig5Codec::fromUnicode(const QString& uc, int& lenInOut ) const
96{
97 //qDebug("QFontBig5Codec::fromUnicode(const QString& uc, int& lenInOut = %d)", lenInOut);
98 QCString result(lenInOut * 2 + 1);
99 uchar *rdata = (uchar *) result.data();
100 const QChar *ucp = uc.unicode();
101
102 for ( int i = 0; i < lenInOut; i++ ) {
103 QChar ch(*ucp++);
104 uchar c[2];
105
106#if 0
107 if ( ch.row() == 0) {
108 if ( ch.cell() == ' ' )
109 ch = QChar( 0x3000 );
110 else if ( ch.cell() > ' ' && ch.cell() < 127 )
111 ch = QChar( ch.cell()-' ', 255 );
112 }
113#endif
114 if ( qt_UnicodeToBig5hkscs( ch.unicode(), c ) == 2 &&
115 c[0] >= 0xa1 && c[0] <= 0xf9 ) {
116 *rdata++ = c[0];
117 *rdata++ = c[1];
118 } else {
119 //white square
120 *rdata++ = 0xa1;
121 *rdata++ = 0xbc;
122 }
123 }
124 lenInOut *=2;
125 return result;
126}
127
128/*! \internal */
129void QFontBig5Codec::fromUnicode(const QChar *in, unsigned short *out, int length) const
130{
131 uchar c[2];
132 while (length--) {
133 if ( in->row() == 0x00 && in->cell() < 0x80 ) {
134 // ASCII
135 *out = in->cell();
136 } else if ( qt_UnicodeToBig5hkscs( in->unicode(), c ) == 2
137 && c[0] >= 0xa1 && c[0] <= 0xf9 ) {
138 // Big5-ETen
139 *out = (c[0] << 8) | c[1];
140 } else {
141 // Unknown char
142 *out = 0;
143 }
144
145 ++in;
146 ++out;
147 }
148}
149
150bool QFontBig5Codec::canEncode( QChar ch ) const
151{
152 //qDebug("QFontBig5Codec::canEncode( QChar ch = %02X%02X )", ch.row(), ch.cell());
153 uchar c[2];
154 return ( qt_UnicodeToBig5hkscs( ch.unicode(), c ) == 2 &&
155 c[0] >= 0xa1 && c[0] <= 0xf9 );
156}
157
158#endif // QT_NO_BIG_CODECS
159#endif // QT_NO_CODECS
Note: See TracBrowser for help on using the repository browser.