lib
symboltable.cc00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <qfile.h>
00022 #include <qregexp.h>
00023 #include <qstring.h>
00024 #include <qstringlist.h>
00025 #include <qtextstream.h>
00026
00027 #include <kconfig.h>
00028 #include <kdebug.h>
00029 #include <kglobal.h>
00030 #include <klocale.h>
00031 #include <kstandarddirs.h>
00032
00033 #include "symboltable.h"
00034 #include "contextstyle.h"
00035
00036
00037 KFORMULA_NAMESPACE_BEGIN
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 QChar SymbolFontHelper::unicodeFromSymbolFont( QChar pos ) const
00050 {
00051 if ( compatibility.contains( pos ) ) {
00052 return compatibility[ pos.latin1() ];
00053 }
00054 return QChar::null;
00055 }
00056
00057
00058 SymbolTable::SymbolTable()
00059 {
00060 }
00061
00062
00063 void SymbolTable::init( ContextStyle* )
00064 {
00065 normalChars.clear();
00066 boldChars.clear();
00067 italicChars.clear();
00068 boldItalicChars.clear();
00069 entries.clear();
00070 fontTable.clear();
00071 }
00072
00073
00074 void SymbolTable::initFont( const InternFontTable* table,
00075 const char* fontname,
00076 const NameTable& tempNames )
00077 {
00078 uint fontnr = fontTable.size();
00079 fontTable.push_back( QFont( fontname ) );
00080 for ( uint i = 0; table[ i ].unicode != 0; ++i ) {
00081 QChar uc = table[ i ].unicode;
00082 unicodeTable( table[ i ].style )[ uc ] =
00083 CharTableEntry( table[ i ].cl,
00084 static_cast<char>( fontnr ),
00085 table[ i ].pos );
00086
00087 if ( tempNames.contains( uc ) ) {
00088 entries[ tempNames[uc] ] = uc;
00089 names[uc] = tempNames[uc];
00090 }
00091 }
00092 }
00093
00094
00095 bool SymbolTable::contains(QString name) const
00096 {
00097 return entries.find( name ) != entries.end();
00098 }
00099
00100 QChar SymbolTable::unicode(QString name) const
00101 {
00102 return entries[ name ];
00103 }
00104
00105
00106 QString SymbolTable::name( QChar symbol ) const
00107 {
00108 return names[symbol];
00109 }
00110
00111
00112 const CharTableEntry& SymbolTable::entry( QChar symbol, CharStyle style ) const
00113 {
00114 const UnicodeTable& table = unicodeTable( style );
00115 if ( table.contains( symbol ) ) {
00116 return table[symbol];
00117 }
00118 if ( ( style != normalChar ) && ( style != anyChar ) ) {
00119 if ( normalChars.contains( symbol ) ) {
00120 return normalChars[symbol];
00121 }
00122 }
00123 if ( style != boldChar ) {
00124 if ( boldChars.contains( symbol ) ) {
00125 return boldChars[symbol];
00126 }
00127 }
00128 if ( style != italicChar ) {
00129 if ( italicChars.contains( symbol ) ) {
00130 return italicChars[symbol];
00131 }
00132 }
00133 if ( style != boldItalicChar ) {
00134 if ( boldItalicChars.contains( symbol ) ) {
00135 return boldItalicChars[symbol];
00136 }
00137 }
00138 return dummyEntry;
00139 }
00140
00141
00142 QFont SymbolTable::font( QChar symbol, CharStyle style ) const
00143 {
00144 char f = entry( symbol, style ).font();
00145 return fontTable[f];
00146 }
00147
00148
00149 uchar SymbolTable::character( QChar symbol, CharStyle style ) const
00150 {
00151 return entry( symbol, style ).character();
00152 }
00153
00154
00155 CharClass SymbolTable::charClass( QChar symbol, CharStyle style ) const
00156 {
00157 return entry( symbol, style ).charClass();
00158 }
00159
00160
00161 QChar SymbolTable::unicodeFromSymbolFont( QChar pos ) const
00162 {
00163 return symbolFontHelper.unicodeFromSymbolFont( pos );
00164 }
00165
00166
00167 QString SymbolTable::greekLetters() const
00168 {
00169 return symbolFontHelper.greekLetters();
00170 }
00171
00172
00173 QStringList SymbolTable::allNames() const
00174 {
00175 QStringList list;
00176
00177 for ( EntryTable::const_iterator iter = entries.begin();
00178 iter != entries.end();
00179 ++iter ) {
00180 if ( QChar( character( iter.data() ) ) != QChar::null ) {
00181 list.append( iter.key() );
00182 }
00183 }
00184 list.sort();
00185 return list;
00186 }
00187
00188
00189 bool SymbolTable::inTable( QChar ch, CharStyle style ) const
00190 {
00191 if ( style == anyChar ) {
00192 return normalChars.contains( ch ) ||
00193 boldChars.contains( ch ) ||
00194 italicChars.contains( ch ) ||
00195 boldItalicChars.contains( ch );
00196 }
00197 return unicodeTable( style ).contains( ch );
00198 }
00199
00200
00201 SymbolTable::UnicodeTable& SymbolTable::unicodeTable( CharStyle style )
00202 {
00203 switch ( style ) {
00204 case boldChar: return boldChars;
00205 case italicChar: return italicChars;
00206 case boldItalicChar: return boldItalicChars;
00207 default: break;
00208 }
00209 return normalChars;
00210 }
00211
00212 const SymbolTable::UnicodeTable& SymbolTable::unicodeTable( CharStyle style ) const
00213 {
00214 switch ( style ) {
00215 case boldChar: return boldChars;
00216 case italicChar: return italicChars;
00217 case boldItalicChar: return boldItalicChars;
00218 default: break;
00219 }
00220 return normalChars;
00221 }
00222
00223
00224 KFORMULA_NAMESPACE_END
|