source: vendor/trolltech/current/src/codecs/qfonthkcodec.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: qfonthkcodec.cpp 2 2005-11-16 15:49:26Z dmik $
3**
4** Hong Kong Font utilities for X11
5**
6** Created : 20020902
7**
8** Copyright (C) 1992-2002 Trolltech AS. All rights reserved.
9**
10** This file is part of the kernel 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 QFontBig5hkscsCodec::heuristicContentMatch(const char *, int) const
47{
48 return 0;
49}
50
51
52int QFontBig5hkscsCodec::heuristicNameMatch(const char* hint) const
53{
54 //qDebug("QFontBig5hkscsCodec::heuristicNameMatch(const char* hint = \"%s\")", hint);
55 return ( qstricmp(hint, "big5hkscs-0") == 0 ||
56 qstricmp(hint, "hkscs-1") == 0 )
57 ? 13 : 0;
58}
59
60
61QFontBig5hkscsCodec::QFontBig5hkscsCodec()
62{
63 //qDebug("QFontBig5hkscsCodec::QFontBig5hkscsCodec()");
64}
65
66
67const char* QFontBig5hkscsCodec::name() const
68{
69 //qDebug("QFontBig5hkscsCodec::name() = \"big5hkscs-0\"");
70 return "big5hkscs-0";
71}
72
73
74int QFontBig5hkscsCodec::mibEnum() const
75{
76 //qDebug("QFontBig5hkscsCodec::mibEnum() = -2101");
77 return -2101;
78}
79
80
81QString QFontBig5hkscsCodec::toUnicode(const char* /*chars*/, int /*len*/) const
82{
83 return QString::null;
84}
85
86unsigned short
87QFontBig5hkscsCodec::characterFromUnicode(const QString &str, int pos) const
88{
89 uchar c[2];
90 if (qt_UnicodeToBig5hkscs((str.unicode() + pos)->unicode(), c) == 2)
91 return (c[0] << 8) + c[1];
92 return 0;
93}
94
95QCString QFontBig5hkscsCodec::fromUnicode(const QString& uc, int& lenInOut ) const
96{
97 //qDebug("QFontBig5hkscsCodec::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 *rdata++ = c[0];
116 *rdata++ = c[1];
117 } else {
118 //white square
119 *rdata++ = 0xa1;
120 *rdata++ = 0xbc;
121 }
122 }
123 lenInOut *=2;
124 return result;
125}
126
127
128/*! \internal */
129void QFontBig5hkscsCodec::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 // Big5-HKSCS
138 *out = (c[0] << 8) | c[1];
139 } else {
140 // Unknown char
141 *out = 0;
142 }
143
144 ++in;
145 ++out;
146 }
147}
148
149bool QFontBig5hkscsCodec::canEncode( QChar ch ) const
150{
151 //qDebug("QFontBig5hkscsCodec::canEncode( QChar ch = %02X%02X )", ch.row(), ch.cell());
152 uchar c[2];
153 return ( qt_UnicodeToBig5hkscs( ch.unicode(), c ) == 2 );
154}
155
156#endif // QT_NO_BIG_CODECS
157#endif // QT_NO_CODECS
Note: See TracBrowser for help on using the repository browser.