/* This file is part of the KDE project Copyright (C) 2001 Andrea Rizzi Ulrich Kuettler Copyright (C) 2006 Alfredo Beaumont Sainz This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include "symboltable.h" #include "contextstyle.h" #include "unicodetable.cc" KFORMULA_NAMESPACE_BEGIN #include "symbolfontmapping.cc" SymbolFontHelper::SymbolFontHelper() : greek("abgdezhqiklmnxpvrstufjcywGDTQLXPSUFYVW") { for ( uint i = 0; symbolMap[ i ].tqunicode != 0; i++ ) { compatibility[ symbolMap[ i ].pos ] = symbolMap[ i ].tqunicode; } } TQChar SymbolFontHelper::tqunicodeFromSymbolFont( TQChar pos ) const { if ( compatibility.tqcontains( pos ) ) { return compatibility[ pos.latin1() ]; } return TQChar::null; } SymbolTable::SymbolTable() { } void SymbolTable::init( const TQFont& font ) { backupFont = font; for ( int i=0; operatorTable[i].tqunicode != 0; ++i ) { names[TQChar( operatorTable[i].tqunicode )] = get_name( operatorTable[i] ); entries[get_name( operatorTable[i] )] = TQChar( operatorTable[i].tqunicode ); } for ( int i=0; arrowTable[i].tqunicode != 0; ++i ) { names[TQChar( arrowTable[i].tqunicode )] = get_name( arrowTable[i] ); entries[get_name( arrowTable[i] )] = TQChar( arrowTable[i].tqunicode ); } for ( int i=0; greekTable[i].tqunicode != 0; ++i ) { names[TQChar( greekTable[i].tqunicode )] = get_name( greekTable[i] ); entries[get_name( greekTable[i] )] = TQChar( greekTable[i].tqunicode ); } } bool SymbolTable::tqcontains(TQString name) const { return entries.tqfind( name ) != entries.end(); } TQChar SymbolTable::tqunicode(TQString name) const { return entries[ name ]; } TQString SymbolTable::name( TQChar symbol ) const { return names[symbol]; } TQFont SymbolTable::font( TQChar symbol, const TQFont& f ) const { TQFontMetrics fm( f ); if ( fm.inFont( symbol ) ) { return f; } return TQFont("Arev Sans"); } CharClass SymbolTable::charClass( TQChar symbol ) const { return ORDINARY; // FIXME // return entry( symbol, style ).charClass(); } TQChar SymbolTable::tqunicodeFromSymbolFont( TQChar pos ) const { return symbolFontHelper.tqunicodeFromSymbolFont( pos ); } TQString SymbolTable::greekLetters() const { return symbolFontHelper.greekLetters(); } TQStringList SymbolTable::allNames() const { TQStringList list; for ( int i=0; operatorTable[i].tqunicode != 0; ++i ) { list.append( get_name( operatorTable[i] )); } for ( int i=0; arrowTable[i].tqunicode != 0; ++i ) { list.append( get_name( arrowTable[i] )); } for ( int i=0; greekTable[i].tqunicode != 0; ++i ) { list.append( get_name( greekTable[i] ) ); } return list; } TQString SymbolTable::get_name( struct UnicodeNameTable entry ) const { if ( !*entry.name ) { return "U" + TQString( "%1" ).tqarg( entry.tqunicode, 4, 16 ).upper(); } return entry.name; } KFORMULA_NAMESPACE_END