From d791366863cf9659a01b171ce0e727bfe2f28cdf Mon Sep 17 00:00:00 2001 From: Jens-Heiner Rechtien Date: Mon, 18 Sep 2000 16:07:07 +0000 Subject: initial import --- starmath/source/action.cxx | 128 + starmath/source/commands.src | 2714 +++++++++++ starmath/source/config.cxx | 381 ++ starmath/source/dialog.cxx | 2405 ++++++++++ starmath/source/document.cxx | 1641 +++++++ starmath/source/edit.cxx | 783 +++ starmath/source/format.cxx | 311 ++ starmath/source/makefile.mk | 163 + starmath/source/math_pch.cxx | 893 ++++ starmath/source/mathtype.cxx | 3081 ++++++++++++ starmath/source/mathtype.hxx | 203 + starmath/source/node.cxx | 2490 ++++++++++ starmath/source/parse.cxx | 2087 ++++++++ starmath/source/rect.cxx | 908 ++++ starmath/source/smdll.cxx | 166 + starmath/source/smmod.cxx | 231 + starmath/source/smres.src | 10674 +++++++++++++++++++++++++++++++++++++++++ starmath/source/symbol.cxx | 657 +++ starmath/source/toolbox.cxx | 274 ++ starmath/source/typemap.cxx | 190 + starmath/source/unomodel.cxx | 782 +++ starmath/source/utility.cxx | 651 +++ starmath/source/view.cxx | 1559 ++++++ 23 files changed, 33372 insertions(+) create mode 100644 starmath/source/action.cxx create mode 100644 starmath/source/commands.src create mode 100644 starmath/source/config.cxx create mode 100644 starmath/source/dialog.cxx create mode 100644 starmath/source/document.cxx create mode 100644 starmath/source/edit.cxx create mode 100644 starmath/source/format.cxx create mode 100644 starmath/source/makefile.mk create mode 100644 starmath/source/math_pch.cxx create mode 100644 starmath/source/mathtype.cxx create mode 100644 starmath/source/mathtype.hxx create mode 100644 starmath/source/node.cxx create mode 100644 starmath/source/parse.cxx create mode 100644 starmath/source/rect.cxx create mode 100644 starmath/source/smdll.cxx create mode 100644 starmath/source/smmod.cxx create mode 100644 starmath/source/smres.src create mode 100644 starmath/source/symbol.cxx create mode 100644 starmath/source/toolbox.cxx create mode 100644 starmath/source/typemap.cxx create mode 100644 starmath/source/unomodel.cxx create mode 100644 starmath/source/utility.cxx create mode 100644 starmath/source/view.cxx (limited to 'starmath/source') diff --git a/starmath/source/action.cxx b/starmath/source/action.cxx new file mode 100644 index 000000000000..15b052264e66 --- /dev/null +++ b/starmath/source/action.cxx @@ -0,0 +1,128 @@ +/************************************************************************* + * + * $RCSfile: action.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#include "action.hxx" +#include "smdll.hxx" +#include "document.hxx" +#include "starmath.hrc" + +SmEditAction::SmEditAction(SmDocShell *pDocSh, + const String& rOldText, + const String& rNewText) : + pDoc( pDocSh ), + aOldText( rOldText ), + aNewText( rNewText ) +{ +} + +void SmEditAction::Undo() +{ + pDoc->SetText(aOldText); +} + +void SmEditAction::Redo() +{ + pDoc->SetText(aNewText); +} + +void SmEditAction::Repeat(SmDocShell *pDocSh) +{ + pDocSh->SetText(aNewText); +} + +String SmEditAction::GetComment() const +{ + return (SmResId(RID_UNDOEDITNAME)); +} + + +SmFormatAction::SmFormatAction(SmDocShell *pDocSh, + const SmFormat& rOldFormat, + const SmFormat& rNewFormat) : + pDoc( pDocSh ), + aOldFormat( rOldFormat ), + aNewFormat( rNewFormat ) +{ +} + +void SmFormatAction::Undo() +{ + pDoc->SetFormat(aOldFormat); +} + +void SmFormatAction::Redo() +{ + pDoc->SetFormat(aNewFormat); +} + +void SmFormatAction::Repeat(SmDocShell *pDocSh) +{ + pDocSh->SetFormat(aNewFormat); +} + +String SmFormatAction::GetComment() const +{ + return (SmResId(RID_UNDOFORMATNAME)); +} + + diff --git a/starmath/source/commands.src b/starmath/source/commands.src new file mode 100644 index 000000000000..5482aef9e103 --- /dev/null +++ b/starmath/source/commands.src @@ -0,0 +1,2714 @@ +/************************************************************************* + * + * $RCSfile: commands.src,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + + +#include +#include "starmath.hrc" + + +//////////////////////////////////////////////////////////// +// +// XPolyPolygon data for some characters from StarMath font +// + +Resource RID_XPP_LINE +{ + ExtraData = + { +// Zeichen: 0x73 Font: StarMath + 29457; 512; 76; 768; 146; 0; 59; 0; + 44; 0; 83; 768; 1; 5; 146; 0; + 141; 768; 146; 0; 59; 0; 189; 0; + 59; 0; 189; 0; 141; 768; 146; 0; + 141; 768; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0x73 Font: StarMath + "\x73\x11\x02\x00\x00\x4C\x03\x00\x00\x92\x00\x00\x00\x3B\x00\x00" + "\x00\x2C\x00\x00\x00\x53\x03\x00\x00\x01\x00\x05\x00\x92\x00\x00" + "\x00\x8D\x03\x00\x00\x92\x00\x00\x00\x3B\x00\x00\x00\xBD\x00\x00" + "\x00\x3B\x00\x00\x00\xBD\x00\x00\x00\x8D\x03\x00\x00\x92\x00\x00" + "\x00\x8D\x03\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_DLINE +{ + ExtraData = + { +// Zeichen: 0x74 Font: StarMath + 29713; 512; 76; 768; 136; 0; 59; 0; + 214; 0; 78; 768; 2; 5; 51; 256; + 136; 768; 51; 256; 59; 0; 93; 256; + 59; 0; 93; 256; 136; 768; 51; 256; + 136; 768; 0; 0; 0; 1280; -30720; 0; +-30717; 0; -30720; 0; 15104; 0; -19968; 0; + 15104; 0; -19968; 0; -30717; 0; -30720; 0; +-30717; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0x74 Font: StarMath + "\x74\x11\x02\x00\x00\x4C\x03\x00\x00\x88\x00\x00\x00\x3B\x00\x00" + "\x00\xD6\x00\x00\x00\x4E\x03\x00\x00\x02\x00\x05\x00\x33\x01\x00" + "\x00\x88\x03\x00\x00\x33\x01\x00\x00\x3B\x00\x00\x00\x5D\x01\x00" + "\x00\x3B\x00\x00\x00\x5D\x01\x00\x00\x88\x03\x00\x00\x33\x01\x00" + "\x00\x88\x03\x00\x00\x00\x00\x00\x00\x00\x05\x00\x88\x00\x00\x00" + "\x88\x03\x00\x00\x88\x00\x00\x00\x3B\x00\x00\x00\xB2\x00\x00\x00" + "\x3B\x00\x00\x00\xB2\x00\x00\x00\x88\x03\x00\x00\x88\x00\x00\x00" + "\x88\x03\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_SQRT +{ + ExtraData = + { +// Zeichen: 0x87 Font: StarMath +-30959; 512; 76; 768; 26; 0; 48; 0; + 184; 256; 170; 512; 1; 10; 2; 256; + 217; 512; 97; 0; 184; 256; 37; 0; + 208; 256; 26; 0; 196; 256; 131; 0; + 155; 256; 15; 256; 153; 512; 189; 256; + 48; 0; 209; 256; 48; 0; 22; 256; + 217; 512; 2; 256; 217; 512; 0; 0; + 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0x87 Font: StarMath + "\x87\x11\x02\x00\x00\x4C\x03\x00\x00\x1A\x00\x00\x00\x30\x00\x00" + "\x00\xB8\x01\x00\x00\xAA\x02\x00\x00\x01\x00\x0A\x00\x02\x01\x00" + "\x00\xD9\x02\x00\x00\x61\x00\x00\x00\xB8\x01\x00\x00\x25\x00\x00" + "\x00\xD0\x01\x00\x00\x1A\x00\x00\x00\xC4\x01\x00\x00\x83\x00\x00" + "\x00\x9B\x01\x00\x00\x0F\x01\x00\x00\x99\x02\x00\x00\xBD\x01\x00" + "\x00\x30\x00\x00\x00\xD1\x01\x00\x00\x30\x00\x00\x00\x16\x01\x00" + "\x00\xD9\x02\x00\x00\x02\x01\x00\x00\xD9\x02\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_SQRT2 +{ + ExtraData = + { +// Zeichen: 0x89 Font: StarMath +-30447; 512; 76; 768; 26; 0; 48; 0; + 218; 0; 170; 512; 1; 10; 227; 0; + 217; 512; 74; 0; 203; 256; 35; 0; + 225; 256; 26; 0; 213; 256; 91; 0; + 176; 256; 229; 0; 156; 512; 227; 0; + 48; 0; 243; 0; 48; 0; 243; 0; + 217; 512; 227; 0; 217; 512; 0; 0; + 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0x89 Font: StarMath + "\x89\x11\x02\x00\x00\x4C\x03\x00\x00\x1A\x00\x00\x00\x30\x00\x00" + "\x00\xDA\x00\x00\x00\xAA\x02\x00\x00\x01\x00\x0A\x00\xE3\x00\x00" + "\x00\xD9\x02\x00\x00\x4A\x00\x00\x00\xCB\x01\x00\x00\x23\x00\x00" + "\x00\xE1\x01\x00\x00\x1A\x00\x00\x00\xD5\x01\x00\x00\x5B\x00\x00" + "\x00\xB0\x01\x00\x00\xE5\x00\x00\x00\x9C\x02\x00\x00\xE3\x00\x00" + "\x00\x30\x00\x00\x00\xF3\x00\x00\x00\x30\x00\x00\x00\xF3\x00\x00" + "\x00\xD9\x02\x00\x00\xE3\x00\x00\x00\xD9\x02\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_HAT +{ + ExtraData = + { +// Zeichen: 0x90 Font: StarMath +-28655; 512; 76; 768; 13; 0; 113; 0; + 7; 256; 161; 0; 1; 7; 19; 256; + 12; 256; 3; 256; 14; 256; 148; 0; + 182; 0; 32; 0; 17; 256; 13; 0; + 12; 256; 150; 0; 113; 0; 19; 256; + 12; 256; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0x90 Font: StarMath + "\x90\x11\x02\x00\x00\x4C\x03\x00\x00\x0D\x00\x00\x00\x71\x00\x00" + "\x00\x07\x01\x00\x00\xA1\x00\x00\x00\x01\x00\x07\x00\x13\x01\x00" + "\x00\x0C\x01\x00\x00\x03\x01\x00\x00\x0E\x01\x00\x00\x94\x00\x00" + "\x00\xB6\x00\x00\x00\x20\x00\x00\x00\x11\x01\x00\x00\x0D\x00\x00" + "\x00\x0C\x01\x00\x00\x96\x00\x00\x00\x71\x00\x00\x00\x13\x01\x00" + "\x00\x0C\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_TILDE +{ + ExtraData = + { +// Zeichen: 0x95 Font: StarMath +-27375; 512; 76; 768; 8; 0; 119; 0; + 8; 256; 109; 0; 1; 26; 21; 0; + 227; 0; 8; 0; 227; 0; 11; 0; + 157; 0; 37; 0; 119; 0; 86; 0; + 119; 0; 97; 0; 119; 0; 141; 0; + 140; 0; 219; 0; 177; 0; 238; 0; + 177; 0; 251; 0; 158; 0; 3; 256; + 119; 0; 15; 256; 119; 0; 15; 256; + 124; 0; 15; 256; 151; 0; 9; 256; + 175; 0; 253; 0; 194; 0; 238; 0; + 217; 0; 217; 0; 227; 0; 194; 0; + 227; 0; 177; 0; 227; 0; 131; 0; + 209; 0; 60; 0; 168; 0; 42; 0; + 168; 0; 28; 0; 189; 0; 21; 0; + 227; 0; 21; 0; 227; 0; 0; 2; + 512; 514; 2; 512; 0; 514; 2; 512; + 514; 2; 512; 0; +#ifdef NO_MORE + // Zeichen: 0x95 Font: StarMath + "\x95\x11\x02\x00\x00\x4C\x03\x00\x00\x08\x00\x00\x00\x77\x00\x00" + "\x00\x08\x01\x00\x00\x6D\x00\x00\x00\x01\x00\x1A\x00\x15\x00\x00" + "\x00\xE3\x00\x00\x00\x08\x00\x00\x00\xE3\x00\x00\x00\x0B\x00\x00" + "\x00\x9D\x00\x00\x00\x25\x00\x00\x00\x77\x00\x00\x00\x56\x00\x00" + "\x00\x77\x00\x00\x00\x61\x00\x00\x00\x77\x00\x00\x00\x8D\x00\x00" + "\x00\x8C\x00\x00\x00\xDB\x00\x00\x00\xB1\x00\x00\x00\xEE\x00\x00" + "\x00\xB1\x00\x00\x00\xFB\x00\x00\x00\x9E\x00\x00\x00\x03\x01\x00" + "\x00\x77\x00\x00\x00\x0F\x01\x00\x00\x77\x00\x00\x00\x0F\x01\x00" + "\x00\x7C\x00\x00\x00\x0F\x01\x00\x00\x97\x00\x00\x00\x09\x01\x00" + "\x00\xAF\x00\x00\x00\xFD\x00\x00\x00\xC2\x00\x00\x00\xEE\x00\x00" + "\x00\xD9\x00\x00\x00\xD9\x00\x00\x00\xE3\x00\x00\x00\xC2\x00\x00" + "\x00\xE3\x00\x00\x00\xB1\x00\x00\x00\xE3\x00\x00\x00\x83\x00\x00" + "\x00\xD1\x00\x00\x00\x3C\x00\x00\x00\xA8\x00\x00\x00\x2A\x00\x00" + "\x00\xA8\x00\x00\x00\x1C\x00\x00\x00\xBD\x00\x00\x00\x15\x00\x00" + "\x00\xE3\x00\x00\x00\x15\x00\x00\x00\xE3\x00\x00\x00\x00\x00\x02" + "\x02\x00\x02\x02\x00\x02\x02\x00\x00\x00\x02\x02\x00\x02\x02\x00" + "\x02\x02\x00\x02\x02\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_BAR +{ + ExtraData = + { +// Zeichen: 0x96 Font: StarMath +-27119; 512; 76; 768; 42; 0; 146; 0; + 87; 256; 33; 0; 1; 5; 42; 0; + 146; 0; 128; 256; 146; 0; 128; 256; + 178; 0; 42; 0; 178; 0; 42; 0; + 146; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0x96 Font: StarMath + "\x96\x11\x02\x00\x00\x4C\x03\x00\x00\x2A\x00\x00\x00\x92\x00\x00" + "\x00\x57\x01\x00\x00\x21\x00\x00\x00\x01\x00\x05\x00\x2A\x00\x00" + "\x00\x92\x00\x00\x00\x80\x01\x00\x00\x92\x00\x00\x00\x80\x01\x00" + "\x00\xB2\x00\x00\x00\x2A\x00\x00\x00\xB2\x00\x00\x00\x2A\x00\x00" + "\x00\x92\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_VEC +{ + ExtraData = + { +// Zeichen: 0x97 Font: StarMath +-26863; 512; 76; 768; 40; 0; 77; 0; + 128; 256; 172; 0; 1; 8; 40; 0; + 185; 0; 40; 0; 138; 0; 27; 256; + 138; 0; 10; 256; 77; 0; 167; 256; + 163; 0; 10; 256; 248; 0; 27; 256; + 185; 0; 40; 0; 185; 0; 0; 0; + 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0x97 Font: StarMath + "\x97\x11\x02\x00\x00\x4C\x03\x00\x00\x28\x00\x00\x00\x4D\x00\x00" + "\x00\x80\x01\x00\x00\xAC\x00\x00\x00\x01\x00\x08\x00\x28\x00\x00" + "\x00\xB9\x00\x00\x00\x28\x00\x00\x00\x8A\x00\x00\x00\x1B\x01\x00" + "\x00\x8A\x00\x00\x00\x0A\x01\x00\x00\x4D\x00\x00\x00\xA7\x01\x00" + "\x00\xA3\x00\x00\x00\x0A\x01\x00\x00\xF8\x00\x00\x00\x1B\x01\x00" + "\x00\xB9\x00\x00\x00\x28\x00\x00\x00\xB9\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_LBRACE +{ + ExtraData = + { +// Zeichen: 0xA0 Font: StarMath +-24559; 512; 76; 768; 38; 0; 43; 0; + 168; 0; 104; 768; 1; 42; 205; 0; + 146; 768; 200; 0; 146; 768; 163; 0; + 146; 768; 136; 0; 133; 768; 116; 0; + 109; 768; 97; 0; 86; 768; 89; 0; + 57; 768; 89; 0; 20; 768; 89; 0; + 26; 512; 89; 0; 247; 256; 72; 0; + 228; 256; 38; 0; 228; 256; 38; 0; + 214; 256; 57; 0; 214; 256; 70; 0; + 211; 256; 79; 0; 203; 256; 86; 0; + 196; 256; 89; 0; 181; 256; 89; 0; + 160; 256; 89; 0; 168; 0; 89; 0; + 131; 0; 99; 0; 101; 0; 119; 0; + 77; 0; 138; 0; 55; 0; 167; 0; + 43; 0; 205; 0; 43; 0; 205; 0; + 57; 0; 151; 0; 57; 0; 123; 0; + 91; 0; 123; 0; 157; 0; 119; 0; + 138; 256; 119; 0; 177; 256; 101; 0; + 206; 256; 65; 0; 223; 256; 101; 0; + 240; 256; 119; 0; 13; 512; 119; 0; + 51; 512; 123; 0; 32; 768; 123; 0; + 99; 768; 151; 0; 133; 768; 205; 0; + 133; 768; 205; 0; 146; 768; 0; 2; + 512; 514; 0; 514; 0; 514; 2; 512; + 2; 512; 514; 0; 514; 0; 514; 2; + 512; 2; 512; 0; +#ifdef NO_MORE + // Zeichen: 0xA0 Font: StarMath + "\xA0\x11\x02\x00\x00\x4C\x03\x00\x00\x26\x00\x00\x00\x2B\x00\x00" + "\x00\xA8\x00\x00\x00\x68\x03\x00\x00\x01\x00\x2D\x00\xCD\x00\x00" + "\x00\x92\x03\x00\x00\xC8\x00\x00\x00\x92\x03\x00\x00\xA3\x00\x00" + "\x00\x92\x03\x00\x00\x88\x00\x00\x00\x85\x03\x00\x00\x74\x00\x00" + "\x00\x6D\x03\x00\x00\x61\x00\x00\x00\x56\x03\x00\x00\x59\x00\x00" + "\x00\x39\x03\x00\x00\x59\x00\x00\x00\x14\x03\x00\x00\x59\x00\x00" + "\x00\x1A\x02\x00\x00\x59\x00\x00\x00\x06\x02\x00\x00\x54\x00\x00" + "\x00\xF8\x01\x00\x00\x4D\x00\x00\x00\xF0\x01\x00\x00\x46\x00\x00" + "\x00\xE9\x01\x00\x00\x39\x00\x00\x00\xE4\x01\x00\x00\x26\x00\x00" + "\x00\xE4\x01\x00\x00\x26\x00\x00\x00\xD6\x01\x00\x00\x3B\x00\x00" + "\x00\xD6\x01\x00\x00\x48\x00\x00\x00\xD3\x01\x00\x00\x4F\x00\x00" + "\x00\xCB\x01\x00\x00\x56\x00\x00\x00\xC4\x01\x00\x00\x59\x00\x00" + "\x00\xB5\x01\x00\x00\x59\x00\x00\x00\xA0\x01\x00\x00\x59\x00\x00" + "\x00\xA8\x00\x00\x00\x59\x00\x00\x00\x83\x00\x00\x00\x63\x00\x00" + "\x00\x65\x00\x00\x00\x77\x00\x00\x00\x4D\x00\x00\x00\x8A\x00\x00" + "\x00\x37\x00\x00\x00\xA7\x00\x00\x00\x2B\x00\x00\x00\xCD\x00\x00" + "\x00\x2B\x00\x00\x00\xCD\x00\x00\x00\x39\x00\x00\x00\x97\x00\x00" + "\x00\x39\x00\x00\x00\x7B\x00\x00\x00\x5B\x00\x00\x00\x7B\x00\x00" + "\x00\x9D\x00\x00\x00\x77\x00\x00\x00\x8A\x01\x00\x00\x77\x00\x00" + "\x00\xB1\x01\x00\x00\x65\x00\x00\x00\xCE\x01\x00\x00\x41\x00\x00" + "\x00\xDF\x01\x00\x00\x65\x00\x00\x00\xF0\x01\x00\x00\x77\x00\x00" + "\x00\x0D\x02\x00\x00\x77\x00\x00\x00\x33\x02\x00\x00\x7B\x00\x00" + "\x00\x20\x03\x00\x00\x7B\x00\x00\x00\x63\x03\x00\x00\x97\x00\x00" + "\x00\x85\x03\x00\x00\xCD\x00\x00\x00\x85\x03\x00\x00\xCD\x00\x00" + "\x00\x92\x03\x00\x00\x00\x00\x02\x02\x00\x02\x02\x00\x00\x02\x02" + "\x00\x02\x02\x00\x00\x02\x02\x00\x02\x02\x00\x00\x02\x02\x00\x02" + "\x02\x00\x00\x02\x02\x00\x00\x02\x02\x00\x02\x02\x00\x00\x02\x02" + "\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_RBRACE +{ + ExtraData = + { +// Zeichen: 0xA1 Font: StarMath +-24303; 512; 76; 768; 38; 0; 43; 0; + 168; 0; 104; 768; 1; 63; 38; 0; + 146; 768; 38; 0; 133; 768; 92; 0; + 133; 768; 121; 0; 99; 768; 121; 0; + 32; 768; 121; 0; 5; 768; 119; 0; + 222; 512; 119; 0; 169; 512; 116; 0; + 117; 512; 116; 0; 78; 512; 116; 0; + 51; 512; 116; 0; 14; 512; 135; 0; + 243; 256; 172; 0; 223; 256; 135; 0; + 206; 256; 116; 0; 177; 256; 116; 0; + 138; 256; 116; 0; 111; 256; 116; 0; + 73; 256; 119; 0; 19; 256; 119; 0; + 222; 0; 121; 0; 183; 0; 121; 0; + 157; 0; 121; 0; 91; 0; 92; 0; + 57; 0; 38; 0; 57; 0; 38; 0; + 43; 0; 43; 0; 43; 0; 79; 0; + 43; 0; 108; 0; 57; 0; 128; 0; + 81; 0; 145; 0; 102; 0; 155; 0; + 133; 0; 155; 0; 170; 0; 155; 0; + 197; 0; 153; 0; 239; 0; 150; 0; + 37; 256; 146; 0; 93; 256; 145; 0; + 135; 256; 145; 0; 162; 256; 145; 0; + 184; 256; 148; 0; 198; 256; 158; 0; + 204; 256; 167; 0; 213; 256; 182; 0; + 216; 256; 205; 0; 216; 256; 205; 0; + 230; 256; 182; 0; 230; 256; 167; 0; + 233; 256; 158; 0; 240; 256; 148; 0; + 247; 256; 145; 0; 6; 512; 145; 0; + 28; 512; 145; 0; 55; 512; 146; 0; + 97; 512; 150; 0; 151; 512; 153; 0; + 207; 512; 155; 0; 247; 512; 155; 0; + 20; 768; 155; 0; 104; 768; 116; 0; + 146; 768; 38; 0; 146; 768; 38; 0; + 146; 768; 0; 2; 512; 514; 2; 512; + 514; 2; 512; 514; 2; 512; 514; 0; + 2; 512; 514; 2; 512; 514; 2; 512; + 514; 0; 514; 2; 512; 514; 2; 512; + 514; 0; +#ifdef NO_MORE + // Zeichen: 0xA1 Font: StarMath + "\xA1\x11\x02\x00\x00\x4C\x03\x00\x00\x26\x00\x00\x00\x2B\x00\x00" + "\x00\xA8\x00\x00\x00\x68\x03\x00\x00\x01\x00\x3F\x00\x26\x00\x00" + "\x00\x92\x03\x00\x00\x26\x00\x00\x00\x85\x03\x00\x00\x5C\x00\x00" + "\x00\x85\x03\x00\x00\x79\x00\x00\x00\x63\x03\x00\x00\x79\x00\x00" + "\x00\x20\x03\x00\x00\x79\x00\x00\x00\x05\x03\x00\x00\x77\x00\x00" + "\x00\xDE\x02\x00\x00\x77\x00\x00\x00\xA9\x02\x00\x00\x74\x00\x00" + "\x00\x75\x02\x00\x00\x74\x00\x00\x00\x4E\x02\x00\x00\x74\x00\x00" + "\x00\x33\x02\x00\x00\x74\x00\x00\x00\x0E\x02\x00\x00\x87\x00\x00" + "\x00\xF3\x01\x00\x00\xAC\x00\x00\x00\xDF\x01\x00\x00\x87\x00\x00" + "\x00\xCE\x01\x00\x00\x74\x00\x00\x00\xB1\x01\x00\x00\x74\x00\x00" + "\x00\x8A\x01\x00\x00\x74\x00\x00\x00\x6F\x01\x00\x00\x74\x00\x00" + "\x00\x49\x01\x00\x00\x77\x00\x00\x00\x13\x01\x00\x00\x77\x00\x00" + "\x00\xDE\x00\x00\x00\x79\x00\x00\x00\xB7\x00\x00\x00\x79\x00\x00" + "\x00\x9D\x00\x00\x00\x79\x00\x00\x00\x5B\x00\x00\x00\x5C\x00\x00" + "\x00\x39\x00\x00\x00\x26\x00\x00\x00\x39\x00\x00\x00\x26\x00\x00" + "\x00\x2B\x00\x00\x00\x2B\x00\x00\x00\x2B\x00\x00\x00\x4F\x00\x00" + "\x00\x2B\x00\x00\x00\x6C\x00\x00\x00\x39\x00\x00\x00\x80\x00\x00" + "\x00\x51\x00\x00\x00\x91\x00\x00\x00\x66\x00\x00\x00\x9B\x00\x00" + "\x00\x85\x00\x00\x00\x9B\x00\x00\x00\xAA\x00\x00\x00\x9B\x00\x00" + "\x00\xC5\x00\x00\x00\x99\x00\x00\x00\xEF\x00\x00\x00\x96\x00\x00" + "\x00\x25\x01\x00\x00\x92\x00\x00\x00\x5D\x01\x00\x00\x91\x00\x00" + "\x00\x87\x01\x00\x00\x91\x00\x00\x00\xA2\x01\x00\x00\x91\x00\x00" + "\x00\xB8\x01\x00\x00\x94\x00\x00\x00\xC6\x01\x00\x00\x9E\x00\x00" + "\x00\xCC\x01\x00\x00\xA7\x00\x00\x00\xD5\x01\x00\x00\xB6\x00\x00" + "\x00\xD8\x01\x00\x00\xCD\x00\x00\x00\xD8\x01\x00\x00\xCD\x00\x00" + "\x00\xE6\x01\x00\x00\xB6\x00\x00\x00\xE6\x01\x00\x00\xA7\x00\x00" + "\x00\xE9\x01\x00\x00\x9E\x00\x00\x00\xF0\x01\x00\x00\x94\x00\x00" + "\x00\xF7\x01\x00\x00\x91\x00\x00\x00\x06\x02\x00\x00\x91\x00\x00" + "\x00\x1C\x02\x00\x00\x91\x00\x00\x00\x37\x02\x00\x00\x92\x00\x00" + "\x00\x61\x02\x00\x00\x96\x00\x00\x00\x97\x02\x00\x00\x99\x00\x00" + "\x00\xCF\x02\x00\x00\x9B\x00\x00\x00\xF7\x02\x00\x00\x9B\x00\x00" + "\x00\x14\x03\x00\x00\x9B\x00\x00\x00\x68\x03\x00\x00\x74\x00\x00" + "\x00\x92\x03\x00\x00\x26\x00\x00\x00\x92\x03\x00\x00\x26\x00\x00" + "\x00\x92\x03\x00\x00\x00\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00" + "\x02\x02\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00\x00" + "\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00" + "\x02\x02\x00\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00" + "\x02\x02\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_LPARENT +{ + ExtraData = + { +// Zeichen: 0xA2 Font: StarMath +-24047; 512; 76; 768; 60; 0; 67; 0; + 162; 0; 69; 768; 1; 27; 221; 0; + 135; 768; 167; 0; 89; 768; 126; 0; + 25; 768; 99; 0; 200; 512; 72; 0; + 127; 512; 60; 0; 51; 512; 60; 0; + 228; 256; 60; 0; 152; 256; 72; 0; + 76; 256; 99; 0; 2; 256; 128; 0; + 172; 0; 168; 0; 108; 0; 221; 0; + 67; 0; 221; 0; 87; 0; 182; 0; + 124; 0; 153; 0; 185; 0; 133; 0; + 17; 256; 116; 0; 88; 256; 109; 0; + 157; 256; 109; 0; 228; 256; 109; 0; + 43; 512; 116; 0; 114; 512; 133; 0; + 183; 512; 153; 0; 16; 768; 182; 0; + 79; 768; 221; 0; 113; 768; 221; 0; + 135; 768; 0; 514; 2; 512; 514; 2; + 512; 2; 512; 514; 2; 512; 514; 0; +#ifdef NO_MORE + // Zeichen: 0xA2 Font: StarMath + "\xA2\x11\x02\x00\x00\x4C\x03\x00\x00\x3C\x00\x00\x00\x43\x00\x00" + "\x00\xA2\x00\x00\x00\x45\x03\x00\x00\x01\x00\x1B\x00\xDD\x00\x00" + "\x00\x87\x03\x00\x00\xA7\x00\x00\x00\x59\x03\x00\x00\x7E\x00\x00" + "\x00\x19\x03\x00\x00\x63\x00\x00\x00\xC8\x02\x00\x00\x48\x00\x00" + "\x00\x7F\x02\x00\x00\x3C\x00\x00\x00\x33\x02\x00\x00\x3C\x00\x00" + "\x00\xE4\x01\x00\x00\x3C\x00\x00\x00\x98\x01\x00\x00\x48\x00\x00" + "\x00\x4C\x01\x00\x00\x63\x00\x00\x00\x02\x01\x00\x00\x80\x00\x00" + "\x00\xAC\x00\x00\x00\xA8\x00\x00\x00\x6C\x00\x00\x00\xDD\x00\x00" + "\x00\x43\x00\x00\x00\xDD\x00\x00\x00\x57\x00\x00\x00\xB6\x00\x00" + "\x00\x7C\x00\x00\x00\x99\x00\x00\x00\xB9\x00\x00\x00\x85\x00\x00" + "\x00\x11\x01\x00\x00\x74\x00\x00\x00\x58\x01\x00\x00\x6D\x00\x00" + "\x00\x9D\x01\x00\x00\x6D\x00\x00\x00\xE4\x01\x00\x00\x6D\x00\x00" + "\x00\x2B\x02\x00\x00\x74\x00\x00\x00\x72\x02\x00\x00\x85\x00\x00" + "\x00\xB7\x02\x00\x00\x99\x00\x00\x00\x10\x03\x00\x00\xB6\x00\x00" + "\x00\x4F\x03\x00\x00\xDD\x00\x00\x00\x71\x03\x00\x00\xDD\x00\x00" + "\x00\x87\x03\x00\x00\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00\x02" + "\x02\x00\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_RPARENT +{ + ExtraData = + { +// Zeichen: 0xA3 Font: StarMath +-23791; 512; 76; 768; 43; 0; 67; 0; + 162; 0; 69; 768; 1; 27; 43; 0; + 113; 768; 81; 0; 79; 768; 109; 0; + 20; 768; 129; 0; 191; 512; 146; 0; + 124; 512; 155; 0; 58; 512; 155; 0; + 247; 256; 155; 0; 169; 256; 146; 0; + 95; 256; 133; 0; 25; 256; 113; 0; + 190; 0; 84; 0; 126; 0; 43; 0; + 87; 0; 43; 0; 67; 0; 96; 0; + 104; 0; 136; 0; 168; 0; 167; 0; + 0; 256; 190; 0; 74; 256; 204; 0; + 150; 256; 204; 0; 228; 256; 204; 0; + 51; 512; 190; 0; 127; 512; 167; 0; + 200; 512; 136; 0; 30; 768; 96; 0; + 94; 768; 43; 0; 135; 768; 43; 0; + 113; 768; 0; 514; 2; 512; 514; 2; + 512; 2; 512; 514; 2; 512; 514; 0; +#ifdef NO_MORE + // Zeichen: 0xA3 Font: StarMath + "\xA3\x11\x02\x00\x00\x4C\x03\x00\x00\x2B\x00\x00\x00\x43\x00\x00" + "\x00\xA2\x00\x00\x00\x45\x03\x00\x00\x01\x00\x1B\x00\x2B\x00\x00" + "\x00\x71\x03\x00\x00\x51\x00\x00\x00\x4F\x03\x00\x00\x6D\x00\x00" + "\x00\x14\x03\x00\x00\x81\x00\x00\x00\xBF\x02\x00\x00\x92\x00\x00" + "\x00\x7C\x02\x00\x00\x9B\x00\x00\x00\x38\x02\x00\x00\x9B\x00\x00" + "\x00\xF7\x01\x00\x00\x9B\x00\x00\x00\xA9\x01\x00\x00\x92\x00\x00" + "\x00\x5F\x01\x00\x00\x85\x00\x00\x00\x19\x01\x00\x00\x71\x00\x00" + "\x00\xBE\x00\x00\x00\x54\x00\x00\x00\x7C\x00\x00\x00\x2B\x00\x00" + "\x00\x57\x00\x00\x00\x2B\x00\x00\x00\x43\x00\x00\x00\x60\x00\x00" + "\x00\x68\x00\x00\x00\x88\x00\x00\x00\xA8\x00\x00\x00\xA7\x00\x00" + "\x00\x00\x01\x00\x00\xBE\x00\x00\x00\x4C\x01\x00\x00\xCC\x00\x00" + "\x00\x98\x01\x00\x00\xCC\x00\x00\x00\xE4\x01\x00\x00\xCC\x00\x00" + "\x00\x32\x02\x00\x00\xBE\x00\x00\x00\x7E\x02\x00\x00\xA7\x00\x00" + "\x00\xC8\x02\x00\x00\x88\x00\x00\x00\x20\x03\x00\x00\x60\x00\x00" + "\x00\x5E\x03\x00\x00\x2B\x00\x00\x00\x87\x03\x00\x00\x2B\x00\x00" + "\x00\x71\x03\x00\x00\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00\x02" + "\x02\x00\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00\x02\x02\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_LANGLE +{ + ExtraData = + { +// Zeichen: 0xA4 Font: StarMath +-23535; 512; 76; 768; 35; 0; 65; 0; + 222; 0; 69; 768; 1; 7; 35; 0; + 226; 256; 238; 0; 65; 0; 0; 256; + 75; 0; 57; 0; 226; 256; 0; 256; + 123; 768; 238; 0; 133; 768; 35; 0; + 226; 256; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0xA4 Font: StarMath + "\xA4\x11\x02\x00\x00\x4C\x03\x00\x00\x23\x00\x00\x00\x41\x00\x00" + "\x00\xDE\x00\x00\x00\x45\x03\x00\x00\x01\x00\x07\x00\x23\x00\x00" + "\x00\xE2\x01\x00\x00\xEE\x00\x00\x00\x41\x00\x00\x00\x00\x01\x00" + "\x00\x4B\x00\x00\x00\x39\x00\x00\x00\xE2\x01\x00\x00\x00\x01\x00" + "\x00\x7B\x03\x00\x00\xEE\x00\x00\x00\x85\x03\x00\x00\x23\x00\x00" + "\x00\xE2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_RANGLE +{ + ExtraData = + { +// Zeichen: 0xA5 Font: StarMath +-23279; 512; 76; 768; 23; 0; 65; 0; + 226; 0; 69; 768; 1; 7; 248; 0; + 226; 256; 45; 0; 133; 768; 23; 0; + 123; 768; 222; 0; 225; 256; 25; 0; + 75; 0; 45; 0; 65; 0; 248; 0; + 226; 256; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0xA5 Font: StarMath + "\xA5\x11\x02\x00\x00\x4C\x03\x00\x00\x17\x00\x00\x00\x41\x00\x00" + "\x00\xE2\x00\x00\x00\x45\x03\x00\x00\x01\x00\x07\x00\xF8\x00\x00" + "\x00\xE2\x01\x00\x00\x2D\x00\x00\x00\x85\x03\x00\x00\x17\x00\x00" + "\x00\x7B\x03\x00\x00\xDE\x00\x00\x00\xE1\x01\x00\x00\x19\x00\x00" + "\x00\x4B\x00\x00\x00\x2D\x00\x00\x00\x41\x00\x00\x00\xF8\x00\x00" + "\x00\xE2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_LBRACKET +{ + ExtraData = + { +// Zeichen: 0xA6 Font: StarMath +-23023; 512; 76; 768; 60; 0; 59; 0; + 148; 0; 68; 768; 1; 9; 60; 0; + 126; 768; 60; 0; 59; 0; 207; 0; + 59; 0; 207; 0; 75; 0; 102; 0; + 75; 0; 102; 0; 108; 768; 207; 0; + 108; 768; 207; 0; 126; 768; 60; 0; + 126; 768; 0; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0xA6 Font: StarMath + "\xA6\x11\x02\x00\x00\x4C\x03\x00\x00\x3C\x00\x00\x00\x3B\x00\x00" + "\x00\x94\x00\x00\x00\x44\x03\x00\x00\x01\x00\x09\x00\x3C\x00\x00" + "\x00\x7E\x03\x00\x00\x3C\x00\x00\x00\x3B\x00\x00\x00\xCF\x00\x00" + "\x00\x3B\x00\x00\x00\xCF\x00\x00\x00\x4B\x00\x00\x00\x66\x00\x00" + "\x00\x4B\x00\x00\x00\x66\x00\x00\x00\x6C\x03\x00\x00\xCF\x00\x00" + "\x00\x6C\x03\x00\x00\xCF\x00\x00\x00\x7E\x03\x00\x00\x3C\x00\x00" + "\x00\x7E\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_RBRACKET +{ + ExtraData = + { +// Zeichen: 0xA7 Font: StarMath +-22767; 512; 76; 768; 32; 0; 59; 0; + 147; 0; 68; 768; 1; 9; 178; 0; + 126; 768; 32; 0; 126; 768; 32; 0; + 108; 768; 136; 0; 108; 768; 136; 0; + 75; 0; 32; 0; 75; 0; 32; 0; + 59; 0; 178; 0; 59; 0; 178; 0; + 126; 768; 0; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0xA7 Font: StarMath + "\xA7\x11\x02\x00\x00\x4C\x03\x00\x00\x20\x00\x00\x00\x3B\x00\x00" + "\x00\x93\x00\x00\x00\x44\x03\x00\x00\x01\x00\x09\x00\xB2\x00\x00" + "\x00\x7E\x03\x00\x00\x20\x00\x00\x00\x7E\x03\x00\x00\x20\x00\x00" + "\x00\x6C\x03\x00\x00\x88\x00\x00\x00\x6C\x03\x00\x00\x88\x00\x00" + "\x00\x4B\x00\x00\x00\x20\x00\x00\x00\x4B\x00\x00\x00\x20\x00\x00" + "\x00\x3B\x00\x00\x00\xB2\x00\x00\x00\x3B\x00\x00\x00\xB2\x00\x00" + "\x00\x7E\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_LDBRACKET +{ + ExtraData = + { +// Zeichen: 0xB2 Font: StarMath +-19951; 512; 76; 768; 60; 0; 59; 0; + 207; 0; 68; 768; 2; 9; 60; 0; + 126; 768; 60; 0; 59; 0; 10; 256; + 59; 0; 10; 256; 75; 0; 180; 0; + 75; 0; 180; 0; 108; 768; 10; 256; + 108; 768; 10; 256; 126; 768; 60; 0; + 126; 768; 0; 0; 0; 0; 0; 1280; +-27136; 0; 19200; 0; 26112; 0; 19200; 0; + 26112; 0; 27651; 0; -27136; 0; 27651; 0; +-27136; 0; 19200; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0xB2 Font: StarMath + "\xB2\x11\x02\x00\x00\x4C\x03\x00\x00\x3C\x00\x00\x00\x3B\x00\x00" + "\x00\xCF\x00\x00\x00\x44\x03\x00\x00\x02\x00\x09\x00\x3C\x00\x00" + "\x00\x7E\x03\x00\x00\x3C\x00\x00\x00\x3B\x00\x00\x00\x0A\x01\x00" + "\x00\x3B\x00\x00\x00\x0A\x01\x00\x00\x4B\x00\x00\x00\xB4\x00\x00" + "\x00\x4B\x00\x00\x00\xB4\x00\x00\x00\x6C\x03\x00\x00\x0A\x01\x00" + "\x00\x6C\x03\x00\x00\x0A\x01\x00\x00\x7E\x03\x00\x00\x3C\x00\x00" + "\x00\x7E\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00" + "\x96\x00\x00\x00\x4B\x00\x00\x00\x66\x00\x00\x00\x4B\x00\x00\x00" + "\x66\x00\x00\x00\x6C\x03\x00\x00\x96\x00\x00\x00\x6C\x03\x00\x00" + "\x96\x00\x00\x00\x4B\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_RDBRACKET +{ + ExtraData = + { +// Zeichen: 0xB3 Font: StarMath +-19695; 512; 76; 768; 60; 0; 59; 0; + 207; 0; 68; 768; 2; 9; 10; 256; + 126; 768; 60; 0; 126; 768; 60; 0; + 108; 768; 138; 0; 108; 768; 138; 0; + 75; 0; 60; 0; 75; 0; 60; 0; + 59; 0; 10; 256; 59; 0; 10; 256; + 126; 768; 0; 0; 0; 0; 0; 1280; +-22528; 0; 19200; 0; -22528; 0; 27651; 0; + -8192; 0; 27651; 0; -8192; 0; 19200; 0; +-22528; 0; 19200; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0xB3 Font: StarMath + "\xB3\x11\x02\x00\x00\x4C\x03\x00\x00\x3C\x00\x00\x00\x3B\x00\x00" + "\x00\xCF\x00\x00\x00\x44\x03\x00\x00\x02\x00\x09\x00\x0A\x01\x00" + "\x00\x7E\x03\x00\x00\x3C\x00\x00\x00\x7E\x03\x00\x00\x3C\x00\x00" + "\x00\x6C\x03\x00\x00\x8A\x00\x00\x00\x6C\x03\x00\x00\x8A\x00\x00" + "\x00\x4B\x00\x00\x00\x3C\x00\x00\x00\x4B\x00\x00\x00\x3C\x00\x00" + "\x00\x3B\x00\x00\x00\x0A\x01\x00\x00\x3B\x00\x00\x00\x0A\x01\x00" + "\x00\x7E\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00" + "\xA8\x00\x00\x00\x4B\x00\x00\x00\xA8\x00\x00\x00\x6C\x03\x00\x00" + "\xE0\x00\x00\x00\x6C\x03\x00\x00\xE0\x00\x00\x00\x4B\x00\x00\x00" + "\xA8\x00\x00\x00\x4B\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_LCEIL +{ + ExtraData = + { +// Zeichen: 0xC0 Font: StarMath +-16367; 512; 76; 768; 60; 0; 59; 0; + 148; 0; 68; 768; 1; 7; 60; 0; + 126; 768; 60; 0; 59; 0; 207; 0; + 59; 0; 207; 0; 75; 0; 102; 0; + 75; 0; 102; 0; 126; 768; 60; 0; + 126; 768; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0xC0 Font: StarMath + "\xC0\x11\x02\x00\x00\x4C\x03\x00\x00\x3C\x00\x00\x00\x3B\x00\x00" + "\x00\x94\x00\x00\x00\x44\x03\x00\x00\x01\x00\x07\x00\x3C\x00\x00" + "\x00\x7E\x03\x00\x00\x3C\x00\x00\x00\x3B\x00\x00\x00\xCF\x00\x00" + "\x00\x3B\x00\x00\x00\xCF\x00\x00\x00\x4B\x00\x00\x00\x66\x00\x00" + "\x00\x4B\x00\x00\x00\x66\x00\x00\x00\x7E\x03\x00\x00\x3C\x00\x00" + "\x00\x7E\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_RCEIL +{ + ExtraData = + { +// Zeichen: 0xC2 Font: StarMath +-15855; 512; 76; 768; 32; 0; 59; 0; + 147; 0; 68; 768; 1; 7; 178; 0; + 126; 768; 136; 0; 126; 768; 136; 0; + 75; 0; 32; 0; 75; 0; 32; 0; + 59; 0; 178; 0; 59; 0; 178; 0; + 126; 768; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0xC2 Font: StarMath + "\xC2\x11\x02\x00\x00\x4C\x03\x00\x00\x20\x00\x00\x00\x3B\x00\x00" + "\x00\x93\x00\x00\x00\x44\x03\x00\x00\x01\x00\x07\x00\xB2\x00\x00" + "\x00\x7E\x03\x00\x00\x88\x00\x00\x00\x7E\x03\x00\x00\x88\x00\x00" + "\x00\x4B\x00\x00\x00\x20\x00\x00\x00\x4B\x00\x00\x00\x20\x00\x00" + "\x00\x3B\x00\x00\x00\xB2\x00\x00\x00\x3B\x00\x00\x00\xB2\x00\x00" + "\x00\x7E\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_LFLOOR +{ + ExtraData = + { +// Zeichen: 0xC1 Font: StarMath +-16111; 512; 76; 768; 60; 0; 59; 0; + 148; 0; 68; 768; 1; 7; 60; 0; + 126; 768; 60; 0; 59; 0; 102; 0; + 59; 0; 102; 0; 108; 768; 207; 0; + 108; 768; 207; 0; 126; 768; 60; 0; + 126; 768; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0xC1 Font: StarMath + "\xC1\x11\x02\x00\x00\x4C\x03\x00\x00\x3C\x00\x00\x00\x3B\x00\x00" + "\x00\x94\x00\x00\x00\x44\x03\x00\x00\x01\x00\x07\x00\x3C\x00\x00" + "\x00\x7E\x03\x00\x00\x3C\x00\x00\x00\x3B\x00\x00\x00\x66\x00\x00" + "\x00\x3B\x00\x00\x00\x66\x00\x00\x00\x6C\x03\x00\x00\xCF\x00\x00" + "\x00\x6C\x03\x00\x00\xCF\x00\x00\x00\x7E\x03\x00\x00\x3C\x00\x00" + "\x00\x7E\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_RFLOOR +{ + ExtraData = + { +// Zeichen: 0xC3 Font: StarMath +-15599; 512; 76; 768; 32; 0; 59; 0; + 147; 0; 68; 768; 1; 7; 178; 0; + 126; 768; 32; 0; 126; 768; 32; 0; + 108; 768; 136; 0; 108; 768; 136; 0; + 59; 0; 178; 0; 59; 0; 178; 0; + 126; 768; 0; 0; 0; 0; +#ifdef NO_MORE + // Zeichen: 0xC3 Font: StarMath + "\xC3\x11\x02\x00\x00\x4C\x03\x00\x00\x20\x00\x00\x00\x3B\x00\x00" + "\x00\x93\x00\x00\x00\x44\x03\x00\x00\x01\x00\x07\x00\xB2\x00\x00" + "\x00\x7E\x03\x00\x00\x20\x00\x00\x00\x7E\x03\x00\x00\x20\x00\x00" + "\x00\x6C\x03\x00\x00\x88\x00\x00\x00\x6C\x03\x00\x00\x88\x00\x00" + "\x00\x3B\x00\x00\x00\xB2\x00\x00\x00\x3B\x00\x00\x00\xB2\x00\x00" + "\x00\x7E\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_OVERBRACE +{ + ExtraData = + { +// Zeichen: 0x35 Font: StarMath + 13585; 512; 76; 768; 20; 0; 8; 0; + 104; 768; 168; 0; 1; 45; 20; 0; + 175; 0; 20; 0; 172; 0; 20; 0; + 135; 0; 32; 0; 108; 0; 57; 0; + 87; 0; 79; 0; 70; 0; 109; 0; + 60; 0; 146; 0; 60; 0; 140; 256; + 60; 0; 159; 256; 60; 0; 172; 256; + 57; 0; 181; 256; 48; 0; 187; 256; + 42; 0; 193; 256; 28; 0; 193; 256; + 8; 0; 206; 256; 8; 0; 206; 256; + 28; 0; 209; 256; 42; 0; 218; 256; + 48; 0; 225; 256; 57; 0; 240; 256; + 60; 0; 4; 512; 60; 0; 254; 512; + 60; 0; 35; 768; 60; 0; 65; 768; + 70; 0; 89; 768; 89; 0; 111; 768; + 109; 0; 123; 768; 138; 0; 123; 768; + 175; 0; 109; 768; 175; 0; 109; 768; + 123; 0; 76; 768; 96; 0; 10; 768; + 94; 0; 28; 512; 89; 0; 245; 256; + 89; 0; 216; 256; 70; 0; 199; 256; + 35; 0; 182; 256; 70; 0; 154; 256; + 89; 0; 115; 256; 89; 0; 135; 0; + 94; 0; 67; 0; 96; 0; 33; 0; + 123; 0; 33; 0; 175; 0; 20; 0; + 175; 0; 0; 2; 512; 514; 0; 514; + 2; 512; 2; 512; 514; 0; 514; 2; + 512; 2; 512; 2; 512; 514; 0; 514; + 0; +#ifdef NO_MORE + // Zeichen: 0x35 Font: StarMath + "\x35\x11\x02\x00\x00\x4C\x03\x00\x00\x14\x00\x00\x00\x08\x00\x00" + "\x00\x68\x03\x00\x00\xA8\x00\x00\x00\x01\x00\x2D\x00\x14\x00\x00" + "\x00\xAF\x00\x00\x00\x14\x00\x00\x00\xAA\x00\x00\x00\x14\x00\x00" + "\x00\x85\x00\x00\x00\x20\x00\x00\x00\x6A\x00\x00\x00\x39\x00\x00" + "\x00\x56\x00\x00\x00\x4F\x00\x00\x00\x45\x00\x00\x00\x6D\x00\x00" + "\x00\x3B\x00\x00\x00\x92\x00\x00\x00\x3B\x00\x00\x00\x8C\x01\x00" + "\x00\x3B\x00\x00\x00\x9F\x01\x00\x00\x3B\x00\x00\x00\xAC\x01\x00" + "\x00\x37\x00\x00\x00\xB5\x01\x00\x00\x30\x00\x00\x00\xBB\x01\x00" + "\x00\x2A\x00\x00\x00\xC1\x01\x00\x00\x1C\x00\x00\x00\xC1\x01\x00" + "\x00\x08\x00\x00\x00\xCE\x01\x00\x00\x08\x00\x00\x00\xCE\x01\x00" + "\x00\x1C\x00\x00\x00\xD1\x01\x00\x00\x2A\x00\x00\x00\xDA\x01\x00" + "\x00\x30\x00\x00\x00\xE1\x01\x00\x00\x37\x00\x00\x00\xF0\x01\x00" + "\x00\x3B\x00\x00\x00\x04\x02\x00\x00\x3B\x00\x00\x00\xFE\x02\x00" + "\x00\x3B\x00\x00\x00\x23\x03\x00\x00\x3B\x00\x00\x00\x41\x03\x00" + "\x00\x45\x00\x00\x00\x59\x03\x00\x00\x59\x00\x00\x00\x6F\x03\x00" + "\x00\x6D\x00\x00\x00\x7B\x03\x00\x00\x8A\x00\x00\x00\x7B\x03\x00" + "\x00\xAF\x00\x00\x00\x6D\x03\x00\x00\xAF\x00\x00\x00\x6D\x03\x00" + "\x00\x79\x00\x00\x00\x4C\x03\x00\x00\x5E\x00\x00\x00\x0A\x03\x00" + "\x00\x5C\x00\x00\x00\x1C\x02\x00\x00\x57\x00\x00\x00\xF5\x01\x00" + "\x00\x57\x00\x00\x00\xD8\x01\x00\x00\x46\x00\x00\x00\xC7\x01\x00" + "\x00\x23\x00\x00\x00\xB6\x01\x00\x00\x46\x00\x00\x00\x9A\x01\x00" + "\x00\x57\x00\x00\x00\x73\x01\x00\x00\x57\x00\x00\x00\x87\x00\x00" + "\x00\x5C\x00\x00\x00\x43\x00\x00\x00\x5E\x00\x00\x00\x21\x00\x00" + "\x00\x79\x00\x00\x00\x21\x00\x00\x00\xAF\x00\x00\x00\x14\x00\x00" + "\x00\xAF\x00\x00\x00\x00\x00\x02\x02\x00\x02\x02\x00\x00\x02\x02" + "\x00\x02\x02\x00\x00\x02\x02\x00\x02\x02\x00\x00\x02\x02\x00\x02" + "\x02\x00\x00\x02\x02\x00\x00\x02\x02\x00\x02\x02\x00\x00\x02\x02" + "\x00\x00"; +#endif + }; +}; + + +Resource RID_XPP_UNDERBRACE +{ + ExtraData = + { +// Zeichen: 0x34 Font: StarMath + 13329; 512; 76; 768; 11; 0; 244; 512; + 104; 768; 166; 0; 1; 45; 114; 768; + 244; 512; 114; 768; 247; 512; 114; 768; + 28; 768; 103; 768; 55; 768; 79; 768; + 74; 768; 55; 768; 92; 768; 25; 768; + 103; 768; 244; 512; 103; 768; 252; 256; + 103; 768; 231; 256; 103; 768; 218; 256; + 106; 768; 209; 256; 114; 768; 201; 256; + 121; 768; 198; 256; 133; 768; 198; 256; + 153; 768; 184; 256; 153; 768; 184; 256; + 133; 768; 179; 256; 119; 768; 172; 256; + 113; 768; 164; 256; 106; 768; 150; 256; + 103; 768; 130; 256; 103; 768; 136; 0; + 103; 768; 97; 0; 103; 768; 67; 0; + 92; 768; 45; 0; 74; 768; 21; 0; + 54; 768; 11; 0; 25; 768; 11; 0; + 244; 512; 25; 0; 244; 512; 25; 0; + 40; 768; 57; 0; 67; 768; 124; 0; + 69; 768; 106; 256; 74; 768; 144; 256; + 74; 768; 172; 256; 91; 768; 191; 256; + 126; 768; 208; 256; 91; 768; 235; 256; + 74; 768; 19; 512; 74; 768; 0; 768; + 69; 768; 67; 768; 67; 768; 101; 768; + 40; 768; 101; 768; 244; 512; 114; 768; + 244; 512; 0; 2; 512; 514; 0; 514; + 2; 512; 2; 512; 514; 0; 514; 2; + 512; 2; 512; 2; 512; 514; 0; 514; + 0; +#ifdef NO_MORE + // Zeichen: 0x34 Font: StarMath + "\x34\x11\x02\x00\x00\x4C\x03\x00\x00\x0B\x00\x00\x00\xF4\x02\x00" + "\x00\x68\x03\x00\x00\xA6\x00\x00\x00\x01\x00\x2D\x00\x72\x03\x00" + "\x00\xF4\x02\x00\x00\x72\x03\x00\x00\xF7\x02\x00\x00\x72\x03\x00" + "\x00\x1C\x03\x00\x00\x67\x03\x00\x00\x37\x03\x00\x00\x4F\x03\x00" + "\x00\x4A\x03\x00\x00\x37\x03\x00\x00\x5C\x03\x00\x00\x19\x03\x00" + "\x00\x67\x03\x00\x00\xF4\x02\x00\x00\x67\x03\x00\x00\xFA\x01\x00" + "\x00\x67\x03\x00\x00\xE6\x01\x00\x00\x67\x03\x00\x00\xD8\x01\x00" + "\x00\x6A\x03\x00\x00\xD1\x01\x00\x00\x71\x03\x00\x00\xC9\x01\x00" + "\x00\x77\x03\x00\x00\xC6\x01\x00\x00\x85\x03\x00\x00\xC6\x01\x00" + "\x00\x99\x03\x00\x00\xB8\x01\x00\x00\x99\x03\x00\x00\xB8\x01\x00" + "\x00\x85\x03\x00\x00\xB3\x01\x00\x00\x77\x03\x00\x00\xAC\x01\x00" + "\x00\x71\x03\x00\x00\xA4\x01\x00\x00\x6A\x03\x00\x00\x96\x01\x00" + "\x00\x67\x03\x00\x00\x82\x01\x00\x00\x67\x03\x00\x00\x88\x00\x00" + "\x00\x67\x03\x00\x00\x61\x00\x00\x00\x67\x03\x00\x00\x43\x00\x00" + "\x00\x5C\x03\x00\x00\x2D\x00\x00\x00\x4A\x03\x00\x00\x15\x00\x00" + "\x00\x36\x03\x00\x00\x0B\x00\x00\x00\x19\x03\x00\x00\x0B\x00\x00" + "\x00\xF4\x02\x00\x00\x19\x00\x00\x00\xF4\x02\x00\x00\x19\x00\x00" + "\x00\x28\x03\x00\x00\x39\x00\x00\x00\x43\x03\x00\x00\x7C\x00\x00" + "\x00\x45\x03\x00\x00\x6A\x01\x00\x00\x4A\x03\x00\x00\x90\x01\x00" + "\x00\x4A\x03\x00\x00\xAC\x01\x00\x00\x5B\x03\x00\x00\xBF\x01\x00" + "\x00\x7E\x03\x00\x00\xD0\x01\x00\x00\x5B\x03\x00\x00\xEB\x01\x00" + "\x00\x4A\x03\x00\x00\x13\x02\x00\x00\x4A\x03\x00\x00\x00\x03\x00" + "\x00\x45\x03\x00\x00\x43\x03\x00\x00\x43\x03\x00\x00\x65\x03\x00" + "\x00\x28\x03\x00\x00\x65\x03\x00\x00\xF4\x02\x00\x00\x72\x03\x00" + "\x00\xF4\x02\x00\x00\x00\x00\x02\x02\x00\x02\x02\x00\x00\x02\x02" + "\x00\x02\x02\x00\x00\x02\x02\x00\x02\x02\x00\x00\x02\x02\x00\x02" + "\x02\x00\x00\x02\x02\x00\x00\x02\x02\x00\x02\x02\x00\x00\x02\x02" + "\x00\x00"; +#endif + }; +}; + + +//////////////////////////////////////////////////////////// + + +String RID_PLUSX { Text = "+ " ; }; +String RID_MINUSX { Text = "- " ; }; +String RID_PLUSMINUSX { Text = "+- " ; }; +String RID_MINUSPLUSX { Text = "-+ " ; }; +String RID_NEGX { Text = "neg " ; }; +String RID_XPLUSY { Text = " + " ; }; +String RID_XMINUSY { Text = " - " ; }; +String RID_XCDOTY { Text = " cdot " ; }; +String RID_XTIMESY { Text = " times " ; }; +String RID_XSYMTIMESY { Text = " * " ; }; +String RID_XSYMDIVIDEY { Text = " / " ; }; +String RID_XDIVY { Text = " div " ; }; +String RID_XOVERY { Text = " over " ; }; +String RID_XODIVIDEY { Text = " odivide " ; }; +String RID_XODOTY { Text = " odot " ; }; +String RID_XOMINUSY { Text = " ominus " ; }; +String RID_XOPLUSY { Text = " oplus " ; }; +String RID_XOTIMESY { Text = " otimes " ; }; +String RID_XANDY { Text = " and " ; }; +String RID_XORY { Text = " or " ; }; +String RID_XEQY { Text = " = " ; }; +String RID_XNEQY { Text = " <> " ; }; +String RID_XLTY { Text = " < " ; }; +String RID_XGTY { Text = " > " ; }; +String RID_XLEY { Text = " <= " ; }; +String RID_XGEY { Text = " >= " ; }; +String RID_XLESLANTY { Text = " leslant " ; }; +String RID_XGESLANTY { Text = " geslant " ; }; +String RID_XLLY { Text = " << " ; }; +String RID_XGGY { Text = " >> " ; }; +String RID_XDEFY { Text = " def " ; }; +String RID_XEQUIVY { Text = " equiv " ; }; +String RID_XAPPROXY { Text = " approx " ; }; +String RID_XSIMY { Text = " sim " ; }; +String RID_XSIMEQY { Text = " simeq " ; }; +String RID_XPROPY { Text = " prop " ; }; +String RID_XORTHOY { Text = " ortho " ; }; +String RID_XPARALLELY { Text = " parallel " ; }; +String RID_XTOWARDY { Text = " toward " ; }; +String RID_XTRANSLY { Text = " transl " ; }; +String RID_XTRANSRY { Text = " transr " ; }; +String RID_XINY { Text = " in " ; }; +String RID_XNOTINY { Text = " notin " ; }; +String RID_XOWNSY { Text = " owns " ; }; +String RID_XUNIONY { Text = " union " ; }; +String RID_XINTERSECTIONY { Text = " intersection " ; }; +String RID_XSETMINUSY { Text = " setminus " ; }; +String RID_XSLASHY { Text = " slash " ; }; +String RID_XSUBSETY { Text = " subset " ; }; +String RID_XSUBSETEQY { Text = " subseteq " ; }; +String RID_XSUPSETY { Text = " supset " ; }; +String RID_XSUPSETEQY { Text = " supseteq " ; }; +String RID_XNSUBSETY { Text = " nsubset " ; }; +String RID_XNSUBSETEQY { Text = " nsubseteq " ; }; +String RID_XNSUPSETY { Text = " nsupset " ; }; +String RID_XNSUPSETEQY { Text = " nsupseteq " ; }; +String RID_ABSX { Text = "abs{} " ; }; +String RID_FACTX { Text = "fact " ; }; +String RID_SQRTX { Text = "sqrt{} " ; }; +String RID_NROOTXY { Text = "nroot{}{} " ; }; +String RID_EX { Text = "func e^{} " ; }; +String RID_EXPX { Text = "exp() " ; }; +String RID_LNX { Text = "ln() " ; }; +String RID_LOGX { Text = "log() " ; }; +String RID_SINX { Text = "sin() " ; }; +String RID_COSX { Text = "cos() " ; }; +String RID_TANX { Text = "tan() " ; }; +String RID_COTX { Text = "cot() " ; }; +String RID_ARCSINX { Text = "arcsin() " ; }; +String RID_ARCCOSX { Text = "arccos() " ; }; +String RID_ARCTANX { Text = "arctan() " ; }; +String RID_ARCCOTX { Text = "arccot() " ; }; +String RID_SINHX { Text = "sinh() " ; }; +String RID_COSHX { Text = "cosh() " ; }; +String RID_TANHX { Text = "tanh() " ; }; +String RID_COTHX { Text = "coth() " ; }; +String RID_ARSINHX { Text = "arsinh() " ; }; +String RID_ARCOSHX { Text = "arcosh() " ; }; +String RID_ARTANHX { Text = "artanh() " ; }; +String RID_ARCOTHX { Text = "arcoth() " ; }; +String RID_SUMX { Text = "sum " ; }; +String RID_PRODX { Text = "prod " ; }; +String RID_COPRODX { Text = "coprod " ; }; +String RID_LIMX { Text = "lim " ; }; +String RID_LIMINFX { Text = "liminf " ; }; +String RID_LIMSUPX { Text = "limsup " ; }; +String RID_EXISTS { Text = "exists " ; }; +String RID_FORALL { Text = "forall " ; }; +String RID_INTX { Text = "int " ; }; +String RID_IINTX { Text = "iint " ; }; +String RID_IIINTX { Text = "iiint " ; }; +String RID_LINTX { Text = "lint " ; }; +String RID_LLINTX { Text = "llint " ; }; +String RID_LLLINTX { Text = "lllint " ; }; +String RID_FROMX { Text = "from{} " ; }; +String RID_TOX { Text = "to{} " ; }; +String RID_FROMXTOY { Text = "from{} to{} " ; }; +String RID_ACUTEX { Text = "acute " ; }; +String RID_BARX { Text = "bar " ; }; +String RID_BREVEX { Text = "breve " ; }; +String RID_CHECKX { Text = "check " ; }; +String RID_CIRCLEX { Text = "circle " ; }; +String RID_DOTX { Text = "dot " ; }; +String RID_DDOTX { Text = "ddot " ; }; +String RID_DDDOTX { Text = "dddot " ; }; +String RID_GRAVEX { Text = "grave " ; }; +String RID_HATX { Text = "hat " ; }; +String RID_TILDEX { Text = "tilde " ; }; +String RID_VECX { Text = "vec " ; }; +String RID_UNDERLINEX { Text = "underline " ; }; +String RID_OVERLINEX { Text = "overline " ; }; +String RID_OVERSTRIKEX { Text = "overstrike " ; }; +String RID_PHANTOMX { Text = "phantom " ; }; +String RID_BOLDX { Text = "bold " ; }; +String RID_ITALX { Text = "ital " ; }; +String RID_SIZEXY { Text = "size " ; }; +String RID_FONTXY { Text = "font " ; }; +String RID_COLORX { Text = "color " ; }; +String RID_LRGROUPX { Text = "{} " ; }; +String RID_LRPARENTX { Text = "() " ; }; +String RID_LRBRACKETX { Text = "[] " ; }; +String RID_LRDBRACKETX { Text = "ldbracket rdbracket " ; }; +String RID_LRBRACEX { Text = "lbrace rbrace " ; }; +String RID_LRANGLEX { Text = "langle rangle " ; }; +String RID_LRCEILX { Text = "lceil rceil " ; }; +String RID_LRFLOORX { Text = "lfloor rfloor " ; }; +String RID_LRLINEX { Text = "lline rline " ; }; +String RID_LRDLINEX { Text = "ldline rdline " ; }; +String RID_LMRANGLEXY { Text = "langle mline rangle " ; }; +String RID_SLRPARENTX { Text = "left ( right ) " ; }; +String RID_SLRBRACKETX { Text = "left [ right ] " ; }; +String RID_SLRDBRACKETX { Text = "left ldbracket right rdbracket " ; }; +String RID_SLRBRACEX { Text = "left lbrace right rbrace " ; }; +String RID_SLRANGLEX { Text = "left langle right rangle " ; }; +String RID_SLRCEILX { Text = "left lceil right rceil " ; }; +String RID_SLRFLOORX { Text = "left lfloor right rfloor " ; }; +String RID_SLRLINEX { Text = "left lline right rline " ; }; +String RID_SLRDLINEX { Text = "left ldline right rdline " ; }; +String RID_SLMRANGLEXY { Text = "left langle mline right rangle " ; }; +String RID_XOVERBRACEY { Text = " overbrace " ; }; +String RID_XUNDERBRACEY { Text = " underbrace " ; }; +String RID_RSUBX { Text = "_{}" ; }; +String RID_RSUPX { Text = "^{}" ; }; +String RID_LSUBX { Text = " lsub{} " ; }; +String RID_LSUPX { Text = " lsup{} " ; }; +String RID_CSUBX { Text = " csub{} " ; }; +String RID_CSUPX { Text = " csup{} " ; }; +String RID_SBLANK { Text = "`" ; }; +String RID_BLANK { Text = "~" ; }; +String RID_NEWLINE { Text = "newline " ; }; +String RID_BINOMXY { Text = "binom{}{} " ; }; +String RID_STACK { Text = "stack{ # # } " ; }; +String RID_MATRIX { Text = "matrix{ # ## # } " ; }; +String RID_ALIGNLX { Text = "alignl " ; }; +String RID_ALIGNCX { Text = "alignc " ; }; +String RID_ALIGNRX { Text = "alignr " ; }; +String RID_ALEPH { Text = "aleph " ; }; +String RID_EMPTYSET { Text = "emptyset " ; }; +String RID_RE { Text = "Re " ; }; +String RID_IM { Text = "Im " ; }; +String RID_INFINITY { Text = "infinity " ; }; +String RID_PARTIAL { Text = "partial " ; }; +String RID_NABLA { Text = "nabla " ; }; +String RID_WP { Text = "wp " ; }; +String RID_DOTSAXIS { Text = "dotsaxis " ; }; +String RID_DOTSUP { Text = "dotsup " ; }; +String RID_DOTSDOWN { Text = "dotsdown " ; }; +String RID_DOTSLOW { Text = "dotslow " ; }; +String RID_DOTSVERT { Text = "dotsvert " ; }; +String RID_XCIRCY { Text = " circ " ; }; +String RID_XWIDESLASHY { Text = " wideslash " ; }; +String RID_XWIDEBSLASHY { Text = " widebslash " ; }; +String RID_XDIVIDESY { Text = " divides " ; }; +String RID_XNDIVIDESY { Text = " ndivides " ; }; +String RID_DLARROW { Text = " dlarrow " ; }; +String RID_DLRARROW { Text = " dlrarrow " ; }; +String RID_DRARROW { Text = " drarrow " ; }; +String RID_SETN { Text = "setN " ; }; +String RID_SETZ { Text = "setZ " ; }; +String RID_SETQ { Text = "setQ " ; }; +String RID_SETR { Text = "setR " ; }; +String RID_SETC { Text = "setC " ; }; +String RID_WIDEHATX { Text = "widehat " ; }; +String RID_WIDETILDEX { Text = "widetilde " ; }; +String RID_WIDEVECX { Text = "widevec " ; }; +String RID_HBAR { Text = "hbar " ; }; +String RID_LAMBDABAR { Text = "lambdabar " ; }; +String RID_LEFTARROW { Text = "leftarrow " ; }; +String RID_RIGHTARROW { Text = "rightarrow " ; }; +String RID_UPARROW { Text = "uparrow " ; }; +String RID_DOWNARROW { Text = "downarrow " ; }; + + +////////////////////////////////////////// + + +Menu RID_COMMANDMENU +{ + ItemList = + { + MenuItem + { + Identifier = RID_UNBINOPS_MENU ; + HelpId = HID_SMA_UNBINOPS_TBX ; + Text = "~Unäre/Binäre Operatoren" ; + Text [ ENGLISH ] = "Unary/binary operators" ; + Text [ english_us ] = "Unary/Binary Operators" ; + Text [ portuguese_brazilian ] = "Unäre/Binäre Operatoren" ; + Text [ swedish ] = "~Monära/Binära operatorer" ; + Text [ danish ] = "Monadiske/binære operatorer" ; + Text [ italian ] = "Operatori unari/binari" ; + Text [ spanish ] = "Operadores ~unarios/binarios" ; + Text [ french ] = "Opérateurs u~naires/binaires" ; + Text [ dutch ] = "~Unaire/binaire operatoren" ; + Text [ portuguese ] = "Operadores ~unários/binários" ; + SubMenu = Menu + { + ItemList = + { + MenuItem + { + Identifier = RID_PLUSX; + HelpId = HID_SMA_PLUSX; + Text = "+a"; + }; + MenuItem + { + Identifier = RID_MINUSX; + HelpId = HID_SMA_MINUSX; + Text = "-a"; + }; + MenuItem + { + Identifier = RID_PLUSMINUSX; + HelpId = HID_SMA_PLUSMINUSX; + Text = "+-a"; + }; + MenuItem + { + Identifier = RID_MINUSPLUSX; + HelpId = HID_SMA_MINUSPLUSX; + Text = "-+a"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_XPLUSY; + HelpId = HID_SMA_XPLUSY; + Text = "a + b"; + }; + MenuItem + { + Identifier = RID_XMINUSY; + HelpId = HID_SMA_XMINUSY; + Text = "a - b"; + }; + MenuItem + { + Identifier = RID_XCDOTY; + HelpId = HID_SMA_XCDOTY; + Text = "a cdot b"; + }; + MenuItem + { + Identifier = RID_XTIMESY; + HelpId = HID_SMA_XTIMESY; + Text = "a times b"; + }; + MenuItem + { + Identifier = RID_XSYMTIMESY; + HelpId = HID_SMA_XSYMTIMESY; + Text = "a * b"; + }; + MenuItem + { + Identifier = RID_XOVERY; + HelpId = HID_SMA_XOVERY; + Text = "a over b"; + }; + MenuItem + { + Identifier = RID_XDIVY; + HelpId = HID_SMA_XDIVY; + Text = "a div b"; + }; + MenuItem + { + Identifier = RID_XSYMDIVIDEY; + HelpId = HID_SMA_XSYMDIVIDEY; + Text = "a / b"; + }; + MenuItem + { + Identifier = RID_XCIRCY; + HelpId = HID_SMA_XCIRCY; + Text = "a circ b"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_XWIDESLASHY; + HelpId = HID_SMA_XWIDESLASHY; + Text = "a wideslash b"; + }; + MenuItem + { + Identifier = RID_XWIDEBSLASHY; + HelpId = HID_SMA_XWIDEBSLASHY; + Text = "a widebslash b"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_NEGX; + HelpId = HID_SMA_NEGX; + Text = "neg a"; + }; + MenuItem + { + Identifier = RID_XANDY; + HelpId = HID_SMA_XANDY; + Text = "a and b"; + }; + MenuItem + { + Identifier = RID_XORY; + HelpId = HID_SMA_XORY; + Text = "a or b"; + }; + }; + }; + Text[ chinese_simplified ] = "Ò»Ôª/¶þÔªÔËËã·û"; + Text[ russian ] = "Óíàðíûå/Áèíàðíûå îïåðàòîðû"; + Text[ polish ] = "Unarne/binarne operatory"; + Text[ japanese ] = "¼Þ­°ÅØ/ÊÞ²ÅØ µÍßÚ°À"; + Text[ chinese_traditional ] = "¤@¤¸/¤G¤¸¹Bºâ²Å"; + Text[ dutch ] = "~Unaire/binaire operatoren"; + Text[ chinese_simplified ] = "Ò»Ôª/¶þÔªÔËËã·û"; + Text[ greek ] = "Åíá~äéêïß/Äõáäéêïß ôåëåóôÝò"; + Text[ korean ] = "ÀÏÁø/ÀÌÁø ¿¬»êÀÚ"; + Text[ arabic ] = "ÚæÇãá ÊÔÛíá ÃÍÇÏíÉ/ËäÇÆíÉ"; + Text[ turkish ] = "Birli/ikili iþleçler"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = RID_RELATIONS_MENU ; + HelpId = HID_SMA_RELATIONS_TBX ; + Text = "~Relationen" ; + Text [ ENGLISH ] = "Relations" ; + Text [ english_us ] = "Relations" ; + Text [ portuguese_brazilian ] = "Relationen" ; + Text [ swedish ] = "~Relationer" ; + Text [ danish ] = "Relationer" ; + Text [ italian ] = "Relazioni" ; + Text [ spanish ] = "~Relaciones" ; + Text [ french ] = "~Relations" ; + Text [ dutch ] = "~Relaties" ; + Text [ portuguese ] = "~Relações" ; + SubMenu = Menu + { + ItemList = + { + MenuItem + { + Identifier = RID_XEQY; + HelpId = HID_SMA_XEQY; + Text = "a = b"; + }; + MenuItem + { + Identifier = RID_XNEQY; + HelpId = HID_SMA_XNEQY; + Text = "a <> b"; + }; + MenuItem + { + Identifier = RID_XLTY; + HelpId = HID_SMA_XLTY; + Text = "a < b"; + }; + MenuItem + { + Identifier = RID_XLEY; + HelpId = HID_SMA_XLEY; + Text = "a <= b"; + }; + MenuItem + { + Identifier = RID_XLESLANTY; + HelpId = HID_SMA_XLESLANTY; + Text = "a leslant b"; + }; + MenuItem + { + Identifier = RID_XGTY; + HelpId = HID_SMA_XGTY; + Text = "a > b"; + }; + MenuItem + { + Identifier = RID_XGEY; + HelpId = HID_SMA_XGEY; + Text = "a >= b"; + }; + MenuItem + { + Identifier = RID_XGESLANTY; + HelpId = HID_SMA_XGESLANTY; + Text = "a geslant b"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_XAPPROXY; + HelpId = HID_SMA_XAPPROXY; + Text = "a approx b"; + }; + MenuItem + { + Identifier = RID_XSIMY; + HelpId = HID_SMA_XSIMY; + Text = "a sim b"; + }; + MenuItem + { + Identifier = RID_XSIMEQY; + HelpId = HID_SMA_XSIMEQY; + Text = "a simeq b"; + }; + MenuItem + { + Identifier = RID_XEQUIVY; + HelpId = HID_SMA_XEQUIVY; + Text = "a equiv b"; + }; + MenuItem + { + Identifier = RID_XPROPY; + HelpId = HID_SMA_XPROPY; + Text = "a prop b"; + }; + MenuItem + { + Identifier = RID_XPARALLELY; + HelpId = HID_SMA_XPARALLELY; + Text = "a parallel b"; + }; + MenuItem + { + Identifier = RID_XORTHOY; + HelpId = HID_SMA_XORTHOY; + Text = "a ortho b"; + }; + MenuItem + { + Identifier = RID_XDIVIDESY; + HelpId = HID_SMA_XDIVIDESY; + Text = "a divides b"; + }; + MenuItem + { + Identifier = RID_XNDIVIDESY; + HelpId = HID_SMA_XNDIVIDESY; + Text = "a ndivides b"; + }; + MenuItem + { + Identifier = RID_XTOWARDY; + HelpId = HID_SMA_XTOWARDY; + Text = "a toward b"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_DLARROW; + HelpId = HID_SMA_DLARROW; + Text = "a dlarrow b"; + }; + MenuItem + { + Identifier = RID_DLRARROW; + HelpId = HID_SMA_DLRARROW; + Text = "a dlrarrow b"; + }; + MenuItem + { + Identifier = RID_DRARROW; + HelpId = HID_SMA_DRARROW; + Text = "a drarrow b"; + }; + }; + }; + Text[ chinese_simplified ] = "¹Øϵ"; + Text[ russian ] = "Ñâÿçè"; + Text[ polish ] = "Relacje"; + Text[ japanese ] = "ØÚ°¼®Ý"; + Text[ chinese_traditional ] = "Ãö«Y"; + Text[ dutch ] = "~Relaties"; + Text[ chinese_simplified ] = "¹Øϵ"; + Text[ greek ] = "~Ó÷Ýóåéò"; + Text[ korean ] = "°ü°è"; + Text[ arabic ] = "ÚáÇÞÇÊ"; + Text[ turkish ] = "Ýliþkiler"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = RID_SETOPERATIONS_MENU ; + HelpId = HID_SMA_SETOPERATIONS_TBX ; + Text = "~Mengenoperationen" ; + Text [ ENGLISH ] = "Set operations" ; + Text [ english_us ] = "Set Operations" ; + Text [ portuguese_brazilian ] = "Mengenoperationen" ; + Text [ swedish ] = "~Mängdoperationer" ; + Text [ danish ] = "Mængdeoperationer" ; + Text [ italian ] = "Operazioni degli insiemi" ; + Text [ spanish ] = "~Operaciones de conjuntos" ; + Text [ french ] = "O~pérations quantitatives" ; + Text [ dutch ] = "~Definities" ; + Text [ portuguese ] = "~Operações de conjuntos" ; + SubMenu = Menu + { + ItemList = + { + MenuItem + { + Identifier = RID_XINY; + HelpId = HID_SMA_XINY; + Text = "a in A"; + }; + MenuItem + { + Identifier = RID_XNOTINY; + HelpId = HID_SMA_XNOTINY; + Text = "a notin A"; + }; + MenuItem + { + Identifier = RID_XOWNSY; + HelpId = HID_SMA_XOWNSY; + Text = "A owns a"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_XINTERSECTIONY; + HelpId = HID_SMA_XINTERSECTIONY; + Text = "A intersection B"; + }; + MenuItem + { + Identifier = RID_XUNIONY; + HelpId = HID_SMA_XUNIONY; + Text = "A union B"; + }; + MenuItem + { + Identifier = RID_XSETMINUSY; + HelpId = HID_SMA_XSETMINUSY; + Text = "A \\ B"; + }; + MenuItem + { + Identifier = RID_XSLASHY; + HelpId = HID_SMA_XSLASHY; + Text = "A / B"; + }; + MenuItem + { + Identifier = RID_XSUBSETY; + HelpId = HID_SMA_XSUBSETY; + Text = "A subset B"; + }; + MenuItem + { + Identifier = RID_XSUBSETEQY; + HelpId = HID_SMA_XSUBSETEQY; + Text = "A subseteq B"; + }; + MenuItem + { + Identifier = RID_XSUPSETY; + HelpId = HID_SMA_XSUPSETY; + Text = "A supset B"; + }; + MenuItem + { + Identifier = RID_XSUPSETEQY; + HelpId = HID_SMA_XSUPSETEQY; + Text = "A supseteq B"; + }; + MenuItem + { + Identifier = RID_XNSUBSETY; + HelpId = HID_SMA_XNSUBSETY; + Text = "A nsubset B"; + }; + MenuItem + { + Identifier = RID_XNSUBSETEQY; + HelpId = HID_SMA_XNSUBSETEQY; + Text = "A nsubseteq B"; + }; + MenuItem + { + Identifier = RID_XNSUPSETY; + HelpId = HID_SMA_XNSUPSETY; + Text = "A nsupset B"; + }; + MenuItem + { + Identifier = RID_XNSUPSETEQY; + HelpId = HID_SMA_XNSUPSETEQY; + Text = "A nsupseteq B"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_EMPTYSET; + HelpId = HID_SMA_EMPTYSET; + Text = "emptyset"; + }; + MenuItem + { + Identifier = RID_ALEPH; + HelpId = HID_SMA_ALEPH; + Text = "aleph"; + }; + MenuItem + { + Identifier = RID_SETN; + HelpId = HID_SMA_SETN; + Text = "setN"; + }; + MenuItem + { + Identifier = RID_SETZ; + HelpId = HID_SMA_SETZ; + Text = "setZ"; + }; + MenuItem + { + Identifier = RID_SETQ; + HelpId = HID_SMA_SETQ; + Text = "setQ"; + }; + MenuItem + { + Identifier = RID_SETR; + HelpId = HID_SMA_SETR; + Text = "setR"; + }; + MenuItem + { + Identifier = RID_SETC; + HelpId = HID_SMA_SETC; + Text = "setC"; + }; + }; + }; + Text[ chinese_simplified ] = "ÊýÁ¿¼ÆËã"; + Text[ russian ] = "Îïåðàöèè ìíîæåñòâà"; + Text[ polish ] = "Operacje na zbiorach"; + Text[ japanese ] = "W‡‰‰ŽZ"; + Text[ chinese_traditional ] = "¼Æ¶q­pºâ"; + Text[ dutch ] = "~Definities"; + Text[ chinese_simplified ] = "ÊýÁ¿¼ÆËã"; + Text[ greek ] = "~ÐñÜîåéò óõíüëùí"; + Text[ korean ] = "¿¬»êÀÚ ¼³Á¤"; + Text[ arabic ] = "ãÌãæÚÉ ÚãáíÇÊ"; + Text[ turkish ] = "Küme iþlemleri"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = RID_FUNCTIONS_MENU ; + HelpId = HID_SMA_FUNCTIONS_TBX ; + Text = "~Funktionen" ; + Text [ ENGLISH ] = "Functions" ; + Text [ english_us ] = "Functions" ; + Text [ portuguese_brazilian ] = "Funktionen" ; + Text [ swedish ] = "~Funktioner" ; + Text [ danish ] = "Funktioner" ; + Text [ italian ] = "Funzioni" ; + Text [ spanish ] = "~Funciones" ; + Text [ french ] = "~Fonctions" ; + Text [ dutch ] = "~Functies" ; + Text [ portuguese ] = "~Funções" ; + SubMenu = Menu + { + ItemList = + { + MenuItem + { + Identifier = RID_ABSX; + HelpId = HID_SMA_ABSX; + Text = "|x|"; + }; + MenuItem + { + Identifier = RID_FACTX; + HelpId = HID_SMA_FACTX; + Text = "x!"; + }; + MenuItem + { + Identifier = RID_SQRTX; + HelpId = HID_SMA_SQRTX; + Text = "sqrt x"; + }; + MenuItem + { + Identifier = RID_NROOTXY; + HelpId = HID_SMA_NROOTXY; + Text = "nroot x y"; + }; + MenuItem + { + Identifier = RID_RSUPX; + HelpId = HID_SMA_RSUPX; + Text = "x^y"; + }; + MenuItem + { + Identifier = RID_EX; + HelpId = HID_SMA_EX; + Text = "e^x"; + }; + MenuItem + { + Identifier = RID_LNX; + HelpId = HID_SMA_LNX; + Text = "ln(x)"; + }; + MenuItem + { + Identifier = RID_EXPX; + HelpId = HID_SMA_EXPX; + Text = "exp(x)"; + }; + MenuItem + { + Identifier = RID_LOGX; + HelpId = HID_SMA_LOGX; + Text = "log(x)"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_SINX; + HelpId = HID_SMA_SINX; + Text = "sin(x)"; + }; + MenuItem + { + Identifier = RID_COSX; + HelpId = HID_SMA_COSX; + Text = "cos(x)"; + }; + MenuItem + { + Identifier = RID_TANX; + HelpId = HID_SMA_TANX; + Text = "tan(x)"; + }; + MenuItem + { + Identifier = RID_COTX; + HelpId = HID_SMA_COTX; + Text = "cot(x)"; + }; + MenuItem + { + Identifier = RID_SINHX; + HelpId = HID_SMA_SINHX; + Text = "sinh(x)"; + }; + MenuItem + { + Identifier = RID_COSHX; + HelpId = HID_SMA_COSHX; + Text = "cosh(x)"; + }; + MenuItem + { + Identifier = RID_TANHX; + HelpId = HID_SMA_TANHX; + Text = "tanh(x)"; + }; + MenuItem + { + Identifier = RID_COTHX; + HelpId = HID_SMA_COTHX; + Text = "coth(x)"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_FUNCTIONSOTHER1_MENU; + HelpId = HID_SMA_FUNCTIONSOTHER1_MENU; + Text = "andere"; + Text [ ENGLISH ] = "other"; + TEXT[ italian ] = "altri"; + TEXT[ portuguese_brazilian ] = "andere"; + TEXT[ portuguese ] = "Outros"; + TEXT[ danish ] = "andre"; + TEXT[ french ] = "Autres"; + TEXT[ swedish ] = "andra"; + TEXT[ dutch ] = "andere"; + TEXT[ spanish ] = "otros"; + TEXT[ english_us ] = "Other"; + SubMenu = Menu + { + ItemList = + { + MenuItem + { + Identifier = RID_ARCSINX; + HelpId = HID_SMA_ARCSINX; + Text = "arcsin(x)"; + }; + MenuItem + { + Identifier = RID_ARCCOSX; + HelpId = HID_SMA_ARCCOSX; + Text = "arccos(x)"; + }; + MenuItem + { + Identifier = RID_ARCTANX; + HelpId = HID_SMA_ARCTANX; + Text = "arctan(x)"; + }; + MenuItem + { + Identifier = RID_ARCCOTX; + HelpId = HID_SMA_ARCCOTX; + Text = "arcot(x)"; + }; + MenuItem + { + Identifier = RID_ARSINHX; + HelpId = HID_SMA_ARSINHX; + Text = "arsinh(x)"; + }; + MenuItem + { + Identifier = RID_ARCOSHX; + HelpId = HID_SMA_ARCOSHX; + Text = "arcosh(x)"; + }; + MenuItem + { + Identifier = RID_ARTANHX; + HelpId = HID_SMA_ARTANHX; + Text = "artanh(x)"; + }; + MenuItem + { + Identifier = RID_ARCOTHX; + HelpId = HID_SMA_ARCOTHX; + Text = "arcoth(x)"; + }; + }; + }; + TEXT[ chinese_simplified ] = "ÆäËû"; + TEXT[ russian ] = "äðóãèå"; + TEXT[ polish ] = "inne"; + TEXT[ japanese ] = "‚»‚Ì‘¼"; + TEXT[ chinese_traditional ] = "¨ä¥L"; + TEXT[ language_user1 ] = " "; + TEXT[ dutch ] = "andere"; + TEXT[ chinese_simplified ] = "ÆäËû"; + TEXT[ greek ] = "Üëëá"; + TEXT[ korean ] = "±âŸ"; + TEXT[ arabic ] = "ÛíÑ Ðáß"; + TEXT[ turkish ] = "Diðer"; + }; + }; + }; + Text[ chinese_simplified ] = "º¯Êý"; + Text[ russian ] = "Ôóíêöèè"; + Text[ polish ] = "Funkcje"; + Text[ japanese ] = "ŠÖ”"; + Text[ chinese_traditional ] = "¨ç¼Æ"; + Text[ dutch ] = "~Functies"; + Text[ chinese_simplified ] = "º¯Êý"; + Text[ greek ] = "~ÓõíáñôÞóåéò"; + Text[ korean ] = "ÇÔ¼ö"; + Text[ arabic ] = "ÏÇáÇÊ"; + Text[ turkish ] = "Fonksiyon"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = RID_OPERATORS_MENU ; + HelpId = HID_SMA_OPERATORS_TBX ; + Text = "~Operatoren" ; + Text [ ENGLISH ] = "Operators" ; + Text [ english_us ] = "Operators" ; + Text [ portuguese_brazilian ] = "Operatoren" ; + Text [ swedish ] = "~Operatorer" ; + Text [ danish ] = "Operatorer" ; + Text [ italian ] = "Operatori" ; + Text [ spanish ] = "~Operadores" ; + Text [ french ] = "~Opérateurs" ; + Text [ dutch ] = "O~peratoren" ; + Text [ portuguese ] = "~Operadores" ; + SubMenu = Menu + { + ItemList = + { + MenuItem + { + Identifier = RID_LIMX; + HelpId = HID_SMA_LIMX; + Text = "lim x"; + }; + MenuItem + { + Identifier = RID_SUMX; + HelpId = HID_SMA_SUMX; + Text = "sum x"; + }; + MenuItem + { + Identifier = RID_PRODX; + HelpId = HID_SMA_PRODX; + Text = "prod x"; + }; + MenuItem + { + Identifier = RID_COPRODX; + HelpId = HID_SMA_COPRODX; + Text = "coprod x"; + }; + MenuItem + { + Identifier = RID_INTX; + HelpId = HID_SMA_INTX; + Text = "int x"; + }; + MenuItem + { + Identifier = RID_IINTX; + HelpId = HID_SMA_IINTX; + Text = "iint x"; + }; + MenuItem + { + Identifier = RID_IIINTX; + HelpId = HID_SMA_IIINTX; + Text = "iiint x"; + }; + MenuItem + { + Identifier = RID_LINTX; + HelpId = HID_SMA_LINTX; + Text = "lint x"; + }; + MenuItem + { + Identifier = RID_LLINTX; + HelpId = HID_SMA_LLINTX; + Text = "llint x"; + }; + MenuItem + { + Identifier = RID_LLLINTX; + HelpId = HID_SMA_LLLINTX; + Text = "lllint x"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_FROMXTOY; + HelpId = HID_SMA_FROMXTOY; + Text = "... from a to b"; + }; + MenuItem + { + Identifier = RID_FROMX; + HelpId = HID_SMA_FROMX; + Text = "... from a"; + }; + MenuItem + { + Identifier = RID_TOX; + HelpId = HID_SMA_TOX; + Text = "... to b"; + }; + }; + }; + Text[ chinese_simplified ] = "ÔËËã·û"; + Text[ russian ] = "Îïåðàòîðû"; + Text[ polish ] = "Operatory"; + Text[ japanese ] = "‰‰ŽZŽq"; + Text[ chinese_traditional ] = "¹Bºâ²Å"; + Text[ dutch ] = "O~peratoren"; + Text[ chinese_simplified ] = "ÔËËã·û"; + Text[ greek ] = "~ÔåëåóôÝò"; + Text[ korean ] = "¿¬»êÀÚ"; + Text[ arabic ] = "ÚæÇãá ÇáÊÔÛíá"; + Text[ turkish ] = "Ýþleçler"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = RID_ATTRIBUTES_MENU ; + HelpId = HID_SMA_ATTRIBUTES_TBX ; + Text = "~Attribute" ; + Text [ ENGLISH ] = "Attributes" ; + Text [ portuguese ] = "~Atributos" ; + Text [ english_us ] = "Attributes" ; + Text [ portuguese_brazilian ] = "Attribute" ; + Text [ swedish ] = "~Attribut" ; + Text [ danish ] = "Attributter" ; + Text [ italian ] = "Attributi" ; + Text [ spanish ] = "~Atributos" ; + Text [ french ] = "~Attributs" ; + Text [ dutch ] = "~Attributen" ; + SubMenu = Menu + { + ItemList = + { + MenuItem + { + Identifier = RID_ACUTEX; + HelpId = HID_SMA_ACUTEX; + Text = "acute a"; + }; + MenuItem + { + Identifier = RID_GRAVEX; + HelpId = HID_SMA_GRAVEX; + Text = "grave a"; + }; + MenuItem + { + Identifier = RID_CHECKX; + HelpId = HID_SMA_CHECKX; + Text = "check a"; + }; + MenuItem + { + Identifier = RID_BREVEX; + HelpId = HID_SMA_BREVEX; + Text = "breve a"; + }; + MenuItem + { + Identifier = RID_CIRCLEX; + HelpId = HID_SMA_CIRCLEX; + Text = "circle a"; + }; + MenuItem + { + Identifier = RID_DOTX; + HelpId = HID_SMA_DOTX; + Text = "dot a"; + }; + MenuItem + { + Identifier = RID_DDOTX; + HelpId = HID_SMA_DDOTX; + Text = "ddot a"; + }; + MenuItem + { + Identifier = RID_DDDOTX; + HelpId = HID_SMA_DDDOTX; + Text = "dddot a"; + }; + MenuItem + { + Identifier = RID_BARX; + HelpId = HID_SMA_BARX; + Text = "bar a"; + }; + MenuItem + { + Identifier = RID_VECX; + HelpId = HID_SMA_VECX; + Text = "vec a"; + }; + MenuItem + { + Identifier = RID_TILDEX; + HelpId = HID_SMA_TILDEX; + Text = "tilde a"; + }; + MenuItem + { + Identifier = RID_HATX; + HelpId = HID_SMA_HATX; + Text = "hat a"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_WIDEVECX; + HelpId = HID_SMA_WIDEVECX; + Text = "widevec abc"; + }; + MenuItem + { + Identifier = RID_WIDETILDEX; + HelpId = HID_SMA_WIDETILDEX; + Text = "widetilde abc"; + }; + MenuItem + { + Identifier = RID_WIDEHATX; + HelpId = HID_SMA_WIDEHATX; + Text = "widehat abc"; + }; + MenuItem + { + Identifier = RID_OVERLINEX; + HelpId = HID_SMA_OVERLINEX; + Text = "overline abc"; + }; + MenuItem + { + Identifier = RID_UNDERLINEX; + HelpId = HID_SMA_UNDERLINEX; + Text = "underline abc"; + }; + MenuItem + { + Identifier = RID_OVERSTRIKEX; + HelpId = HID_SMA_OVERSTRIKEX; + Text = "overstrike abc"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_PHANTOMX; + HelpId = HID_SMA_PHANTOMX; + Text = "phantom b"; + }; + MenuItem + { + Identifier = RID_BOLDX; + HelpId = HID_SMA_BOLDX; + Text = "bold b"; + }; + MenuItem + { + Identifier = RID_ITALX; + HelpId = HID_SMA_ITALX; + Text = "ital b"; + }; + MenuItem + { + Identifier = RID_SIZEXY; + HelpId = HID_SMA_SIZEXY; + Text = "size s b"; + }; + MenuItem + { + Identifier = RID_FONTXY; + HelpId = HID_SMA_FONTXY; + Text = "font f b"; + }; + }; + }; + Text[ chinese_simplified ] = "ÊôÐÔ"; + Text[ russian ] = "Àòðèáóòû"; + Text[ polish ] = "Atrybuty"; + Text[ japanese ] = "‘®«"; + Text[ chinese_traditional ] = "ÄÝ©Ê"; + Text[ dutch ] = "~Attributen"; + Text[ chinese_simplified ] = "ÊôÐÔ"; + Text[ greek ] = "~Éäéüôçôåò"; + Text[ korean ] = "¼Ó¼º"; + Text[ arabic ] = "ÓãÇÊ"; + Text[ turkish ] = "Öznitelikler"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = RID_BRACKETS_MENU ; + HelpId = HID_SMA_BRACKETS_TBX ; + Text = "~Klammern" ; + Text [ ENGLISH ] = "Parentheses" ; + Text [ english_us ] = "Brackets" ; + Text [ portuguese_brazilian ] = "Klammern" ; + Text [ swedish ] = "~Parenteser" ; + Text [ danish ] = "Parenteser" ; + Text [ italian ] = "Parentesi" ; + Text [ spanish ] = "~Paréntesis" ; + Text [ french ] = "~Parenthèses" ; + Text [ dutch ] = "~Haakjes" ; + Text [ portuguese ] = "~Parênteses" ; + SubMenu = Menu + { + ItemList = + { + MenuItem + { + Identifier = RID_LRGROUPX; + HelpId = HID_SMA_LRGROUPX; + Text = "{...}"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_LRPARENTX; + HelpId = HID_SMA_LRPARENTX; + Text = "(x)"; + }; + MenuItem + { + Identifier = RID_LRBRACKETX; + HelpId = HID_SMA_LRBRACKETX; + Text = "[x]"; + }; + MenuItem + { + Identifier = RID_LRDBRACKETX; + HelpId = HID_SMA_LRDBRACKETX; + Text = "ldbracket x rdbracket "; + }; + MenuItem + { + Identifier = RID_LRBRACEX; + HelpId = HID_SMA_LRBRACEX; + Text = "{x}"; + }; + MenuItem + { + Identifier = RID_LRANGLEX; + HelpId = HID_SMA_LRANGLEX; + Text = "langle x rangle"; + }; + MenuItem + { + Identifier = RID_LMRANGLEXY; + HelpId = HID_SMA_LMRANGLEXY; + Text = "langle x mline y rangle"; + }; + MenuItem + { + Identifier = RID_LRCEILX; + HelpId = HID_SMA_LRCEILX; + Text = "lceil x rceil"; + }; + MenuItem + { + Identifier = RID_LRFLOORX; + HelpId = HID_SMA_LRFLOORX; + Text = "lfloor x rfloor"; + }; + MenuItem + { + Identifier = RID_LRLINEX; + HelpId = HID_SMA_LRLINEX; + Text = "lline x rline"; + }; + MenuItem + { + Identifier = RID_LRDLINEX; + HelpId = HID_SMA_LRDLINEX; + Text = "ldline x rdline"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_SLRPARENTX; + HelpId = HID_SMA_SLRPARENTX; + Text = "left ( x rigth )"; + }; + MenuItem + { + Identifier = RID_SLRBRACKETX; + HelpId = HID_SMA_SLRBRACKETX; + Text = "left [ x right ]"; + }; + MenuItem + { + Identifier = RID_SLRDBRACKETX; + HelpId = HID_SMA_SLRDBRACKETX; + Text = "left ldbracket x right rdbracket "; + }; + MenuItem + { + Identifier = RID_SLRBRACEX; + HelpId = HID_SMA_SLRBRACEX; + Text = "left { x right }"; + }; + MenuItem + { + Identifier = RID_SLRANGLEX; + HelpId = HID_SMA_SLRANGLEX; + Text = "left langle x right rangle"; + }; + MenuItem + { + Identifier = RID_SLMRANGLEXY; + HelpId = HID_SMA_SLMRANGLEXY; + Text = "left langle x mline y right rangle"; + }; + MenuItem + { + Identifier = RID_SLRCEILX; + HelpId = HID_SMA_SLRCEILX; + Text = "left lceil x right rceil"; + }; + MenuItem + { + Identifier = RID_SLRFLOORX; + HelpId = HID_SMA_SLRFLOORX; + Text = "left lfloor x right rfloor"; + }; + MenuItem + { + Identifier = RID_SLRLINEX; + HelpId = HID_SMA_SLRLINEX; + Text = "left lline x right rline"; + }; + MenuItem + { + Identifier = RID_SLRDLINEX; + HelpId = HID_SMA_SLRDLINEX; + Text = "left ldline x right rdline"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_XOVERBRACEY; + HelpId = HID_SMA_XOVERBRACEY; + Text = "x overbrace y"; + }; + MenuItem + { + Identifier = RID_XUNDERBRACEY; + HelpId = HID_SMA_XUNDERBRACEY; + Text = "x underbrace y"; + }; + }; + }; + Text[ chinese_simplified ] = "À¨ºÅ"; + Text[ russian ] = "Ñêîáêè"; + Text[ polish ] = "Nawiasy"; + Text[ japanese ] = "Š‡ŒÊ"; + Text[ chinese_traditional ] = "¬A¸¹"; + Text[ dutch ] = "~Haakjes"; + Text[ chinese_simplified ] = "À¨ºÅ"; + Text[ greek ] = "~ÐáñåíèÝóåéò"; + Text[ korean ] = "°ýÈ£"; + Text[ arabic ] = "ÃÞæÇÓ"; + Text[ turkish ] = "Ayraçlar"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = RID_FORMAT_MENU ; + HelpId = HID_SMA_FORMAT_TBX ; + Text = "Formatieru~ngen" ; + Text [ ENGLISH ] = "Format" ; + Text [ english_us ] = "F~ormat" ; + Text [ portuguese_brazilian ] = "Formatierungen" ; + Text [ swedish ] = "~Formateringar" ; + Text [ danish ] = "Formateringer" ; + Text [ italian ] = "Formattazioni" ; + Text [ spanish ] = "~Formatos" ; + Text [ french ] = "Format~age" ; + Text [ dutch ] = "~Opmaak" ; + Text [ portuguese ] = "~Formatos" ; + SubMenu = Menu + { + ItemList = + { + MenuItem + { + Identifier = RID_RSUPX; + HelpId = HID_SMA_RSUPX; + Text = "^x"; + }; + MenuItem + { + Identifier = RID_RSUBX; + HelpId = HID_SMA_RSUBX; + Text = "_x"; + }; + MenuItem + { + Identifier = RID_LSUPX; + HelpId = HID_SMA_LSUPX; + Text = "lsup x"; + }; + MenuItem + { + Identifier = RID_LSUBX; + HelpId = HID_SMA_LSUBX; + Text = "lsub x"; + }; + MenuItem + { + Identifier = RID_CSUPX; + HelpId = HID_SMA_CSUPX; + Text = "csup x"; + }; + MenuItem + { + Identifier = RID_CSUBX; + HelpId = HID_SMA_CSUBX; + Text = "csub x"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_NEWLINE; + HelpId = HID_SMA_NEWLINE; + Text = "neue Zeile"; + Text [ ENGLISH ] = "new line" ; + Text[ italian ] = "Nuova riga"; + Text[ portuguese_brazilian ] = "new line"; + Text[ portuguese ] = "nova linha"; + Text[ danish ] = "ny linje"; + Text[ french ] = "nouvelle ligne"; + Text[ swedish ] = "ny rad"; + Text[ dutch ] = "nieuwe regel"; + Text[ spanish ] = "nueva línea"; + Text[ english_us ] = "New Line"; + Text[ chinese_simplified ] = "»»ÐÐ"; + Text[ russian ] = "íîâàÿ ñòðîêà"; + Text[ polish ] = "nowy wiersz"; + Text[ japanese ] = "V‚µ‚¢s"; + Text[ chinese_traditional ] = "´«¦æ"; + Text[ dutch ] = "nieuwe regel"; + Text[ chinese_simplified ] = "»»ÐÐ"; + Text[ greek ] = "ÍÝá ãñáììÞ"; + Text[ korean ] = "»õ ÁÙ"; + Text[ arabic ] = "ÎØ ÌÏíÏ"; + Text[ turkish ] = "Yeni satýr"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = RID_SBLANK; + HelpId = HID_SMA_SBLANK; + Text = "kleiner Zwischenraum"; + Text [ ENGLISH ] = "small space" ; + Text[ italian ] = "Spazio intemedio piccolo"; + Text[ portuguese_brazilian ] = "small space"; + Text[ portuguese ] = "espaçamento pequeno"; + Text[ danish ] = "lille mellemrum"; + Text[ french ] = "Petit espace"; + Text[ swedish ] = "litet mellanrum"; + Text[ dutch ] = "kleine spatie"; + Text[ spanish ] = "espacio pequeño"; + Text[ english_us ] = "Small Gap"; + Text[ chinese_simplified ] = "С¼ä¸ô"; + Text[ russian ] = "êîðîòêèé ïðîáåë"; + Text[ polish ] = "Ma³y odstêp miêdzy ramkami"; + Text[ japanese ] = "¬½Íß°½"; + Text[ chinese_traditional ] = "¤p¶¡¹j"; + Text[ dutch ] = "kleine spatie"; + Text[ chinese_simplified ] = "С¼ä¸ô"; + Text[ greek ] = "ìéêñü äéÜêåíï"; + Text[ korean ] = "ÀÛÀº °£°Ý"; + Text[ arabic ] = "ÊÈÇÚÏ ÕÛíÑ"; + Text[ turkish ] = "Küçük aralýk"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = RID_BLANK; + HelpId = HID_SMA_BLANK; + Text = "Zwischenraum"; + Text [ ENGLISH ] = "space" ; + Text[ italian ] = "Spazio intermedio"; + Text[ portuguese_brazilian ] = "space"; + Text[ portuguese ] = "espaçamento"; + Text[ danish ] = "mellemrum"; + Text[ french ] = "Espace"; + Text[ swedish ] = "mellanrum"; + Text[ dutch ] = "spatie"; + Text[ spanish ] = "espacio"; + Text[ english_us ] = "Gap"; + Text[ chinese_simplified ] = "¼ä¸ô"; + Text[ russian ] = "Ïðîáåë"; + Text[ polish ] = "Odstêp ramek"; + Text[ japanese ] = "½Íß°½"; + Text[ chinese_traditional ] = "¶¡¹j"; + Text[ dutch ] = "spatie"; + Text[ chinese_simplified ] = "¼ä¸ô"; + Text[ greek ] = "ÄéÜêåíï"; + Text[ korean ] = "°£°Ý"; + Text[ arabic ] = "ÊÈÇÚÏ"; + Text[ turkish ] = "Aralýk"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = RID_BINOMXY; + HelpId = HID_SMA_BINOMXY; + Text = "binom x y"; + }; + MenuItem + { + Identifier = RID_STACK; + HelpId = HID_SMA_STACK; + Text = "stack {...}"; + }; + MenuItem + { + Identifier = RID_MATRIX; + HelpId = HID_SMA_MATRIX; + Text = "matrix {...}"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_ALIGNLX; + HelpId = HID_SMA_ALIGNLX; + Text = "alignl x"; + }; + MenuItem + { + Identifier = RID_ALIGNCX; + HelpId = HID_SMA_ALIGNCX; + Text = "alignc x"; + }; + MenuItem + { + Identifier = RID_ALIGNRX; + HelpId = HID_SMA_ALIGNRX; + Text = "alignr x"; + }; + }; + }; + Text[ chinese_simplified ] = "¸ñʽ(~O)"; + Text[ russian ] = "Ôîðìàòû"; + Text[ polish ] = "Formatowania"; + Text[ japanese ] = "‘Ž®Ý’è(~O)"; + Text[ chinese_traditional ] = "®æ¦¡(~O)"; + Text[ dutch ] = "~Opmaak"; + Text[ chinese_simplified ] = "¸ñʽ(~O)"; + Text[ greek ] = "Ìïñ~öïðïéÞóåéò"; + Text[ korean ] = "¼­½Ä(~O)"; + Text[ arabic ] = "ÊäÓíÞ"; + Text[ turkish ] = "Format"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = RID_MISC_MENU ; + HelpId = HID_SMA_MISC_MENU ; + Text = "~Sonstiges" ; + Text [ ENGLISH ] = "Misc" ; + Text [ english_us ] = "~Others" ; + Text [ portuguese_brazilian ] = "Sonstiges" ; + Text [ swedish ] = "Ö~vrigt" ; + Text [ danish ] = "Andet" ; + Text [ italian ] = "Altro" ; + Text [ spanish ] = "~Otros" ; + Text [ french ] = "~Autres" ; + Text [ dutch ] = "D~iversen" ; + Text [ portuguese ] = "~Outros" ; + SubMenu = Menu + { + ItemList = + { + MenuItem + { + Identifier = RID_INFINITY; + HelpId = HID_SMA_INFINITY; + Text = "infinity"; + }; + MenuItem + { + Identifier = RID_PARTIAL; + HelpId = HID_SMA_PARTIAL; + Text = "partial"; + }; + MenuItem + { + Identifier = RID_NABLA; + HelpId = HID_SMA_NABLA; + Text = "nabla"; + }; + MenuItem + { + Identifier = RID_EXISTS; + HelpId = HID_SMA_EXISTS; + Text = "exists"; + }; + MenuItem + { + Identifier = RID_FORALL; + HelpId = HID_SMA_FORALL; + Text = "forall"; + }; + MenuItem + { + Identifier = RID_HBAR; + HelpId = HID_SMA_HBAR; + Text = "hbar"; + }; + MenuItem + { + Identifier = RID_LAMBDABAR; + HelpId = HID_SMA_LAMBDABAR; + Text = "lambdabar"; + }; + MenuItem + { + Identifier = RID_RE; + HelpId = HID_SMA_RE; + Text = "Re"; + }; + MenuItem + { + Identifier = RID_IM; + HelpId = HID_SMA_IM; + Text = "Im"; + }; + MenuItem + { + Identifier = RID_WP; + HelpId = HID_SMA_WP; + Text = "wp"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_LEFTARROW; + HelpId = HID_SMA_LEFTARROW; + Text = "leftarrow"; + }; + MenuItem + { + Identifier = RID_RIGHTARROW; + HelpId = HID_SMA_RIGHTARROW; + Text = "rightarrow"; + }; + MenuItem + { + Identifier = RID_UPARROW; + HelpId = HID_SMA_UPARROW; + Text = "uparrow"; + }; + MenuItem + { + Identifier = RID_DOWNARROW; + HelpId = HID_SMA_DOWNARROW; + Text = "downarrow"; + }; + MenuItem + { + Separator = TRUE; + }; + MenuItem + { + Identifier = RID_DOTSLOW; + HelpId = HID_SMA_DOTSLOW; + Text = "dotslow"; + }; + MenuItem + { + Identifier = RID_DOTSAXIS; + HelpId = HID_SMA_DOTSAXIS; + Text = "dotsaxis"; + }; + MenuItem + { + Identifier = RID_DOTSVERT; + HelpId = HID_SMA_DOTSVERT; + Text = "dotsvert"; + }; + MenuItem + { + Identifier = RID_DOTSUP; + HelpId = HID_SMA_DOTSUP; + Text = "dotsup"; + }; + MenuItem + { + Identifier = RID_DOTSDOWN; + HelpId = HID_SMA_DOTSDOWN; + Text = "dotsdown"; + }; + }; + }; + Text[ chinese_simplified ] = "ÆäËû"; + Text[ russian ] = "Ïðî÷åå"; + Text[ polish ] = "Ró¿ne"; + Text[ japanese ] = "‚»‚Ì‘¼"; + Text[ chinese_traditional ] = "¨ä¥L"; + Text[ dutch ] = "D~iversen"; + Text[ chinese_simplified ] = "ÆäËû"; + Text[ greek ] = "~ÄéÜöïñá"; + Text[ korean ] = "±âŸ(~O)"; + Text[ arabic ] = "ãÇ ÚÏì Ðáß"; + Text[ turkish ] = "Diðer"; + Text[ language_user1 ] = " "; + }; + }; +}; + + + + + + + + + + + + + + + + diff --git a/starmath/source/config.cxx b/starmath/source/config.cxx new file mode 100644 index 000000000000..2a26b23275c3 --- /dev/null +++ b/starmath/source/config.cxx @@ -0,0 +1,381 @@ +/************************************************************************* + * + * $RCSfile: config.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef _SFXITEMSET_HXX //autogen +#include +#endif +#ifndef _SFXHINT_HXX //autogen +#include +#endif +#ifndef _SFXSMPLHINT_HXX //autogen +#include +#endif +#ifndef _SFX_INIMGR_HXX //autogen +#include +#endif +#ifndef _SFXSIDS_HRC //autogen +#include +#endif +#ifndef _SFXENUMITEM_HXX //autogen +#include +#endif +#ifndef _SFXITEMPOOL_HXX //autogen +#include +#endif +#ifndef _SFXSTRITEM_HXX //autogen +#include +#endif +#ifndef _SFXINTITEM_HXX //autogen +#include +#endif + + +#ifndef CONFIG_HXX +#include "config.hxx" +#endif +#ifndef FORMAT_HXX +#include "format.hxx" +#endif +#ifndef _SMMOD_HXX +#include "smmod.hxx" +#endif +#ifndef _STARMATH_HRC +#include "starmath.hrc" +#endif + +#define DEFSYMFILE "starmath$(lang).sms" +#define CONFIGVERSION (INT16)0x0001; + + +SmConfig::SmConfig() : + SfxConfigItem(SMCONFIGITEM) +{ + UseDefault(); + StartListening(aStandardFormat); +} + + +SmConfig::~SmConfig() +{ + EndListening(aStandardFormat); +} + + +void SmConfig::SFX_NOTIFY(SfxBroadcaster &, const TypeId &, + const SfxHint &rHint, const TypeId &) +{ + switch (((SfxSimpleHint &) rHint).GetId()) + { + case HINT_FORMATCHANGED: + SetModified(TRUE); + SetDefault (FALSE); + break; + } +} + + +void SmConfig::ConfigChangedAction() +{ + SetModified(TRUE); + SetDefault(FALSE); + //Broadcast(SfxSimpleHint(HINT_CONFIGCHANGED)); +} + + +void SmConfig::SetValueIfNE(BOOL &rItem, const BOOL bVal) + // "Set 'Modified' and 'Value' if not equal" +{ + if (rItem != bVal) + { rItem = bVal; + ConfigChangedAction(); + } +} + + +void SmConfig::SetSymbolFile(const String &rText) +{ + if (aSymbolFile != rText) + { + aSymbolFile = rText; + ConfigChangedAction(); + } +} + + +int SmConfig::Load(SvStream &rStream) +{ + // Da die Fileformat Version in ConfigItems nur einen Defaultwert hat setzen + // wir diesen hier auf die aktuelle Version, damit beim folgenden (impliziten) + // einlesen des 'SmFormat' Objekts aus dem Stream dieses entsprechend + // reagieren kann. + rStream.SetVersion(SOFFICE_FILEFORMAT_NOW); + + rStream >> *this; + SetDefault(FALSE); + return SfxConfigItem::ERR_OK; +} + + +BOOL SmConfig::Store(SvStream &rStream) +{ + rStream << *this; + return TRUE; +} + +/**************************************************************************/ + +void SmConfig::UseDefault() +{ + SfxConfigItem::UseDefault(); // this implicitly calls 'SetDefault(TRUE)' + + bToolBoxVisible = bCmdBoxWindow = bAutoRedraw = bFormulaCursor = + bPrintTitle = bPrintText = bPrintFrame = bWarnNoSymbols = + bNoRightSpaces = TRUE; + + aSymbolFile = C2S(DEFSYMFILE); + SfxIniManager* pIniMgr = SFX_INIMANAGER(); + pIniMgr->SearchFile( aSymbolFile, SFX_KEY_USERCONFIG_PATH ); + + ePrintSize = PRINT_SIZE_NORMAL; + nPrintZoom = 100; +} + +/**************************************************************************/ + +String SmConfig::GetName() const +{ + return C2S("StarMath"); +} + +/**************************************************************************/ + +void SmConfig::ItemSetToConfig(const SfxItemSet &rSet) +{ + const SfxPoolItem *pItem = NULL; + BOOL bModified = FALSE; + String aSymbolFile; + + if (rSet.GetItemState(SID_SYMBOLFILE, TRUE, &pItem) == SFX_ITEM_SET) + { aSymbolFile = ((const SfxStringItem *) pItem)->GetValue(); + DBG_ASSERT(aSymbolFile.Len() > 0, "Symboldatei nicht angegeben !"); + + if (aSymbolFile != aSymbolFile) + { + SfxModule *p = SM_MOD1(); + SmModule *pp = (SmModule *) p; + + pp->GetConfig()->SetWarnNoSymbols(TRUE); + aSymbolFile = aSymbolFile; + + bModified = TRUE; + } + } + + UINT16 nU16; + if (rSet.GetItemState(SID_PRINTSIZE, TRUE, &pItem) == SFX_ITEM_SET) + { nU16 = ((const SfxUInt16Item *) pItem)->GetValue(); + if (ePrintSize != nU16) + { ePrintSize = (SmPrintSize) nU16; + bModified = TRUE; + } + } + if (rSet.GetItemState(SID_PRINTZOOM, TRUE, &pItem) == SFX_ITEM_SET) + { nU16 = ((const SfxUInt16Item *) pItem)->GetValue(); + if (nPrintZoom != nU16) + { nPrintZoom = (USHORT) nU16; + bModified = TRUE; + } + } + + BOOL bVal; + if (rSet.GetItemState(SID_PRINTTITLE, TRUE, &pItem) == SFX_ITEM_SET) + { bVal = ((const SfxBoolItem *) pItem)->GetValue(); + if (bPrintTitle != bVal) + { bPrintTitle = bVal; + bModified = TRUE; + } + } + if (rSet.GetItemState(SID_PRINTTEXT, TRUE, &pItem) == SFX_ITEM_SET) + { bVal = ((const SfxBoolItem *) pItem)->GetValue(); + if (bPrintText != bVal) + { bPrintText = bVal; + bModified = TRUE; + } + } + if (rSet.GetItemState(SID_PRINTFRAME, TRUE, &pItem) == SFX_ITEM_SET) + { bVal = ((const SfxBoolItem *) pItem)->GetValue(); + if (bPrintFrame != bVal) + { bPrintFrame = bVal; + bModified = TRUE; + } + } + if (rSet.GetItemState(SID_AUTOREDRAW, TRUE, &pItem) == SFX_ITEM_SET) + { bVal = ((const SfxBoolItem *) pItem)->GetValue(); + if (bAutoRedraw != bVal) + { bAutoRedraw = bVal; + bModified = TRUE; + } + } + if (rSet.GetItemState(SID_NO_RIGHT_SPACES, TRUE, &pItem) == SFX_ITEM_SET) + { bVal = ((const SfxBoolItem *) pItem)->GetValue(); + if (bNoRightSpaces != bVal) + { bNoRightSpaces = bVal; + bModified = TRUE; + + // (angezeigte) Formeln müssen entsprechen neu formatiert werden. + // Das erreichen wir mit: + Broadcast(SfxSimpleHint(HINT_FORMATCHANGED)); + } + } + + if (bModified) + ConfigChangedAction(); +} + + +void SmConfig::ConfigToItemSet(SfxItemSet &rSet) const +{ + const SfxItemPool *pPool = rSet.GetPool(); + + rSet.Put(SfxStringItem(pPool->GetWhich(SID_SYMBOLFILE), + aSymbolFile)); + + rSet.Put(SfxUInt16Item(pPool->GetWhich(SID_PRINTSIZE), + (UINT16) ePrintSize)); + rSet.Put(SfxUInt16Item(pPool->GetWhich(SID_PRINTZOOM), + (UINT16) nPrintZoom)); + + rSet.Put(SfxBoolItem(pPool->GetWhich(SID_PRINTTITLE), bPrintTitle)); + rSet.Put(SfxBoolItem(pPool->GetWhich(SID_PRINTTEXT), bPrintText)); + rSet.Put(SfxBoolItem(pPool->GetWhich(SID_PRINTFRAME), bPrintFrame)); + rSet.Put(SfxBoolItem(pPool->GetWhich(SID_AUTOREDRAW), bAutoRedraw)); + rSet.Put(SfxBoolItem(pPool->GetWhich(SID_NO_RIGHT_SPACES), bNoRightSpaces)); +} + + +/**************************************************************************/ + + +SvStream & operator << (SvStream &rStream, const SmConfig &rConfig) +{ + rStream << CONFIGVERSION; + + UINT16 nFlags = rConfig.bPrintTitle + | (rConfig.bPrintText << 1) + | (rConfig.bPrintFrame << 2) + | (rConfig.bWarnNoSymbols << 3) + | (rConfig.bToolBoxVisible << 4) + | (rConfig.bCmdBoxWindow << 5) + | (rConfig.bAutoRedraw << 6) + | (rConfig.bFormulaCursor << 7) + | (rConfig.bNoRightSpaces << 8); + + rStream << nFlags; + + rStream << (INT16) rConfig.ePrintSize; + rStream << (INT16) rConfig.nPrintZoom; + + rStream.WriteByteString(rConfig.aSymbolFile, gsl_getSystemTextEncoding()); + rStream << rConfig.aStandardFormat; + + for (int i = 0; i < 7; i++) + rStream << rConfig.vFontPickList[i]; + + return rStream; +} + + +SvStream & operator >> (SvStream &rStream, SmConfig &rConfig) +{ + INT16 nVer; + rStream >> nVer; + + UINT16 nFlags; + rStream >> nFlags; + + rConfig.bPrintTitle = nFlags & 0x01; + rConfig.bPrintText = (nFlags >> 1) & 0x01; + rConfig.bPrintFrame = (nFlags >> 2) & 0x01; + rConfig.bWarnNoSymbols = (nFlags >> 3) & 0x01; + rConfig.bToolBoxVisible = (nFlags >> 4) & 0x01; + rConfig.bCmdBoxWindow = (nFlags >> 5) & 0x01; + rConfig.bAutoRedraw = (nFlags >> 6) & 0x01; + rConfig.bFormulaCursor = (nFlags >> 7) & 0x01; + rConfig.bNoRightSpaces = (nFlags >> 8) & 0x01; + + INT16 nI16; + rStream >> nI16; + rConfig.ePrintSize = (SmPrintSize) nI16; + rStream >> nI16; + rConfig.nPrintZoom = (USHORT) nI16; + + rStream.ReadByteString(rConfig.aSymbolFile, gsl_getSystemTextEncoding()); + rStream >> rConfig.aStandardFormat; + + for (int i = 0; i < 7; i++) + rStream >> rConfig.vFontPickList[i]; + + return rStream; +} + + diff --git a/starmath/source/dialog.cxx b/starmath/source/dialog.cxx new file mode 100644 index 000000000000..056103b3c61b --- /dev/null +++ b/starmath/source/dialog.cxx @@ -0,0 +1,2405 @@ +/************************************************************************* + * + * $RCSfile: dialog.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#define SMDLL 1 + +#ifndef _TOOLS_RCID_H +#include "tools/rcid.h" +#endif + +#ifndef _SFXENUMITEM_HXX //autogen +#include +#endif +#ifndef _SFXINTITEM_HXX //autogen +#include +#endif +#ifndef _IODLG_HXX +#include +#endif +#ifndef _SFXSTRITEM_HXX //autogen +#include +#endif +#ifndef _SFXAPP_HXX //autogen +#include +#endif +#ifndef _SV_MSGBOX_HXX //autogen +#include +#endif +#ifndef _CTRLTOOL_HXX //autogen +#include +#endif +#ifndef _SFX_PRINTER_HXX +#include +#endif +#ifndef _SV_SOUND_HXX //autogen +#include +#endif +#ifndef _SV_SNDSTYLE_HXX //autogen +#include +#endif +#ifndef _SV_WAITOBJ_HXX +#include +#endif +#ifndef _SFXDISPATCH_HXX //autogen +#include +#endif +#ifndef _SFX_HRC //autogen +#include +#endif +#ifndef _STRING_HXX //autogen +#include +#endif +#ifndef _TOOLS_DEBUG_HXX //autogen +#include +#endif + + +#ifndef CONFIG_HXX +#include "config.hxx" +#endif +#ifndef DIALOG_HXX +#include "dialog.hxx" +#endif +#ifndef _STARMATH_HRC +#include "starmath.hrc" +#endif +#ifndef _SMMOD_HXX +#include "smmod.hxx" +#endif +#ifndef SYMBOL_HXX +#include "symbol.hxx" +#endif +#ifndef VIEW_HXX +#include "view.hxx" +#endif +#ifndef DOCUMENT_HXX +#include "document.hxx" +#endif + +//////////////////////////////////////// +// +// Da der FontStyle besser über die Attribute gesetzt/abgefragt wird als über +// den StyleName bauen wir uns hier unsere eigene Übersetzung +// Attribute <-> StyleName +// Die Bits des Index stellen die Attribute dar: +// Bit 0 : italic +// Bit 1 : bold +// + +static XubString __READONLY_DATA aStyleName[4] = +{ + C2S("normal"), C2S("italic"), + C2S("bold"), C2S("bold italic") +}; + +USHORT aStyleNameCount = sizeof(aStyleName) / sizeof(aStyleName[0]); + + +const XubString GetFontStyleName(const Font &rFont) +{ + USHORT nIndex = 2 * (rFont.GetWeight() == WEIGHT_BOLD) + + 1 * (rFont.GetItalic() == ITALIC_NORMAL); + return aStyleName[nIndex]; +} + + +void SetFontStyle(const XubString &rStyleName, Font &rFont) +{ + // finden des Index passend zum StyleName fuer den leeren StyleName wird + // 0 (nicht bold nicht italic) angenommen. + USHORT nIndex = 0; + if (rStyleName.Len()) + { + USHORT i; + for (i = 0; i < aStyleNameCount; i++) + if (rStyleName.CompareTo(aStyleName[i]) == COMPARE_EQUAL) + break; + DBG_ASSERT(i < aStyleNameCount, "Sm : StyleName unbekannt"); + nIndex = i; + } + + rFont.SetItalic((nIndex & 0x1) ? ITALIC_NORMAL : ITALIC_NONE); + rFont.SetWeight((nIndex & 0x2) ? WEIGHT_BOLD : WEIGHT_NORMAL); +} + + +/**************************************************************************/ + +SmAboutDialog::SmAboutDialog(Window *pParent, BOOL bFreeRes) : + ModalDialog (pParent, SmResId(RID_DEFAULTABOUT)), + aFixedText1 (this, ResId(1)), + aFixedText2 (this, ResId(2)), + aFixedText3 (this, ResId(3)), + aFixedText4 (this, ResId(4)), + aFixedText5 (this, ResId(5)), + aFixedText6 (this, ResId(6)), + aReleaseText (this, ResId(7)), + aFixedBitmap1(this, ResId(1)), + aOKButton1 (this, ResId(1)) +{ + if (bFreeRes) + FreeResource(); + +#ifndef PRODUCT + aReleaseText.Show(); +#else + aReleaseText.Hide(); +#endif + +} + +/**************************************************************************/ + + +IMPL_LINK_INLINE_START( SmPrintOptionsTabPage, SizeButtonClickHdl, Button *, pButton ) +{ + aZoom.Enable(aSizeZoomed.IsChecked()); + return 0; +} +IMPL_LINK_INLINE_END( SmPrintOptionsTabPage, SizeButtonClickHdl, Button *, pButton ) + + +SmPrintOptionsTabPage::SmPrintOptionsTabPage(Window *pParent, const SfxItemSet &rOptions) + : SfxTabPage(pParent, SmResId(RID_PRINTOPTIONPAGE), rOptions), + aGroupBox1 (this, ResId(1)), + aTitle (this, ResId(1)), + aText (this, ResId(2)), + aFrame (this, ResId(3)), + aGroupBox3 (this, ResId(3)), + aNoRightSpaces (this, ResId(4)), + aGroupBox2 (this, ResId(2)), + aSizeNormal (this, ResId(1)), + aSizeScaled (this, ResId(2)), + aSizeZoomed (this, ResId(3)), + aZoom (this, ResId(1)) +{ + FreeResource(); + + aSizeNormal.SetClickHdl(LINK(this, SmPrintOptionsTabPage, SizeButtonClickHdl)); + aSizeScaled.SetClickHdl(LINK(this, SmPrintOptionsTabPage, SizeButtonClickHdl)); + aSizeZoomed.SetClickHdl(LINK(this, SmPrintOptionsTabPage, SizeButtonClickHdl)); + + Reset(rOptions); +} + + +BOOL SmPrintOptionsTabPage::FillItemSet(SfxItemSet& rSet) +{ + UINT16 nPrintSize; + if (aSizeNormal.IsChecked()) + nPrintSize = PRINT_SIZE_NORMAL; + else if (aSizeScaled.IsChecked()) + nPrintSize = PRINT_SIZE_SCALED; + else + nPrintSize = PRINT_SIZE_ZOOMED; + + rSet.Put(SfxUInt16Item(GetWhich(SID_PRINTSIZE), (UINT16) nPrintSize)); + rSet.Put(SfxUInt16Item(GetWhich(SID_PRINTZOOM), (UINT16) aZoom.GetValue())); + rSet.Put(SfxBoolItem(GetWhich(SID_PRINTTITLE), aTitle.IsChecked())); + rSet.Put(SfxBoolItem(GetWhich(SID_PRINTTEXT), aText.IsChecked())); + rSet.Put(SfxBoolItem(GetWhich(SID_PRINTFRAME), aFrame.IsChecked())); + rSet.Put(SfxBoolItem(GetWhich(SID_NO_RIGHT_SPACES), aNoRightSpaces.IsChecked())); + + return TRUE; +} + + +void SmPrintOptionsTabPage::Reset(const SfxItemSet& rSet) +{ + SmPrintSize ePrintSize = (SmPrintSize)((const SfxUInt16Item &)rSet.Get(GetWhich(SID_PRINTSIZE))).GetValue(); + + aSizeNormal.Check(ePrintSize == PRINT_SIZE_NORMAL); + aSizeScaled.Check(ePrintSize == PRINT_SIZE_SCALED); + aSizeZoomed.Check(ePrintSize == PRINT_SIZE_ZOOMED); + + aZoom.Enable(aSizeZoomed.IsChecked()); + + aZoom.SetValue(((const SfxUInt16Item &)rSet.Get(GetWhich(SID_PRINTZOOM))).GetValue()); + + aTitle.Check(((const SfxBoolItem &)rSet.Get(GetWhich(SID_PRINTTITLE))).GetValue()); + aText.Check(((const SfxBoolItem &)rSet.Get(GetWhich(SID_PRINTTEXT))).GetValue()); + aFrame.Check(((const SfxBoolItem &)rSet.Get(GetWhich(SID_PRINTFRAME))).GetValue()); + aNoRightSpaces.Check(((const SfxBoolItem &)rSet.Get(GetWhich(SID_NO_RIGHT_SPACES))).GetValue()); +} + + +SfxTabPage* SmPrintOptionsTabPage::Create(Window* pWindow, const SfxItemSet& rSet) +{ + return (new SmPrintOptionsTabPage(pWindow, rSet)); +} + +/**************************************************************************/ + + +#ifdef NEVER +SmExtraOptionsTabPage::SmExtraOptionsTabPage(const SfxItemSet& rInSet, Window * pParent, BOOL bFreeRes) + : SfxTabPage(pParent, SmResId(RID_EXTRAOPTIONPAGE), rInSet), + aAutoRedraw (this, ResId(1)), + aFixedText1 (this, ResId(1)), + aSymbolFile (this, ResId(2), 32), + aBrowseButton (this, ResId(1)) +{ + if (bFreeRes) + FreeResource(); + + aBrowseButton.SetClickHdl(LINK(this, SmExtraOptionsTabPage, SymClickHdl)); +} + + +IMPL_LINK( SmExtraOptionsTabPage, SymClickHdl, PushButton *, pPushButton ) +{ + SfxSimpleFileDialog *pFileDialog = + new SfxSimpleFileDialog(this, WinBits(WB_OPEN | WB_3DLOOK)); + +#ifdef MAC + pFileDialog->AddFilter(SmResId(RID_SYMBOLFILESSTR), SmResId(RID_FILESYMTYP)); + pFileDialog->AddFilter(SmResId(RID_ALLFILESSTR), "****"); + + pFileDialog->SetCurFilter(SmResId(RID_SYMBOLFILESSTR)); +#else + pFileDialog->AddFilter(SmResId(RID_SYMBOLFILESSTR), C2S("*.sms")); + pFileDialog->AddFilter(SmResId(RID_ALLFILESSTR), C2S("*.*")); + + pFileDialog->SetCurFilter(SmResId(RID_SYMBOLFILESSTR)); + + pFileDialog->SetDefaultExt(C2S("*.sms")); +#endif + + pFileDialog->SetPath(aSymbolFile.GetText()); + + if (pFileDialog->Execute() == RET_OK) + aSymbolFile.SetText(pFileDialog->GetPath()); + + delete pFileDialog; + return 0; +} + + +BOOL SmExtraOptionsTabPage::FillItemSet(SfxItemSet& rOutSet) +{ + rOutSet.Put(SfxBoolItem(GetWhich(SID_AUTOREDRAW), aAutoRedraw.IsChecked())); + rOutSet.Put(SfxStringItem(GetWhich(SID_SYMBOLFILE), aSymbolFile.GetText())); + + return (TRUE); +} + + +void SmExtraOptionsTabPage::Reset(const SfxItemSet& rOutSet) +{ + aAutoRedraw.Check(((const SfxBoolItem&)rOutSet.Get(GetWhich(SID_AUTOREDRAW))).GetValue()); + aSymbolFile.SetText(((const SfxStringItem&)rOutSet.Get(GetWhich(SID_SYMBOLFILE))).GetValue()); +} + + +SfxTabPage* SmExtraOptionsTabPage::Create(Window* pWindow, const SfxItemSet& rSet) +{ + return (new SmExtraOptionsTabPage(rSet, pWindow)); +} +#endif //NEVER + +/**************************************************************************/ + + +void SmShowFont::Paint(const Rectangle&) +{ + XubString Text (GetFont().GetName()); + Size TextSize(GetTextWidth(Text), GetTextHeight()); + + DrawText(Point((GetOutputSize().Width() - TextSize.Width()) / 2, + (GetOutputSize().Height() - TextSize.Height()) / 2), Text); +} + + +void SmShowFont::SetFont(const Font& rFont) +{ + Font aFont (rFont); + + Invalidate(); + aFont.SetSize(Size(0, 24)); + aFont.SetAlign(ALIGN_TOP); + Control::SetFont(aFont); +} + + +IMPL_LINK_INLINE_START( SmFontDialog, FontChangeHdl, ComboBox *, pComboBox ) +{ + Face.SetName(pComboBox->GetText()); + aShowFont.SetFont(Face); + return 0; +} +IMPL_LINK_INLINE_END( SmFontDialog, FontChangeHdl, ComboBox *, pComboBox ) + + +IMPL_LINK( SmFontDialog, AttrChangeHdl, CheckBox *, pCheckBox ) +{ + if (aBoldCheckBox.IsChecked()) + Face.SetWeight(FontWeight(WEIGHT_BOLD)); + else + Face.SetWeight(FontWeight(WEIGHT_NORMAL)); + + if (aItalicCheckBox.IsChecked()) + Face.SetItalic(ITALIC_NORMAL); + else + Face.SetItalic(ITALIC_NONE); + + aShowFont.SetFont(Face); + return 0; +} + + +void SmFontDialog::SetFont(const Font &rFont) +{ + Face = rFont; + + aFontBox.SetText(Face.GetName()); + aBoldCheckBox.Check(Face.GetWeight() == WEIGHT_BOLD); + aItalicCheckBox.Check(Face.GetItalic() != ITALIC_NONE); + + aShowFont.SetFont(Face); +} + + +SmFontDialog::SmFontDialog(Window * pParent, BOOL bFreeRes) + : ModalDialog(pParent,SmResId(RID_FONTDIALOG)), + aFixedText1 (this, ResId(1)), + aFontBox (this, ResId(1)), + aBoldCheckBox (this, ResId(1)), + aItalicCheckBox (this, ResId(2)), + aOKButton1 (this, ResId(1)), + aCancelButton1 (this, ResId(1)), + aShowFont (this, ResId(1)), + aGroupBox1 (this, ResId(1)), + aGroupBox2 (this, ResId(2)) +{ + if (bFreeRes) + FreeResource(); + + { + WaitObject( this ); + //Application::EnterWait(); + + // get FontList from printer (if possible), otherwise from application window + SmViewShell *pView = SmGetActiveView(); + DBG_ASSERT(pView, "Sm : NULL pointer"); + OutputDevice *pDev = pView->GetDoc()->GetPrinter(); + if (!pDev || pDev->GetDevFontCount() == 0) + pDev = &pView->GetGraphicWindow(); + FontList aFontList(pDev); + + USHORT nCount = aFontList.GetFontNameCount(); + for (USHORT i = 0; i < nCount; i++) + aFontBox.InsertEntry( aFontList.GetFontName(i).GetName() ); + + Face.SetSize(Size(0, 24)); + Face.SetWeight(WEIGHT_NORMAL); + Face.SetItalic(ITALIC_NONE); + Face.SetFamily(FAMILY_DONTKNOW); + Face.SetPitch(PITCH_DONTKNOW); + Face.SetCharSet(RTL_TEXTENCODING_DONTKNOW); + Face.SetTransparent(TRUE); + + aShowFont.SetFillColor( Color(COL_LIGHTGRAY) ); + + //Application::LeaveWait(); + } + + aFontBox.SetSelectHdl(LINK(this, SmFontDialog, FontChangeHdl)); + aBoldCheckBox.SetClickHdl(LINK(this, SmFontDialog, AttrChangeHdl)); + aItalicCheckBox.SetClickHdl(LINK(this, SmFontDialog, AttrChangeHdl)); +} + +/**************************************************************************/ + + +IMPL_LINK( SmFontSizeDialog, DefaultButtonClickHdl, Button *, pButton ) +{ + QueryBox *pQueryBox = new QueryBox(this, SmResId(RID_DEFAULTSAVEQUERY)); + + if (pQueryBox->Execute() == RET_YES) + { + SmModule *pp = SM_MOD1(); + WriteTo(pp->GetConfig()->GetFormat()); + } + + delete pQueryBox; + return 0; +} + + +SmFontSizeDialog::SmFontSizeDialog(Window * pParent, BOOL bFreeRes) + : ModalDialog(pParent, SmResId(RID_FONTSIZEDIALOG)), + aFixedText1(this, ResId(1)), + aBaseSize(this, ResId(1)), + aFixedText4(this, ResId(4)), + aTextSize(this, ResId(4)), + aFixedText5(this, ResId(5)), + aIndexSize(this, ResId(5)), + aFixedText6(this, ResId(6)), + aFunctionSize(this, ResId(6)), + aFixedText7(this, ResId(7)), + aOperatorSize(this, ResId(7)), + aFixedText8(this, ResId(8)), + aBorderSize(this, ResId(8)), + aGroupBox1(this, ResId(1)), + aOKButton1(this, ResId(1)), + aCancelButton1(this, ResId(1)), + aDefaultButton(this, ResId(1)) +{ + if (bFreeRes) + FreeResource(); + + aDefaultButton.SetClickHdl(LINK(this, SmFontSizeDialog, DefaultButtonClickHdl)); +} + + +void SmFontSizeDialog::ReadFrom(const SmFormat &rFormat) +{ + //! aufpassen: richtig runden! + aBaseSize.SetValue( SmRoundFraction( + Sm100th_mmToPts( rFormat.GetBaseSize().Height() ) ) ); + + aTextSize .SetValue( rFormat.GetRelSize(SIZ_TEXT) ); + aIndexSize .SetValue( rFormat.GetRelSize(SIZ_INDEX) ); + aFunctionSize.SetValue( rFormat.GetRelSize(SIZ_FUNCTION) ); + aOperatorSize.SetValue( rFormat.GetRelSize(SIZ_OPERATOR) ); + aBorderSize .SetValue( rFormat.GetRelSize(SIZ_LIMITS) ); +} + + +void SmFontSizeDialog::WriteTo(SmFormat &rFormat) const +{ + rFormat.SetBaseSize( Size(0, SmPtsTo100th_mm(aBaseSize.GetValue())) ); + + rFormat.SetRelSize(SIZ_TEXT, (USHORT) aTextSize .GetValue()); + rFormat.SetRelSize(SIZ_INDEX, (USHORT) aIndexSize .GetValue()); + rFormat.SetRelSize(SIZ_FUNCTION, (USHORT) aFunctionSize.GetValue()); + rFormat.SetRelSize(SIZ_OPERATOR, (USHORT) aOperatorSize.GetValue()); + rFormat.SetRelSize(SIZ_LIMITS, (USHORT) aBorderSize .GetValue()); + + const Size aTmp (rFormat.GetBaseSize()); + for (USHORT i = FNT_BEGIN; i <= FNT_END; i++) + rFormat.Font(i).SetSize(aTmp); + + rFormat.RequestApplyChanges(); +} + + +/**************************************************************************/ + + +IMPL_LINK( SmFontTypeDialog, MenuSelectHdl, Menu *, pMenu ) +{ + SmFontPickListBox *pActiveListBox; + + switch (pMenu->GetCurItemId()) + { + case 1: pActiveListBox = &aVariableFont; break; + case 2: pActiveListBox = &aFunctionFont; break; + case 3: pActiveListBox = &aNumberFont; break; + case 4: pActiveListBox = &aTextFont; break; + case 5: pActiveListBox = &aSerifFont; break; + case 6: pActiveListBox = &aSansFont; break; + case 7: pActiveListBox = &aFixedFont; break; + default:pActiveListBox = NULL; + } + + if (pActiveListBox) + { + SmFontDialog *pFontDialog = new SmFontDialog(this); + + pActiveListBox->WriteTo(*pFontDialog); + if (pFontDialog->Execute() == RET_OK) + pActiveListBox->ReadFrom(*pFontDialog); + delete pFontDialog; + } + return 0; +} + + +IMPL_LINK_INLINE_START( SmFontTypeDialog, DefaultButtonClickHdl, Button *, pButton ) +{ + QueryBox *pQueryBox = new QueryBox(this, SmResId(RID_DEFAULTSAVEQUERY)); + if (pQueryBox->Execute() == RET_YES) + { + SmModule *pp = SM_MOD1(); + WriteTo(pp->GetConfig()->GetFormat()); + } + + delete pQueryBox; + return 0; +} +IMPL_LINK_INLINE_END( SmFontTypeDialog, DefaultButtonClickHdl, Button *, pButton ) + + +SmFontTypeDialog::SmFontTypeDialog(Window * pParent, BOOL bFreeRes) + : ModalDialog(pParent, SmResId(RID_FONTTYPEDIALOG)), + aFixedText1 (this, ResId(1)), + aVariableFont (this, ResId(1)), + aFixedText2 (this, ResId(2)), + aFunctionFont (this, ResId(2)), + aFixedText3 (this, ResId(3)), + aNumberFont (this, ResId(3)), + aFixedText4 (this, ResId(4)), + aTextFont (this, ResId(4)), + aFixedText5 (this, ResId(5)), + aSerifFont (this, ResId(5)), + aFixedText6 (this, ResId(6)), + aSansFont (this, ResId(6)), + aFixedText7 (this, ResId(7)), + aFixedFont (this, ResId(7)), + aGroupBox1 (this, ResId(1)), + aGroupBox2 (this, ResId(2)), + aOKButton1 (this, ResId(1)), + aCancelButton1 (this, ResId(1)), + aMenuButton (this, ResId(1)), + aDefaultButton (this, ResId(2)) +{ + if (bFreeRes) + FreeResource(); + + aDefaultButton.SetClickHdl(LINK(this, SmFontTypeDialog, DefaultButtonClickHdl)); + + aMenuButton.GetPopupMenu()->SetSelectHdl(LINK(this, SmFontTypeDialog, MenuSelectHdl)); +} + +void SmFontTypeDialog::ReadFrom(const SmFormat &rFormat) +{ + SmModule *pp = SM_MOD1(); + + aVariableFont = pp->GetConfig()->GetFontPickList(FNT_VARIABLE); + aFunctionFont = pp->GetConfig()->GetFontPickList(FNT_FUNCTION); + aNumberFont = pp->GetConfig()->GetFontPickList(FNT_NUMBER); + aTextFont = pp->GetConfig()->GetFontPickList(FNT_TEXT); + aSerifFont = pp->GetConfig()->GetFontPickList(FNT_SERIF); + aSansFont = pp->GetConfig()->GetFontPickList(FNT_SANS); + aFixedFont = pp->GetConfig()->GetFontPickList(FNT_FIXED); + + aVariableFont.Insert( rFormat.GetFont(FNT_VARIABLE) ); + aFunctionFont.Insert( rFormat.GetFont(FNT_FUNCTION) ); + aNumberFont .Insert( rFormat.GetFont(FNT_NUMBER) ); + aTextFont .Insert( rFormat.GetFont(FNT_TEXT) ); + aSerifFont .Insert( rFormat.GetFont(FNT_SERIF) ); + aSansFont .Insert( rFormat.GetFont(FNT_SANS) ); + aFixedFont .Insert( rFormat.GetFont(FNT_FIXED) ); +} + + +void SmFontTypeDialog::WriteTo(SmFormat &rFormat) const +{ + SmModule *pp = SM_MOD1(); + + pp->GetConfig()->GetFontPickList(FNT_VARIABLE) = aVariableFont; + pp->GetConfig()->GetFontPickList(FNT_FUNCTION) = aFunctionFont; + pp->GetConfig()->GetFontPickList(FNT_NUMBER) = aNumberFont; + pp->GetConfig()->GetFontPickList(FNT_TEXT) = aTextFont; + pp->GetConfig()->GetFontPickList(FNT_SERIF) = aSerifFont; + pp->GetConfig()->GetFontPickList(FNT_SANS) = aSansFont; + pp->GetConfig()->GetFontPickList(FNT_FIXED) = aFixedFont; + + rFormat.SetFont( FNT_VARIABLE, aVariableFont.Get(0) ); + rFormat.SetFont( FNT_FUNCTION, aFunctionFont.Get(0) ); + rFormat.SetFont( FNT_NUMBER, aNumberFont .Get(0) ); + rFormat.SetFont( FNT_TEXT, aTextFont .Get(0) ); + rFormat.SetFont( FNT_SERIF, aSerifFont .Get(0) ); + rFormat.SetFont( FNT_SANS, aSansFont .Get(0) ); + rFormat.SetFont( FNT_FIXED, aFixedFont .Get(0) ); + + for (USHORT i = FNT_BEGIN; i <= FNT_FIXED; i++) + rFormat.Font(i).SetTransparent(TRUE); + + rFormat.RequestApplyChanges(); +} + +/**************************************************************************/ + +struct FieldMinMax +{ + USHORT nMin, nMax; +}; + +// Data for min and max values of the 4 metric fields +// for each of the 10 categories +static const FieldMinMax pMinMaxData[10][4] = +{ + // 0 + {{ 0, 200 }, { 0, 200 }, { 0, 100 }, { 0, 0 }}, + // 1 + {{ 0, 100 }, { 0, 100 }, { 0, 0 }, { 0, 0 }}, + // 2 + {{ 0, 100 }, { 0, 100 }, { 0, 0 }, { 0, 0 }}, + // 3 + {{ 0, 100 }, { 1, 100 }, { 0, 0 }, { 0, 0 }}, + // 4 + {{ 0, 100 }, { 0, 100 }, { 0, 0 }, { 0, 0 }}, + // 5 + {{ 0, 100 }, { 0, 100 }, { 0, 0 }, { 0, 100 }}, + // 6 + {{ 0, 300 }, { 0, 300 }, { 0, 0 }, { 0, 0 }}, + // 7 + {{ 0, 100 }, { 0, 100 }, { 0, 0 }, { 0, 0 }}, + // 8 + {{ 0, 100 }, { 0, 100 }, { 0, 0 }, { 0, 0 }}, + // 9 + {{ 0, 10000 }, { 0, 10000 }, { 0, 10000 }, { 0, 10000 }} +}; + +SmCategoryDesc::SmCategoryDesc(const ResId& rResId, USHORT nCategoryIdx) : + Resource(rResId) +{ + if (IsAvailableRes(ResId(1).SetRT(RSC_STRING))) + { + Name = XubString(ResId(1)); + + int i; + for (i = 0; i < 4; i++) + { + int nI2 = i + 2; + + if (IsAvailableRes(ResId(nI2).SetRT(RSC_STRING))) + { + Strings[i] = new XubString(ResId(nI2)); + Graphics[i] = new Bitmap(ResId(nI2)); + } + else + { + Strings[i] = 0; + Graphics[i] = 0; + } + } + + for (i = 0; i < 4; i++) + { + const FieldMinMax &rMinMax = pMinMaxData[ nCategoryIdx ][i]; + Value[i] = Minimum[i] = rMinMax.nMin; + Maximum[i] = rMinMax.nMax; + } + } + + FreeResource(); +} + + +SmCategoryDesc::~SmCategoryDesc() +{ + for (int i = 0; i < 4; i++) + { + delete Strings[i]; + delete Graphics[i]; + } +} + +/**************************************************************************/ + +IMPL_LINK( SmDistanceDialog, GetFocusHdl, Control *, pControl ) +{ + if (Categories[nActiveCategory]) + { + USHORT i; + + if (pControl == &aMetricField1) + i = 0; + else if (pControl == &aMetricField2) + i = 1; + else if (pControl == &aMetricField3) + i = 2; + else if (pControl == &aMetricField4) + i = 3; + else + return 0; + aBitmap.SetBitmap(*(Categories[nActiveCategory]->GetGraphic(i))); + } + return 0; +} + +IMPL_LINK( SmDistanceDialog, MenuSelectHdl, Menu *, pMenu ) +{ + SetCategory(pMenu->GetCurItemId() - 1); + return 0; +} + + +IMPL_LINK( SmDistanceDialog, DefaultButtonClickHdl, Button *, pButton ) +{ + QueryBox *pQueryBox = new QueryBox(this, SmResId(RID_DEFAULTSAVEQUERY)); + + if (pQueryBox->Execute() == RET_YES) + { + SmModule *pp = SM_MOD1(); + WriteTo(pp->GetConfig()->GetFormat()); + } + delete pQueryBox; + return 0; +} + + +IMPL_LINK( SmDistanceDialog, CheckBoxClickHdl, CheckBox *, pCheckBox ) +{ + if (pCheckBox == &aCheckBox1) + { + aCheckBox1.Toggle(); + + BOOL bChecked = aCheckBox1.IsChecked(); + aFixedText4 .Enable( bChecked ); + aMetricField4.Enable( bChecked ); + } + return 0; +} + + +void SmDistanceDialog::SetHelpId(MetricField &rField, ULONG nHelpId) +{ + //! HelpID's die auf diese Weise explizit gesetzt werden, müssen im + //! util Verzeichnis im File "hidother.src" mit Hilfe von "hidspecial" + //! definiert werden! + + const XubString aEmptyText; + DBG_ASSERT(aEmptyText.Len() == 0, "Sm: Ooops..."); + + rField.SetHelpId(nHelpId); + rField.SetHelpText(aEmptyText); + + // since MetricField inherits from SpinField which has a sub Edit field + // (which is actually the one we modify) we have to set the help-id + // for it too. + Edit *pSubEdit = rField.GetSubEdit(); + if (pSubEdit) + { pSubEdit->SetHelpId(nHelpId); + pSubEdit->SetHelpText(aEmptyText); + } +} + + +void SmDistanceDialog::SetCategory(USHORT nCategory) +{ + DBG_ASSERT(0 <= nCategory && nCategory < NOCATEGORIES, + "Sm: falsche Kategorienummer in SmDistanceDialog"); + + // array to convert category- and metricfield-number in help ids. + // 0 is used in case of unused combinations. + DBG_ASSERT(NOCATEGORIES == 10, "Sm : Array paßt nicht zu Anzahl der Kategorien"); + ULONG __READONLY_DATA aCatMf2Hid[10][4] = + { + HID_SMA_DEFAULT_DIST, HID_SMA_LINE_DIST, HID_SMA_ROOT_DIST, 0, + HID_SMA_SUP_DIST, HID_SMA_SUB_DIST , 0, 0, + HID_SMA_NUMERATOR_DIST, HID_SMA_DENOMINATOR_DIST, 0, 0, + HID_SMA_FRACLINE_EXCWIDTH, HID_SMA_FRACLINE_LINEWIDTH, 0, 0, + HID_SMA_UPPERLIMIT_DIST, HID_SMA_LOWERLIMIT_DIST, 0, 0, + HID_SMA_BRACKET_EXCHEIGHT, HID_SMA_BRACKET_DIST, 0, HID_SMA_BRACKET_EXCHEIGHT2, + HID_SMA_MATRIXROW_DIST, HID_SMA_MATRIXCOL_DIST, 0, 0, + HID_SMA_ATTRIBUT_DIST, HID_SMA_INTERATTRIBUT_DIST, 0, 0, + HID_SMA_OPERATOR_EXCHEIGHT, HID_SMA_OPERATOR_DIST, 0, 0, + HID_SMA_LEFTBORDER_DIST, HID_SMA_RIGHTBORDER_DIST, HID_SMA_UPPERBORDER_DIST, HID_SMA_LOWERBORDER_DIST + }; + + // array to help iterate over the controls + Window * __READONLY_DATA aWin[4][2] = + { + &aFixedText1, &aMetricField1, + &aFixedText2, &aMetricField2, + &aFixedText3, &aMetricField3, + &aFixedText4, &aMetricField4 + }; + + SmCategoryDesc *pCat; + + // merken der (evtl neuen) Einstellungen der aktiven SmCategoryDesc + // bevor zu der neuen gewechselt wird. + if (nActiveCategory != CATEGORY_NONE) + { + pCat = Categories[nActiveCategory]; + pCat->SetValue(0, (USHORT) aMetricField1.GetValue()); + pCat->SetValue(1, (USHORT) aMetricField2.GetValue()); + pCat->SetValue(2, (USHORT) aMetricField3.GetValue()); + pCat->SetValue(3, (USHORT) aMetricField4.GetValue()); + + if (nActiveCategory == 5) + bScaleAllBrackets = aCheckBox1.IsChecked(); + + aMenuButton.GetPopupMenu()->CheckItem(nActiveCategory + 1, FALSE); + } + + // aktivieren/deaktivieren der zugehörigen Controls in Abhängigkeit von der + // gewählten Kategorie. + BOOL bActive; + for (int i = 0; i < 4; i++) + { + FixedText *pFT = (FixedText * const) aWin[i][0]; + MetricField *pMF = (MetricField * const) aWin[i][1]; + + // Um feststellen welche Controls aktiv sein sollen wird das + // vorhandensein einer zugehörigen HelpID überprüft. + bActive = aCatMf2Hid[nCategory][i] != 0; + + pFT->Show(bActive); + pFT->Enable(bActive); + pMF->Show(bActive); + pMF->Enable(bActive); + + // setzen von Maßeinheit und Anzahl der Nachkommastellen + FieldUnit eUnit; + USHORT nDigits; + if (nCategory < 9) + { + eUnit = FUNIT_CUSTOM; + nDigits = 0; + pMF->SetCustomUnitText( '%' ); + } + else + { + eUnit = FUNIT_100TH_MM; + nDigits = 2; + } + pMF->SetUnit(eUnit); //! verändert den Wert + pMF->SetDecimalDigits(nDigits); + + if (bActive) + { + pCat = Categories[nCategory]; + pFT->SetText(*pCat->GetString(i)); + + pMF->SetMin(pCat->GetMinimum(i)); + pMF->SetMax(pCat->GetMaximum(i)); + pMF->SetValue(pCat->GetValue(i)); + + SetHelpId(*pMF, aCatMf2Hid[nCategory][i]); + } + } + // nun noch die CheckBox und das zugehörige MetricField genau dann aktivieren, + // falls es sich um das Klammer Menu handelt. + bActive = nCategory == 5; + aCheckBox1.Show(bActive); + aCheckBox1.Enable(bActive); + if (bActive) + { + aCheckBox1.Check( bScaleAllBrackets ); + + BOOL bChecked = aCheckBox1.IsChecked(); + aFixedText4 .Enable( bChecked ); + aMetricField4.Enable( bChecked ); + } + + aMenuButton.GetPopupMenu()->CheckItem(nCategory + 1, TRUE); + aGroupBox.SetText(Categories[nCategory]->GetName()); + + nActiveCategory = nCategory; + + aMetricField1.GrabFocus(); + Invalidate(); + Update(); +} + + +SmDistanceDialog::SmDistanceDialog(Window *pParent, BOOL bFreeRes) + : ModalDialog(pParent, SmResId(RID_DISTANCEDIALOG)), + aFixedText1 (this, ResId(1)), + aFixedText2 (this, ResId(2)), + aFixedText3 (this, ResId(3)), + aFixedText4 (this, ResId(4)), + aMetricField1 (this, ResId(1)), + aMetricField2 (this, ResId(2)), + aMetricField3 (this, ResId(3)), + aMetricField4 (this, ResId(4)), + aOKButton1 (this, ResId(1)), + aCancelButton1 (this, ResId(1)), + aMenuButton (this, ResId(1)), + aDefaultButton (this, ResId(1)), + aCheckBox1 (this, ResId(1)), + aBitmap (this, ResId(1)), + aGroupBox (this, ResId(1)) +{ + for (int i = 0; i < NOCATEGORIES; i++) + Categories[i] = new SmCategoryDesc(SmResId(i + 1), i); + nActiveCategory = CATEGORY_NONE; + bScaleAllBrackets = FALSE; + + if (bFreeRes) + FreeResource(); + + aMetricField1.SetGetFocusHdl(LINK(this, SmDistanceDialog, GetFocusHdl)); + aMetricField2.SetGetFocusHdl(LINK(this, SmDistanceDialog, GetFocusHdl)); + aMetricField3.SetGetFocusHdl(LINK(this, SmDistanceDialog, GetFocusHdl)); + aMetricField4.SetGetFocusHdl(LINK(this, SmDistanceDialog, GetFocusHdl)); + aCheckBox1.SetClickHdl(LINK(this, SmDistanceDialog, CheckBoxClickHdl)); + + aMenuButton.GetPopupMenu()->SetSelectHdl(LINK(this, SmDistanceDialog, MenuSelectHdl)); + + aDefaultButton.SetClickHdl(LINK(this, SmDistanceDialog, DefaultButtonClickHdl)); + } + + +SmDistanceDialog::~SmDistanceDialog() +{ + for (int i = 0; i < NOCATEGORIES; i++) + DELETEZ(Categories[i]); +} + + +void SmDistanceDialog::ReadFrom(const SmFormat &rFormat) +{ + Categories[0]->SetValue(0, rFormat.GetDistance(DIS_HORIZONTAL)); + Categories[0]->SetValue(1, rFormat.GetDistance(DIS_VERTICAL)); + Categories[0]->SetValue(2, rFormat.GetDistance(DIS_ROOT)); + Categories[1]->SetValue(0, rFormat.GetDistance(DIS_SUPERSCRIPT)); + Categories[1]->SetValue(1, rFormat.GetDistance(DIS_SUBSCRIPT)); + Categories[2]->SetValue(0, rFormat.GetDistance(DIS_NUMERATOR)); + Categories[2]->SetValue(1, rFormat.GetDistance(DIS_DENOMINATOR)); + Categories[3]->SetValue(0, rFormat.GetDistance(DIS_FRACTION)); + Categories[3]->SetValue(1, rFormat.GetDistance(DIS_STROKEWIDTH)); + Categories[4]->SetValue(0, rFormat.GetDistance(DIS_UPPERLIMIT)); + Categories[4]->SetValue(1, rFormat.GetDistance(DIS_LOWERLIMIT)); + Categories[5]->SetValue(0, rFormat.GetDistance(DIS_BRACKETSIZE)); + Categories[5]->SetValue(1, rFormat.GetDistance(DIS_BRACKETSPACE)); + Categories[5]->SetValue(3, rFormat.GetDistance(DIS_NORMALBRACKETSIZE)); + Categories[6]->SetValue(0, rFormat.GetDistance(DIS_MATRIXROW)); + Categories[6]->SetValue(1, rFormat.GetDistance(DIS_MATRIXCOL)); + Categories[7]->SetValue(0, rFormat.GetDistance(DIS_ORNAMENTSIZE)); + Categories[7]->SetValue(1, rFormat.GetDistance(DIS_ORNAMENTSPACE)); + Categories[8]->SetValue(0, rFormat.GetDistance(DIS_OPERATORSIZE)); + Categories[8]->SetValue(1, rFormat.GetDistance(DIS_OPERATORSPACE)); + Categories[9]->SetValue(0, rFormat.GetDistance(DIS_LEFTSPACE)); + Categories[9]->SetValue(1, rFormat.GetDistance(DIS_RIGHTSPACE)); + Categories[9]->SetValue(2, rFormat.GetDistance(DIS_TOPSPACE)); + Categories[9]->SetValue(3, rFormat.GetDistance(DIS_BOTTOMSPACE)); + + bScaleAllBrackets = rFormat.IsScaleNormalBrackets(); + + // force update (even of category 0) by setting nActiveCategory to a + // non-existent category number + nActiveCategory = CATEGORY_NONE; + SetCategory(0); +} + + +void SmDistanceDialog::WriteTo(SmFormat &rFormat) /*const*/ +{ + // hmm... k”nnen die tats„chlich unterschiedlich sein? + // wenn nicht kann oben n„mlich das const stehen! + SetCategory(nActiveCategory); + + rFormat.SetDistance( DIS_HORIZONTAL, Categories[0]->GetValue(0) ); + rFormat.SetDistance( DIS_VERTICAL, Categories[0]->GetValue(1) ); + rFormat.SetDistance( DIS_ROOT, Categories[0]->GetValue(2) ); + rFormat.SetDistance( DIS_SUPERSCRIPT, Categories[1]->GetValue(0) ); + rFormat.SetDistance( DIS_SUBSCRIPT, Categories[1]->GetValue(1) ); + rFormat.SetDistance( DIS_NUMERATOR, Categories[2]->GetValue(0) ); + rFormat.SetDistance( DIS_DENOMINATOR, Categories[2]->GetValue(1) ); + rFormat.SetDistance( DIS_FRACTION, Categories[3]->GetValue(0) ); + rFormat.SetDistance( DIS_STROKEWIDTH, Categories[3]->GetValue(1) ); + rFormat.SetDistance( DIS_UPPERLIMIT, Categories[4]->GetValue(0) ); + rFormat.SetDistance( DIS_LOWERLIMIT, Categories[4]->GetValue(1) ); + rFormat.SetDistance( DIS_BRACKETSIZE, Categories[5]->GetValue(0) ); + rFormat.SetDistance( DIS_BRACKETSPACE, Categories[5]->GetValue(1) ); + rFormat.SetDistance( DIS_MATRIXROW, Categories[6]->GetValue(0) ); + rFormat.SetDistance( DIS_MATRIXCOL, Categories[6]->GetValue(1) ); + rFormat.SetDistance( DIS_ORNAMENTSIZE, Categories[7]->GetValue(0) ); + rFormat.SetDistance( DIS_ORNAMENTSPACE, Categories[7]->GetValue(1) ); + rFormat.SetDistance( DIS_OPERATORSIZE, Categories[8]->GetValue(0) ); + rFormat.SetDistance( DIS_OPERATORSPACE, Categories[8]->GetValue(1) ); + rFormat.SetDistance( DIS_LEFTSPACE, Categories[9]->GetValue(0) ); + rFormat.SetDistance( DIS_RIGHTSPACE, Categories[9]->GetValue(1) ); + rFormat.SetDistance( DIS_TOPSPACE, Categories[9]->GetValue(2) ); + rFormat.SetDistance( DIS_BOTTOMSPACE, Categories[9]->GetValue(3) ); + rFormat.SetDistance( DIS_NORMALBRACKETSIZE, Categories[5]->GetValue(3) ); + + rFormat.SetScaleNormalBrackets( bScaleAllBrackets ); + + rFormat.RequestApplyChanges(); +} + + +/**************************************************************************/ + + +IMPL_LINK( SmAlignDialog, DefaultButtonClickHdl, Button *, pButton ) +{ + QueryBox *pQueryBox = new QueryBox(this, SmResId(RID_DEFAULTSAVEQUERY)); + + if (pQueryBox->Execute() == RET_YES) + { + SmModule *pp = SM_MOD1(); + WriteTo(pp->GetConfig()->GetFormat()); + } + + delete pQueryBox; + return 0; +} + + +SmAlignDialog::SmAlignDialog(Window * pParent, BOOL bFreeRes) + : ModalDialog(pParent, SmResId(RID_ALIGNDIALOG)), + aLeft (this, ResId(1)), + aCenter (this, ResId(2)), + aRight (this, ResId(3)), + aGroupBox1 (this, ResId(1)), + aOKButton1 (this, ResId(1)), + aCancelButton1 (this, ResId(1)), + aDefaultButton (this, ResId(1)) +{ + if (bFreeRes) + FreeResource(); + + aDefaultButton.SetClickHdl(LINK(this, SmAlignDialog, DefaultButtonClickHdl)); +} + + +void SmAlignDialog::ReadFrom(const SmFormat &rFormat) +{ + switch (rFormat.GetHorAlign()) + { + case AlignLeft: + aLeft .Check(TRUE); + aCenter.Check(FALSE); + aRight .Check(FALSE); + break; + + case AlignCenter: + aLeft .Check(FALSE); + aCenter.Check(TRUE); + aRight .Check(FALSE); + break; + + case AlignRight: + aLeft .Check(FALSE); + aCenter.Check(FALSE); + aRight .Check(TRUE); + break; + } +} + + +void SmAlignDialog::WriteTo(SmFormat &rFormat) const +{ + if (aLeft.IsChecked()) + rFormat.SetHorAlign(AlignLeft); + else if (aRight.IsChecked()) + rFormat.SetHorAlign(AlignRight); + else + rFormat.SetHorAlign(AlignCenter); + + rFormat.RequestApplyChanges(); +} + + +/**************************************************************************/ + + +void SmShowSymbolSet::Paint(const Rectangle&) +{ + Push(PUSH_MAPMODE); + + // MapUnit einstellen für die 'nLen' berechnet wurde + SetMapMode(MapMode(MAP_PIXEL)); + + int v = (int) (aVScrollBar.GetThumbPos() * nColumns); + int nSymbols = (int) aSymbolSet.GetCount(); + + for (int i = v; i < nSymbols ; i++) + { + SmSym aSymbol (aSymbolSet.GetSymbol(i)); + Font aFont (aSymbol.GetFace()); + + // etwas kleinere FontSize nehmen (als nLen) um etwas Luft zu haben + // (hoffentlich auch genug für links und rechts!) + aFont.SetSize(Size(0, nLen - (nLen / 3))); + SetFont(aFont); + + int nIV = i - v; + Size aSize(GetTextWidth(aSymbol.GetCharacter()), GetTextHeight()); + + DrawText(Point((nIV % nColumns) * nLen + (nLen - aSize.Width()) / 2, + (nIV / nColumns) * nLen + (nLen - aSize.Height()) / 2), + aSymbol.GetCharacter()); + } + + if (nSelectSymbol != SYMBOL_NONE) + { + Invert(Rectangle(Point(((nSelectSymbol - v) % nColumns) * nLen, + ((nSelectSymbol - v) / nColumns) * nLen), + Size(nLen, nLen))); + } + + Pop(); +} + + +void SmShowSymbolSet::MouseButtonDown(const MouseEvent& rMEvt) +{ + GrabFocus(); + + if (rMEvt.IsLeft() && Rectangle(Point(0, 0), aOutputSize).IsInside(rMEvt.GetPosPixel())) + { + SelectSymbol ((rMEvt.GetPosPixel().Y() / nLen) * nColumns + (rMEvt.GetPosPixel().X() / nLen) + + aVScrollBar.GetThumbPos() * nColumns); + + aSelectHdlLink.Call(this); + + if (rMEvt.GetClicks() > 1) aDblClickHdlLink.Call(this); + } + else Control::MouseButtonDown (rMEvt); +} + + +void SmShowSymbolSet::KeyInput(const KeyEvent& rKEvt) +{ + USHORT n = nSelectSymbol; + + if (n != SYMBOL_NONE) + { + switch (rKEvt.GetKeyCode().GetCode()) + { + case KEY_DOWN: n += nColumns; break; + case KEY_UP: n -= nColumns; break; + case KEY_LEFT: n -= 1; break; + case KEY_RIGHT: n += 1; break; + case KEY_HOME: n = 0; break; + case KEY_END: n = aSymbolSet.GetCount() - 1; break; + case KEY_PAGEUP: n -= nColumns * nRows; break; + case KEY_PAGEDOWN: n += nColumns * nRows; break; + + default: + Control::KeyInput(rKEvt); + return; + } + } + else + n = 0; + + if (n >= aSymbolSet.GetCount()) + n = nSelectSymbol; + + // adjust scrollbar + if ((n < (USHORT) (aVScrollBar.GetThumbPos() * nColumns)) || + (n >= (USHORT) ((aVScrollBar.GetThumbPos() + nRows) * nColumns))) + { + aVScrollBar.SetThumbPos(n / nColumns); + Invalidate(); + Update(); + } + + SelectSymbol(n); + aSelectHdlLink.Call(this); +} + + +SmShowSymbolSet::SmShowSymbolSet(Window *pParent, const ResId& rResId) : + Control(pParent, rResId), + aVScrollBar(this, WinBits(WB_VSCROLL)) +{ + nSelectSymbol = SYMBOL_NONE; + + aOutputSize = GetOutputSizePixel(); + long nScrollBarWidth = aVScrollBar.GetSizePixel().Width(), + nUseableWidth = aOutputSize.Width() - nScrollBarWidth; + + // Höhe von 16pt in Pixeln (passend zu 'aOutputSize') + nLen = (USHORT) LogicToPixel(Size(0, 16), MapMode(MAP_POINT)).Height(); + + nColumns = nUseableWidth / nLen; + if (nColumns > 2 && nColumns % 2 != 0) + nColumns--; + nRows = aOutputSize.Height() / nLen; + DBG_ASSERT(nColumns > 0, "Sm : keine Spalten"); + DBG_ASSERT(nRows > 0, "Sm : keine Zeilen"); + + // genau passend machen + aOutputSize.Width() = nColumns * nLen; + aOutputSize.Height() = nRows * nLen; + + aVScrollBar.SetPosSizePixel(Point(aOutputSize.Width() + 1, -1), + Size(nScrollBarWidth, aOutputSize.Height() + 2)); + aVScrollBar.Enable(FALSE); + aVScrollBar.Show(); + aVScrollBar.SetScrollHdl(LINK(this, SmShowSymbolSet, ScrollHdl)); + + Size WindowSize (aOutputSize); + WindowSize.Width() += nScrollBarWidth; + SetOutputSizePixel(WindowSize); + +} + + +void SmShowSymbolSet::SetSymbolSet(const SmSymSet& rSymbolSet) +{ + aSymbolSet = rSymbolSet; + + if (aSymbolSet.GetCount() > (nColumns * nRows)) + { + aVScrollBar.SetRange(Range(0, ((aSymbolSet.GetCount() + (nColumns - 1)) / nColumns) - nRows)); + aVScrollBar.Enable(TRUE); + } + else + { + aVScrollBar.SetRange(Range(0,0)); + aVScrollBar.Enable (FALSE); + } + + Invalidate(); +} + + +void SmShowSymbolSet::SelectSymbol(USHORT nSymbol) +{ + int v = (int) (aVScrollBar.GetThumbPos() * nColumns); + + if (nSelectSymbol != SYMBOL_NONE) + Invalidate(Rectangle(Point(((nSelectSymbol - v) % nColumns) * nLen, + ((nSelectSymbol - v) / nColumns) * nLen), + Size(nLen, nLen))); + + if (nSymbol < aSymbolSet.GetCount()) + nSelectSymbol = nSymbol; + + if (aSymbolSet.GetCount() == 0) + nSelectSymbol = SYMBOL_NONE; + + if (nSelectSymbol != SYMBOL_NONE) + Invalidate(Rectangle(Point(((nSelectSymbol - v) % nColumns) * nLen, + ((nSelectSymbol - v) / nColumns) * nLen), + Size(nLen, nLen))); + + Update(); +} + +IMPL_LINK( SmShowSymbolSet, ScrollHdl, ScrollBar*, pScrollBar) +{ + Invalidate(); + return 0; +} + +//////////////////////////////////////////////////////////////////////////////// + +void SmShowSymbol::Paint(const Rectangle&) +{ + const XubString &rText = GetText(); + Size aTextSize(GetTextWidth(rText), GetTextHeight()); + + DrawText(Point((GetOutputSize().Width() - aTextSize.Width()) / 2, + (GetOutputSize().Height() - aTextSize.Height()) / 2), rText); +} + + +void SmShowSymbol::MouseButtonDown(const MouseEvent& rMEvt) +{ + if (rMEvt.GetClicks() > 1) + aDblClickHdlLink.Call(this); + else + Control::MouseButtonDown (rMEvt); +} + + +void SmShowSymbol::SetSymbol(const SmSym *pSymbol) +{ + if (pSymbol) + { + Font aFont (pSymbol->GetFace()); + aFont.SetSize(Size(0, GetOutputSize().Height() - GetOutputSize().Height() / 3)); + SetFont(aFont); + + SetText(XubString(pSymbol->GetCharacter())); + } + + // 'Invalidate' füllt den background mit der background-Farbe. + // Falls der NULL pointer übergeben wurde reicht dies also zum löschen + // der Anzeige + Invalidate(); +} + +//////////////////////////////////////////////////////////////////////////////// + +void SmSymbolDialog::FillSymbolSets(BOOL bDeleteText) + // füllt die Einträge der möglichen 'SymbolsSet's im Dialog mit den + // aktuellen Werten des SymbolSet Managers, selektiert aber keinen. +{ + aSymbolSets.Clear(); + if (bDeleteText) + aSymbolSets.SetNoSelection(); + + USHORT nNumSymSets = rSymSetMgr.GetCount(); + for (USHORT i = 0; i < nNumSymSets; i++) + aSymbolSets.InsertEntry(rSymSetMgr.GetSymbolSet(i)->GetName()); +} + + +IMPL_LINK( SmSymbolDialog, SymbolSetChangeHdl, ListBox *, pListBox ) +{ + DBG_ASSERT(pListBox == &aSymbolSets, "Sm : falsches Argument"); + + SelectSymbolSet(aSymbolSets.GetSelectEntry()); + return 0; +} + + +IMPL_LINK( SmSymbolDialog, SymbolChangeHdl, SmShowSymbolSet *, pShowSymbolSet ) +{ + DBG_ASSERT(pShowSymbolSet == &aSymbolSetDisplay, "Sm : falsches Argument"); + + SelectSymbol(aSymbolSetDisplay.GetSelectSymbol()); + return 0; +} + +IMPL_LINK( SmSymbolDialog, EditClickHdl, Button *, pButton ) +{ + DBG_ASSERT(pButton == &aEditBtn, "Sm : falsches Argument"); + + SmSymDefineDialog *pDialog = new SmSymDefineDialog(this, rSymSetMgr); + + // aktuelles Symbol und SymbolSet am neuen Dialog setzen + const XubString aSymSetName (aSymbolSets.GetSelectEntry()), + aSymName (aSymbolName.GetText()); + pDialog->SelectOldSymbolSet(aSymSetName); + pDialog->SelectOldSymbol(aSymName); + pDialog->SelectSymbolSet(aSymSetName); + pDialog->SelectSymbol(aSymName); + + // altes SymbolSet merken + XubString aOldSymbolSet (aSymbolSets.GetSelectEntry()); + + // Dialog an evtl geänderte Daten des SymbolSet Manager anpassen + if (pDialog->Execute() == RET_OK && rSymSetMgr.IsModified()) + FillSymbolSets(); + + // wenn das alte SymbolSet nicht mehr existiert zum ersten gehen + // (soweit eines vorhanden ist) + if (!SelectSymbolSet(aOldSymbolSet) && aSymbolSets.GetEntryCount() > 0) + SelectSymbolSet(aSymbolSets.GetEntry(0)); + + delete pDialog; + return 0; +} + + +IMPL_LINK( SmSymbolDialog, SymbolDblClickHdl, SmShowSymbolSet *, pShowSymbolSet ) +{ + DBG_ASSERT(pShowSymbolSet == &aSymbolSetDisplay, "Sm : falsches Argument"); + + GetClickHdl(&aGetBtn); + EndDialog(RET_OK); + return 0; +} + + +IMPL_LINK( SmSymbolDialog, GetClickHdl, Button *, pButton ) +{ + DBG_ASSERT(pButton == &aGetBtn, "Sm : falscher Button"); + + const SmSym *pSym = GetSymbol(); + if (pSym) + { + XubString aText ('%'); + aText += pSym->GetName(); + + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetDispatcher()->Execute( + SID_INSERTTEXT, SFX_CALLMODE_STANDARD, + new SfxStringItem(SID_INSERTTEXT, aText), 0L); + } + + return 0; +} + + +IMPL_LINK_INLINE_START( SmSymbolDialog, CloseClickHdl, Button *, pButton ) +{ + DBG_ASSERT(pButton == &aCloseBtn, "Sm : falscher Button"); + + EndDialog(TRUE); + return 0; +} +IMPL_LINK_INLINE_END( SmSymbolDialog, CloseClickHdl, Button *, pButton ) + + +SmSymbolDialog::SmSymbolDialog(Window *pParent, SmSymSetManager &rMgr, BOOL bFreeRes) : + ModalDialog (pParent, SmResId(RID_SYMBOLDIALOG)), + aSymbolSetText (this, ResId(1)), + aSymbolSets (this, ResId(1)), + aSymbolSetDisplay (this, ResId(1)), + aGrpBox (this, ResId(1)), + aSymbolName (this, ResId(2)), + aSymbolDisplay (this, ResId(2)), + aCloseBtn (this, ResId(3)), + aEditBtn (this, ResId(1)), + aGetBtn (this, ResId(2)), + rSymSetMgr (rMgr) +{ + if (bFreeRes) + FreeResource(); + + pSymSet = NULL; + FillSymbolSets(); + if (aSymbolSets.GetEntryCount() > 0) + SelectSymbolSet(aSymbolSets.GetEntry(0)); + + // set background color to white + Wallpaper aWhiteWall( (Color) Color(COL_WHITE) ); + aSymbolDisplay .SetBackground( aWhiteWall ); + aSymbolSetDisplay.SetBackground( aWhiteWall ); + + aSymbolSets .SetSelectHdl (LINK(this, SmSymbolDialog, SymbolSetChangeHdl)); + aSymbolSetDisplay.SetSelectHdl (LINK(this, SmSymbolDialog, SymbolChangeHdl)); + aSymbolSetDisplay.SetDblClickHdl(LINK(this, SmSymbolDialog, SymbolDblClickHdl)); + aSymbolDisplay .SetDblClickHdl(LINK(this, SmSymbolDialog, SymbolDblClickHdl)); + aCloseBtn .SetClickHdl (LINK(this, SmSymbolDialog, CloseClickHdl)); + aEditBtn .SetClickHdl (LINK(this, SmSymbolDialog, EditClickHdl)); + aGetBtn .SetClickHdl (LINK(this, SmSymbolDialog, GetClickHdl)); +} + + +BOOL SmSymbolDialog::SelectSymbolSet(const XubString &rSymbolSetName) +{ + BOOL bRet = FALSE; + USHORT nPos = aSymbolSets.GetEntryPos(rSymbolSetName); + + pSymSet = NULL; + if (nPos != LISTBOX_ENTRY_NOTFOUND) + { + aSymbolSets.SelectEntryPos(nPos); + USHORT nSymbolSetNo = rSymSetMgr.GetSymbolSetPos(aSymbolSets.GetSelectEntry()); + pSymSet = rSymSetMgr.GetSymbolSet(nSymbolSetNo); + DBG_ASSERT(pSymSet, "Sm : NULL pointer"); + + aSymbolSetDisplay.SetSymbolSet(*pSymSet); + if (pSymSet->GetCount() > 0) + SelectSymbol(0); + + bRet = TRUE; + } + else + aSymbolSets.SetNoSelection(); + + return bRet; +} + + +void SmSymbolDialog::SelectSymbol(USHORT nSymbolNo) +{ + const SmSym *pSym = NULL; + if (pSymSet && nSymbolNo < pSymSet->GetCount()) + pSym = &pSymSet->GetSymbol(nSymbolNo); + + aSymbolSetDisplay.SelectSymbol(nSymbolNo); + aSymbolDisplay.SetSymbol(pSym); + aSymbolName.SetText(pSym ? pSym->GetName() : XubString()); +} + + +const SmSym * SmSymbolDialog::GetSymbol() const +{ + USHORT nSymbolNo = aSymbolSetDisplay.GetSelectSymbol(); + return pSymSet == NULL ? NULL : &pSymSet->GetSymbol(nSymbolNo); +} + + +/**************************************************************************/ + + +void SmShowCharset::Paint(const Rectangle&) +{ + Size OutputSize = GetOutputSizePixel(); + + int i; + for (i = 1; i < (int) nColumns; i++) + { + int nLenI = nLen * i; + + DrawLine(Point(nLenI, 0), Point(nLenI, OutputSize.Height())); + } + + for (i = 1; i < (int) nRows; i++) + { + int nLenI = nLen * i; + + DrawLine(Point(0, nLenI), Point(OutputSize.Width(), nLenI)); + } + + for (i = 1; i < 256; i++) + { + int x = (i % nColumns) * nLen; + int y = (i / nColumns) * nLen; + + Size aTextSize(GetTextWidth(aChar), GetTextHeight()); + + XubString aChar((xub_Unicode) i); + DrawText(Point(x + (nLen - aTextSize.Width()) / 2, + y + (nLen - aTextSize.Height()) / 2), aChar); + } +} + + +void SmShowCharset::MouseButtonDown(const MouseEvent& rMEvt) +{ + if (rMEvt.IsLeft()) + { + GrabFocus(); + + USHORT n = (USHORT) ((rMEvt.GetPosPixel().Y() / nLen) * nColumns + + (rMEvt.GetPosPixel().X() / nLen)); + SelectChar((xub_Unicode)Min((USHORT) n, (USHORT) 255)); + + aSelectHdlLink.Call(this); + + if (rMEvt.GetClicks() > 1) + aDblClickHdlLink.Call(this); + } + else Control::MouseButtonDown (rMEvt); +} + + +void SmShowCharset::KeyInput(const KeyEvent& rKEvt) +{ + xub_Unicode n = aChar; + + switch (rKEvt.GetKeyCode().GetCode()) + { + case KEY_DOWN: n += (xub_Unicode) nColumns; break; + case KEY_UP: n -= (xub_Unicode) nColumns; break; + case KEY_LEFT: n -= 1; break; + case KEY_RIGHT: n += 1; break; + case KEY_HOME: n = 0; break; + case KEY_END: n = (xub_Unicode) 255; break; + case KEY_PAGEUP: n -= (xub_Unicode) nColumns; break; + case KEY_PAGEDOWN: n += (xub_Unicode) nColumns; break; + + default: + Control::KeyInput(rKEvt); + return; + } + + SelectChar(n); + aSelectHdlLink.Call(this); +} + + +SmShowCharset::SmShowCharset(Window *pParent, const ResId& rResId) : + Control(pParent, rResId) +{ + aChar = xub_Unicode('\0'); + + Size aOutputSize (GetOutputSizePixel()); + + nColumns = 32; + nRows = 8; + + // FontSize passend wählen + nLen = Min(aOutputSize.Width() / nColumns, aOutputSize.Height() / nRows); + + // Fenster genau passend machen (wird höchstens kleiner!) + aOutputSize.Width() = nColumns * nLen; + aOutputSize.Height() = nRows * nLen; + + SetOutputSizePixel(aOutputSize); +} + + +void SmShowCharset::SetFont(const Font &rFont) +{ + Font aFont (rFont); + + // etwas kleinere FontSize nehmen (als nLen) um etwas Luft zu haben + // (hofentlich auch genug für links und rechts) + aFont.SetSize(Size(0, nLen - (nLen / 3))); + aFont.SetTransparent(TRUE); + Control::SetFont(aFont); + + Invalidate(); +} + + +void SmShowCharset::SelectChar(xub_Unicode aCharP) +{ + int c = aChar & 0xFF; + Size aNSize (nLen, nLen); + + Invalidate(Rectangle(Point((c % nColumns) * nLen, (c / nColumns) * nLen), aNSize)); + + aChar = aCharP; + c = aChar & 0xFF; + Invalidate(Rectangle(Point((c % nColumns) * nLen, (c / nColumns) * nLen), aNSize)); + + Update(); +} + + +//////////////////////////////////////////////////////////////////////////////// + + +void SmShowChar::Paint(const Rectangle&) +{ + XubString Text (GetText ()); + + if (Text.Len() > 0) + { + Size aTextSize(GetTextWidth(Text), GetTextHeight()); + + DrawText(Point((GetOutputSize().Width() - aTextSize.Width()) / 2, + (GetOutputSize().Height() - aTextSize.Height()) / 2), Text); + } +} + + +void SmShowChar::SetChar(xub_Unicode aChar) +{ + SetText(XubString(aChar)); + Invalidate(); +} + + +void SmShowChar::SetFont(const Font &rFont) +{ + Font aFont (rFont); + Size aSize (Size(0, GetOutputSize().Height() - GetOutputSize().Height() / 3)); + + aFont.SetSize(aSize); + aFont.SetTransparent(TRUE); + Control::SetFont(aFont); + + Invalidate(); +} + +//////////////////////////////////////////////////////////////////////////////// + +void SmSymDefineDialog::FillSymbols(ComboBox &rComboBox, BOOL bDeleteText) +{ + DBG_ASSERT(&rComboBox == &aOldSymbols || &rComboBox == &aSymbols, + "Sm : falsche ComboBox"); + + rComboBox.Clear(); + if (bDeleteText) + rComboBox.SetText(XubString()); + + ComboBox &rSymbolSets = &rComboBox == &aOldSymbols ? + aOldSymbolSets : aSymbolSets; + const SmSymSet *pSymSet = GetSymbolSet(rSymbolSets); + if (pSymSet) + { USHORT nNumSymbols = pSymSet->GetCount(); + for (USHORT i = 0; i < nNumSymbols; i++) + rComboBox.InsertEntry(pSymSet->GetSymbol(i).GetName()); + } + +} + + +void SmSymDefineDialog::FillSymbolSets(ComboBox &rComboBox, BOOL bDeleteText) +{ + DBG_ASSERT(&rComboBox == &aOldSymbolSets || &rComboBox == &aSymbolSets, + "Sm : falsche ComboBox"); + + rComboBox.Clear(); + if (bDeleteText) + rComboBox.SetText(XubString()); + + USHORT nNumSymSets = aSymSetMgrCopy.GetCount(); + for (USHORT i = 0; i < nNumSymSets; i++) + rComboBox.InsertEntry(aSymSetMgrCopy.GetSymbolSet(i)->GetName()); +} + + +void SmSymDefineDialog::FillFonts(BOOL bDelete) +{ + aFonts.Clear(); + if (bDelete) + aFonts.SetNoSelection(); + + // alle Fonts der 'FontList' in die Fontliste aufnehmen + // von denen mit gleichen Namen jedoch nur einen (denn der Style wird + // über die 'FontStyleBox' gewählt und nicht auch noch hier) + DBG_ASSERT(pFontList, "Sm : NULL pointer"); + USHORT nCount = pFontList->GetFontNameCount(); + for (USHORT i = 0; i < nCount; i++) + aFonts.InsertEntry( pFontList->GetFontName(i).GetName() ); +} + + +void SmSymDefineDialog::FillStyles(BOOL bDeleteText) +{ + aStyles.Clear(); + if (bDeleteText) + aStyles.SetText(XubString()); + + XubString aText (aFonts.GetSelectEntry()); + if (aText.Len() != 0) + { + //aStyles.Fill(aText, &aFontList); + // eigene StyleName's verwenden + for (USHORT i = 0; i < aStyleNameCount; i++) + aStyles.InsertEntry( aStyleName[i] ); + + DBG_ASSERT(aStyles.GetEntryCount() > 0, "Sm : keine Styles vorhanden"); + aStyles.SetText( aStyles.GetEntry(0) ); + } +} + + +SmSymSet * SmSymDefineDialog::GetSymbolSet(const ComboBox &rComboBox) +{ + DBG_ASSERT(&rComboBox == &aOldSymbolSets || &rComboBox == &aSymbolSets, + "Sm : falsche ComboBox"); + + USHORT nSymbolSetNo = aSymSetMgrCopy.GetSymbolSetPos(rComboBox.GetText()); + + return nSymbolSetNo == SYMBOLSET_NONE ? + NULL : aSymSetMgrCopy.GetSymbolSet(nSymbolSetNo); +} + + +SmSym * SmSymDefineDialog::GetSymbol(const ComboBox &rComboBox) +{ + DBG_ASSERT(&rComboBox == &aOldSymbols || &rComboBox == &aSymbols, + "Sm : falsche ComboBox"); + + return aSymSetMgrCopy.GetSymbol(rComboBox.GetText()); +} + + +IMPL_LINK( SmSymDefineDialog, OldSymbolChangeHdl, ComboBox *, pComboBox ) +{ + DBG_ASSERT(pComboBox == &aOldSymbols, "Sm : falsches Argument"); + SelectSymbol(aOldSymbols, aOldSymbols.GetText(), FALSE); + return 0; +} + + +IMPL_LINK( SmSymDefineDialog, OldSymbolSetChangeHdl, ComboBox *, pComboBox ) +{ + DBG_ASSERT(pComboBox == &aOldSymbolSets, "Sm : falsches Argument"); + SelectSymbolSet(aOldSymbolSets, aOldSymbolSets.GetText(), FALSE); + return 0; +} + + +IMPL_LINK( SmSymDefineDialog, ModifyHdl, ComboBox *, pComboBox ) +{ + // merken der Cursorposition zum wiederherstellen derselben + Selection aSelection (pComboBox->GetSelection()); + + if (pComboBox == &aSymbols) + SelectSymbol(aSymbols, aSymbols.GetText(), FALSE); + else if (pComboBox == &aSymbolSets) + SelectSymbolSet(aSymbolSets, aSymbolSets.GetText(), FALSE); + else if (pComboBox == &aOldSymbols) + // nur Namen aus der Liste erlauben + SelectSymbol(aOldSymbols, aOldSymbols.GetText(), TRUE); + else if (pComboBox == &aOldSymbolSets) + // nur Namen aus der Liste erlauben + SelectSymbolSet(aOldSymbolSets, aOldSymbolSets.GetText(), TRUE); + else if (pComboBox == &aStyles) + // nur Namen aus der Liste erlauben (ist hier eh immer der Fall) + SelectStyle(aStyles.GetText(), TRUE); + else + DBG_ASSERT(0, "Sm : falsche ComboBox Argument"); + + pComboBox->SetSelection(aSelection); + + UpdateButtons(); + + return 0; +} + + +IMPL_LINK( SmSymDefineDialog, FontChangeHdl, ListBox *, pListBox ) +{ + DBG_ASSERT(pListBox == &aFonts, "Sm : falsches Argument"); + + SelectFont(aFonts.GetSelectEntry()); + return 0; +} + + +IMPL_LINK( SmSymDefineDialog, StyleChangeHdl, ComboBox *, pComboBox ) +{ + DBG_ASSERT(pComboBox == &aStyles, "Sm : falsches Argument"); + + SelectStyle(aStyles.GetText()); + return 0; +} + + +IMPL_LINK_INLINE_START( SmSymDefineDialog, CharSelectHdl, SmShowCharset *, pShowCharset ) +{ + DBG_ASSERT(pShowCharset == &aCharsetDisplay, "Sm : falsches Argument"); + + SelectChar(aCharsetDisplay.GetSelectChar()); + return 0; +} +IMPL_LINK_INLINE_END( SmSymDefineDialog, CharSelectHdl, SmShowCharset *, pShowCharset ) + + +IMPL_LINK( SmSymDefineDialog, AddClickHdl, Button *, pButton ) +{ + DBG_ASSERT(pButton == &aAddBtn, "Sm : falsches Argument"); + DBG_ASSERT(aAddBtn.IsEnabled(), "Sm : Voraussetzungen erfüllt ??"); + + SmSymSet *pSymSet = GetSymbolSet(aSymbolSets); + + // SymbolSet einfügen falls es noch nicht existiert + if (!pSymSet) + { + pSymSet = new SmSymSet(aSymbolSets.GetText()); + aSymSetMgrCopy.AddSymbolSet(pSymSet); + FillSymbolSets(aOldSymbolSets, FALSE); + FillSymbolSets(aSymbolSets, FALSE); + } + DBG_ASSERT(pSymSet, "Sm : NULL pointer"); + + // Symbol ins SymbolSet einfügen + SmSym *pSym = new SmSym(aSymbols.GetText(), aCharsetDisplay.GetFont(), + aCharsetDisplay.GetSelectChar()); + pSymSet->AddSymbol(pSym); + + // update der Hash Tabelle erzwingen (damit aAddBtn disabled wird). + // (wird später nach Überarbeitung von symbol.cxx überflüssig werden). + aSymSetMgrCopy.ChangeSymbolSet((SmSymSet *)1); + + // Symbolliste aktualiseren + FillSymbols(aOldSymbols ,FALSE); + FillSymbols(aSymbols ,FALSE); + + UpdateButtons(); + + return 0; +} + + +IMPL_LINK( SmSymDefineDialog, ChangeClickHdl, Button *, pButton ) +{ + DBG_ASSERT(pButton == &aChangeBtn, "Sm : falsches Argument"); + DBG_ASSERT(aChangeBtn.IsEnabled(), "Sm : Voraussetzungen erfüllt ??"); + + // finden des SymbolSets zum alten Symbol + SmSymSet *pOldSymSet = GetSymbolSet(aOldSymbolSets); + DBG_ASSERT(pOldSymSet, "Sm : NULL pointer"); + + // suchen des neuen SymbolSets + SmSymSet *pNewSymSet = GetSymbolSet(aSymbolSets); + // SymbolSet einfügen falls es noch nicht existiert + if (!pNewSymSet) + { + pNewSymSet = new SmSymSet(aSymbolSets.GetText()); + aSymSetMgrCopy.AddSymbolSet(pNewSymSet); + FillSymbolSets(aOldSymbolSets, FALSE); + FillSymbolSets(aSymbolSets, FALSE); + } + + // das (alte) Symbol besorgen + USHORT nSymbol = pOldSymSet->GetSymbolPos(aOldSymbols.GetText()); + SmSym *pSym = (SmSym *) &pOldSymSet->GetSymbol(nSymbol); + DBG_ASSERT(pSym, "Sm : NULL pointer"); + + // Änderungen durchführen; + pSym->GetName() = aSymbols.GetText(); + pSym->GetFace() = aCharsetDisplay.GetFont(); + pSym->GetCharacter() = aCharsetDisplay.GetSelectChar(); + + // das SymbolSet wechseln wenn nötig + if (pOldSymSet != pNewSymSet) + { + pOldSymSet->RemoveSymbol(nSymbol); + pNewSymSet->AddSymbol(pSym); + } + + //!! den SymbolSet Manger dazu zwingen seinen HashTable zu aktualisieren, + //!! um mit möglich neuen bzw fehlenden alten Symbol Namen konform zu sein. + aSymSetMgrCopy.ChangeSymbolSet((SmSymSet *)1); + + UpdateButtons(); + + return 0; +} + + +IMPL_LINK( SmSymDefineDialog, DeleteClickHdl, Button *, pButton ) +{ + DBG_ASSERT(pButton == &aDeleteBtn, "Sm : falsches Argument"); + DBG_ASSERT(aDeleteBtn.IsEnabled(), "Sm : Voraussetzungen erfüllt ??"); + + if (pOrigSymbol) + { + // löschen des Symbols: + // + // zugehöriges SymbolSet finden + SmSymSet *pSymSet = GetSymbolSet(aOldSymbolSets); + DBG_ASSERT(pSymSet, "Sm : NULL pointer"); + // finden des Index + XubString aOldSymbolName (pOrigSymbol->GetName()); + USHORT nSymbolNo = pSymSet->GetSymbolPos(aOldSymbolName); + DBG_ASSERT(nSymbolNo != SYMBOL_NONE, "Sm : kein Symbol"); + // Bezüge auf das Symbols löschen + DBG_ASSERT(pOrigSymbol == &pSymSet->GetSymbol(nSymbolNo), + "Sm : Fehler beim löschen des Symbols"); + SetOrigSymbol(NULL, XubString()); + // und weg mit dem Symbol + pSymSet->DeleteSymbol(nSymbolNo); + + //!! den SymbolSet Manger dazu zwingen seinen HashTable zu aktualisieren, + //!! was er nämlich nicht tut, wenn in einem seiner SymbolSets geändert/ + //!! gelöscht wird, was wiederum zu einem Absturz führen kann (wenn er + //!! über ein nicht mehr existentes aber nicht entferntes Symbol iteriert). + aSymSetMgrCopy.ChangeSymbolSet((SmSymSet *)1); + + // aktualisieren der Symboleinträge des Dialogs + aOldSymbols.SetText(XubString()); + aOldSymbols.RemoveEntry(aOldSymbolName); + if (aSymbolSets.GetText() == aOldSymbolSets.GetText()) + aSymbols.RemoveEntry(aOldSymbolName); + } + + UpdateButtons(); + + return 0; +} + + +void SmSymDefineDialog::UpdateButtons() +{ + BOOL bAdd = FALSE, + bChange = FALSE, + bDelete = FALSE, + bEqual; + XubString aSymbolName (aSymbols.GetText()), + aSymbolSetName (aSymbolSets.GetText()); + + if (aSymbolName.Len() > 0 && aSymbolSetName.Len() > 0) + { + // alle Einstellungen gleich? + //! (Font-, Style- und SymbolSet Name werden nicht case sensitiv verglichen) + bEqual = pOrigSymbol + && aSymbolSetName.EqualsIgnoreCaseAscii(aOldSymbolSetName.GetText()) + && aSymbolName.Equals(pOrigSymbol->GetName()) + && aFonts.GetSelectEntry().EqualsIgnoreCaseAscii(pOrigSymbol->GetFace().GetName()) + && aStyles.GetText().EqualsIgnoreCaseAscii(GetFontStyleName(pOrigSymbol->GetFace())) + && aCharsetDisplay.GetSelectChar() == pOrigSymbol->GetCharacter(); + + // hinzufügen nur wenn es noch kein Symbol desgleichen Namens gibt + bAdd = aSymSetMgrCopy.GetSymbol(aSymbolName) == NULL; + + // löschen nur wenn alle Einstellungen gleich sind + bDelete = pOrigSymbol != NULL; + + // ändern wenn bei gleichem Namen mindestens eine Einstellung anders ist + // oder wenn es noch kein Symbol des neuen Namens gibt (würde implizites + // löschen des bereits vorhandenen Symbols erfordern) + BOOL bEqualName = pOrigSymbol && aSymbolName == pOrigSymbol->GetName(); + bChange = pOrigSymbol && (bEqualName && !bEqual || !bEqualName && bAdd); + } + + aAddBtn .Enable(bAdd); + aChangeBtn.Enable(bChange); + aDeleteBtn.Enable(bDelete); +} + + +SmSymDefineDialog::SmSymDefineDialog(Window * pParent, SmSymSetManager &rMgr, BOOL bFreeRes) : + ModalDialog (pParent, SmResId(RID_SYMDEFINEDIALOG)), + aOldSymbolText (this, ResId(1)), + aOldSymbols (this, ResId(1)), + aOldSymbolSetText (this, ResId(2)), + aOldSymbolSets (this, ResId(2)), + aCharsetDisplay (this, ResId(1)), + aSymbolText (this, ResId(9)), + aSymbols (this, ResId(4)), + aSymbolSetText (this, ResId(10)), + aSymbolSets (this, ResId(5)), + aFontText (this, ResId(3)), + aFonts (this, ResId(1)), + aStyleText (this, ResId(4)), + aStyles (this, ResId(3)), + aOldSymbolName (this, ResId(7)), + aOldSymbolDisplay (this, ResId(3)), + aOldSymbolSetName (this, ResId(8)), + aSymbolName (this, ResId(5)), + aSymbolDisplay (this, ResId(2)), + aSymbolSetName (this, ResId(6)), + aAddBtn (this, ResId(1)), + aChangeBtn (this, ResId(2)), + aDeleteBtn (this, ResId(3)), + aOkBtn (this, ResId(1)), + aCancelBtn (this, ResId(1)), + aRightArrow (this, ResId(1)), + pFontList (NULL), + rSymSetMgr (rMgr) +{ + if (bFreeRes) + FreeResource(); + + // get FontList from printer (if possible), otherwise from application window + SmViewShell *pView = SmGetActiveView(); + DBG_ASSERT(pView, "Sm : NULL pointer"); + OutputDevice *pDev = pView->GetDoc()->GetPrinter(); + if (!pDev || pDev->GetDevFontCount() == 0) + pDev = &pView->GetGraphicWindow(); + pFontList = new FontList(pDev); + + + pOrigSymbol = 0; + + // make autocompletion for symbols case-sensitive + aOldSymbols.EnableAutocomplete(TRUE, TRUE); + aSymbols .EnableAutocomplete(TRUE, TRUE); + + FillFonts(); + if (aFonts.GetEntryCount() > 0) + SelectFont(aFonts.GetEntry(0)); + + // set background color to white + Wallpaper aWhiteWall( (Color) Color(COL_WHITE) ); + aCharsetDisplay .SetBackground( aWhiteWall ); + aOldSymbolDisplay.SetBackground( aWhiteWall ); + aOldSymbolDisplay.SetBackground( aWhiteWall ); + + SetSymbolSetManager(rSymSetMgr); + + aOldSymbols .SetSelectHdl(LINK(this, SmSymDefineDialog, OldSymbolChangeHdl)); + aOldSymbolSets .SetSelectHdl(LINK(this, SmSymDefineDialog, OldSymbolSetChangeHdl)); + aSymbolSets .SetModifyHdl(LINK(this, SmSymDefineDialog, ModifyHdl)); + aOldSymbolSets .SetModifyHdl(LINK(this, SmSymDefineDialog, ModifyHdl)); + aSymbols .SetModifyHdl(LINK(this, SmSymDefineDialog, ModifyHdl)); + aOldSymbols .SetModifyHdl(LINK(this, SmSymDefineDialog, ModifyHdl)); + aStyles .SetModifyHdl(LINK(this, SmSymDefineDialog, ModifyHdl)); + aFonts .SetSelectHdl(LINK(this, SmSymDefineDialog, FontChangeHdl)); + aStyles .SetSelectHdl(LINK(this, SmSymDefineDialog, StyleChangeHdl)); + aAddBtn .SetClickHdl (LINK(this, SmSymDefineDialog, AddClickHdl)); + aChangeBtn .SetClickHdl (LINK(this, SmSymDefineDialog, ChangeClickHdl)); + aDeleteBtn .SetClickHdl (LINK(this, SmSymDefineDialog, DeleteClickHdl)); + aCharsetDisplay.SetSelectHdl(LINK(this, SmSymDefineDialog, CharSelectHdl)); +} + + +SmSymDefineDialog::~SmSymDefineDialog() +{ + delete pFontList; +} + + +short SmSymDefineDialog::Execute() +{ + short nResult = ModalDialog::Execute(); + + // Änderungen übernehmen falls Dialog mit OK beendet wurde + if (aSymSetMgrCopy.IsModified() && nResult == RET_OK) + { + // leere SymbolSets aus dem Ergebnis entfernen. + // Dabei von hinten durch das array iterieren, da beim löschen die + // Elemente aufrücken. + USHORT nSymbolSets = aSymSetMgrCopy.GetCount(); + for (int i = nSymbolSets - 1; i >= 0; i--) + if (aSymSetMgrCopy.GetSymbolSet(i)->GetCount() == 0) + aSymSetMgrCopy.DeleteSymbolSet(i); + + rSymSetMgr = aSymSetMgrCopy; + } + + return nResult; +} + + +void SmSymDefineDialog::SetSymbolSetManager(const SmSymSetManager &rMgr) +{ + aSymSetMgrCopy = rMgr; + + // Das modified Flag der Kopie auf FALSE setzen, damit man später damit + // testen kann ob sich was geändert hat. + aSymSetMgrCopy.SetModified(FALSE); + + FillSymbolSets(aOldSymbolSets); + if (aOldSymbolSets.GetEntryCount() > 0) + SelectSymbolSet(aOldSymbolSets.GetEntry(0)); + FillSymbolSets(aSymbolSets); + if (aSymbolSets.GetEntryCount() > 0) + SelectSymbolSet(aSymbolSets.GetEntry(0)); + FillSymbols(aOldSymbols); + if (aOldSymbols.GetEntryCount() > 0) + SelectSymbol(aOldSymbols.GetEntry(0)); + FillSymbols(aSymbols); + if (aSymbols.GetEntryCount() > 0) + SelectSymbol(aSymbols.GetEntry(0)); + + UpdateButtons(); +} + + +BOOL SmSymDefineDialog::SelectSymbolSet(ComboBox &rComboBox, + const XubString &rSymbolSetName, BOOL bDeleteText) +{ + DBG_ASSERT(&rComboBox == &aOldSymbolSets || &rComboBox == &aSymbolSets, + "Sm : falsche ComboBox"); + + // 'Normalisieren' des SymbolNamens (ohne leading und trailing Leerzeichen) + XubString aNormName (rSymbolSetName); + aNormName.EraseLeadingChars(' '); + aNormName.EraseTrailingChars(' '); + // und evtl Abweichungen in der Eingabe beseitigen + rComboBox.SetText(aNormName); + + BOOL bRet = FALSE; + USHORT nPos = rComboBox.GetEntryPos(aNormName); + + if (nPos != COMBOBOX_ENTRY_NOTFOUND) + { + rComboBox.SetText(rComboBox.GetEntry(nPos)); + bRet = TRUE; + } + else if (bDeleteText) + rComboBox.SetText(XubString()); + + BOOL bIsOld = &rComboBox == &aOldSymbolSets; + + // setzen des SymbolSet Namens an der zugehörigen Darstellung + FixedText &rFT = bIsOld ? aOldSymbolSetName : aSymbolSetName; + rFT.SetText(rComboBox.GetText()); + + // setzen der zum SymbolSet gehörenden Symbol Namen an der zugehörigen + // Auswahbox + ComboBox &rCB = bIsOld ? aOldSymbols : aSymbols; + FillSymbols(rCB, FALSE); + + // bei Wechsel des SymbolSets für das alte Zeichen ein gültiges + // Symbol bzw keins zur Anzeige bringen + if (bIsOld) + { + XubString aOldSymbolName; + if (aOldSymbols.GetEntryCount() > 0) + aOldSymbolName = aOldSymbols.GetEntry(0); + SelectSymbol(aOldSymbols, aOldSymbolName, TRUE); + } + + UpdateButtons(); + + return bRet; +} + + +void SmSymDefineDialog::SetOrigSymbol(const SmSym *pSymbol, + const XubString &rSymbolSetName) +{ + pOrigSymbol = pSymbol; + + XubString aSymName, + aSymSetName; + if (pSymbol) + { + aSymName = pSymbol->GetName(); + aSymSetName = rSymbolSetName; + aOldSymbolDisplay.SetFont(pSymbol->GetFace()); + aOldSymbolDisplay.SetChar(pSymbol->GetCharacter()); + } + else + { // löschen des angezeigten Symbols + aOldSymbolDisplay.SetText(XubString()); + aOldSymbolDisplay.Invalidate(); + } + aOldSymbolName .SetText(aSymName); + aOldSymbolSetName.SetText(aSymSetName); +} + + +BOOL SmSymDefineDialog::SelectSymbol(ComboBox &rComboBox, + const XubString &rSymbolName, BOOL bDeleteText) +{ + DBG_ASSERT(&rComboBox == &aOldSymbols || &rComboBox == &aSymbols, + "Sm : falsche ComboBox"); + + // 'Normalisieren' des SymbolNamens (ohne Leerzeichen) + XubString aNormName (rSymbolName); + aNormName.EraseAllChars(' '); + // und evtl Abweichungen in der Eingabe beseitigen + rComboBox.SetText(aNormName); + + BOOL bRet = FALSE; + USHORT nPos = rComboBox.GetEntryPos(aNormName); + + BOOL bIsOld = &rComboBox == &aOldSymbols; + + if (nPos != COMBOBOX_ENTRY_NOTFOUND) + { + rComboBox.SetText(rComboBox.GetEntry(nPos)); + + if (!bIsOld) + { + const SmSym *pSymbol = GetSymbol(aSymbols); + if (pSymbol) + { + // Font und Style entsprechend wählen + const Font &rFont = pSymbol->GetFace(); + SelectFont(rFont.GetName(), FALSE); + SelectStyle(GetFontStyleName(rFont), FALSE); + + // da das setzen des Fonts über den Style Namen des SymbolsFonts nicht + // so gut klappt (er kann zB leer sein obwohl der Font selbst 'bold' und + // 'italic' ist!). Setzen wir hier den Font wie er zum Symbol gehört + // zu Fuß. + aCharsetDisplay.SetFont(rFont); + aSymbolDisplay.SetFont(rFont); + + // das zugehörige Zeichen auswählen + SelectChar(pSymbol->GetCharacter()); + } + } + + bRet = TRUE; + } + else if (bDeleteText) + rComboBox.SetText(XubString()); + + if (bIsOld) + { + // bei Wechsel des alten Symbols nur vorhandene anzeigen sonst keins + const SmSym *pOldSymbol = NULL; + XubString aOldSymbolSetName; + if (nPos != COMBOBOX_ENTRY_NOTFOUND) + { + pOldSymbol = aSymSetMgrCopy.GetSymbol(aNormName); + aOldSymbolSetName = aOldSymbolSets.GetText(); + } + SetOrigSymbol(pOldSymbol, aOldSymbolSetName); + } + else + aSymbolName.SetText(rComboBox.GetText()); + + UpdateButtons(); + + return bRet; +} + + +void SmSymDefineDialog::SetFont(const XubString &rFontName, const XubString &rStyleName) +{ + // Font (FontInfo) passend zu Namen und Style holen + DBG_ASSERT(pFontList, "Sm : NULL pointer"); + FontInfo aFI( pFontList->Get(rFontName, WEIGHT_NORMAL, ITALIC_NONE) ); + SetFontStyle(rStyleName, aFI); + + aCharsetDisplay.SetFont(aFI); + aSymbolDisplay.SetFont(aFI); +} + + +BOOL SmSymDefineDialog::SelectFont(const XubString &rFontName, BOOL bApplyFont) +{ + BOOL bRet = FALSE; + USHORT nPos = aFonts.GetEntryPos(rFontName); + + if (nPos != LISTBOX_ENTRY_NOTFOUND) + { + aFonts.SelectEntryPos(nPos); + if (aStyles.GetEntryCount() > 0) + SelectStyle(aStyles.GetEntry(0)); + if (bApplyFont) + SetFont(aFonts.GetSelectEntry(), aStyles.GetText()); + bRet = TRUE; + } + else + aFonts.SetNoSelection(); + FillStyles(); + + UpdateButtons(); + + return bRet; +} + + +BOOL SmSymDefineDialog::SelectStyle(const XubString &rStyleName, BOOL bApplyFont) +{ + BOOL bRet = FALSE; + USHORT nPos = aStyles.GetEntryPos(rStyleName); + + // falls der Style nicht zur Auswahl steht nehmen wir den erst möglichen + // (sofern vorhanden) + if (nPos == COMBOBOX_ENTRY_NOTFOUND && aStyles.GetEntryCount() > 0) + nPos = 0; + + if (nPos != COMBOBOX_ENTRY_NOTFOUND) + { + aStyles.SetText(aStyles.GetEntry(nPos)); + if (bApplyFont) + SetFont(aFonts.GetSelectEntry(), aStyles.GetText()); + bRet = TRUE; + } + else + aStyles.SetText(XubString()); + + UpdateButtons(); + + return bRet; +} + + +void SmSymDefineDialog::SelectChar(xub_Unicode cChar) +{ + aCharsetDisplay.SelectChar(cChar); + aSymbolDisplay.SetChar(cChar); + + UpdateButtons(); +} + + +/**************************************************************************/ + +#ifdef NEVER +SfxTabPage* SmGeneralTabPage::Create(Window* pWindow, const SfxItemSet& rSet) +{ + return new SmGeneralTabPage(pWindow, rSet); +} +#endif NEVER + + + diff --git a/starmath/source/document.cxx b/starmath/source/document.cxx new file mode 100644 index 000000000000..130f00126f47 --- /dev/null +++ b/starmath/source/document.cxx @@ -0,0 +1,1641 @@ +/************************************************************************* + * + * $RCSfile: document.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef _UCBHELPER_CONTENT_HXX +#include +#endif +#include +#ifndef _SVSTOR_HXX //autogen +#include +#endif +#ifndef _SFXSMPLHINT_HXX //autogen +#include +#endif +#ifndef _SO_CLSIDS_HXX //autogen +#include +#endif +#ifndef _SOT_EXCHANGE_HXX //autogen +#include +#endif +#ifndef _SV_MSGBOX_HXX //autogen +#include +#endif +#ifndef _SFXENUMITEM_HXX //autogen +#include +#endif +#ifndef _SFX_WHITER_HXX //autogen +#include +#endif +#ifndef _SFXINTITEM_HXX //autogen +#include +#endif +#ifndef _SFXSTRITEM_HXX //autogen +#include +#endif +#ifndef _SFXPTITEM_HXX //autogen +#include +#endif +#ifndef _UNDO_HXX //autogen +#include +#endif +#ifndef _SFXITEMPOOL_HXX //autogen +#include +#endif +#ifndef SVTOOLS_URIHELPER_HXX +#include +#endif +#ifndef _SFXDISPATCH_HXX //autogen +#include +#endif +#ifndef _SFXDOCINF_HXX //autogen +#include +#endif +#ifndef _SFXDOCFILE_HXX //autogen +#include +#endif +#ifndef _SFXAPP_HXX //autogen +#include +#endif +#ifndef _SFXREQUEST_HXX //autogen +#include +#endif +#ifndef _IODLG_HXX +#include +#endif +#ifndef _SFXECODE_HXX //autogen +#include +#endif +#ifndef _SV_EXCHANGE_HXX //autogen +#include +#endif +#ifndef _SFX_PRINTER_HXX //autogen +#include +#endif +#ifndef _SFX_DOCFILT_HACK_HXX +#include +#endif + +#ifndef STARMATH_HRC +#include +#endif +#ifndef DOCUMENT_HXX +#include +#endif +#ifndef UNOMODEL_HXX +#include +#endif +#ifndef CONFIG_HXX +#include +#endif +#ifndef SYMBOL_HXX +#include +#endif +#ifndef TOOLBOX_HXX +#include +#endif +#ifndef DIALOG_HXX +#include +#endif +#ifndef ACTION_HXX +#include +#endif +#ifndef VIEW_HXX +#include +#endif +#ifndef FORMAT_HXX +#include +#endif +#ifndef MATHTYPE_HXX +#include +#endif + + +using namespace ::com::sun::star; +using namespace ::com::sun::star::ucb; +using namespace ::com::sun::star::uno; +using namespace ::rtl; + +#ifndef SO2_DECL_SVSTORAGESTREAM_DEFINED +#define SO2_DECL_SVSTORAGESTREAM_DEFINED +SO2_DECL_REF(SvStorageStream) +#endif +#ifndef SO2_DECL_SVSTORAGE_DEFINED +#define SO2_DECL_SVSTORAGE_DEFINED +SO2_DECL_REF(SvStorage) +#endif + +#define DOCUMENT_BUFFER_SIZE (USHORT)32768 + +static const char __FAR_DATA pStarMathDoc[] = "StarMathDocument"; + + +/**************************************************************************/ +/* +** +** CLASS IMPLEMENTATION +** +**/ + +#define SmDocShell +#include "smslots.hxx" + +TYPEINIT1( SmDocShell, SfxObjectShell ); + +SFX_IMPL_INTERFACE(SmDocShell, SfxObjectShell, SmResId(0)) +{ + SFX_POPUPMENU_REGISTRATION(SmResId(RID_VIEWMENU)); + SFX_POPUPMENU_REGISTRATION(SmResId(RID_COMMANDMENU)); +// SFX_OBJECTBAR_REGISTRATION( +// SFX_OBJECTBAR_OBJECT|SFX_VISIBILITY_STANDARD|SFX_VISIBILITY_SERVER, +// SmResId(RID_DEFAULTTOOLBOX)); +} + +#if 0 +SFX_IMPL_OBJECTFACTORY(SmDocShell, SFXOBJECTSHELL_STD_NORMAL, smath, SvGlobalName(SO3_SM_CLASSID_50) ) +{ + SFX_SIMPLE_FILTER_REGISTRATION( C2S("StarMath 5.0"), C2S("*.smf"), + SFX_FILTER_OWN | SFX_FILTER_IMPORT | SFX_FILTER_EXPORT, + SOT_FORMATSTR_ID_STARMATH_50, + C2S("SVsm0.smf"), C2S("OS2"), 0, C2S("0"), String()); + +//JP 13.06.00: das fehlt vwohl noch, oder?? +// SfxObjectFactory& rFactory = (SfxObjectFactory&)Factory(); +// SfxFactoryFilterContainer *pFltContainer = rFactory.GetFilterContainer( FALSE ); +// rFactory.GetFilterContainer()->SetDetectFilter( &SmDLL::DetectFilter ); + + // FG: Sonst gibts keine Hilfe im Math #38447# + Factory().RegisterHelpFile (C2S("smath.svh")); +} +#else +SFX_IMPL_OBJECTFACTORY_DLL(SmDocShell, smath, SvGlobalName(SO3_SM_CLASSID_50), Sm); +#endif + +void SmDocShell::SFX_NOTIFY(SfxBroadcaster&, const TypeId&, + const SfxHint& rHint, const TypeId&) +{ + switch (((SfxSimpleHint&)rHint).GetId()) + { + case HINT_CONFIGCHANGED: + { + SmModule *pp = SM_MOD1(); + + if (pp->GetConfig()->IsAutoRedraw()) + { nModifyCount++; //! merkwrdig... + // ohne dies wird die Grafik letztlich + // nicht geupdatet + Resize(); + } + break; + } + + case HINT_FORMATCHANGED: + SetFormulaArranged(FALSE); + nModifyCount++; //! merkwrdig... + // ohne dies wird die Grafik letztlich + // nicht geupdatet + Resize(); + break; + } +} + +void SmDocShell::LoadSymbols() +{ + SmModule *pp = SM_MOD1(); + String sURL(pp->GetConfig()->GetSymbolFile()); + SfxIniManager* pIniMgr = SFX_INIMANAGER(); + sURL = pIniMgr->SubstPathVars( sURL ); + BOOL bExist = FALSE; + INetURLObject aURLObj; + aURLObj.SetSmartProtocol( INET_PROT_FILE ); + aURLObj.SetSmartURL(sURL); + try + { + if(aURLObj.GetProtocol() == INET_PROT_FILE) + bExist = ::ucb::Content( aURLObj.GetMainURL(), + uno::Reference< XCommandEnvironment >()).isDocument(); + } + catch(...){} + if(!bExist) + pIniMgr->SearchFile( sURL, SFX_KEY_USERCONFIG_PATH ); + + sURL = URIHelper::SmartRelToAbs(sURL); + pp->GetSymSetManager()->Load(sURL); +} + +const String &SmDocShell::GetTitle() const +{ + return ((SmDocShell *) this)->GetDocInfo().GetTitle(); +} + + + +const String &SmDocShell::GetComment() const +{ + return ((SmDocShell *) this)->GetDocInfo().GetComment(); +} + + + +void SmDocShell::SetText(const String& rBuffer) +{ + if (rBuffer != aText) + { + aText = rBuffer; + Parse(); + SetFormulaArranged(FALSE); + Resize(); + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetBindings().Invalidate(SID_TEXT); + SetModified(TRUE); + } +} + +void SmDocShell::SetFormat(SmFormat& rFormat) +{ + aFormat = rFormat; + SetFormulaArranged(FALSE); + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetBindings().Invalidate(SID_GRAPHIC); + SetModified(TRUE); +} + + +void SmDocShell::Parse() +{ + if (pTree) + delete pTree; + pTree = aInterpreter.Parse(aText); + nModifyCount++; +} + + +void SmDocShell::ArrangeFormula() +{ + //! Nur für die Dauer der Existenz dieses Objekts sind am Drucker die + //! richtigen Einstellungen garantiert. + SmPrinterAccess aPrtAcc(*this); + + OutputDevice *pOutDev = aPrtAcc.GetPrinter(); + +#ifndef PRODUCT + if (!pOutDev) + DBG_WARNING("Sm : kein Drucker vorhanden"); +#endif + + // falls nötig ein anderes OutputDevice holen für das formatiert wird + if (!pOutDev) + { + SmViewShell *pView = SmGetActiveView(); + if (pView) + pOutDev = &pView->GetGraphicWindow(); + else + { pOutDev = new VirtualDevice; + pOutDev->SetMapMode( MapMode(MAP_100TH_MM) ); + } + } + DBG_ASSERT(pOutDev->GetMapMode().GetMapUnit() == MAP_100TH_MM, + "Sm : falscher MapMode"); + + const SmFormat &rFormat = GetFormat(); + pTree->Prepare(rFormat); + pTree->Arrange(*pOutDev, rFormat); + + SetFormulaArranged(TRUE); +} + + +void SmDocShell::Draw(OutputDevice &rDev, Point &rPosition) +{ + if (!pTree) + Parse(); + DBG_ASSERT(pTree, "Sm : NULL pointer"); + + if (!IsFormulaArranged()) + ArrangeFormula(); + + //Problem: Was passiert mit dem WYSIWYG? Wir haben waehrend wir inplace aktiv + //sind kein Referenzdevice und sind auch nicht darauf ausgerichtet. Es kann + //also jetzt eine Differenz zwischen der VisArea (spricht die Groesse im Client) + //und der jetzt vorliegenden Groese geben. + //Idee: Die Differenz koennte, zumindest behelfsmaessig, mit SmNod::SetSize + //angepasst werden. + + rPosition.X() += aFormat.GetDistance( DIS_LEFTSPACE ); + rPosition.Y() += aFormat.GetDistance( DIS_TOPSPACE ); + pTree->Draw(rDev, rPosition); +} + + + +Size SmDocShell::GetSize() +{ + Size aRet; + + if (!pTree) + Parse(); + + if (pTree) + { + if (!IsFormulaArranged()) + ArrangeFormula(); + aRet = pTree->GetSize(); + + if ( !aRet.Width() ) + aRet.Width() = 2000; + else + aRet.Width() += aFormat.GetDistance( DIS_LEFTSPACE ) + + aFormat.GetDistance( DIS_RIGHTSPACE ); + if ( !aRet.Height() ) + aRet.Height() = 1000; + else + aRet.Height() += aFormat.GetDistance( DIS_TOPSPACE ) + + aFormat.GetDistance( DIS_BOTTOMSPACE ); + } + + return aRet; +} + +//////////////////////////////////////// + +SmPrinterAccess::SmPrinterAccess( SmDocShell &rDocShell ) +{ + if ( 0 != (pPrinter = rDocShell.GetPrt()) ) + { + pPrinter->Push( PUSH_MAPMODE ); + if ( rDocShell.GetProtocol().IsInPlaceActive() || + SFX_CREATE_MODE_EMBEDDED == rDocShell.GetCreateMode() ) + { + // if it is an embedded object (without it's own printer) + // we change the MapMode temporarily. + //!If it is a document with it's own printer the MapMode should + //!be set correct (once) elsewhere(!), in order to avoid numerous + //!superfluous pushing and poping of the MapMode when using + //!this class. + + const MapUnit eOld = pPrinter->GetMapMode().GetMapUnit(); + if ( MAP_100TH_MM != eOld ) + { + MapMode aMap( pPrinter->GetMapMode() ); + aMap.SetMapUnit( MAP_100TH_MM ); + Point aTmp( aMap.GetOrigin() ); + aTmp.X() = OutputDevice::LogicToLogic( aTmp.X(), eOld, MAP_100TH_MM ); + aTmp.Y() = OutputDevice::LogicToLogic( aTmp.Y(), eOld, MAP_100TH_MM ); + aMap.SetOrigin( aTmp ); + pPrinter->SetMapMode( aMap ); + } + } + } +} + +SmPrinterAccess::~SmPrinterAccess() +{ + if ( pPrinter ) + pPrinter->Pop(); +} + +//////////////////////////////////////// + +Printer *SmDocShell::GetPrt() +{ + if ( GetProtocol().IsInPlaceActive() || + SFX_CREATE_MODE_EMBEDDED == GetCreateMode() ) + { + //Normalerweise wird der Printer vom Server besorgt. Wenn dieser aber + //keinen liefert (weil etwa noch keine connection da ist), kann es + //dennoch sein, dass wir den Printer kennen, denn dieser wird in + //OnDocumentPrinterChanged vom Server durchgereicht und dann temporaer + //festgehalten. + Printer *pPrt = GetDocumentPrinter(); + if ( !pPrt ) + pPrt = pTmpPrinter; + return pPrt; + } + else if ( !pPrinter ) + { + SfxItemSet *pOptions = + new SfxItemSet(GetPool(), + SID_PRINTSIZE, SID_PRINTSIZE, + SID_PRINTZOOM, SID_PRINTZOOM, + SID_PRINTTITLE, SID_PRINTTITLE, + SID_PRINTTEXT, SID_PRINTTEXT, + SID_PRINTFRAME, SID_PRINTFRAME, + SID_NO_RIGHT_SPACES, SID_NO_RIGHT_SPACES, + 0); + + SmModule *pp = SM_MOD1(); + pp->GetConfig()->ConfigToItemSet(*pOptions); + pPrinter = new SfxPrinter(pOptions); + pPrinter->SetMapMode( MapMode(MAP_100TH_MM) ); + } + return pPrinter; +} + + +void SmDocShell::SetPrinter( SfxPrinter *pNew ) +{ + delete pPrinter; + pPrinter = pNew; //Eigentumsuebergang! + pPrinter->SetMapMode( MapMode(MAP_100TH_MM) ); + SetFormulaArranged(FALSE); + SM_MOD1()->GetRectCache()->Reset(); + Resize(); +} + +void SmDocShell::OnDocumentPrinterChanged( Printer *pPrt ) +{ + pTmpPrinter = pPrt; + SetFormulaArranged(FALSE); + SM_MOD1()->GetRectCache()->Reset(); + Size aOldSize = GetVisArea().GetSize(); + Resize(); + if ( aOldSize != GetVisArea().GetSize() ) + SetModified( TRUE ); + pTmpPrinter = 0; +} + +void SmDocShell::Resize() +{ + Size aVisSize = GetSize(); + + BOOL bIsEnabled = IsEnableSetModified(); + if ( bIsEnabled ) + EnableSetModified( FALSE ); + + SetUpdateTimeout( 0L ); + SetVisAreaSize( aVisSize ); + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetBindings().Invalidate(SID_GRAPHIC); + + if ( bIsEnabled ) + EnableSetModified( bIsEnabled ); +} + + +SmDocShell::SmDocShell(SfxObjectCreateMode eMode) : + SfxObjectShell(eMode), + aDataTypeList(SvEmbeddedObject::GetStdFormatList()), + pTree( 0 ), + pPrinter( 0 ), + pTmpPrinter( 0 ), + nModifyCount( 0 ), + bIsFormulaArranged( FALSE ) +{ + SetPool(&SFX_APP()->GetPool()); + + SmModule *pp = SM_MOD1(); + aFormat = pp->GetConfig()->GetFormat(); + + StartListening(aFormat); + StartListening(*pp->GetConfig()); + LoadSymbols(); + + SetShell(this); + SetModel( new SmModel(this) ); //! das hier mit new erzeugte Model brauch + //! im Destruktor nicht explizit gelöscht werden. + //! Dies erledigt das Sfx. + pUndoMgr = new SfxUndoManager; + aDataTypeList.Append(SvDataType(FORMAT_STRING, MEDIUM_MEMORY)); +} + + + +SmDocShell::~SmDocShell() +{ + SmModule *pp = SM_MOD1(); + + EndListening(aFormat); + EndListening(*pp->GetConfig()); + + SaveSymbols(); + + delete pUndoMgr; + delete pTree; + delete pPrinter; +} + + + +BOOL SmDocShell::GetData(SvData *pData) +{ + if ( FORMAT_STRING == pData->GetFormat() ) + { + pData->SetData(GetText()); + return TRUE; + } + + return SfxInPlaceObject::GetData(pData); +} + +BOOL SmDocShell::SetData( SvData *pData ) +{ + if ( FORMAT_STRING == pData->GetFormat() ) + { + String aData; + if ( pData->GetData( aData ) ) + { + SetText( aData ); + return TRUE; + } + } + return SfxInPlaceObject::SetData( pData ); +} + +void SmDocShell::Convert40To50Txt() + // adapts the text 'aText' to be parsed from 4.0 version, to changes made + // in 5.0 version. (Namely that functions do not need arguments any more) + // Example: "2 over sin x" acts very different in 4.0 and 5.0 +{ + if (pTree) + delete pTree; + + // parse in old 4.0 style and make changes for 5.0 style + BOOL bVal = aInterpreter.IsConvert40To50(); + aInterpreter.SetConvert40To50(TRUE); + pTree = aInterpreter.Parse(aText); + aInterpreter.SetConvert40To50(bVal); + + // get new to 5.0 version converted text + aText = aInterpreter.GetText(); + + // clean up tree parsed in old style + if (pTree) + { delete pTree; + pTree = NULL; + } +} + + +BOOL SmDocShell::ConvertFrom(SfxMedium &rMedium) +{ + BOOL bSuccess = FALSE; + String aTmpStr( C2S( "Equation Native" )); + if( rMedium.IsStorage() && rMedium.GetStorage()->IsStream( aTmpStr )) + { + // is this a MathType Storage? + MathType aEquation( aText ); + bSuccess = aEquation.Parse( rMedium.GetStorage() ); + } + else + { + SvStream *pStream = rMedium.GetInStream(); + if (pStream) + { + bSuccess = ImportSM20File( pStream ); + rMedium.CloseInStream(); + } + } + FinishedLoading( SFX_LOADED_ALL ); + return bSuccess; +} + + + +BOOL SmDocShell::InsertFrom(SfxMedium &rMedium) +{ + BOOL bSuccess = FALSE; + SvStream *pStream = rMedium.GetInStream(); + + if (pStream) + { + bSuccess = ImportSM20File( pStream, TRUE ); + rMedium.CloseInStream(); + } + return bSuccess; +} + + + +BOOL SmDocShell::InitNew(SvStorage * pStor) +{ + BOOL bRet = FALSE; + if (SfxInPlaceObject::InitNew(pStor)) + { + bRet = TRUE; + SetVisArea(Rectangle(Point(0, 0), Size(2000, 1000))); + if (pStor) + { + aDocStream = pStor->OpenStream(String::CreateFromAscii(pStarMathDoc)); + aDocStream->SetVersion (pStor->GetVersion ()); + GetPool().SetFileFormatVersion(USHORT(pStor->GetVersion())); + + if (! aDocStream ) + bRet = FALSE; + } + } + return bRet; +} + + +BOOL SmDocShell::Load(SvStorage *pStor) +{ + BOOL bRet = FALSE; + if( SfxInPlaceObject::Load( pStor )) + { + String aTmpStr( C2S( "Equation Native" )); + if( pStor->IsStream( aTmpStr )) + { + // is this a MathType Storage? + MathType aEquation(aText); + bRet = (1 == aEquation.Parse(pStor)); + } + else + { + bRet = 0 != Try3x (pStor, STREAM_READWRITE); + + if( !bRet ) + { + pStor->Remove(String::CreateFromAscii(pStarMathDoc)); + bRet = 0 != Try2x (pStor, STREAM_READWRITE); + pStor->Remove(C2S("\1Ole10Native")); + } + else + { + if ( pStor->GetVersion() <= SOFFICE_FILEFORMAT_40 ) + Convert40To50Txt(); + } + } + } + FinishedLoading( SFX_LOADED_ALL ); + return bRet; +} + + + +BOOL SmDocShell::Insert(SvStorage *pStor) +{ + String aTemp = aText; + BOOL bRet = TRUE; + + if (!Try3x (pStor, STREAM_STD_READ)) + { + pStor->Remove (String::CreateFromAscii(pStarMathDoc)); + bRet = !Try2x (pStor, STREAM_STD_READ); + pStor->Remove(C2S("\1Ole10Native")); + } + + if ( bRet ) + { + aTemp += aText; + aText = aTemp; + + if ( pStor->GetVersion() <= SOFFICE_FILEFORMAT_40 ) + Convert40To50Txt(); + + Parse(); + SetModified(TRUE); + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + { + SfxBindings &rBnd = pViewSh->GetViewFrame()->GetBindings(); + rBnd.Invalidate(SID_GRAPHIC); + rBnd.Invalidate(SID_TEXT); + } + } + return bRet; +} + +//------------------------------------------------------------------ + +void SmDocShell::ImplSave( SvStorageStreamRef xStrm ) +{ + ByteString exString (ExportString(aText)); + SmModule *pp = SM_MOD1(); + + *xStrm << SM304AIDENT << SM50VERSION + << 'T'; + xStrm->WriteByteString(exString); + *xStrm << 'F' << aFormat + << 'S' << pp->GetSymSetManager()->GetAccessedSymbols() + << '\0'; +} + +BOOL SmDocShell::Save() +{ + if ( SfxInPlaceObject::Save() && aDocStream.Is() ) + { + aDocStream->Seek(0); + ImplSave( aDocStream ); + return TRUE; + } + return FALSE; +} + + +BOOL SmDocShell::SaveAs(SvStorage * pNewStor) +{ + BOOL bRet = FALSE; + if ( SfxInPlaceObject::SaveAs( pNewStor ) ) + { + SvStorageStreamRef aStm = pNewStor->OpenStream( + String::CreateFromAscii(pStarMathDoc)); + aStm->SetVersion( pNewStor->GetVersion() ); + GetPool().SetFileFormatVersion( USHORT( pNewStor->GetVersion() )); + aStm->SetBufferSize(DOCUMENT_BUFFER_SIZE); + aStm->SetKey( pNewStor->GetKey() ); // Passwort setzen + + if ( aStm.Is() ) + { + ImplSave( aStm ); + bRet = TRUE; + } + } + return bRet; +} + +BOOL SmDocShell::ConvertTo( SfxMedium &rMedium ) +{ + BOOL bRet = FALSE; + const SfxFilter* pFlt = rMedium.GetFilter(); + if( pFlt && pFlt->GetFilterName().EqualsAscii( "MathType 3.x" )) + bRet = WriteAsMathType3( rMedium ); + return bRet; +} + +BOOL SmDocShell::SaveCompleted(SvStorage * pStor) +{ + if( SfxInPlaceObject::SaveCompleted( pStor )) + { + if (! pStor) + return TRUE; + + aDocStream = pStor->OpenStream(String::CreateFromAscii(pStarMathDoc)); + aDocStream->SetVersion (pStor->GetVersion ()); + GetPool().SetFileFormatVersion(USHORT(pStor->GetVersion())); + aDocStream->SetBufferSize(DOCUMENT_BUFFER_SIZE); + aDocStream->SetKey( pStor->GetKey() ); // Passwort setzen + return aDocStream.Is(); + } + return FALSE; +} + + + +BOOL SmDocShell::ImportSM20File(SvStream *pStream, BOOL bInsert) +{ + void ReadSM20SymSet(SvStream*, SmSymSet*); + + char cTag; + ULONG lIdent, lVersion; + long lTime; + ULONG lDate; + String aBuffer; + SmSymSet *pSymbolSet; + ULONG FilePos = pStream->Tell(); + + *pStream >> lIdent >> lVersion; + + if (lIdent == FRMIDENT) + { + DBG_ASSERT((lVersion == FRMVERSION), "Illegal file version"); + + *pStream >> cTag; + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + while (cTag && !pStream->IsEof()) + { + switch (cTag) + { + case 'T': + pStream->ReadByteString(aBuffer, eEnc); + if (! bInsert) + { + aText = aBuffer; + Parse(); + } + else + { + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetDispatcher()->Execute( + SID_INSERTTEXT, SFX_CALLMODE_STANDARD, + new SfxStringItem(SID_INSERTTEXT, aBuffer), 0L); + } + break; + + case 'D': + { + pStream->ReadByteString(aBuffer, eEnc); + pStream->ReadByteString(aBuffer, eEnc); + *pStream >> lDate >> lTime; + pStream->ReadByteString(aBuffer, eEnc); + *pStream >> lDate >> lTime; + pStream->ReadByteString(aBuffer, eEnc); + } + break; + + case 'F': + aFormat.ReadSM20Format(*pStream); + aFormat.From300To304a (); + break; + + case 'S': + pSymbolSet = new SmSymSet(); + ReadSM20SymSet(pStream, pSymbolSet); + if (! bInsert) + { + SmModule *pp = SM_MOD1(); + pp->GetSymSetManager()->AppendExtraSymbolSet(pSymbolSet); + } + else + delete pSymbolSet; + break; + + default: + DBG_ASSERT((cTag != 0), "Illegal data tag"); + } + *pStream >> cTag; + } + + return TRUE; + } + + pStream->Seek(FilePos); + + return FALSE; +} + + +void SmDocShell::Execute(SfxRequest& rReq) +{ + SfxBindings *pBindings = NULL; + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pBindings = &pViewSh->GetViewFrame()->GetBindings(); + switch (rReq.GetSlot()) + { + case SID_TEXTMODE: + { + SmFormat &rFormat = GetFormat(); + rFormat.SetTextmode(!rFormat.IsTextmode()); + rFormat.RequestApplyChanges(); + break; + } + + case SID_SYMBOLS_LOAD: + { + SmModule *pp = SM_MOD1(); + + SfxSimpleFileDialog *pFileDialog = + new SfxSimpleFileDialog(0, WinBits(WB_OPEN | WB_3DLOOK)); + +#ifdef MAC + pFileDialog->AddFilter(SmResId(RID_SYMBOLFILESSTR), SmResId(RID_FILESYMTYP)); + pFileDialog->AddFilter(SmResId(RID_ALLFILESSTR), C2S("****")); + + pFileDialog->SetCurFilter(SmResId(RID_SYMBOLFILESSTR)); +#else + String aExt( C2S("*.sms" )); + pFileDialog->AddFilter(SmResId(RID_SYMBOLFILESSTR), aExt); + pFileDialog->AddFilter(SmResId(RID_ALLFILESSTR), C2S("*.*")); + pFileDialog->SetCurFilter(SmResId(RID_SYMBOLFILESSTR)); + pFileDialog->SetDefaultExt(aExt); +#endif + + pFileDialog->SetPath(pp->GetConfig()->GetSymbolFile()); + + if ( RET_OK == pFileDialog->Execute() ) + { + // save old symbols and sets if necessary + if (pp->GetSymSetManager()->IsModified()) + pp->GetSymSetManager()->Save(); + // load new symbols and sets from file + INetURLObject aURLObj; + aURLObj.SetSmartProtocol( INET_PROT_FILE ); + aURLObj.SetSmartURL( pFileDialog->GetPath() ); + pp->GetSymSetManager()->Load( aURLObj.GetMainURL() ); + // make that file the new default symbolfile + pp->GetConfig()->SetSymbolFile( pFileDialog->GetPath() ); + } + + delete pFileDialog; + } + break; + + case SID_AUTO_REDRAW : + { + SmModule *pp = SM_MOD1(); + BOOL bRedraw = pp->GetConfig()->IsAutoRedraw(); + pp->GetConfig()->SetAutoRedraw(!bRedraw); + break; + } + + case SID_SYMBOLS_CATALOGUE: + { + SmSymSetManager *pSymSetMgr = SM_MOD1()->GetSymSetManager(); + SmSymbolDialog(NULL, *pSymSetMgr).Execute(); + RestartFocusTimer(); + break; + } + + case SID_TOOLBOX: + { + SmViewShell *pView = SmGetActiveView(); + pView->GetViewFrame()->ToggleChildWindow( + SmToolBoxWrapper::GetChildWindowId() ); + break; + } + + case SID_INSERT_FORMULA: + { + SfxMedium *pMedium = SFX_APP()-> + InsertDocumentDialog(SFXWB_INSERT | WB_OPEN | WB_3DLOOK, + SmDocShell::Factory()); + + if (pMedium != NULL) + { + if (pMedium->IsStorage()) + Insert(pMedium->GetStorage()); + else + InsertFrom(*pMedium); + delete pMedium; + + SetFormulaArranged(FALSE); + // Fenster anpassen, neuzeichnen, ModifyCount erhöhen,... + if (pBindings) + pBindings->Invalidate(SID_GRAPHIC); + } + RestartFocusTimer(); + rReq.SetReturnValue (SfxBoolItem (rReq.GetSlot(), TRUE)); + break; + } + + case SID_LOADSYMBOLS: + LoadSymbols(); + break; + + case SID_SAVESYMBOLS: + SaveSymbols(); + break; + + case SID_FONT: + { + SmFontTypeDialog *pFontTypeDialog = new SmFontTypeDialog(NULL); + + pFontTypeDialog->ReadFrom(GetFormat()); + if (pFontTypeDialog->Execute() == RET_OK) + { + SmFormat& rOldFormat = GetFormat(); + + pFontTypeDialog->WriteTo(GetFormat()); + GetUndoManager()->AddUndoAction( + new SmFormatAction(this, rOldFormat, GetFormat())); + + if (aText.Len ()) + { + SetModified(TRUE); + if (pBindings) + pBindings->Invalidate(SID_GRAPHIC); + } + else SetModified (FALSE); + } + delete pFontTypeDialog; + RestartFocusTimer (); + break; + } + + case SID_FONTSIZE: + { + SmFontSizeDialog *pFontSizeDialog = new SmFontSizeDialog(NULL); + + pFontSizeDialog->ReadFrom(GetFormat()); + if (pFontSizeDialog->Execute() == RET_OK) + { + SmFormat& rOldFormat = GetFormat(); + + pFontSizeDialog->WriteTo(GetFormat()); + + GetUndoManager()->AddUndoAction( + new SmFormatAction(this, rOldFormat, GetFormat())); + + if (aText.Len ()) + { + SetModified(TRUE); + if (pBindings) + pBindings->Invalidate(SID_GRAPHIC); + } + else SetModified (FALSE); + } + delete pFontSizeDialog; + RestartFocusTimer (); + break; + } + + case SID_DISTANCE: + { + SmDistanceDialog *pDistanceDialog = new SmDistanceDialog(NULL); + + pDistanceDialog->ReadFrom(GetFormat()); + if (pDistanceDialog->Execute() == RET_OK) + { + SmFormat& rOldFormat = GetFormat(); + + pDistanceDialog->WriteTo(GetFormat()); + + GetUndoManager()->AddUndoAction( + new SmFormatAction(this, rOldFormat, GetFormat())); + + if (aText.Len ()) + { + SetModified(TRUE); + if (pBindings) + pBindings->Invalidate(SID_GRAPHIC); + } + else + SetModified (FALSE); + } + delete pDistanceDialog; + RestartFocusTimer (); + break; + } + + case SID_ALIGN: + { + SmAlignDialog *pAlignDialog = new SmAlignDialog(NULL); + + pAlignDialog->ReadFrom(GetFormat()); + if (pAlignDialog->Execute() == RET_OK) + { + SmFormat& rOldFormat = GetFormat(); + + pAlignDialog->WriteTo(GetFormat()); + SmModule *pp = SM_MOD1(); + pAlignDialog->WriteTo(pp->GetConfig()->GetFormat()); + + GetUndoManager()->AddUndoAction( + new SmFormatAction(this, rOldFormat, GetFormat())); + + if (aText.Len ()) + { + SetModified(TRUE); + if (pBindings) + pBindings->Invalidate(SID_GRAPHIC); + } + else + SetModified (FALSE); + } + delete pAlignDialog; + RestartFocusTimer (); + break; + } + + case SID_TEXT: + { + const SfxStringItem& rItem = + (const SfxStringItem&)rReq.GetArgs()->Get(SID_TEXT); + + if (GetText() != rItem.GetValue()) + { + GetUndoManager()->AddUndoAction( + new SmEditAction(this, GetText(), rItem.GetValue())); + + SetText(rItem.GetValue()); + } + break; + } + + case SID_COPYOBJECT: + { + SvDataMemberObjectRef ObjRef = CreateSnapshot(); + ObjRef->CopyClipboard(); + break; + } + + case SID_PASTEOBJECT: + { + SvDataObjectRef ObjRef = SvDataObject::PasteClipboard(); + + if (ObjRef.Is()) + { + SvObjectDescriptor ObjDesc(ObjRef); + + if (ObjDesc.GetClassName() == *GetSvFactory()) + { + SvStorageRef StorageRef(new SvStorage(String())); + SvData ObjData(SOT_FORMATSTR_ID_EMBED_SOURCE); + + ObjData.SetData(StorageRef, TRANSFER_REFERENCE); + + if (ObjRef->GetDataHere(&ObjData)) + Insert(StorageRef); + } + } + + break; + } + } +} + + +void SmDocShell::GetState(SfxItemSet &rSet) +{ + SfxWhichIter aIter(rSet); + + for (USHORT nWh = aIter.FirstWhich(); 0 != nWh; nWh = aIter.NextWhich()) + { + switch (nWh) + { + case SID_TEXTMODE: + { + rSet.Put(SfxBoolItem(SID_TEXTMODE, GetFormat().IsTextmode())); + break; + } + + case SID_DOCTEMPLATE : + rSet.DisableItem (SID_DOCTEMPLATE); + break; + + case SID_AUTO_REDRAW : + { + SmModule *pp = SM_MOD1(); + BOOL bRedraw = pp->GetConfig()->IsAutoRedraw(); + + rSet.Put (SfxBoolItem(SID_AUTO_REDRAW, bRedraw)); + break; + } + + case SID_TOOLBOX: + { + BOOL bState = FALSE; + SmViewShell *pView = SmGetActiveView(); + SfxChildWindow *pChildWnd = pView->GetViewFrame()-> + GetChildWindow( SmToolBoxWrapper::GetChildWindowId() ); + + if (pChildWnd && pChildWnd->GetWindow()->IsVisible()) + bState = TRUE; + rSet.Put(SfxBoolItem(SID_TOOLBOX, bState)); + break; + } + + case SID_MODIFYSTATUS: + { + char cMod = ' '; + if (IsModified()) + cMod = '*'; + rSet.Put(SfxStringItem(SID_MODIFYSTATUS, String(cMod))); + break; + } + + case SID_TEXT: + rSet.Put(SfxStringItem(SID_TEXT, GetText())); + break; + + case SID_GRAPHIC: + rSet.Put(SfxInt16Item(SID_GRAPHIC, nModifyCount)); + break; + } + } +} + + + +void SmDocShell::FillRegInfo(SvEmbeddedRegistryInfo * pInfo) +{ + SfxInPlaceObject::FillRegInfo(pInfo); + pInfo->aObjName.AssignAscii( RTL_CONSTASCII_STRINGPARAM(pStarMathDoc)); + pInfo->nMajorVers = 5; + pInfo->nMinorVers = 0; + pInfo->aHumanShortTypeName = String(SmResId(RID_DOCUMENTSTR)); + pInfo->nShell = REG_SHELL_OPEN | REG_SHELL_PRINT | REG_SHELL_PRINTTO; + pInfo->aExt.AssignAscii( RTL_CONSTASCII_STRINGPARAM(".SMF")); + pInfo->nIconResId = REG_ICON_RESID_MATH; +} + + + +SfxUndoManager *SmDocShell::GetUndoManager () +{ + if (! pUndoMgr) + { + pUndoMgr = new SfxUndoManager; + SetUndoManager(pUndoMgr); + } + return pUndoMgr; +} + + + +void SmDocShell::SaveSymbols() +{ + SmModule *pp = SM_MOD1(); + pp->GetSymSetManager()->Save(); +} + + + +void SmDocShell::RestartFocusTimer () +{ + SmCmdBoxWrapper *pWrapper = NULL; + SmViewShell *pView = SmGetActiveView(); + if (pView) + pWrapper = (SmCmdBoxWrapper *) pView->GetViewFrame()-> + GetChildWindow( SmCmdBoxWrapper::GetChildWindowId() ); + + if (pWrapper) + pWrapper->RestartFocusTimer (); +} + + + +void SmDocShell::Draw(OutputDevice *pDevice, + const JobSetup &, + USHORT nAspect) +{ + pDevice->IntersectClipRegion(GetVisArea()); + Point atmppoint; + Draw(*pDevice, atmppoint); +} + + + +void SmDocShell::HandsOff() +{ + SfxInPlaceObject::HandsOff(); + aDocStream.Clear(); +} + + + +SvDataMemberObjectRef SmDocShell::CreateSnapshot () +{ + return SfxInPlaceObject::CreateSnapshot (); +} + + + +SfxItemPool& SmDocShell::GetPool() +{ + return SFX_APP()->GetPool(); +} + +const SvDataTypeList& SmDocShell::GetTypeList() const +{ + return aDataTypeList; +} + +void SmDocShell::SetVisArea (const Rectangle & rVisArea) +{ + Rectangle aNewRect (rVisArea); + + aNewRect.SetPos(Point ()); + + if (! aNewRect.Right ()) aNewRect.Right () = 2000; + if (! aNewRect.Bottom ()) aNewRect.Bottom () = 1000; + + BOOL bIsEnabled = IsEnableSetModified(); + if ( bIsEnabled ) + EnableSetModified( FALSE ); + + // If outplace editing, then dont resize the OutplaceWindow. But the + // ObjectShell has to resize. Bug 56470 + BOOL bUnLockFrame; + if( GetProtocol().IsEmbed() && !GetProtocol().IsInPlaceActive() && + GetFrame() ) + { + GetFrame()->LockAdjustPosSizePixel(); + bUnLockFrame = TRUE; + } + else + bUnLockFrame = FALSE; + + SfxInPlaceObject::SetVisArea( aNewRect ); + + if( bUnLockFrame ) + GetFrame()->UnlockAdjustPosSizePixel(); + + if ( bIsEnabled ) + EnableSetModified( bIsEnabled ); +} + + +BOOL SmDocShell::Try3x (SvStorage *pStor, + StreamMode eMode) + +{ + BOOL bRet = FALSE; + + SvStorageStreamRef aTempStream = pStor->OpenStream( + String::CreateFromAscii(pStarMathDoc), eMode); + aTempStream->SetVersion (pStor->GetVersion ()); + GetPool().SetFileFormatVersion (USHORT(pStor->GetVersion())); + aTempStream->SetBufferSize(DOCUMENT_BUFFER_SIZE); + aTempStream->SetKey( pStor->GetKey() ); // Passwort setzen + + if (aTempStream->GetError() == 0) + { + SvStream* pSvStream = aTempStream; + char cTag; + ULONG lIdent, lVersion; + long lTime; + ULONG lDate; + String aBuffer; + SmSymSet *pSymbolSet; + + *pSvStream >> lIdent >> lVersion; + + if ((lIdent == SM30IDENT) || (lIdent == SM30BIDENT) || (lIdent == SM304AIDENT)) + { + DBG_ASSERT((lVersion == SM30VERSION) || + (lVersion == SM50VERSION), "Illegal file version"); + + *pSvStream >> cTag; + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + while (cTag && !pSvStream->IsEof()) + { + switch (cTag) + { + case 'T': + pSvStream->ReadByteString(aText, eEnc); + Parse(); + break; + + case 'D': + pSvStream->ReadByteString(aBuffer, eEnc); + pSvStream->ReadByteString(aBuffer, eEnc); + *pSvStream >> lDate >> lTime; + pSvStream->ReadByteString(aBuffer, eEnc); + *pSvStream >> lDate >> lTime; + pSvStream->ReadByteString(aBuffer, eEnc); + break; + + case 'F': + *pSvStream >> aFormat; + if (lIdent != SM304AIDENT) + aFormat.From300To304a (); + else if ( lVersion == SM30VERSION ) + { + aFormat.SetDistance(DIS_LEFTSPACE, 100); + aFormat.SetDistance(DIS_RIGHTSPACE, 100); + aFormat.SetDistance(DIS_TOPSPACE, 100); + aFormat.SetDistance(DIS_BOTTOMSPACE, 100); + } + break; + + case 'S': + { + pSymbolSet = new SmSymSet(); + *pSvStream >> *pSymbolSet; + + SmModule *pp = SM_MOD1(); + + pp->GetSymSetManager()->AppendExtraSymbolSet(pSymbolSet); + break; + } + + default: + DBG_ASSERT((cTag != 0), "Illegal data tag"); + } + *pSvStream >> cTag; + } + + bRet = TRUE; + aDocStream = aTempStream; + } + } + + if (!bRet) + { + // kein Passwort gesetzt --> Datei marode + if (pStor->GetKey().Len() == 0) + { + SetError(ERRCODE_SFX_DOLOADFAILED); + } + // Passwort gesetzt --> war wohl falsch + else + { + SetError(ERRCODE_SFX_WRONGPASSWORD); + } + } + + return bRet; +} + + + +BOOL SmDocShell::Try2x (SvStorage *pStor, + StreamMode eMode) +{ + SvStorageStreamRef aTempStream = pStor->OpenStream(C2S("\1Ole10Native"), eMode); + aTempStream->SetVersion (pStor->GetVersion ()); + GetPool().SetFileFormatVersion(USHORT(pStor->GetVersion ())); + + if (aTempStream->GetError() == SVSTREAM_OK) + { + void ReadSM20SymSet(SvStream*, SmSymSet*); + + SvStream* pSvStream = aTempStream; + char cTag; + ULONG lIdent, lVersion; + long lTime; + ULONG lDate; + UINT32 lDataSize; + String aBuffer; + SmSymSet *pSymbolSet; + + *pSvStream >> lDataSize >> lIdent >> lVersion; + + if (lIdent == FRMIDENT) + { + DBG_ASSERT((lVersion == FRMVERSION), "Illegal file version"); + + *pSvStream >> cTag; + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + while (cTag && !pSvStream->IsEof()) + { + switch (cTag) + { + case 'T': + pSvStream->ReadByteString(aBuffer, eEnc); + aText = aBuffer; + Parse(); + break; + + case 'D': + { + pSvStream->ReadByteString(aBuffer, eEnc); + pSvStream->ReadByteString(aBuffer, eEnc); + *pSvStream >> lDate >> lTime; + pSvStream->ReadByteString(aBuffer, eEnc); + *pSvStream >> lDate >> lTime; + pSvStream->ReadByteString(aBuffer, eEnc); + } + break; + + case 'F': + { + //SmFormat aFormat; + aFormat.ReadSM20Format(*pSvStream); + aFormat.From300To304a (); + } + break; + + case 'S': + { + pSymbolSet = new SmSymSet(); + ReadSM20SymSet(pSvStream, pSymbolSet); + + SmModule *pp = SM_MOD1(); + + pp->GetSymSetManager()->AppendExtraSymbolSet(pSymbolSet); + break; + } + + default: + DBG_ASSERT((cTag != 0), "Illegal data tag"); + } + *pSvStream >> cTag; + } + + return TRUE; + } + } + + return FALSE; +} + + + +void SmDocShell::UIActivate (BOOL bActivate) +{ + if (bActivate) + { + SfxInPlaceObject::UIActivate (bActivate); + SmCmdBoxWrapper *pWrapper = NULL; + SmViewShell *pView = SmGetActiveView(); + if (pView) + pWrapper = (SmCmdBoxWrapper *)pView->GetViewFrame()-> + GetChildWindow( SmCmdBoxWrapper::GetChildWindowId() ); + + if (pWrapper) + pWrapper->Grab (); + } + else + { + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + { + pViewSh->GetViewFrame()->GetDispatcher()->Execute( + SID_GETEDITTEXT, SFX_CALLMODE_STANDARD, + new SfxVoidItem (SID_GETEDITTEXT), 0L); + SfxInPlaceObject::UIActivate (bActivate); + Resize(); + } + } +} + + + +void SmDocShell::FillClass(SvGlobalName* pClassName, + ULONG* pFormat, + String* pAppName, + String* pFullTypeName, + String* pShortTypeName, + long nFileFormat) const +{ + SfxInPlaceObject::FillClass(pClassName, pFormat, pAppName, pFullTypeName, + pShortTypeName, nFileFormat); + + if (nFileFormat == SOFFICE_FILEFORMAT_31) + { + *pClassName = SvGlobalName(SO3_SM_CLASSID_30); + *pFormat = SOT_FORMATSTR_ID_STARMATH; + pAppName->AssignAscii( RTL_CONSTASCII_STRINGPARAM("Smath 3.1")); + *pFullTypeName = String(SmResId(STR_MATH_DOCUMENT_FULLTYPE_31)); + *pShortTypeName = String(SmResId(RID_DOCUMENTSTR)); + } + else if (nFileFormat == SOFFICE_FILEFORMAT_40) + { + *pClassName = SvGlobalName(SO3_SM_CLASSID_40); + *pFormat = SOT_FORMATSTR_ID_STARMATH_40; + *pFullTypeName = String(SmResId(STR_MATH_DOCUMENT_FULLTYPE_40)); + *pShortTypeName = String(SmResId(RID_DOCUMENTSTR)); + } + else if (nFileFormat == SOFFICE_FILEFORMAT_NOW) + { + *pFullTypeName = String(SmResId(STR_MATH_DOCUMENT_FULLTYPE_50)); + *pShortTypeName = String(SmResId(RID_DOCUMENTSTR)); + } +} + +ULONG SmDocShell::GetMiscStatus() const +{ + return SfxInPlaceObject::GetMiscStatus() | SVOBJ_MISCSTATUS_NOTRESIZEABLE + | SVOBJ_MISCSTATUS_RESIZEONPRINTERCHANGE; +} + +void SmDocShell::SetModified(BOOL bModified) +{ + SfxObjectShell::SetModified(bModified); + Broadcast(SfxSimpleHint(SFX_HINT_DOCCHANGED)); +} + +BOOL SmDocShell::WriteAsMathType3( SfxMedium& rMedium ) +{ + MathType aEquation( aText, pTree ); + BOOL bRet = 0 != aEquation.ConvertFromStarMath( rMedium.GetStorage() ); + return bRet; +} + + + diff --git a/starmath/source/edit.cxx b/starmath/source/edit.cxx new file mode 100644 index 000000000000..6b1bcc163791 --- /dev/null +++ b/starmath/source/edit.cxx @@ -0,0 +1,783 @@ +/************************************************************************* + * + * $RCSfile: edit.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#include "starmath.hrc" +#define ITEMID_FONT 1 +#define ITEMID_FONTHEIGHT 2 +#define ITEMID_LRSPACE 3 +#define ITEMID_WEIGHT 4 + + +#ifndef _SV_MENU_HXX //autogen +#include +#endif +#ifndef _MyEDITVIEW_HXX //autogen +#include +#endif +#ifndef _MyEDITENG_HXX //autogen +#include +#endif +#ifndef _EDITSTAT_HXX //autogen +#include +#endif +#ifndef _EEITEM_HXX //autogen +#include +#endif +#ifndef _SFXDISPATCH_HXX //autogen +#include +#endif +#ifndef _SFXINTITEM_HXX //autogen +#include +#endif +#ifndef _SFXITEMPOOL_HXX //autogen +#include +#endif +#ifndef _SFXSTRITEM_HXX //autogen +#include +#endif +#ifndef _SVX_FHGTITEM_HXX //autogen +#include +#endif +#ifndef _SVX_WGHTITEM_HXX //autogen +#include +#endif +#ifndef _SVX_LRSPITEM_HXX //autogen +#include +#endif +#ifndef _SFXITEMSET_HXX //autogen +#include +#endif +#ifndef _SVX_FONTITEM_HXX //autogen +#include +#endif + + +#include "edit.hxx" +#include "view.hxx" +#include "document.hxx" +#include "config.hxx" + +#define SCROLL_LINE 24 + +#define MINWIDTH 200 +#define MINHEIGHT 200 +#define MINSPLIT 40 +#define SPLITTERWIDTH 2 + + +//////////////////////////////////////// + + +void SmGetLeftSelectionPart(const ESelection aSel, + USHORT &nPara, USHORT &nPos) + // returns paragraph number and position of the selections left part +{ + // compare start and end of selection and use the one that comes first + if ( aSel.nStartPara < aSel.nEndPara + || aSel.nStartPara == aSel.nEndPara && aSel.nStartPos < aSel.nEndPos) + { nPara = aSel.nStartPara; + nPos = aSel.nStartPos; + } + else + { nPara = aSel.nEndPara; + nPos = aSel.nEndPos; + } +} + +//////////////////////////////////////// + +SmEditWindow::SmEditWindow(Window* pParent) : + Window(pParent), + pEditView( 0 ), +#if SUPD >= 602 + pEditEngineItemPool( 0 ), +#endif + pEditEngine( 0 ), + pHScrollBar( 0 ), + pVScrollBar( 0 ), + pScrollBox( 0 ) +{ + SetHelpId(HID_SMA_COMMAND_WIN_EDIT); + EnableDrop(); + SetMapMode(MAP_PIXEL); + + SetBackground( GetSettings().GetStyleSettings().GetWindowColor() ); + + aModifyTimer.SetTimeoutHdl(LINK(this, SmEditWindow, ModifyTimerHdl)); + aModifyTimer.SetTimeout(2000); + aModifyTimer.Start(); + + aCursorMoveTimer.SetTimeoutHdl(LINK(this, SmEditWindow, CursorMoveTimerHdl)); + aCursorMoveTimer.SetTimeout(500); +} + +SmEditWindow::~SmEditWindow() +{ + aCursorMoveTimer.Stop(); + aModifyTimer.Stop(); + if ( pEditEngine ) + { + pEditEngine->RemoveView(pEditView); + delete pEditView; + delete pEditEngine; +#if SUPD >= 602 + delete pEditEngineItemPool; +#endif + delete pHScrollBar; + delete pVScrollBar; + delete pScrollBox; + } +} + + +void SmEditWindow::ImplSetFont() +{ + SetPointFont( GetSettings().GetStyleSettings().GetAppFont() ); + if ( pEditEngine ) + { + Font aFont = GetFont(); + pEditEngine->SetDefTab( USHORT( GetTextWidth( C2S("XXXX") ) ) ); + +#if SUPD >= 602 + DBG_ASSERT( pEditEngineItemPool, "NULL pointer"); + pEditEngineItemPool->SetPoolDefaultItem( + SvxFontItem( aFont.GetFamily(), aFont.GetName(), + aFont.GetStyleName(), aFont.GetPitch(), aFont.GetCharSet(), + EE_CHAR_FONTINFO ) ); + pEditEngineItemPool->SetPoolDefaultItem( + SvxFontHeightItem( aFont.GetSize().Height(), 100, + EE_CHAR_FONTHEIGHT ) ); +// pEditEngineItemPool->SetPoolDefaultItem( +// SvxWeightItem( WEIGHT_BOLD, EE_CHAR_WEIGHT ) ); +#else + SfxItemSet aSet( pEditEngine->GetEmptyItemSet() ); + aSet.Put( SvxFontItem( aFont.GetFamily(), aFont.GetName(), + aFont.GetStyleName(), aFont.GetPitch(), aFont.GetCharSet(), + EE_CHAR_FONTINFO ) ); + aSet.Put( SvxFontHeightItem( aFont.GetSize().Height(), 100, EE_CHAR_FONTHEIGHT ) ); +// aSet.Put( SvxWeightItem(WEIGHT_BOLD, EE_CHAR_WEIGHT ) ); + + pEditEngine->SetDefaults(aSet); +#endif + } +} + +void SmEditWindow::DataChanged( const DataChangedEvent& ) +{ + SetBackground( GetSettings().GetStyleSettings().GetWindowColor() ); + ImplSetFont(); + AdjustScrollBars(); + Resize(); +} + +IMPL_LINK( SmEditWindow, ModifyTimerHdl, Timer *, pTimer ) +{ + SmModule *pp = SM_MOD1(); + if (pp->GetConfig()->IsAutoRedraw()) + Flush(); + aModifyTimer.Start(); + return 0; +} + + +IMPL_LINK(SmEditWindow, CursorMoveTimerHdl, Timer *, pTimer) + // every once in a while check cursor position (selection) of edit + // window and if it has changed (try to) set the formula-cursor + // according to that. +{ + ESelection aNewSelection (GetSelection()); + + if (!aNewSelection.IsEqual(aOldSelection)) + { SmViewShell *pView = SmGetActiveView(); + //! woher weiß man, dass die Shell die wir hier kriegen die ist, die + //! zu dem SmEditWindow gehoert fuer das er gestartet wurde? + //! (Eine ViewShell vom Math ist es immer) + //! Siehe auch Kommentar zu: + //! SmEditWindow::SetText und SmViewShell::Activate + + if (pView) + { + // get row and column to look for + USHORT nRow, nCol; + SmGetLeftSelectionPart(aNewSelection, nRow, nCol); + nRow++; + nCol++; + + pView->GetGraphicWindow().SetCursorPos(nRow, nCol); + + aOldSelection = aNewSelection; + } + } + + return 0; +} + + +void SmEditWindow::Resize() +{ + if (!pEditEngine) + CreateEditEngine(); + + if (pEditView) + { + pEditView->SetOutputArea(AdjustScrollBars()); + pEditView->ShowCursor(); + + const long nMaxVisAreaStart = pEditView->GetEditEngine()->GetTextHeight() - + pEditView->GetOutputArea().GetHeight(); + if (pEditView->GetVisArea().Top() > nMaxVisAreaStart) + { + Rectangle aVisArea(pEditView->GetVisArea() ); + aVisArea.Top() = (nMaxVisAreaStart > 0 ) ? nMaxVisAreaStart : 0; + aVisArea.SetSize(pEditView->GetOutputArea().GetSize()); + pEditView->SetVisArea(aVisArea); + pEditView->ShowCursor(); + } + InitScrollBars(); + } + Invalidate(); +} + +void SmEditWindow::MouseButtonUp(const MouseEvent &rEvt) +{ + if (pEditView) + pEditView->MouseButtonUp(rEvt); + else + Window::MouseButtonUp (rEvt); + + // ggf FormulaCursor neu positionieren + CursorMoveTimerHdl(&aCursorMoveTimer); +} + +void SmEditWindow::MouseButtonDown(const MouseEvent &rEvt) +{ + if (pEditView) + pEditView->MouseButtonDown(rEvt); + else + Window::MouseButtonDown (rEvt); + + GrabFocus(); +} + +void SmEditWindow::Command(const CommandEvent& rCEvt) +{ + if (rCEvt.GetCommand() == COMMAND_CONTEXTMENU) + { + GetParent()->ToTop(); + + PopupMenu* pPopupMenu = new PopupMenu(SmResId(RID_COMMANDMENU)); + pPopupMenu->SetSelectHdl(LINK(this, SmEditWindow, MenuSelectHdl)); + + pPopupMenu->Execute( this, OutputToScreenPixel( + rCEvt.GetMousePosPixel() ) ); + delete pPopupMenu; + } + else if (pEditView) + pEditView->Command( rCEvt ); + else + Window::Command (rCEvt); +} + +IMPL_LINK_INLINE_START( SmEditWindow, MenuSelectHdl, Menu *, pMenu ) +{ + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetDispatcher()->Execute( + SID_INSERTCOMMAND, SFX_CALLMODE_STANDARD, + new SfxInt16Item(SID_INSERTCOMMAND, pMenu->GetCurItemId()), 0L); + return 0; +} +IMPL_LINK_INLINE_END( SmEditWindow, MenuSelectHdl, Menu *, pMenu ) + +void SmEditWindow::KeyInput(const KeyEvent& rKEvt) +{ + if (rKEvt.GetKeyCode().GetCode() == KEY_ESCAPE) + { + BOOL bCallBase = TRUE; + SfxViewShell* pViewShell = SfxViewShell::Current(); + if ( pViewShell && pViewShell->ISA(SmViewShell) ) + { + SmDocShell* pDocSh = (SmDocShell*) pViewShell->GetViewFrame()->GetObjectShell(); + if (pDocSh) + { + /* fuert zum (sofortigen) Zerstoeren von this! */ + pDocSh->DoInPlaceActivate( FALSE ); + bCallBase = FALSE; + } + } + if ( bCallBase ) + Window::KeyInput( rKEvt ); + } + else + { + // Timer neu starten, um den Handler (auch bei längeren Eingaben) + // möglichst nur einmal am Ende aufzurufen. + aCursorMoveTimer.Start(); + + if ( !pEditView->PostKeyEvent(rKEvt) ) + { + if ( !SfxViewShell::Current()->KeyInput(rKEvt) ) + { + /* fuert bei F1 (Hilfe) zum Zerstoeren von this! */ + Flush(); + if ( aModifyTimer.IsActive() ) + aModifyTimer.Stop(); + Window::KeyInput(rKEvt); + } + else + { + //SFX hat evtl. Slot an der View gecallt und dabei (wg. Hack + //im SFX) den Focus auf die View gesetzt + SfxViewShell* pVShell = SfxViewShell::Current(); + if ( pVShell && pVShell->ISA(SmViewShell) && + ((SmViewShell*)pVShell)->GetGraphicWindow().HasFocus() ) + { + GrabFocus(); + } + } + } + else + aModifyTimer.Start(); + } +} + +void SmEditWindow::Paint(const Rectangle& rRect) +{ + if (!pEditEngine) + CreateEditEngine(); + + pEditView->Paint(rRect); +} + +void SmEditWindow::CreateEditEngine() +{ + if (! pEditEngine) + { +#if SUPD >= 602 + pEditEngineItemPool = EditEngine::CreatePool(); + pEditEngine = new EditEngine( pEditEngineItemPool ); +#else + pEditEngine = new EditEngine; +#endif + pEditView = new EditView(pEditEngine, this); + pEditEngine->SetUpdateMode(FALSE); + pEditEngine->InsertView(pEditView); + + pEditEngine->SetControlWord((pEditEngine->GetControlWord() | EE_CNTRL_AUTOINDENTING) & + (~EE_CNTRL_UNDOATTRIBS) & (~EE_CNTRL_PASTESPECIAL)); + + pEditEngine->SetWordDelimiters( C2S(" .=+-*/(){}[];\"" )); + pEditEngine->SetRefMapMode(MAP_PIXEL); + + ImplSetFont(); + pEditEngine->Clear(); //#77957 incorrect font size + + pEditEngine->SetPaperSize( Size( 800, 0 ) ); + + pVScrollBar = new ScrollBar(this, WinBits(WB_VSCROLL)); + pHScrollBar = new ScrollBar(this, WinBits(WB_HSCROLL)); + pVScrollBar->SetScrollHdl(LINK(this, SmEditWindow, ScrollHdl)); + pHScrollBar->SetScrollHdl(LINK(this, SmEditWindow, ScrollHdl)); + pScrollBox = new ScrollBarBox(this); + + pEditView->SetOutputArea(AdjustScrollBars()); + + ESelection eSelection; + + pEditView->SetSelection(eSelection); + pEditEngine->SetUpdateMode(TRUE); + Update(); + pEditView->ShowCursor(TRUE, TRUE); + + pEditEngine->SetStatusEventHdl(LINK(this, SmEditWindow, EditStatusHdl)); + SetPointer(pEditView->GetPointer()); + + pEditEngine->EraseVirtualDevice(); + pEditEngine->ClearModifyFlag(); + + SetScrollBarRanges(); + } +} + +IMPL_LINK( SmEditWindow, EditStatusHdl, EditStatus *, pStat ) +{ + if (! pEditView) + return 1; + else + { + SetScrollBarRanges(); + return 0; + } +} + +IMPL_LINK_INLINE_START( SmEditWindow, ScrollHdl, ScrollBar *, pScrollBar ) +{ + pEditView->SetVisArea(Rectangle(Point(pHScrollBar->GetThumbPos(), + pVScrollBar->GetThumbPos()), + pEditView->GetVisArea().GetSize())); + pEditView->Invalidate(); + return 0; +} +IMPL_LINK_INLINE_END( SmEditWindow, ScrollHdl, ScrollBar *, pScrollBar ) + +Rectangle SmEditWindow::AdjustScrollBars() +{ + const Size aOut( GetOutputSizePixel() ); + Point aPoint; + Rectangle aRect( aPoint, aOut ); + + if ( pEditEngine ) + { + const long nTmp = GetSettings().GetStyleSettings().GetScrollBarSize(); + Point aPt( aRect.TopRight() ); aPt.X() -= nTmp -1L; + pVScrollBar->SetPosSizePixel( aPt, Size(nTmp, aOut.Height() - nTmp)); + + aPt = aRect.BottomLeft(); aPt.Y() -= nTmp - 1L; + pHScrollBar->SetPosSizePixel( aPt, Size(aOut.Width() - nTmp, nTmp)); + + aPt.X() = pHScrollBar->GetSizePixel().Width(); + aPt.Y() = pVScrollBar->GetSizePixel().Height(); + pScrollBox->SetPosSizePixel(aPt, Size(nTmp, nTmp )); + + aRect.Right() = aPt.X() - 2; + aRect.Bottom() = aPt.Y() - 2; + } + return aRect; +} + +void SmEditWindow::SetScrollBarRanges() +{ + // Extra-Methode, nicht InitScrollBars, da auch fuer EditEngine-Events. + if (pEditEngine ) + { + long nTmp = pEditEngine->GetTextHeight(); + pVScrollBar->SetRange(Range(0, nTmp)); + pVScrollBar->SetThumbPos(pEditView->GetVisArea().Top()); + + nTmp = pEditEngine->GetPaperSize().Width(); + pHScrollBar->SetRange(Range(0,nTmp)); + pHScrollBar->SetThumbPos(pEditView->GetVisArea().Left()); + } +} + +void SmEditWindow::InitScrollBars() +{ + if (pEditEngine ) + { + const Size aOut( pEditView->GetOutputArea().GetSize() ); + pVScrollBar->SetVisibleSize(aOut.Height()); + pVScrollBar->SetPageSize(aOut.Height() * 8 / 10); + pVScrollBar->SetLineSize(aOut.Height() * 2 / 10); + + pHScrollBar->SetVisibleSize(aOut.Width()); + pHScrollBar->SetPageSize(aOut.Width() * 8 / 10); + pHScrollBar->SetLineSize(SCROLL_LINE ); + + SetScrollBarRanges(); + + pVScrollBar->Show(); + pHScrollBar->Show(); + pScrollBox->Show(); + } +} + +XubString SmEditWindow::GetText() +{ + if (!pEditEngine) + CreateEditEngine(); + + String aText (pEditEngine->GetText( LINEEND_LF )); + return aText; +} + +void SmEditWindow::SetText(const XubString& rText) +{ + if (!pEditEngine) + CreateEditEngine(); + + if (!pEditEngine->IsModified()) + { + ESelection eSelection = pEditView->GetSelection(); + + pEditEngine->SetText(rText); + pEditEngine->ClearModifyFlag(); + + //! Hier die Timer neu zu starten verhindert, dass die Handler für andere + //! (im Augenblick nicht mehr aktive) Math Tasks aufgerufen werden. + aModifyTimer.Start(); + aCursorMoveTimer.Start(); + + pEditView->SetSelection(eSelection); + } +} + +BOOL SmEditWindow::IsAllSelected() const +{ + ESelection eSelection = pEditView->GetSelection(); + + if (!(pEditEngine->GetParagraphCount() - 1)) + { + String Text (pEditEngine->GetText( LINEEND_LF )); + return !eSelection.nStartPos && (eSelection.nEndPos == Text.Len () - 1); + } + else + return !eSelection.nStartPara && (eSelection.nEndPara == (pEditEngine->GetParagraphCount() - 1)); +} + +void SmEditWindow::SelectAll() +{ + // set selection from first paragraph, first char to + // last paragraph, last char + ULONG nParaCnt = pEditEngine->GetParagraphCount(); //! always >= 1 + DBG_ASSERT( nParaCnt >= 1, "Sm : paragraph count is 0!" ); + ULONG nParaLen = pEditEngine->GetTextLen( nParaCnt - 1 ); + pEditView->SetSelection( ESelection( 0, 0, nParaCnt - 1, nParaLen - 1 ) ); +} + +void SmEditWindow::InsertCommand(USHORT Command) +{ + //Anfang der Selektion merken und hinterher den Cursor daraufsetzen. Nur so + //macht das SelNextMark() Sinn. + ESelection aSelection = pEditView->GetSelection(); + aSelection.nEndPos = aSelection.nStartPos; + aSelection.nEndPara = aSelection.nStartPara; + + String aText = String(SmResId(Command)); + pEditView->InsertText(aText); + + if (HasMark(aText)) + { // set selection to next mark + pEditView->SetSelection(aSelection); + SelNextMark(); + } + else + { // set selection after inserted text + aSelection.nStartPos = + aSelection.nEndPos += aText.Len(); + pEditView->SetSelection(aSelection); + } + + GrabFocus(); +} + +void SmEditWindow::MarkError(const Point &rPos) +{ + const int Col = rPos.X(); + const int Row = rPos.Y() - 1; + + pEditView->SetSelection(ESelection (Row, Col - 1, Row, Col)); + GrabFocus(); +} + +void SmEditWindow::SelNextMark() +{ + ESelection eSelection = pEditView->GetSelection(); + USHORT Pos = eSelection.nEndPos; + String aMark (C2S("")); + String aText; + USHORT nCounts = pEditEngine->GetParagraphCount(); + + while (eSelection.nEndPara < nCounts) + { + aText = pEditEngine->GetText(eSelection.nEndPara); + Pos = aText.Search(aMark, Pos); + + if (Pos != STRING_NOTFOUND) + { + pEditView->SetSelection(ESelection (eSelection.nEndPara, Pos, eSelection.nEndPara, Pos + 3)); + break; + } + + Pos = 0; + eSelection.nEndPara++; + } +} + +void SmEditWindow::SelPrevMark() +{ + ESelection eSelection = pEditView->GetSelection(); + USHORT Pos = STRING_NOTFOUND; + xub_StrLen Max = eSelection.nStartPos; + String Text (pEditEngine->GetText(eSelection.nStartPara)); + String aMark (C2S("")); + USHORT nCounts = pEditEngine->GetParagraphCount(); + + do + { + USHORT Fnd = Text.Search(aMark, 0); + + while ((Fnd < Max) && (Fnd != STRING_NOTFOUND)) + { + Pos = Fnd; + Fnd = Text.Search(aMark, Fnd + 1); + } + + if (Pos == STRING_NOTFOUND) + { + eSelection.nStartPara--; + Text = pEditEngine->GetText(eSelection.nStartPara); + Max = Text.Len(); + } + } + while ((eSelection.nStartPara < nCounts) && + (Pos == STRING_NOTFOUND)); + + if (Pos != STRING_NOTFOUND) + { + pEditView->SetSelection(ESelection (eSelection.nStartPara, Pos, eSelection.nStartPara, Pos + 3)); + } +} + +BOOL SmEditWindow::HasMark(const String& rText) const + // returns true iff 'rText' contains a mark +{ + return rText.SearchAscii("", 0) != STRING_NOTFOUND; +} + +void SmEditWindow::MouseMove(const MouseEvent &rEvt) +{ + if (pEditView) pEditView->MouseMove(rEvt); +} + +BOOL SmEditWindow::Drop(const DropEvent& rEvt) +{ + return pEditView + ? (pEditView->Drop(rEvt)) + : FALSE; +} + +BOOL SmEditWindow::QueryDrop(DropEvent& rEvt) +{ + return pEditView + ? pEditView->QueryDrop(rEvt) + : FALSE; +} + +ESelection SmEditWindow::GetSelection() const +{ + DBG_ASSERT(pEditView, "Sm : NULL pointer"); + return pEditView->GetSelection(); +} + +void SmEditWindow::SetSelection(const ESelection &rSel) +{ + DBG_ASSERT(pEditView, "Sm : NULL pointer"); + pEditView->SetSelection(rSel); +} + +BOOL SmEditWindow::IsEmpty() const +{ + return pEditEngine->GetTextLen() == 0; +} + +BOOL SmEditWindow::IsSelected() const +{ + return pEditView->HasSelection(); +} + +void SmEditWindow::Cut() +{ + pEditView->Cut(); +} + +void SmEditWindow::Copy() +{ + pEditView->Copy(); +} + +void SmEditWindow::Paste() +{ + pEditView->Paste(); +} + +void SmEditWindow::Delete() +{ + pEditView->DeleteSelected(); +} + +void SmEditWindow::InsertText(const String& Text) +{ + pEditView->InsertText(Text); +} + +void SmEditWindow::Flush() +{ + if ( pEditEngine && pEditEngine->IsModified() ) + { + pEditEngine->ClearModifyFlag(); + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetDispatcher()->Execute( + SID_TEXT, SFX_CALLMODE_STANDARD, + new SfxStringItem(SID_TEXT, GetText()), 0L); + } + + if (aCursorMoveTimer.IsActive()) + { + aCursorMoveTimer.Stop(); + // ggf noch die (neue) FormulaCursor Position setzen + CursorMoveTimerHdl(&aCursorMoveTimer); + } +} + + diff --git a/starmath/source/format.cxx b/starmath/source/format.cxx new file mode 100644 index 000000000000..b5ed6622f2ff --- /dev/null +++ b/starmath/source/format.cxx @@ -0,0 +1,311 @@ +/************************************************************************* + * + * $RCSfile: format.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + + +#ifndef FORMAT_HXX +#include "format.hxx" +#endif + +SmFormat::SmFormat() +: aBaseSize(0, SmPtsTo100th_mm(12)) +{ + nVersion = SM_FMT_VERSION_NOW; + + eHorAlign = AlignCenter; + bIsTextmode = bScaleNormalBrackets = FALSE; + + vSize[SIZ_TEXT] = 100; + vSize[SIZ_INDEX] = 60; + vSize[SIZ_FUNCTION] = + vSize[SIZ_OPERATOR] = 100; + vSize[SIZ_LIMITS] = 60; + + vDist[DIS_HORIZONTAL] = 10; + vDist[DIS_VERTICAL] = 5; + vDist[DIS_ROOT] = 0; + vDist[DIS_SUPERSCRIPT] = + vDist[DIS_SUBSCRIPT] = 20; + vDist[DIS_NUMERATOR] = + vDist[DIS_DENOMINATOR] = 0; + vDist[DIS_FRACTION] = 10; + vDist[DIS_STROKEWIDTH] = 5; + vDist[DIS_UPPERLIMIT] = + vDist[DIS_LOWERLIMIT] = 0; + vDist[DIS_BRACKETSIZE] = + vDist[DIS_BRACKETSPACE] = 5; + vDist[DIS_MATRIXROW] = 3; + vDist[DIS_MATRIXCOL] = 30; + vDist[DIS_ORNAMENTSIZE] = + vDist[DIS_ORNAMENTSPACE] = 0; + vDist[DIS_OPERATORSIZE] = 50; + vDist[DIS_OPERATORSPACE] = 20; + vDist[DIS_LEFTSPACE] = + vDist[DIS_RIGHTSPACE] = 100; + vDist[DIS_TOPSPACE] = + vDist[DIS_BOTTOMSPACE] = + vDist[DIS_NORMALBRACKETSIZE] = 0; + + vFont[FNT_VARIABLE] = + vFont[FNT_FUNCTION] = + vFont[FNT_NUMBER] = + vFont[FNT_TEXT] = + vFont[FNT_SERIF] = SmFace(C2S(FNTNAME_TIMES), aBaseSize); + vFont[FNT_SANS] = SmFace(C2S(FNTNAME_HELV), aBaseSize); + vFont[FNT_FIXED] = SmFace(C2S(FNTNAME_COUR), aBaseSize); + vFont[FNT_MATH] = SmFace(C2S(FNTNAME_MATH), aBaseSize); + + vFont[FNT_VARIABLE].SetItalic(ITALIC_NORMAL); + vFont[FNT_FUNCTION].SetItalic(ITALIC_NONE); + vFont[FNT_TEXT].SetItalic(ITALIC_NONE); + + for ( USHORT i = FNT_BEGIN; i <= FNT_END; i++ ) + { + vFont[i].SetTransparent(TRUE); + vFont[i].SetAlign(ALIGN_BASELINE); + } +} + + +SmFormat & SmFormat::operator = (const SmFormat &rFormat) +{ + SetBaseSize(rFormat.GetBaseSize()); + SetVersion (rFormat.GetVersion()); + SetHorAlign(rFormat.GetHorAlign()); + SetTextmode(rFormat.IsTextmode()); + SetScaleNormalBrackets(rFormat.IsScaleNormalBrackets()); + + USHORT i; + for (i = FNT_BEGIN; i <= FNT_END; i++) + SetFont(i, rFormat.GetFont(i)); + for (i = SIZ_BEGIN; i <= SIZ_END; i++) + SetRelSize(i, rFormat.GetRelSize(i)); + for (i = DIS_BEGIN; i <= DIS_END; i++) + SetDistance(i, rFormat.GetDistance(i)); + + return *this; +} + + +SvStream & operator << (SvStream &rStream, const SmFormat &rFormat) +{ + //Da hier keinerlei Kompatibilit„t vorgesehen ist muessen wir leider + //heftig tricksen. Gluecklicherweise sind offenbar einige Informationen + //ueberfluessig geworden. In diese quetschen wir jetzt vier neue + //Einstellungen fuer die Rander. + //Bei Gelegenheit wird hier ein Im- Und Export gebraucht. Dann muessen + //die Stream-Operatoren dieser Klassen dringend mit Versionsverwaltung + //versehen werden! + + UINT16 n; + + // convert the heigth (in 100th of mm) to Pt and round the result to the + // nearest integer + n = (UINT16) SmRoundFraction(Sm100th_mmToPts(rFormat.aBaseSize.Height())); + DBG_ASSERT((n & 0xFF00) == 0, "Sm : higher Byte nicht leer"); + + // to be compatible with the old format (size and order) we put the info + // about textmode in the higher byte (height is already restricted to a + // maximum of 127!) + n |= (rFormat.bIsTextmode != 0) << 8 + | (rFormat.bScaleNormalBrackets != 0) << 9; + rStream << n; + + rStream << rFormat.vDist[DIS_LEFTSPACE]; //Wir nutzen den Platz + rStream << rFormat.vDist[DIS_RIGHTSPACE]; //Wir nutzen den Platz + + for ( n = SIZ_BEGIN; n <= SIZ_END; ++n ) + rStream << rFormat.vSize[n]; + + rStream << rFormat.vDist[DIS_TOPSPACE]; //Wir nutzen den Platz + + for ( n = 0; n <= FNT_FIXED; ++n ) + rStream << rFormat.vFont[n]; + + // Den zweiten Wert noch im HigherByte unterbringen + USHORT uTmp = rFormat.vDist[DIS_BRACKETSIZE] + | rFormat.vDist[DIS_NORMALBRACKETSIZE] << 8; + // und dann dieses rausstreamen + for ( n = 0; n <= DIS_OPERATORSPACE; ++n ) + rStream << (USHORT)(n != DIS_BRACKETSIZE ? rFormat.vDist[(USHORT) n] : uTmp); + + // higher byte is version number, lower byte is horizontal alignment + n = rFormat.eHorAlign | SM_FMT_VERSION_NOW << 8; + rStream << n; + + rStream << rFormat.vDist[DIS_BOTTOMSPACE]; //Wir nutzen den Platz + + return rStream; +} + + +SvStream & operator >> (SvStream &rStream, SmFormat &rFormat) +{ + UINT16 n; + + rStream >> n; + long nBaseHeight = n & 0x00FF; + rFormat.bIsTextmode = ((n >> 8) & 0x01) != 0; + rFormat.bScaleNormalBrackets = ((n >> 9) & 0x01) != 0; + rFormat.aBaseSize = Size(0, SmPtsTo100th_mm(nBaseHeight)); + + rStream >> rFormat.vDist[DIS_LEFTSPACE]; //Wir nutzen den Platz + rStream >> rFormat.vDist[DIS_RIGHTSPACE]; //Wir nutzen den Platz + + for ( n = SIZ_BEGIN; n <= SIZ_END; ++n ) + rStream >> rFormat.vSize[n]; + + rStream >> rFormat.vDist[DIS_TOPSPACE]; //Wir nutzen den Platz + + for ( n = 0; n <= FNT_FIXED; ++n ) + rStream >> rFormat.vFont[n]; + + for ( n = 0; n <= DIS_OPERATORSPACE; ++n ) + rStream >> rFormat.vDist[n]; + // den zweiten Wert aus dem HigherByte holen + rFormat.vDist[DIS_NORMALBRACKETSIZE] = rFormat.vDist[DIS_BRACKETSIZE] >> 8; + // und dieses dann ausblenden + rFormat.vDist[DIS_BRACKETSIZE] &= 0x00FF; + + // higher byte is version number, lower byte is horizontal alignment + rStream >> n; + rFormat.nVersion = n >> 8; + rFormat.eHorAlign = (SmHorAlign) (n & 0x00FF); + + rStream >> rFormat.vDist[DIS_BOTTOMSPACE]; //Wir nutzen den Platz + + const Size aTmp( rFormat.GetBaseSize() ); + for ( USHORT i = 0; i <= FNT_FIXED; ++i ) + { + rFormat.vFont[i].SetSize(aTmp); + rFormat.vFont[i].SetTransparent(TRUE); + rFormat.vFont[i].SetAlign(ALIGN_BASELINE); + } + rFormat.vFont[FNT_MATH].SetSize(aTmp); + + // Für Version 4.0 (und älter) sollen auch die normalen Klammern skalierbar + // sein und wachsen (so wie es der Fall war), in der 5.0 Version jedoch nicht. + // In späteren Versionen (>= 5.1) ist das Verhalten nun durch den Anwender + // festzulegen (bleibt also wie aus dem Stream gelesen). + if (rFormat.nVersion < SM_FMT_VERSION_51) + { + BOOL bIs50Stream = rStream.GetVersion() == SOFFICE_FILEFORMAT_50; + BOOL bVal = bIs50Stream ? FALSE : TRUE; + USHORT nExcHeight = bIs50Stream ? 0 : rFormat.vDist[DIS_BRACKETSIZE]; + + rFormat.SetScaleNormalBrackets(bVal); + rFormat.SetDistance(DIS_NORMALBRACKETSIZE, nExcHeight); + } + + return rStream; +} + +void SmFormat::ReadSM20Format(SvStream &rStream) +{ + UINT16 n; + USHORT i; + + rStream >> n; + SetBaseSize( Size(0, SmPtsTo100th_mm(n)) ); + + rStream >> n >> n; + + for (i = SIZ_BEGIN; i <= SIZ_LIMITS; i++) + { rStream >> n; + SetRelSize(i, n); + } + + rStream >> n; + + for (i = FNT_BEGIN; i <= FNT_FIXED; i++) + ReadSM20Font(rStream, Font(i)); + + for (i = DIS_BEGIN; i <= DIS_OPERATORSPACE; i++) + { rStream >> n; + SetDistance(i, n); + } + + rStream >> n; + SetHorAlign((SmHorAlign) n); + rStream >> n; + + const Size aTmp (GetBaseSize()); + for (i = FNT_BEGIN; i <= FNT_FIXED; i++) + { + Font(i).SetSize(aTmp); + Font(i).SetTransparent(TRUE); + Font(i).SetAlign(ALIGN_BASELINE); + } + Font(FNT_MATH).SetSize(aTmp); +} + + +void SmFormat::From300To304a() +{ + long nBaseSize = SmRoundFraction(Sm100th_mmToPts(aBaseSize.Height())) + * 2540l / 72l; + for (USHORT i = DIS_BEGIN; i < DIS_OPERATORSPACE; i++) + SetDistance(i, USHORT(GetDistance(i) * 254000L / 72L / nBaseSize)); +} + + + diff --git a/starmath/source/makefile.mk b/starmath/source/makefile.mk new file mode 100644 index 000000000000..fed1043b88d0 --- /dev/null +++ b/starmath/source/makefile.mk @@ -0,0 +1,163 @@ +#************************************************************************* +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.1.1.1 $ +# +# last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ +# +# The Contents of this file are made available subject to the terms of +# either of the following licenses +# +# - GNU Lesser General Public License Version 2.1 +# - Sun Industry Standards Source License Version 1.1 +# +# Sun Microsystems Inc., October, 2000 +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2000 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# +# Sun Industry Standards Source License Version 1.1 +# ================================================= +# The contents of this file are subject to the Sun Industry Standards +# Source License Version 1.1 (the "License"); You may not use this file +# except in compliance with the License. You may obtain a copy of the +# License at http://www.openoffice.org/license.html. +# +# Software provided under this License is provided on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +# See the License for the specific provisions governing your rights and +# obligations concerning the Software. +# +# The Initial Developer of the Original Code is: Sun Microsystems, Inc. +# +# Copyright: 2000 by Sun Microsystems, Inc. +# +# All Rights Reserved. +# +# Contributor(s): _______________________________________ +# +# +# +#************************************************************************* + +#MKDEPENDSOLVER=YES +PROJECTPCH4DLL=TRUE + +PRJ=.. + +PRJNAME=starmath +TARGET=starmath + +PROJECTPCH=math_pch +PDBTARGET=math_pch +PROJECTPCHSOURCE=math_pch + + +# --- Settings ----------------------------------------------------- + +.INCLUDE : svpre.mk +.INCLUDE : settings.mk +.INCLUDE : sv.mk +.INCLUDE : $(PRJ)$/util$/makefile.pmk + +.INCLUDE : $(UPD)minor.mk +RSCUPDVER=$(RSCREVISION)(SV$(UPD)$(UPDMINOR)) + +IMGLST_SRS=$(SRS)$/smres.srs + +# --- Files -------------------------------------------------------- + +SMDLL=TRUE + +SRS2NAME =smres +SRC2FILES = smres.src \ + commands.src + +SLOFILES = \ + $(SLO)$/frmload.obj \ + $(SLO)$/typemap.obj \ + $(SLO)$/symbol.obj \ + $(SLO)$/toolbox.obj \ + $(SLO)$/action.obj \ + $(SLO)$/config.obj \ + $(SLO)$/dialog.obj \ + $(SLO)$/document.obj \ + $(SLO)$/mathtype.obj \ + $(SLO)$/format.obj \ + $(SLO)$/node.obj \ + $(SLO)$/parse.obj \ + $(SLO)$/utility.obj \ + $(SLO)$/smdll.obj \ + $(SLO)$/smmod.obj \ + $(SLO)$/view.obj \ + $(SLO)$/edit.obj \ + $(SLO)$/rect.obj \ + $(SLO)$/unomodel.obj \ + $(SLO)$/xchar.obj + +EXCEPTIONSFILES = \ + $(SLO)$/document.obj \ + $(SLO)$/frmload.obj \ + $(SLO)$/symbol.obj \ + $(SLO)$/unomodel.obj + + +LIB2TARGET = $(SLB)$/ysm.lib +LIB2ARCHIV = $(LB)$/libysm.a +LIB2OBJFILES = $(SLO)$/smlib.obj + +DEPOBJFILES = $(SLO)$/smlib.obj +# --- Targets ------------------------------------------------------- + +.IF "$(depend)" == "" + +ALL: \ + $(INCCOM)$/dllname.hxx \ + ALLTAR + +.IF "$(GUI)"=="UNX" || "$(GUI)"=="MAC" +CDEFS+=-DUSE_POLYGON +.ENDIF + +$(INCCOM)$/dllname.hxx: makefile.mk +.IF "$(GUI)"=="OS2" + echo #define DLL_NAME "sm$(UPD)$(DLLPOSTFIX)" >$@ +.ELSE +.IF "$(GUI)"=="MAC" + echo "$(HASHMARK)define DLL_NAME ¶"sm$(UPD)$(DLLPOSTFIX).dll¶"" > $@ +.ELSE +.IF "$(GUI)"=="UNX" + $(RM) $@ + echo #define DLL_NAME \"libsm$(UPD)$(DLLPOSTFIX)$(DLLPOST)\" >$@ +.ELSE + echo #define DLL_NAME "sm$(UPD)$(DLLPOSTFIX)$(DLLPOST)" >$@ +.ENDIF +.ENDIF +.ENDIF + +.ENDIF + +.INCLUDE : target.mk + +$(SRS)$/smres.srs: $(SOLARINCDIR)$/svx$/globlmn.hrc + diff --git a/starmath/source/math_pch.cxx b/starmath/source/math_pch.cxx new file mode 100644 index 000000000000..8570ebc4d579 --- /dev/null +++ b/starmath/source/math_pch.cxx @@ -0,0 +1,893 @@ +/************************************************************************* + * + * $RCSfile: math_pch.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#define SMDLL 1 + +#include "starmath.hrc" + +#define ITEMID_FONT 1 +#define ITEMID_FONTHEIGHT 2 +#define ITEMID_LRSPACE 3 +#define ITEMID_WEIGHT 4 + +//--------- ab hier die "generierten" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef _SMART_COM_SUN_STAR_FRAME_XDISPATCHPROVIDERINTERCEPTOR_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_XDISPATCH_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_XDISPATCHPROVIDER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_XSTATUSLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_FRAMESEARCHFLAG_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_XDISPATCHPROVIDERINTERCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_FEATURESTATEEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_DISPATCHDESCRIPTOR_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_XFRAMEACTIONLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_XCOMPONENTLOADER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_XFRAME_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_FRAMEACTIONEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_FRAMEACTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_UTIL_XURLTRANSFORMER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_TASK_XSTATUSINDICATORFACTORY_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_TASK_XSTATUSINDICATORSUPPLIER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_TASK_XSTATUSINDICATOR_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_FRAME_XBROWSEHISTORYREGISTRY_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_IO_BUFFERSIZEEXCEEDEDEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_IO_NOTCONNECTEDEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_IO_IOEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_IO_UNEXPECTEDEOFEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_IO_WRONGFORMATEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_SERVICENOTREGISTEREDEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_NULLPOINTEREXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_CLASSNOTFOUNDEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_NOSUCHMETHODEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_SECURITYEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_NOSUCHFIELDEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_DISPOSEDEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_ARRAYINDEXOUTOFBOUNDSEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_ILLEGALACCESSEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_INDEXOUTOFBOUNDSEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_ILLEGALARGUMENTEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_NOSUPPORTEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_WRAPPEDTARGETEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_PARAMINFO_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_XIDLARRAY_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_XIDLCLASSPROVIDER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_FIELDACCESSMODE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_XIDLCLASS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_XIDLFIELD_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_PARAMMODE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_METHODMODE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_XIDLMEMBER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_XIDLREFLECTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_XIDLMETHOD_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_REFLECTION_INVOCATIONTARGETEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_PROPERTYVALUES_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_XPROPERTYSET_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_PROPERTYVALUE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_PROPERTYSTATE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_XPROPERTYSETINFO_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_XMULTIPROPERTYSET_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_XFASTPROPERTYSET_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_XVETOABLECHANGELISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_XPROPERTYSTATE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_XPROPERTYSTATECHANGELISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_XPROPERTIESCHANGELISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_XPROPERTYCHANGELISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_XPROPERTYACCESS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_XPROPERTYCONTAINER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_PROPERTYSTATECHANGEEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_PROPERTYCHANGEEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_UNKNOWNPROPERTYEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_INTROSPECTIONEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_PROPERTYEXISTEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_ILLEGALTYPEEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_BEANS_PROPERTYVETOEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_CONTAINER_XENUMERATIONACCESS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_CONTAINER_XHIERARCHICALNAMEACCESS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_CONTAINER_XNAMEACCESS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_CONTAINER_XCONTENTENUMERATIONACCESS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_CONTAINER_XENUMERATION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_CONTAINER_XELEMENTACCESS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_CONTAINER_XINDEXACCESS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_XEVENTLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_EVENTOBJECT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_SCRIPT_XALLLISTENERADAPTERSERVICE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_SCRIPT_XALLLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_SCRIPT_ALLEVENTOBJECT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_CONTAINER_XCOMPONENTENUMERATION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_XCOMPONENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_CONTAINER_XCOMPONENTENUMERATIONACCESS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_LISTENEREXISTEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_CONTAINER_ELEMENTEXISTEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_LANG_INVALIDLISTENEREXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_CONTAINER_NOSUCHELEMENTEXCEPTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XKEYLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XPAINTLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_KEYEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_KEYMODIFIER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XMOUSEMOTIONLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_FOCUSEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XWINDOWLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XACTIVATELISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_MOUSEEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XTOPWINDOWLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_PAINTEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_INPUTEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_KEYGROUP_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_KEY_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_WINDOWEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XMOUSELISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_KEYFUNCTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_FOCUSCHANGEREASON_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_MOUSEBUTTON_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XFOCUSLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XADJUSTMENTLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XACTIONLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XTEXTLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XSPINLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XITEMLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XVCLCONTAINERLISTENER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XFILEDIALOG_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XTEXTCOMPONENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XLISTBOX_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XPROGRESSMONITOR_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_TEXTALIGN_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XSCROLLBAR_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XVCLCONTAINERPEER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XTABCONTROLLERMODEL_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XMESSAGEBOX_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XTEXTEDITFIELD_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_STYLE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XTIMEFIELD_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XVCLWINDOWPEER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XCONTROLMODEL_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XSPINFIELD_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XUNOCONTROLCONTAINER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XTEXTLAYOUTCONSTRAINS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XNUMERICFIELD_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XBUTTON_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XTEXTAREA_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XIMAGEBUTTON_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XFIXEDTEXT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XCONTROLCONTAINER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XDIALOG_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_SCROLLBARORIENTATION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XRADIOBUTTON_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XCURRENCYFIELD_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XPATTERNFIELD_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_VCLWINDOWPEERATTRIBUTE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XTABCONTROLLER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XVCLCONTAINER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XDATEFIELD_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XCOMBOBOX_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XCONTROL_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XCHECKBOX_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_MESSAGEBOXCOMMAND_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XLAYOUTCONSTRAINS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XPROGRESSBAR_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_SIMPLEFONTMETRIC_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_FONTWEIGHT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_FONTSLANT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_CHARSET_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_FONTDESCRIPTOR_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_FONTWIDTH_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XFONT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_FONTTYPE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_FONTUNDERLINE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_FONTSTRIKEOUT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_FONTFAMILY_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_FONTPITCH_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XTOPWINDOW_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XWINDOW_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_POSSIZE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_VCLCONTAINEREVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_ITEMEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_SPINEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_TEXTEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_ADJUSTMENTTYPE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_ACTIONEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_ADJUSTMENTEVENT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_RECTANGLE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_SELECTION_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_SIZE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_WINDOWDESCRIPTOR_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_INVALIDATESTYLE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XTOOLKIT_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XWINDOWPEER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_WINDOWCLASS_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XSYSTEMDEPENDENTWINDOWPEER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_WINDOWATTRIBUTE_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XPOINTER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_SYSTEMPOINTER_HXX_ +#include +#endif +#ifndef _SMART_COM_SUN_STAR_AWT_XVIEW_HXX_ +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/starmath/source/mathtype.cxx b/starmath/source/mathtype.cxx new file mode 100644 index 000000000000..181794883639 --- /dev/null +++ b/starmath/source/mathtype.cxx @@ -0,0 +1,3081 @@ +/************************************************************************* + * + * $RCSfile: mathtype.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef MATHTYPE_HXX +#include +#endif + +#ifndef _TOOLS_DEBUG_H +#include +#endif + +#define APPEND(str,ascii) str.AppendAscii(RTL_CONSTASCII_STRINGPARAM(ascii)) + +#if 0 +String aEmbelList[21] = +{ + " ", + " ", + "single dot", + "double dot", + "triple dot", + "single prime", + "double prime", + "backwards prime (left of character)", + "tilde", + "hat (circumflex)", + "diagonal slash through character", + "right arrow", + "left arrow", + "double-headed arrow", + "right single-barbed arrow", + "left single-barbed arrow", + "mid-height horizontal bar", + "over-bar", + "triple prime", + "over-arc, concave downward", + "over-arc, concave upward" +}; + +String aSelectorList[49] = +{ + "angle brackets", + "parentheses", + "braces (curly brackets)", + "square brackets", + "vertical bars", + "double vertical bars", + "floor brackets", + "ceiling brackets", + "left brace, left brace", + "right brace, right brace", + "right brace, left brace", + "left brace, right parenthesis", + "left parenthesis, right brace", + "radical", + "fractions", + "subscript/superscript", + "underbar", + "overbar", + "left-pointing arrow", + "right-pointing arrow", + "left- and right-pointing arrow", + "single integral", + "double integral", + "triple integral", + "single summation-style integral", + "double summation-style integral", + "triple summation-style integral", + "upper horizontal brace", + "lower horizontal brace", + "summation", + "summation (integral-style limits)", + "product", + "product (integral-style limits)", + "coproduct", + "coproduct (integral-style limits)", + "union", + "union (integral-style limits)", + "intersection", + "intersection (integral-style limits)", + "limit", + "long division", + "slash fractions", + "big integral-style operators", + "big summation-style operators", + "leading sub- and superscripts", + "Dirac delta", + "under arrow", + "over arrow", + "over arc" +}; + +String aIntegralOpt[2] = +{ + "fixed-size integral", + "integral expands vertically to fit its contents" +}; + +String aFenceOpt[3] = +{ + "center fence on math axis", + "center fence on contents, place math axis of contents on math axis of containing line", + "center fence on contents, center contents on math axis of containing line" +}; + +String aTypeFaces[12] = +{ + "", + "fnTEXT", + "fnFUNCTION", + "fnVARIABLE", + "fnLCGREEK", + "fnUCGREEK", + "fnSYMBOL", + "fnVECTOR", + "fnNUMBER", + "fnUSER1", + "fnUSER2", + "fnMTEXTRA" +}; + +String aSizes[7] = +{ + "full", + "subscript", + "sub-subscript", + "symbol", + "sub-symbol", + "user 1", + "user 2" +}; +#endif + +/*This table is not fully complete and is pending on what decisions are + *made as regards the StarMath to Unicode stuff*/ +sal_Unicode aMathTypeTable[256] = +{ +0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, +0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, 0x0013, +0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, +0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, 0x2031, 0x0025, 0x0026, 0x221E, +0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x2212, 0x002E, 0x002F, 0x2224, 0x21D2, +0x21D0, 0x21D4, 0xffff, 0xffff, 0x2218, 0xffff, 0xffff, 0xffff, 0x003A, 0x003B, +0x003C, 0x003D, 0x003E, 0x00BF, 0x2260, 0x002B, 0x2212, 0x002A, 0x00D7, 0x22C5, +0x00F7, 0x00B1, 0x2213, 0x2295, 0x2296, 0x2297, 0x2298, 0x2299, 0x222A, 0x2229, +0x003C, 0x003E, 0x2264, 0x2265, 0x2264, 0x2265, 0x226A, 0x226B, 0x007E, 0x2245, +0x2248, 0xffff, 0x2261, 0x221D, 0x2202, 0x2282, 0x2283, 0x2286, 0x2287, 0x2284, +0x2285, 0x2288, 0x2289, 0x2208, 0x2209, 0x2208, 0x2203, 0x220B, 0x2135, 0x2111, +0x211C, 0x2118, 0x0192, 0x2221, 0x2222, 0x007C, 0x2225, 0x22A5, 0x2026, 0x22EF, +0x22EE, 0x22F0, 0x22F1, 0x22B6, 0x22B7, 0x2192, 0x005C, 0x00AC, 0x222B, 0x222C, +0x222D, 0x222E, 0x222F, 0x2230, 0x221A, 0x221A, 0x221A, 0x221A, 0x2210, 0x220F, +0x2211, 0x2207, 0x2200, 0x2225, 0x005E, 0x02C7, 0x02D8, 0x00B4, 0x0060, 0x02DC, +0x00AF, 0x2192, 0x02D9, 0x00A8, 0xffff, 0x02DA, 0x2227, 0x2228, 0x220D, 0x2205, +0x007B, 0x007D, 0x0028, 0x0029, 0x2329, 0x232a, 0x005B, 0x005D, 0x2220, 0x221F, +0xffff, 0x225C, 0x2254, 0x2255, 0x21B3, 0x2197, 0x2198, 0x2245, 0x301A, 0x301B, +0xffff, 0xffff, 0xffff, 0xffff, 0x2112, 0x2130, 0x2131, 0xffff, 0xffff, 0x002F, +0x005C, 0x274F, 0x2308, 0x230A, 0x2309, 0x230B, 0xffff, 0xffff, 0x0393, 0x0394, +0x0398, 0x039B, 0x039E, 0x03A0, 0x03A3, 0x03A5, 0x03A6, 0x03A8, 0x0389, 0x03B1, +0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, +0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, +0x03C7, 0x03C8, 0x03C9, 0x03B5, 0x03D1, 0xffff, 0x03F1, 0x03DB, 0x2118, 0xffff, +0x2113, 0x2129, 0x2107, 0x2127, 0x210A, 0x22A4, 0x210F, 0x019B, 0x2190, 0x2191, +0x2193, 0x2115, 0x2124, 0x211A, 0x211D, 0x2102 +}; + +void EQNOLEFILEHDR::Read(SvStorageStream *pS) +{ + *pS >> nCBHdr; + *pS >> nVersion; + *pS >> nCf; + *pS >> nCBObject; + *pS >> nReserved1; + *pS >> nReserved2; + *pS >> nReserved3; + *pS >> nReserved4; +} + +void EQNOLEFILEHDR::Write(SvStorageStream *pS) +{ + *pS << nCBHdr; + *pS << nVersion; + *pS << nCf; + *pS << nCBObject; + *pS << nReserved1; + *pS << nReserved2; + *pS << nReserved3; + *pS << nReserved4; +} + +/*ToDo replace with table rather than switch, returns + TRUE in the case that the char is just a char, and + FALSE if the character is an operator which must not be + placed inside the quote sequence designed to protect + against being parsed as a keyword + + General solution required to force starmath to handle + unicode math chars the way it handles its own math + chars rathar than handle them as text as it will do + for the default case below, i.e. incorrect spacing + between math symbols and ordinary text e.g. 1=2 rather + than 1 = 2 + */ +BOOL MathType::LookupChar(sal_Unicode nChar) +{ + BOOL bRet=FALSE; + const char *pC = NULL; + switch(nChar) + { + case 0x00ac: + pC = " neg "; + break; + case 0x00b1: + pC = " +- "; + break; + case 0x0057: + if ((nVersion < 3) && (nTypeFace == 0x85)) + pC = " %OMEGA "; + else + { + rRet.Append(nChar); + bRet=TRUE; + } + break; + case 0x00d7: + if (nVersion < 3) + pC = " cdot "; + else + pC = " times "; + break; + case 0x00f7: + pC = " div "; + break; + case 0x019b: + pC = " lambdabar "; + break; + case 0x2026: + pC = " dotslow "; + break; + case 0x2022: + pC = " cdot "; + break; + case 0x210f: + pC = " hbar "; + break; + case 0x2111: + pC = " Im "; + break; + case 0x2118: + pC = " wp "; + break; + case 0x211c: + pC = " Re "; + break; + case 0x2135: + pC = " aleph "; + break; + case 0x2190: + pC = " leftarrow "; + break; + case 0x2191: + pC = " uparrow "; + break; + case 0x2192: + pC = " rightarrow "; + break; + case 0x2193: + pC = " downarrow "; + break; + case 0x21d4: + pC = " dlrarrow "; + break; + case 0x2200: + pC = " forall "; + break; + case 0x2202: + pC = " partial "; + break; + case 0x2203: + pC = " exists "; + break; + case 0x2205: + pC = " emptyset "; + break; + case 0x2207: + pC = " nabla "; + break; + case 0x2208: + pC = " in "; + break; + case 0x2209: + pC = " notin "; + break; + case 0x220d: + pC = " owns "; + break; + case 0x220f: + pC = " prod "; + break; + case 0x2210: + pC = " coprod "; + break; + case 0x2211: + pC = " sum "; + break; + case 0x2212: + pC = " - "; + break; + case 0x2213: + pC = " -+ "; + break; + case 0x2217: + pC = " * "; + break; + case 0x2218: + pC = " circ "; + break; + case 0x221d: + pC = " prop "; + break; + case 0x221e: + pC = " infinity "; + break; + case 0x2227: + pC = " and "; + break; + case 0x2228: + pC = " or "; + break; + case 0x2229: + pC = " intersection "; + break; + case 0x222a: + pC = " union "; + break; + case 0x222b: + pC = " int "; + break; + case 0x2245: + pC = " simeq "; + break; + case 0x2248: + pC = " approx "; + break; + case 0x2260: + pC = " <> "; + break; + case 0x2261: + pC = " equiv "; + break; + case 0x2264: + pC = " <= "; + break; + case 0x2265: + pC = " >= "; + break; + case 0x2282: + pC = " subset "; + break; + case 0x2283: + pC = " supset "; + break; + case 0x2284: + pC = " nsubset "; + break; + case 0x2286: + pC = " subseteq "; + break; + case 0x2287: + pC = " supseteq "; + break; + case 0x227a: + case 0x227b: + case 0x22b2: + case 0x22b3: + rRet += ' '; + rRet.Append(nChar); + rRet += ' '; + break; + case 0x22a5: + pC = " ortho "; + break; + case 0x22c5: + pC = " cdot "; + break; + case 0x22ee: + pC = " dotsvert "; + break; + case 0x22ef: + pC = " dotsaxis "; + break; + case 0x22f0: + pC = " dotsup "; + break; + case 0x22f1: + pC = " dotsdown "; + break; + case 0xeb01: //no space + case 0xeb08: //normal space + bRet=TRUE; + break; + case 0xeb02: //small space + case 0xeb04: //medium space + rRet.Append('`'); + break; + case 0xeb05: //large space + rRet.Append('~'); + break; + case 0x3a9: + pC = " %OMEGA "; + break; + default: + rRet.Append(nChar); + bRet=TRUE; + break; + } + if (pC) + rRet.AppendAscii(pC); + return bRet; +} + +int MathType::Parse(SvStorage *pStor) +{ + SvStorageStreamRef xSrc = pStor->OpenStream( + String::CreateFromAscii("Equation Native"), + STREAM_STD_READ | STREAM_NOCREATE); + if ( (!xSrc.Is()) || (SVSTREAM_OK != xSrc->GetError())) + return NULL; + pS = &xSrc; + pS->SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN ); + + EQNOLEFILEHDR aHdr; + aHdr.Read(pS); + *pS >> nVersion; + *pS >> nPlatform; + *pS >> nProduct; + *pS >> nProdVersion; + *pS >> nProdSubVersion; + +#ifdef STANDALONE + *pOut << "Format Version is " << int(nVersion) << endl; + *pOut << "Generating Platform is " << (nPlatform ? "Windows" + : "Mac") << endl; + *pOut << "Generating Product is " << (nPlatform ? "Equation Editor" + : "Equation Editor") << endl; + *pOut << "Prod Version is " << int(nProdVersion) << "." << + int(nProdSubVersion) << endl << endl; +#endif + + int nRet = HandleRecords(); + //little crude hack to close ocassionally open expressions + //a sophisticated system to determine what expressions are + //opened is required, but this is as much work as rewriting + //starmaths internals. + APPEND(rRet,"{}"); + + //sanity check + ULONG nEnd = pS->Tell(); + if (nEnd != pS->Seek(STREAM_SEEK_TO_END)) + return 0; + return nRet; +} + +/*Fabously complicated as many tokens have to be reordered and generally + *moved around from mathtypes paradigm to starmaths.*/ +int MathType::HandleRecords(int nLevel,BYTE nSelector, + BYTE nVariation, int nMatrixRows,int nMatrixCols) +{ + BYTE nTag,nRecord; + BYTE nTabType,nTabStops; + BYTE nTface,nStyle; + UINT16 nTabOffset; + sal_Char nChar8; + String sFontName; + int i,nRet=1,newline=0; + BOOL bSilent=FALSE; + int nPart=0; + String sPush,sMainTerm; + int nSetSize=0,nSetAlign=0; + int nCurRow=0,nCurCol=0; + BOOL bOpenString=FALSE; + xub_StrLen nTextStart; + + do + { + *pS >> nTag; + nRecord = nTag&0x0F; + + /*MathType strings can of course include words which + *are StarMath keywords, the simplest solution is + to escape strings of greater than len 1 with double + quotes to avoid scanning the TokenTable for matches + + Unfortunately it may turn out that the string gets + split during the handling of a character emblishment + so this special case must be handled in the + character handler case 2: + */ + if ((nRecord == CHAR) && (!bSilent) && (!bOpenString)) + { + bOpenString=TRUE; + nTextStart = rRet.Len(); + } + else if ((nRecord != CHAR) && (bOpenString)) + { + bOpenString=FALSE; + if ((rRet.Len() - nTextStart) > 1) + { + rRet.InsertAscii(" ital \"",nTextStart); + rRet += '\"'; + } + } + + switch(nRecord) + { + case LINE: + { + //if (xfLMOVE(nTag)) + //if (xfLSPACE(nTag)) + //if (xfRULER(nTag)) + + if (newline>0) + APPEND(rRet,"\nnewline\n"); + if (!(xfNULL(nTag))) + { + switch (nSelector) + { + case 0x0: + if (nVariation==0) + APPEND(rRet," langle "); + else if (nVariation==1) + APPEND(rRet," \\langle "); + break; + case 0x1: + if (nVariation==0) + APPEND(rRet," left ("); + else if (nVariation==1) + APPEND(rRet,"\\("); + break; + case 0x2: + if (nVariation==0) + APPEND(rRet," lbrace "); + else if (nVariation==1) + APPEND(rRet," \\lbrace "); + break; + case 0x3: + if (nVariation==0) + APPEND(rRet," left ["); + else if (nVariation==1) + APPEND(rRet,"\\["); + break; + case 0x8: + case 0xb: + APPEND(rRet," \\["); + break; + case 0x4: + if (nVariation==0) + APPEND(rRet," lline "); + else if (nVariation==1) + APPEND(rRet," \\lline "); + break; + case 0x5: + if (nVariation==0) + APPEND(rRet," ldline "); + else if (nVariation==1) + APPEND(rRet," \\ldline "); + break; + case 0x6: + if (nVariation==0) + APPEND(rRet," lfloor "); + else if (nVariation==1) + APPEND(rRet," \\lfloor "); + break; + case 0x7: + if (nVariation==0) + APPEND(rRet," lceil "); + else if (nVariation==1) + APPEND(rRet," \\lceil "); + break; + case 0x9: + case 0xa: + APPEND(rRet," \\]"); + break; + case 0xc: + APPEND(rRet," \\("); + break; + case 0xd: + if (nPart == 0) + { + if (nVariation == 0) + APPEND(rRet," sqrt"); + else + { + APPEND(rRet," nroot"); + sPush = rRet; + rRet.Erase(); + } + } + APPEND(rRet," {"); + break; + case 0xe: + if (nPart == 0) + APPEND(rRet," { "); + + + if (nPart == 1) + APPEND(rRet," over "); + APPEND(rRet," {"); + break; + case 0xf: + if ((nVariation == 0) || + ((nVariation == 2) && (nPart==1))) + APPEND(rRet," rSup"); + else if ((nVariation == 1) || + ((nVariation == 2) && (nPart==0))) + APPEND(rRet," rSub"); + APPEND(rRet," {"); + break; + case 0x10: + if (nVariation == 0) + APPEND(rRet," underline "); + else if (nVariation == 1) + APPEND(rRet," underline underline "); + APPEND(rRet," {"); + break; + case 0x11: + if (nVariation == 0) + APPEND(rRet," overline "); + else if (nVariation == 1) + APPEND(rRet," overline overline "); + APPEND(rRet," {"); + break; + case 0x12: + if (nPart == 0) + { + if (nVariation == 0) + APPEND(rRet," widevec ");//left arrow above + else if (nVariation == 1) + APPEND(rRet," widevec ");//left arrow below + APPEND(rRet," {"); + } + break; + case 0x13: + if (nPart == 0) + { + if (nVariation == 0) + APPEND(rRet," widevec ");//right arrow above + else if (nVariation == 1) + APPEND(rRet," widevec ");//right arrow below + APPEND(rRet," {"); + } + break; + case 0x14: + if (nPart == 0) + { + if (nVariation == 0) + APPEND(rRet," widevec ");//double arrow above + else if (nVariation == 1) + APPEND(rRet," widevec ");//double arrow below + APPEND(rRet," {"); + } + break; + case 0x15: + if (nPart == 0) + { + if ((nVariation == 3) || (nVariation == 4)) + APPEND(rRet," lInt"); + else + APPEND(rRet," Int"); + if ( (nVariation != 0) && (nVariation != 3)) + { + sPush = rRet; + rRet.Erase(); + } + } + if (((nVariation == 1) || + (nVariation == 4)) && (nPart==1)) + APPEND(rRet," rSub"); + else if ((nVariation == 2) && (nPart==2)) + APPEND(rRet," rSup"); + else if ((nVariation == 2) && (nPart==1)) + APPEND(rRet," rSub"); + APPEND(rRet," {"); + break; + case 0x16: + if (nPart == 0) + { + if ((nVariation == 2) || (nVariation == 3)) + APPEND(rRet," llInt"); + else + APPEND(rRet," iInt"); + if ( (nVariation != 0) && (nVariation != 2)) + { + sPush = rRet; + rRet.Erase(); + } + } + if (((nVariation == 1) || + (nVariation == 3)) && (nPart==1)) + APPEND(rRet," rSub"); + APPEND(rRet," {"); + break; + case 0x17: + if (nPart == 0) + { + if ((nVariation == 2) || (nVariation == 3)) + APPEND(rRet," lllInt"); + else + APPEND(rRet," iiInt"); + if ( (nVariation != 0) && (nVariation != 2)) + { + sPush = rRet; + rRet.Erase(); + } + } + if (((nVariation == 1) || + (nVariation == 3)) && (nPart==1)) + APPEND(rRet," rSub"); + APPEND(rRet," {"); + break; + case 0x18: + if (nPart == 0) + { + if (nVariation == 2) + APPEND(rRet," lInt"); + else + APPEND(rRet," Int"); + sPush = rRet; + rRet.Erase(); + } + if (((nVariation == 1) || + (nVariation == 2)) && (nPart==1)) + APPEND(rRet," cSub"); + else if ((nVariation == 0) && (nPart==2)) + APPEND(rRet," cSup"); + else if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," cSub"); + APPEND(rRet," {"); + break; + case 0x19: + if (nPart == 0) + { + if (nVariation == 0) + APPEND(rRet," llInt"); + else + APPEND(rRet," iInt"); + sPush = rRet; + rRet.Erase(); + } + if (nPart==1) + APPEND(rRet," cSub"); + APPEND(rRet," {"); + break; + case 0x1a: + if (nPart == 0) + { + if (nVariation == 0) + APPEND(rRet," lllInt"); + else + APPEND(rRet," iiInt"); + sPush = rRet; + rRet.Erase(); + } + if (nPart==1) + APPEND(rRet," cSub"); + APPEND(rRet," {"); + break; + case 0x1b: + case 0x1c: + APPEND(rRet," {"); + break; + case 0x1d: + if (nPart == 0) + { + APPEND(rRet," Sum"); + if (nVariation != 2) + { + sPush = rRet; + rRet.Erase(); + } + } + if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," cSub"); + else if ((nVariation == 1) && (nPart==2)) + APPEND(rRet," cSup"); + else if ((nVariation == 1) && (nPart==1)) + APPEND(rRet," cSub"); + APPEND(rRet," {"); + break; + case 0x1e: + if (nPart == 0) + { + APPEND(rRet," Sum"); + sPush = rRet; + rRet.Erase(); + } + if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," rSub"); + else if ((nVariation == 1) && (nPart==2)) + APPEND(rRet," rSup"); + else if ((nVariation == 1) && (nPart==1)) + APPEND(rRet," rSub"); + APPEND(rRet," {"); + break; + case 0x1f: + if (nPart == 0) + { + APPEND(rRet," Prod"); + if (nVariation != 2) + { + sPush = rRet; + rRet.Erase(); + } + } + if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," cSub"); + else if ((nVariation == 1) && (nPart==2)) + APPEND(rRet," cSup"); + else if ((nVariation == 1) && (nPart==1)) + APPEND(rRet," cSub"); + APPEND(rRet," {"); + break; + case 0x20: + if (nPart == 0) + { + APPEND(rRet," Prod"); + sPush = rRet; + rRet.Erase(); + } + if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," rSub"); + else if ((nVariation == 1) && (nPart==2)) + APPEND(rRet," rSup"); + else if ((nVariation == 1) && (nPart==1)) + APPEND(rRet," rSub"); + APPEND(rRet," {"); + break; + case 0x21: + if (nPart == 0) + { + APPEND(rRet," coProd"); + if (nVariation != 2) + { + sPush = rRet; + rRet.Erase(); + } + } + if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," cSub"); + else if ((nVariation == 1) && (nPart==2)) + APPEND(rRet," cSup"); + else if ((nVariation == 1) && (nPart==1)) + APPEND(rRet," cSub"); + APPEND(rRet," {"); + break; + case 0x22: + if (nPart == 0) + { + APPEND(rRet," coProd"); + sPush = rRet; + rRet.Erase(); + } + if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," rSub"); + else if ((nVariation == 1) && (nPart==2)) + APPEND(rRet," rSup"); + else if ((nVariation == 1) && (nPart==1)) + APPEND(rRet," rSub"); + APPEND(rRet," {"); + break; + case 0x23: + if (nPart == 0) + { + APPEND(rRet," union"); //union + if (nVariation != 2) + { + sPush = rRet; + rRet.Erase(); + } + } + if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," cSub"); + else if ((nVariation == 1) && (nPart==2)) + APPEND(rRet," cSup"); + else if ((nVariation == 1) && (nPart==1)) + APPEND(rRet," cSub"); + APPEND(rRet," {"); + break; + case 0x24: + if (nPart == 0) + { + APPEND(rRet," union"); //union + sPush = rRet; + rRet.Erase(); + } + if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," rSub"); + else if ((nVariation == 1) && (nPart==2)) + APPEND(rRet," rSup"); + else if ((nVariation == 1) && (nPart==1)) + APPEND(rRet," rSub"); + APPEND(rRet," {"); + break; + case 0x25: + if (nPart == 0) + { + APPEND(rRet," intersect"); //intersect + if (nVariation != 2) + { + sPush = rRet; + rRet.Erase(); + } + } + if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," cSub"); + else if ((nVariation == 1) && (nPart==2)) + APPEND(rRet," cSup"); + else if ((nVariation == 1) && (nPart==1)) + APPEND(rRet," cSub"); + APPEND(rRet," {"); + break; + case 0x26: + if (nPart == 0) + { + APPEND(rRet," intersect"); //intersect + sPush = rRet; + rRet.Erase(); + } + if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," rSub"); + else if ((nVariation == 1) && (nPart==2)) + APPEND(rRet," rSup"); + else if ((nVariation == 1) && (nPart==1)) + APPEND(rRet," rSub"); + APPEND(rRet," {"); + break; + case 0x27: + if ((nVariation == 0) && (nPart==1)) + APPEND(rRet," cSup"); + else if ((nVariation == 1) && (nPart==1)) + APPEND(rRet," cSub"); + else if ((nVariation == 2) && (nPart==1)) + APPEND(rRet," cSub"); + else if ((nVariation == 2) && (nPart==2)) + APPEND(rRet," cSup"); + APPEND(rRet," {"); + break; + case 0x28: + if (nVariation == 0) + { + if (nPart == 0) + { + sPush = rRet; + rRet.Erase(); + } + } + APPEND(rRet," {"); + if (nVariation == 0) + { + if (nPart == 1) + APPEND(rRet,"alignr "); + } + if (nPart == 0) + APPEND(rRet,"\\lline "); + if (nVariation == 1) + APPEND(rRet,"overline "); + break; + case 0x29: + APPEND(rRet," {"); + break; + case 0x2a: + if (nPart == 0) + { + sPush = rRet; + rRet.Erase(); + } + if ((nVariation == 0) && (nPart==0)) + APPEND(rRet," rSup"); + else if ((nVariation == 2) && (nPart==1)) + APPEND(rRet," rSup"); + else if ((nVariation == 1) && (nPart==0)) + APPEND(rRet," rSub"); + else if ((nVariation == 2) && (nPart==0)) + APPEND(rRet," rSub"); + APPEND(rRet," {"); + break; + case 0x2b: + if (nPart == 0) + { + sPush = rRet; + rRet.Erase(); + } + if ((nVariation == 0) && (nPart==0)) + APPEND(rRet," cSup"); + else if ((nVariation == 2) && (nPart==1)) + APPEND(rRet," cSup"); + else if ((nVariation == 1) && (nPart==0)) + APPEND(rRet," cSub"); + else if ((nVariation == 2) && (nPart==0)) + APPEND(rRet," cSub"); + APPEND(rRet," {"); + break; + case 0x2c: + if (nPart == 0) + APPEND(rRet,"\"\""); + if ((nVariation == 0) + || ((nVariation == 2) && (nPart==1))) + APPEND(rRet," lSup"); + else if ((nVariation == 1) + || ((nVariation == 2) && (nPart==0))) + APPEND(rRet," lSub"); + APPEND(rRet," {"); + break; + case 0x2d: + if (nVariation==0) + { + if (nPart == 0) + APPEND(rRet," langle "); + } + else if (nVariation==1) + { + APPEND(rRet," \\langle "); + newline--; + } + else if (nVariation==2) + { + APPEND(rRet," \\lline "); + newline--; + } + break; + case 0x2e: + if (nVariation == 0) + APPEND(rRet," widevec ");//left below + else if (nVariation == 1) + APPEND(rRet," widevec ");//right below + else if (nVariation == 2) + APPEND(rRet," widevec ");//double headed below + APPEND(rRet," {"); + break; + case 0x2f: + if (nVariation == 0) + APPEND(rRet," widevec ");//left above + else if (nVariation == 1) + APPEND(rRet," widevec ");//right above + else if (nVariation == 2) + APPEND(rRet," widevec ");//double headed above + APPEND(rRet," {"); + break; + default: + break; + } + int nOldCurSize=nCurSize; + HandleSize(nLSize,nDSize,nSetSize); + nRet = HandleRecords(nLevel+1,nSelector,nVariation); + while (nSetSize) + { + APPEND(rRet,"} "); + nSetSize--; + nCurSize=nOldCurSize; + } + + + HandleMatrixSeperator(nMatrixRows,nMatrixCols, + nCurCol,nCurRow); + + switch (nSelector) + { + case 0x0: + if (nVariation==0) + APPEND(rRet," rangle "); + else if (nVariation==2) + APPEND(rRet," \\rangle "); + break; + case 0x1: + if (nVariation==0) + APPEND(rRet," right )"); + else if (nVariation==2) + APPEND(rRet,"\\)"); + break; + case 0x2: + if (nVariation==0) + APPEND(rRet," rbrace "); + else if (nVariation==2) + APPEND(rRet," \\rbrace "); + break; + case 0x3: + if (nVariation==0) + APPEND(rRet," right ]"); + else if (nVariation==2) + APPEND(rRet,"\\]"); + break; + case 0x4: + if (nVariation==0) + APPEND(rRet," rline "); + else if (nVariation==2) + APPEND(rRet," \\rline "); + break; + case 0x5: + if (nVariation==0) + APPEND(rRet," rdline "); + else if (nVariation==2) + APPEND(rRet," \\rdline "); + break; + case 0x6: + if (nVariation==0) + APPEND(rRet," rfloor "); + else if (nVariation==2) + APPEND(rRet," \\rfloor "); + break; + case 0x7: + if (nVariation==0) + APPEND(rRet," rceil "); + else if (nVariation==2) + APPEND(rRet," \\rceil "); + break; + case 0x8: + case 0xa: + APPEND(rRet,"\\["); + break; + case 0x9: + case 0xc: + APPEND(rRet,"\\]"); + break; + case 0xd: + APPEND(rRet,"} "); + if (nVariation == 1) + { + if (nPart == 0) + { + newline--; + sMainTerm = rRet; + rRet.Erase(); + } + else + { + sPush += rRet; + rRet = sPush; + rRet += sMainTerm; + } + } + else + { + if (nPart == 0) + newline--; + } + nPart++; + break; + case 0xb: + APPEND(rRet,"\\)"); + break; + case 0xe: + APPEND(rRet,"} "); + if (nPart == 0) + newline--; + else + APPEND(rRet,"} "); + nPart++; + break; + case 0xf: + case 0x2c: + if ((nPart == 0) && + ((nVariation == 2) || (nVariation == 1))) + newline--; + APPEND(rRet,"} "); + nPart++; + break; + case 0x10: + case 0x11: + case 0x2e: + case 0x2f: + APPEND(rRet,"} "); + break; + case 0x12: + case 0x13: + case 0x14: + if (nPart == 0) + { + newline--; + APPEND(rRet,"} "); + } + nPart++; + break; + case 0x1b: + APPEND(rRet,"} "); + if (nPart == 0) + { + newline--; + APPEND(rRet,"overbrace"); + } + nPart++; + break; + case 0x1c: + APPEND(rRet,"} "); + if (nPart == 0) + { + newline--; + APPEND(rRet,"underbrace"); + } + nPart++; + break; + case 0x27: + if (nPart==0) + newline--; + else if ((nPart==1) && + ((nVariation == 2) || (nVariation == 1))) + newline--; + APPEND(rRet,"} "); + nPart++; + break; + case 0x28: + APPEND(rRet,"} "); + if (nVariation == 0) + { + if (nPart == 0) + { + sMainTerm = rRet; + rRet.Erase(); + } + else + { + sPush += rRet; + rRet = sPush; + APPEND(rRet," over "); + rRet += sMainTerm; + } + } + if (nPart == 0) + newline--; + nPart++; + break; + case 0x29: + APPEND(rRet,"} "); + if (nPart == 0) + { + newline--; + switch (nVariation) + { + case 1: + APPEND(rRet,"slash"); + break; + default: + APPEND(rRet,"wideslash"); + break; + } + } + nPart++; + break; + case 0x1d: + case 0x1e: + case 0x1f: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + APPEND(rRet,"} "); + if (nPart == 0) + { + if (nVariation != 2) + { + sMainTerm = rRet; + rRet.Erase(); + } + newline--; + } + else if ((nPart == 1) && (nVariation == 0)) + { + sPush += rRet; + rRet = sPush; + rRet += sMainTerm; + newline--; + } + else if ((nPart == 1) && (nVariation == 1)) + newline--; + else if ((nPart == 2) && (nVariation == 1)) + { + sPush += rRet; + rRet = sPush; + rRet += sMainTerm; + newline--; + } + nPart++; + break; + case 0x15: + APPEND(rRet,"} "); + if (nPart == 0) + { + if ((nVariation != 0) && (nVariation != 3)) + { + sMainTerm = rRet; + rRet.Erase(); + } + newline--; + } + else if ((nPart == 1) && + ((nVariation == 1) || (nVariation==4))) + { + sPush += rRet; + rRet = sPush; + rRet += sMainTerm; + newline--; + } + else if ((nPart == 1) && (nVariation == 2)) + newline--; + else if ((nPart == 2) && (nVariation == 2)) + { + sPush += rRet; + rRet = sPush; + rRet += sMainTerm; + newline--; + } + nPart++; + break; + case 0x16: + case 0x17: + APPEND(rRet,"} "); + if (nPart == 0) + { + if ((nVariation != 0) && (nVariation != 2)) + { + sMainTerm = rRet; + rRet.Erase(); + } + newline--; + } + else if ((nPart == 1) && + ((nVariation == 1) || (nVariation==3))) + { + sPush += rRet; + rRet = sPush; + rRet += sMainTerm; + newline--; + } + nPart++; + break; + case 0x18: + APPEND(rRet,"} "); + if (nPart == 0) + { + sMainTerm = rRet; + rRet.Erase(); + newline--; + } + else if ((nPart == 1) && + ((nVariation == 1) || (nVariation==2))) + { + sPush += rRet; + rRet = sPush; + rRet += sMainTerm; + newline--; + } + else if ((nPart == 1) && (nVariation == 0)) + newline--; + else if ((nPart == 2) && (nVariation == 0)) + { + sPush += rRet; + rRet = sPush; + rRet += sMainTerm; + newline--; + } + nPart++; + break; + case 0x19: + case 0x1a: + APPEND(rRet,"} "); + if (nPart == 0) + { + sMainTerm = rRet; + rRet.Erase(); + newline--; + } + else if (nPart == 1) + { + sPush += rRet; + rRet = sPush; + rRet += sMainTerm; + newline--; + } + nPart++; + break; + case 0x2a: + case 0x2b: + APPEND(rRet,"} "); + + if ((nPart == 0) && + ((nVariation == 0) || (nVariation == 1))) + { + sMainTerm = rRet; + rRet.Erase(); + newline--; + } + else if ((nPart == 0) && (nVariation == 2)) + newline--; + else if ((nPart == 1) && (nVariation == 2)) + { + sMainTerm = rRet; + rRet.Erase(); + newline--; + } + else if ((nPart == 2) || (((nPart == 1) && + (nVariation == 0) || (nVariation == 1)))) + { + sPush+=rRet; + rRet = sPush; + rRet += sMainTerm; + } + nPart++; + break; + case 0x2d: + if (nVariation==0) + { + if (nPart == 0) + { + newline--; //there is another term to arrive + APPEND(rRet," mline "); + } + else + APPEND(rRet," rangle "); + } + else if (nVariation==1) + APPEND(rRet," \\lline "); + else if (nVariation==2) + APPEND(rRet," \\rangle "); + nPart++; + break; + default: + break; + } + bSilent = TRUE; //Skip the optional brackets and/or + //symbols that follow some of these + //records. Foo Data. + + /*In matrices and piles we cannot seperate equation + *lines with the newline keyword*/ + if (nMatrixCols==0) + newline++; + } + } + break; + case CHAR: + nRet = HandleChar(nTextStart,nSetSize,nLevel,nTag,nSelector, + nVariation,bSilent); + break; + case TMPL: + nRet = HandleTemplate(nLevel,nSelector,nVariation); + break; + case PILE: + nRet = HandlePile(nSetAlign,nLevel,nSelector,nVariation); + HandleMatrixSeperator(nMatrixRows,nMatrixCols,nCurCol,nCurRow); + break; + case MATRIX: + nRet = HandleMatrix(nLevel,nSelector,nVariation); + HandleMatrixSeperator(nMatrixRows,nMatrixCols,nCurCol,nCurRow); + break; + case EMBEL: + HandleEmblishments(); + break; + case RULER: + *pS >> nTabStops; + for (i=0;i> nTabType; + *pS >> nTabOffset; + } + DBG_ASSERT(FALSE,"Not seen in the wild Equation Ruler Field") + break; + case FONT: + *pS >> nTface; + *pS >> nStyle; + sFontName.Erase(); + do + { + *pS >> nChar8; + sFontName.Append(ByteString::ConvertToUnicode( + nChar8,RTL_TEXTENCODING_MS_1252)); + } + while(nChar8); + break; + case SIZE: + HandleSetSize(); + break; + case 10: + case 11: + case 12: + case 13: + case 14: + nLSize=nRecord-10; + break; + case END: + default: + break; + } + } + while (nRecord != END); + while (nSetSize) + { + rRet += '}'; + nSetSize--; + } + return nRet; +} + +/*Simply determine if we are at the end of a record or the end of a line, + *with fiddley logic to see if we are in a matrix or a pile or neither + + Note we cannot tell until after the event that this is the last entry + of a pile, so we must strip the last seperator of a pile after this + is detected in the PILE handler + */ +void MathType::HandleMatrixSeperator(int nMatrixRows,int nMatrixCols, + int &rCurCol,int &rCurRow) +{ + if (nMatrixRows!=0) + { + if (rCurCol == nMatrixCols-1) + { + if (rCurRow != nMatrixRows-1) + APPEND(rRet," {} ##\n"); + if (nMatrixRows!=-1) + { + rCurCol=0; + rCurRow++; + } + } + else + { + APPEND(rRet," {} # "); + if (nMatrixRows!=-1) + rCurCol++; + else + rRet += '\n'; + } + } +} + +/* set the alignment of the following term, but starmath currently + * cannot handle vertical alignment */ +void MathType::HandleAlign(BYTE nHAlign,BYTE nVAlign,int &rSetAlign) +{ + switch(nHAlign) + { + case 1: + default: + APPEND(rRet,"alignl {"); + break; + case 2: + APPEND(rRet,"alignc {"); + break; + case 3: + APPEND(rRet,"alignr {"); + break; + } +#if 0 + switch(nVAlign) + { + } + rSetAlign+=2; +#endif + rSetAlign++; +} + +/* set size of text, complexity due to overuse of signedness as a flag + * indicator by mathtype file format*/ +BOOL MathType::HandleSize(INT16 nLSize,INT16 nDSize, int &rSetSize) +{ + BOOL bRet=FALSE; + if (nLSize < 0) + { + if ((-nLSize/32 != nDefaultSize) && (-nLSize/32 != nCurSize)) + { + if (rSetSize) + { + rSetSize--; + rRet += '}'; + bRet=TRUE; + } + if (-nLSize/32 != nLastSize) + { + nLastSize = nCurSize; + APPEND(rRet," size "); + rRet += String::CreateFromInt32(-nLSize/32); + rRet += '{'; + bRet=TRUE; + rSetSize++; + } + nCurSize = -nLSize/32; + } + } + else + { + /*sizetable should theoreticaly be filled with the default sizes + *of the various font groupings matching starmaths equivalents + in aTypeFaces, and a test would be done to see if the new font + size would be the same as what starmath would have chosen for + itself anyway in which case the size setting could be ignored*/ + nLSize = aSizeTable[nLSize]; + nLSize += nDSize; + //if (nLSize != nDefaultSize) + if (nLSize != nCurSize) + { + if (rSetSize) + { + rSetSize--; + rRet += '}'; + bRet=TRUE; + } + if (nLSize != nLastSize) + { + nLastSize = nCurSize; + APPEND(rRet," size "); + rRet += String::CreateFromInt32(nLSize); + rRet += '{'; + bRet=TRUE; + rSetSize++; + } + nCurSize = nLSize; + } + } + return bRet; +} + +int MathType::ConvertFromStarMath(SvStorage *pStor) +{ + if (!pTree) + return 0; + + SvGlobalName aGName(0x0002ce02L, 0x0000, 0x0000,0xc0,0x00, + 0x00,0x00,0x00,0x00,0x00,0x46 ); + pStor->SetClass( aGName, 0, C2S("Microsoft Equation 3.0")); + + static BYTE __READONLY_DATA aCompObj[] = { + 0x01, 0x00, 0xFE, 0xFF, 0x03, 0x0A, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xCE, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x46, 0x17, 0x00, 0x00, 0x00, + 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, + 0x74, 0x20, 0x45, 0x71, 0x75, 0x61, 0x74, 0x69, + 0x6F, 0x6E, 0x20, 0x33, 0x2E, 0x30, 0x00, 0x0C, + 0x00, 0x00, 0x00, 0x44, 0x53, 0x20, 0x45, 0x71, + 0x75, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x0B, + 0x00, 0x00, 0x00, 0x45, 0x71, 0x75, 0x61, 0x74, + 0x69, 0x6F, 0x6E, 0x2E, 0x33, 0x00, 0xF4, 0x39, + 0xB2, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + SvStorageStreamRef xStor( pStor->OpenStream( C2S("\1CompObj"))); + xStor->Write(aCompObj,sizeof(aCompObj)); + + static BYTE __READONLY_DATA aOle[] = { + 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + }; + SvStorageStreamRef xStor2( pStor->OpenStream( C2S("\1Ole"))); + xStor2->Write(aOle,sizeof(aOle)); + xStor.Clear(); + xStor2.Clear(); + + SvStorageStreamRef xSrc = pStor->OpenStream(C2S("Equation Native")); + if ( (!xSrc.Is()) || (SVSTREAM_OK != xSrc->GetError())) + return NULL; + + pS = &xSrc; + pS->SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN ); + + pS->SeekRel(EQNOLEFILEHDR_SIZE); //Skip 28byte Header and fill it in later + *pS << BYTE(0x03); + *pS << BYTE(0x01); + *pS << BYTE(0x01); + *pS << BYTE(0x03); + *pS << BYTE(0x00); + UINT32 nSize = pS->Tell(); + nPendingAttributes=0; + + HandleNodes(pTree); + *pS << BYTE(END); + + nSize = pS->Tell()-nSize; + pS->Seek(0); + EQNOLEFILEHDR aHdr(nSize+4+1); + aHdr.Write(pS); + return 1; +} + + +BYTE MathType::HandleNodes(SmNode *pNode,int nLevel) +{ + BOOL bRet=FALSE; + switch(pNode->GetType()) + { + case NATTRIBUT: + HandleAttributes(pNode,nLevel); + break; + case NTEXT: + HandleText(pNode,nLevel); + break; + case NVERTICAL_BRACE: + HandleVerticalBrace(pNode,nLevel); + break; + case NBRACE: + HandleBrace(pNode,nLevel); + break; + case NOPER: + HandleOperator(pNode,nLevel); + break; + case NBINVER: + HandleFractions(pNode,nLevel); + break; + case NROOT: + HandleRoot(pNode,nLevel); + break; + case NSPECIAL: + { + SmTextNode *pText=(SmTextNode *)pNode; + //if the token str and the result text are the same then this + //is to be seen as text, else assume its a mathchar + if (pText->GetText() == pText->GetToken().aText) + HandleText(pText,nLevel); + else + HandleMath(pText,nLevel); + } + break; + case NMATH: + HandleMath(pNode,nLevel); + break; + case NSUBSUP: + HandleSubSupScript(pNode,nLevel); + break; + case NEXPRESSION: + { + USHORT nSize = pNode->GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (SmNode *pTemp = pNode->GetSubNode(i)) + HandleNodes(pTemp,nLevel+1); + } + break; + case NTABLE: + //Root Node, PILE equivalent, i.e. vertical stack + HandleTable(pNode,nLevel); + break; + case NMATRIX: + HandleSmMatrix((SmMatrixNode *)pNode,nLevel); + break; + case NLINE: + { + *pS << BYTE(0x0a); + *pS << BYTE(LINE); + USHORT nSize = pNode->GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (SmNode *pTemp = pNode->GetSubNode(i)) + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); + } + break; + case NALIGN: + HandleMAlign(pNode,nLevel); + break; + case NBLANK: + *pS << BYTE(CHAR); + *pS << BYTE(0x98); + if (pNode->GetToken().eType == TSBLANK) + *pS << USHORT(0xEB04); + else + *pS << USHORT(0xEB05); + break; + + break; + default: + { + USHORT nSize = pNode->GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (SmNode *pTemp = pNode->GetSubNode(i)) + HandleNodes(pTemp,nLevel+1); + } + break; + } + return bRet; +} + + +int MathType::StartTemplate(UINT16 nSelector,UINT16 nVariation) +{ + int nOldPending=nPendingAttributes; + *pS << BYTE(TMPL); //Template + *pS << BYTE(nSelector); //selector + *pS << BYTE(nVariation); //variation + *pS << BYTE(0x00); //options + *pS << BYTE(LINE); + //theres just no way we can now handle any character + //attributes (from mathtypes perspective) centered + //over an expression but above template attribute + //such as widevec and similiar constructs + //we have to drop them + nPendingAttributes=0; + return nOldPending; +} + +void MathType::EndTemplate(int nOldPendingAttributes) +{ + *pS << BYTE(END); //end line + *pS << BYTE(END); //end template + nPendingAttributes=nOldPendingAttributes; +} + + +void MathType::HandleSmMatrix(SmMatrixNode *pMatrix,int nLevel) +{ + *pS << BYTE(MATRIX); + *pS << BYTE(0x00); //vAlign ? + *pS << BYTE(0x00); //h_just + *pS << BYTE(0x00); //v_just + *pS << BYTE(pMatrix->GetNumRows()); //v_just + *pS << BYTE(pMatrix->GetNumCols()); //v_just + int nBytes=(pMatrix->GetNumRows()+1)*2/8; + if (((pMatrix->GetNumRows()+1)*2)%8) + nBytes++; + for (USHORT j = 0; j < nBytes; j++) + *pS << BYTE(0x00); //row_parts + nBytes=(pMatrix->GetNumCols()+1)*2/8; + if (((pMatrix->GetNumCols()+1)*2)%8) + nBytes++; + for (USHORT k = 0; k < nBytes; k++) + *pS << BYTE(0x00); //col_parts + USHORT nSize = pMatrix->GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (SmNode *pTemp = pMatrix->GetSubNode(i)) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); //end line + } + *pS << BYTE(END); +} + + +//Root Node, PILE equivalent, i.e. vertical stack +void MathType::HandleTable(SmNode *pNode,int nLevel) +{ + USHORT nSize = pNode->GetNumSubNodes(); + //The root of the starmath is a table, if + //we convert this them each iteration of + //conversion from starmath to mathtype will + //add an extra unnecessary level to the + //mathtype output stack which would grow + //without bound in a multi step conversion + + if (nLevel == 0) + *pS << BYTE(0x0A); //initial size + + if ( nLevel || (nSize >1)) + { + *pS << BYTE(PILE); + *pS << BYTE(nHAlign); //vAlign ? + *pS << BYTE(0x01); //hAlign + } + + for (USHORT i = 0; i < nSize; i++) + if (SmNode *pTemp = pNode->GetSubNode(i)) + { + *pS << BYTE(LINE); + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); + } + if (nLevel || (nSize>1)) + *pS << BYTE(END); +} + + +void MathType::HandleRoot(SmNode *pNode,int nLevel) +{ + USHORT nSize = pNode->GetNumSubNodes(); + SmNode *pTemp; + *pS << BYTE(TMPL); //Template + *pS << BYTE(0x0D); //selector + if (pNode->GetSubNode(0)) + *pS << BYTE(0x01); //variation + else + *pS << BYTE(0x00); //variation + *pS << BYTE(0x00); //options + + /* + if (pTemp = pNode->GetSubNode(1)) + HandleNodes(pTemp,nLevel+1); + */ + if (pTemp = pNode->GetSubNode(2)) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); + } + + if (pTemp = pNode->GetSubNode(0)) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); + } + else + *pS << BYTE(LINE|0x10); //dummy line + + + + *pS << BYTE(END); +} + +BYTE MathType::HandleCScript(SmNode *pNode,SmNode *pContent,int nLevel,ULONG *pPos,BOOL bTest) +{ + BYTE nVariation2=0xff; + + if (bTest && pNode->GetSubNode(CSUP+1)) + { + nVariation2=0; + if (pNode->GetSubNode(CSUB+1)) + nVariation2=2; + } + else if (pNode->GetSubNode(CSUB+1)) + nVariation2=1; + + if (nVariation2!=0xff) + { + if (pPos) + *pPos = pS->Tell(); + *pS << BYTE(TMPL); //Template + *pS << BYTE(0x2B); //selector + *pS << nVariation2; + *pS << BYTE(0x00); //options + + if (pContent) + { + *pS << BYTE(LINE); //line + HandleNodes(pContent,nLevel+1); + *pS << BYTE(END); //line + } + else + *pS << BYTE(LINE|0x10); + + *pS << BYTE(0x0B); + + SmNode *pTemp; + if (pTemp = pNode->GetSubNode(CSUB+1)) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); //line + } + else + *pS << BYTE(LINE|0x10); + if (bTest && (pTemp = pNode->GetSubNode(CSUP+1))) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); //line + } + else + *pS << BYTE(LINE|0x10); + } + return nVariation2; +} + + + +/* + Sub and Sup scripts and another problem area, StarMath + can have all possible options used at the same time, whereas + Mathtype cannot. The ordering of the nodes for each system + is quite different as well leading to some complexity + */ +void MathType::HandleSubSupScript(SmNode *pNode,int nLevel) +{ + USHORT nSize = pNode->GetNumSubNodes(); + ULONG nRSUpos=0,nCSUpos=0; + SmNode *pTemp; + + + BYTE nVariation=0xff; + if (pNode->GetSubNode(LSUP+1)) + { + nVariation=0; + if (pNode->GetSubNode(LSUB+1)) + nVariation=2; + } + else if (pTemp = pNode->GetSubNode(LSUB+1)) + nVariation=1; + + if (nVariation!=0xff) + { + *pS << BYTE(TMPL); //Template + *pS << BYTE(0x2c); //selector + *pS << nVariation; + *pS << BYTE(0x00); //options + *pS << BYTE(0x0B); + + if (pTemp = pNode->GetSubNode(LSUB+1)) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); //line + } + else + *pS << BYTE(LINE|0x10); + if (pTemp = pNode->GetSubNode(LSUP+1)) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); //line + } + else + *pS << BYTE(LINE|0x10); + *pS << BYTE(END); + nVariation=0xff; + } + + + BYTE nVariation2=HandleCScript(pNode,NULL,nLevel); + + if (pTemp = pNode->GetSubNode(0)) + { + *pS << BYTE(0x0A); + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); + } + + if (nVariation2 != 0xff) + *pS << BYTE(END); + + if (pNode->GetSubNode(RSUP+1)) + { + nVariation=0; + if (pNode->GetSubNode(RSUB+1)) + nVariation=2; + } + else if (pTemp = pNode->GetSubNode(RSUB+1)) + nVariation=1; + + if (nVariation!=0xff) + { + *pS << BYTE(TMPL); //Template + *pS << BYTE(0x0F); //selector + *pS << nVariation; + *pS << BYTE(0x00); //options + *pS << BYTE(0x0B); + + if (pTemp = pNode->GetSubNode(RSUB+1)) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); //line + } + else + *pS << BYTE(LINE|0x10); + if (pTemp = pNode->GetSubNode(RSUP+1)) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); //line + } + else + *pS << BYTE(LINE|0x10); + *pS << BYTE(END); //line + } + + //After subscript mathtype will keep the size of + //normal text at the subscript size, sigh. + *pS << BYTE(0x0A); +} + + +void MathType::HandleFractions(SmNode *pNode,int nLevel) +{ + USHORT nSize = pNode->GetNumSubNodes(); + SmNode *pTemp; + *pS << BYTE(TMPL); //Template + *pS << BYTE(0x0E); //selector + *pS << BYTE(0x00); //variation + *pS << BYTE(0x00); //options + + *pS << BYTE(0x0A); + *pS << BYTE(LINE); //line + if (pTemp = pNode->GetSubNode(0)) + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); + + *pS << BYTE(0x0A); + *pS << BYTE(LINE); //line + if (pTemp = pNode->GetSubNode(2)) + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); + + *pS << BYTE(END); +} + + +void MathType::HandleBrace(SmNode *pNode,int nLevel) +{ + USHORT nSize = pNode->GetNumSubNodes(); + SmNode *pTemp; + SmNode *pLeft=pNode->GetSubNode(0); + SmNode *pRight=pNode->GetSubNode(2); + + *pS << BYTE(TMPL); //Template + bReInterpBrace=0; + BYTE nBSpec=0x10; + ULONG nLoc = pS->Tell(); + if (pLeft) + { + switch (pLeft->GetToken().eType) + { + case TLANGLE: + *pS << BYTE(tmANGLE); //selector + *pS << BYTE(0x00); //variation + *pS << BYTE(0x00); //options + break; + case TLBRACE: + *pS << BYTE(tmBRACE); //selector + *pS << BYTE(0x00); //variation + *pS << BYTE(0x00); //options + nBSpec+=3; + break; + case TLBRACKET: + *pS << BYTE(tmBRACK); //selector + *pS << BYTE(0x00); //variation + *pS << BYTE(0x00); //options + nBSpec+=3; + break; + case TLLINE: + *pS << BYTE(tmBAR); //selector + *pS << BYTE(0x00); //variation + *pS << BYTE(0x00); //options + nBSpec+=3; + break; + case TLDLINE: + *pS << BYTE(tmDBAR); //selector + *pS << BYTE(0x00); //variation + *pS << BYTE(0x00); //options + break; + default: + *pS << BYTE(tmPAREN); //selector + *pS << BYTE(0x00); //variation + *pS << BYTE(0x00); //options + nBSpec+=3; + break; + } + } + + if (pTemp = pNode->GetSubNode(1)) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); //options + } + nSpec=nBSpec; + if (pLeft) + HandleNodes(pLeft,nLevel+1); + if (bReInterpBrace) + { + ULONG nLoc2 = pS->Tell(); + pS->Seek(nLoc); + *pS << BYTE(0x2D); + pS->Seek(nLoc2); + *pS << BYTE(CHAR); + *pS << BYTE(0x96); + *pS << USHORT(0xEC07); + bReInterpBrace=0; + } + if (pRight) + HandleNodes(pRight,nLevel+1); + nSpec=0x0; + *pS << BYTE(END); +} + + +void MathType::HandleVerticalBrace(SmNode *pNode,int nLevel) +{ + SmNode *pTemp; + *pS << BYTE(TMPL); //Template + if (pNode->GetToken().eType == TUNDERBRACE) + *pS << BYTE(tmLHBRACE); //selector + else + *pS << BYTE(tmUHBRACE); //selector + *pS << BYTE(0x01); //variation + *pS << BYTE(0x00); //options + + if (pTemp = pNode->GetSubNode(0)) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); //options + } + + if (pTemp = pNode->GetSubNode(2)) + { + *pS << BYTE(LINE); //line + HandleNodes(pTemp,nLevel+1); + *pS << BYTE(END); //options + } + *pS << BYTE(END); +} + +void MathType::HandleOperator(SmNode *pNode,int nLevel) +{ + USHORT nSize = pNode->GetNumSubNodes(); + + if (HandleLim(pNode,nLevel)) + return; + + ULONG nPos; + BYTE nVariation; + + switch (pNode->GetToken().eType) + { + case TIINT: + case TIIINT: + case TLINT: + case TLLINT: + case TLLLINT: + nVariation=HandleCScript(pNode->GetSubNode(0), + pNode->GetSubNode(1),nLevel,&nPos,0); + break; + default: + nVariation=HandleCScript(pNode->GetSubNode(0), + pNode->GetSubNode(1),nLevel,&nPos); + break; + } + + BYTE nOldVariation=nVariation; + BYTE nIntVariation=nVariation; + + ULONG nPos2=0; + if (nVariation != 0xff) + { + nPos2 = pS->Tell(); + pS->Seek(nPos); + if (nVariation == 2) + { + nIntVariation=0; + nVariation = 1; + } + else if (nVariation == 0) + nVariation = 1; + else if (nVariation == 1) + nVariation = 0; + } + else + { + nVariation = 2; + nIntVariation=0; + } + *pS << BYTE(TMPL); + switch(pNode->GetToken().eType) + { + case TINT: + if (nOldVariation != 0xff) + *pS << BYTE(0x18); //selector + else + *pS << BYTE(0x15); //selector + *pS << nIntVariation; //variation + break; + case TIINT: + if (nOldVariation != 0xff) + { + *pS << BYTE(0x19); + *pS << BYTE(0x01); + } + else + { + *pS << BYTE(0x16); + *pS << BYTE(0x00); + } + break; + case TIIINT: + if (nOldVariation != 0xff) + { + *pS << BYTE(0x1a); + *pS << BYTE(0x01); + } + else + { + *pS << BYTE(0x17); + *pS << BYTE(0x00); + } + break; + case TLINT: + if (nOldVariation != 0xff) + { + *pS << BYTE(0x18); + *pS << BYTE(0x02); + } + else + { + *pS << BYTE(0x15); + *pS << BYTE(0x03); + } + break; + case TLLINT: + if (nOldVariation != 0xff) + { + *pS << BYTE(0x19); + *pS << BYTE(0x00); + } + else + { + *pS << BYTE(0x16); + *pS << BYTE(0x02); + } + break; + case TLLLINT: + if (nOldVariation != 0xff) + { + *pS << BYTE(0x1a); + *pS << BYTE(0x00); + } + else + { + *pS << BYTE(0x17); + *pS << BYTE(0x02); + } + break; + case TSUM: + default: + *pS << BYTE(0x1d); + *pS << nVariation; + break; + case TPROD: + *pS << BYTE(0x1f); + *pS << nVariation; + break; + case TCOPROD: + *pS << BYTE(0x21); + *pS << nVariation; + break; + } + *pS << BYTE(0x00); //options + + if (nPos2) + pS->Seek(nPos2); + else + { + *pS << BYTE(LINE); //line + HandleNodes(pNode->GetSubNode(1),nLevel+1); + *pS << BYTE(END); //line + *pS << BYTE(LINE|0x10); + *pS << BYTE(LINE|0x10); + } + + + *pS << BYTE(0x0D); + switch(pNode->GetToken().eType) + { + case TSUM: + default: + *pS << BYTE(CHAR); + *pS << BYTE(0x86); + *pS << USHORT(0x2211); + break; + case TPROD: + *pS << BYTE(CHAR); + *pS << BYTE(0x86); + *pS << USHORT(0x220F); + break; + case TCOPROD: + *pS << BYTE(CHAR); + *pS << BYTE(0x8B); + *pS << USHORT(0x2210); + break; + case TIIINT: + case TLLLINT: + *pS << BYTE(CHAR); + *pS << BYTE(0x86); + *pS << USHORT(0x222B); + case TIINT: + case TLLINT: + *pS << BYTE(CHAR); + *pS << BYTE(0x86); + *pS << USHORT(0x222B); + case TINT: + case TLINT: + *pS << BYTE(CHAR); + *pS << BYTE(0x86); + *pS << USHORT(0x222B); + break; + } + *pS << BYTE(END); + *pS << BYTE(0x0A); +} + + +int MathType::HandlePile(int &rSetAlign,int nLevel,BYTE nSelector, + BYTE nVariation) +{ + //if (xfLMOVE(nTag)) + *pS >> nHAlign; + *pS >> nVAlign; + + HandleAlign(nHAlign,nVAlign,rSetAlign); + + APPEND(rRet," stack {\n"); + int nRet = HandleRecords(nLevel+1,nSelector,nVariation,-1,-1); + rRet.Erase(rRet.Len()-3,2); + APPEND(rRet,"} "); + + while (rSetAlign) + { + APPEND(rRet,"} "); + rSetAlign--; + } + return nRet; +} + +int MathType::HandleMatrix(int nLevel,BYTE nSelector, + BYTE nVariation) +{ + BYTE nH_just,nV_just; + int nRows,nCols; + //if (xfLMOVE(nTag)) + *pS >> nVAlign; + *pS >> nH_just; + *pS >> nV_just; + *pS >> nRows; + *pS >> nCols; + int nBytes = ((nRows+1)*2)/8; + if (((nRows+1)*2)%8) + nBytes++; + pS->SeekRel(nBytes); + nBytes = ((nCols+1)*2)/8; + if (((nCols+1)*2)%8) + nBytes++; + pS->SeekRel(nBytes); + APPEND(rRet," matrix {\n"); + int nRet = HandleRecords(nLevel+1,nSelector,nVariation,nRows,nCols); + APPEND(rRet,"\n} "); + return nRet; +} + +int MathType::HandleTemplate(int nLevel,BYTE &rSelector,BYTE &rVariation) +{ + BYTE nOption; //This appears utterly unused + //if (xfLMOVE(nTag)) + *pS >> rSelector; + *pS >> rVariation; + *pS >> nOption; + DBG_ASSERT(rSelector < 48,"Selector out of range") + if ((rSelector >= 21) && (rSelector <=26)) + { + DBG_ASSERT(nOption < 2,"Option out of range"); + } + else if ((rSelector >= 0) && (rSelector <=12)) + { + DBG_ASSERT(nOption < 3,"Option out of range"); + } + //suborderlist + int nRet = HandleRecords(nLevel+1,rSelector,rVariation); + rSelector = -1; + return nRet; +} + +void MathType::HandleEmblishments() +{ + BYTE nEmbel; + //if (xfLMOVE(nTag)) + do + { + *pS >> nEmbel; + switch (nEmbel) + { + case 0x02: + APPEND(rRet," dot "); + break; + case 0x03: + APPEND(rRet," ddot "); + break; + case 0x04: + APPEND(rRet," dddot "); + break; + case 0x05: + if (nPostSup == 0) + { + APPEND(sPost," sup {}"); + nPostSup = sPost.Len(); + } + sPost.InsertAscii(" ' ",nPostSup-1); + nPostSup += 3; + break; + case 0x06: + if (nPostSup == 0) + { + APPEND(sPost," sup {}"); + nPostSup = sPost.Len(); + } + sPost.InsertAscii(" '' ",nPostSup-1); + nPostSup += 4; + break; + case 0x07: + if (nPostlSup == 0) + { + APPEND(sPost," lsup {}"); + nPostlSup = sPost.Len(); + } + sPost.InsertAscii(" ' ",nPostlSup-1); + nPostlSup += 3; + break; + case 0x08: + APPEND(rRet," tilde "); + break; + case 0x09: + APPEND(rRet," hat "); + break; + case 0x0b: + APPEND(rRet," vec "); + break; + case 0x10: + APPEND(rRet," overstrike "); + break; + case 0x11: + APPEND(rRet," bar "); + break; + case 0x12: + if (nPostSup == 0) + { + APPEND(sPost," sup {}"); + nPostSup = sPost.Len(); + } + sPost.InsertAscii(" ''' ",nPostSup-1); + nPostSup += 5; + break; + case 0x14: + APPEND(rRet," breve "); + break; + default: + DBG_ASSERT(nEmbel < 21,"Embel out of range") + break; + } + }while (nEmbel); +} + +void MathType::HandleSetSize() +{ + BYTE nTemp; + *pS >> nTemp; + switch (nTemp) + { + case 101: + *pS >> nLSize; + nLSize = -nLSize; + break; + case 100: + *pS >> nTemp; + nLSize = nTemp; + *pS >> nDSize; + break; + default: + nLSize = nTemp; + *pS >> nTemp; + nDSize = nTemp-128; + break; + } +} + +int MathType::HandleChar(xub_StrLen &rTextStart,int &rSetSize,int nLevel, + BYTE nTag,BYTE nSelector,BYTE nVariation, BOOL bSilent) +{ + sal_Unicode nChar; + int nRet=1; + + if (xfAUTO(nTag)) + { + //This is a candidate for function recognition, whatever + //that is! + } + //if (xfLMODE(nTag)) + + *pS >> nTypeFace; + if (nVersion < 3) + { + BYTE nChar8; + *pS >> nChar8; + nChar = nChar8; + } + else + *pS >> nChar; + + if (xfEMBELL(nTag)) + { + //A bit tricky, the character emblishments for + //mathtype can all be listed after eachother, in + //starmath some must go before the character and some + //must go after. In addition some of the emblishments + //may repeated and in starmath some of these groups + //must be gathered together. sPost is the portion that + //follows the char and nPostSup and nPostlSup are the + //indexes at which this class of emblishment is + //collated together + sPost.Erase(); + nPostSup = nPostlSup = 0; + int nOriglen=rRet.Len()-rTextStart; + if ((!bSilent) && ((nOriglen) > 1)) + rRet += '\"'; + nRet = HandleRecords(nLevel+1,nSelector,nVariation); + if (!bSilent) + { + if (nOriglen > 1) + { + rRet.InsertAscii(" ital \"",rTextStart); + APPEND(rRet," ital {"); + } + else + APPEND(rRet," {"); + } + } + + if (!bSilent) + { + int nOldLen = rRet.Len(); + //nLastSize = nCurSize; + if (HandleSize(nLSize,nDSize,rSetSize)) + { + if ((nOldLen - rTextStart) > 1) + { + rRet.InsertAscii("\"",nOldLen); + rRet.InsertAscii(" ital \"",rTextStart); + } + rTextStart = rRet.Len(); + } + nOldLen = rRet.Len(); + if (!LookupChar(nChar)) + { + if (nOldLen - rTextStart > 1) + { + rRet.InsertAscii("\"",nOldLen); + rRet.InsertAscii(" ital \"",rTextStart); + } + rTextStart = rRet.Len(); + } + } + + if ((xfEMBELL(nTag)) && (!bSilent)) + { + rRet += '}'; + rRet += sPost; + rTextStart = rRet.Len(); + } + return nRet; +} + +BOOL MathType::HandleLim(SmNode *pNode,int nLevel) +{ + BOOL bRet=0; + //Special case for the "lim" option in StarMath + if ((pNode->GetToken().eType == TLIM) + || (pNode->GetToken().eType == TLIMSUP) + || (pNode->GetToken().eType == TLIMINF) + ) + { + if (pNode->GetSubNode(1)) + { + BYTE nVariation2=HandleCScript(pNode->GetSubNode(0),NULL,nLevel); + + *pS << BYTE(0x0A); + *pS << BYTE(LINE); //line + *pS << BYTE(CHAR|0x10); + *pS << BYTE(0x82); + *pS << USHORT('l'); + *pS << BYTE(CHAR|0x10); + *pS << BYTE(0x82); + *pS << USHORT('i'); + *pS << BYTE(CHAR|0x10); + *pS << BYTE(0x82); + *pS << USHORT('m'); + + if (pNode->GetToken().eType == TLIMSUP) + { + *pS << BYTE(CHAR); //some space + *pS << BYTE(0x98); + *pS << USHORT(0xEB04); + + *pS << BYTE(CHAR|0x10); + *pS << BYTE(0x82); + *pS << USHORT('s'); + *pS << BYTE(CHAR|0x10); + *pS << BYTE(0x82); + *pS << USHORT('u'); + *pS << BYTE(CHAR|0x10); + *pS << BYTE(0x82); + *pS << USHORT('p'); + } + else if (pNode->GetToken().eType == TLIMINF) + { + *pS << BYTE(CHAR); //some space + *pS << BYTE(0x98); + *pS << USHORT(0xEB04); + + *pS << BYTE(CHAR|0x10); + *pS << BYTE(0x82); + *pS << USHORT('i'); + *pS << BYTE(CHAR|0x10); + *pS << BYTE(0x82); + *pS << USHORT('n'); + *pS << BYTE(CHAR|0x10); + *pS << BYTE(0x82); + *pS << USHORT('f'); + } + + + *pS << BYTE(CHAR); //some space + *pS << BYTE(0x98); + *pS << USHORT(0xEB04); + + if (nVariation2 != 0xff) + { + *pS << BYTE(END); + *pS << BYTE(END); + } + HandleNodes(pNode->GetSubNode(1),nLevel+1); + //*pS << BYTE(END); //options + bRet = 1; + } + } + return bRet; +} + +void MathType::HandleMAlign(SmNode *pNode,int nLevel) +{ + BYTE nPushedHAlign=nHAlign; + switch(pNode->GetToken().eType) + { + case TALIGNC: + nHAlign=2; + break; + case TALIGNR: + nHAlign=3; + break; + default: + nHAlign=1; + break; + } + USHORT nSize = pNode->GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (SmNode *pTemp = pNode->GetSubNode(i)) + HandleNodes(pTemp,nLevel+1); + nHAlign=nPushedHAlign; +} + +void MathType::HandleMath(SmNode *pNode,int nLevel) +{ + if (pNode->GetToken().eType == TMLINE) + { + *pS << BYTE(END); + *pS << BYTE(LINE); + bReInterpBrace=1; + return; + } + SmMathSymbolNode *pTemp=(SmMathSymbolNode *)pNode; + for(int i=0;iGetText().Len();i++) + { + //Convert StarMath to Unicode. Provisional Table + //until unicode font designers come back with + //something complete + + USHORT nArse = aMathTypeTable[pTemp->GetText().GetChar(i)&0x00FF]; + if ((nArse == 0x2224) || (nArse == 0x2288) || (nArse == 0x2285) || (nArse == 0x2289)) + *pS << BYTE(CHAR|0x20); + else + *pS << BYTE(CHAR); //char without formula recognition + //The typeface seems to be MTEXTRA for unicode characters, + //though how to determine when mathtype chooses one over + //the other is unknown. This should do the trick + //nevertheless. + BYTE nBias; + if ( (nArse == 0x2213) || (nArse == 0x2218) || + (nArse == 0x210F) || ( + (nArse >= 0x22EE) && (nArse <= 0x22FF) + )) + { + nBias = 0xB; //typeface + } + else if ((nArse > 0x2000) || (nArse == 0x00D7)) + nBias = 0x6; //typeface + else if (nArse == 0x3d1) + nBias = 0x4; + else if ((nArse > 0xFF) && ((nArse < 0x393) || (nArse > 0x3c9))) + nBias = 0xB; //typeface + else if ((nArse == 0x2F) || (nArse == 0x2225)) + nBias = 0x2; //typeface + else + nBias = 0x3; //typeface + + *pS << BYTE(nSpec+nBias+128); //typeface + + if (nArse == 0x2224) + { + *pS << USHORT(0x7C); + *pS << BYTE(EMBEL); + *pS << BYTE(0x0A); + *pS << BYTE(END); //end embel + *pS << BYTE(END); //end embel + } + else if (nArse == 0x2225) + *pS << USHORT(0xEC09); + else if (nArse == 0x226A) + { + *pS << USHORT(0x3C); + *pS << BYTE(CHAR); + *pS << BYTE(0x98); + *pS << USHORT(0xEB01); + *pS << BYTE(CHAR); + *pS << BYTE(0x86); + *pS << USHORT(0x3c); + } + else if (nArse == 0x2288) + { + *pS << USHORT(0x2286); + *pS << BYTE(EMBEL); + *pS << BYTE(0x0A); + *pS << BYTE(END); //end embel + *pS << BYTE(END); //end embel + } + else if (nArse == 0x2289) + { + *pS << USHORT(0x2287); + *pS << BYTE(EMBEL); + *pS << BYTE(0x0A); + *pS << BYTE(END); //end embel + *pS << BYTE(END); //end embel + } + else if (nArse == 0x2285) + { + *pS << USHORT(0x2283); + *pS << BYTE(EMBEL); + *pS << BYTE(0x0A); + *pS << BYTE(END); //end embel + *pS << BYTE(END); //end embel + } + else + { + //Convert StarMath to Unicode. Provisional Table + //until unicode font designers come back with + //something complete + *pS << nArse; + } + + } +} + +void MathType::HandleAttributes(SmNode *pNode,int nLevel) +{ + int nOldPending; + USHORT nSize = pNode->GetNumSubNodes(); + SmNode *pTemp; + SmTextNode *pIsText; + + //SmTextNode *pTemp=(SmTextNode *)pNode; + //for(int i=0;iGetText().Len();i++) + + if (pTemp = pNode->GetSubNode(0)) + { + pIsText = (SmTextNode *)pNode->GetSubNode(1); + + switch (pTemp->GetToken().eType) + { + case TWIDEVEC: + //theres just no way we can now handle any character + //attributes (from mathtypes perspective) centered + //over an expression but above template attributes + //such as widevec and similiar constructs + //we have to drop them + nOldPending = StartTemplate(0x2f,0x01); + break; + case TCHECK: //Not Exportable + case TACUTE: //Not Exportable + case TGRAVE: //Not Exportable + case TCIRCLE: //Not Exportable + case TWIDETILDE: //Not Exportable + case TWIDEHAT: //Not Exportable + break; + case TUNDERLINE: + nOldPending = StartTemplate(0x10); + break; + case TOVERLINE: //If the next node is not text + //or text with more than one char + if ((pIsText->GetToken().eType != NTEXT) || + (pIsText->GetText().Len() > 1)) + nOldPending = StartTemplate(0x11); + break; + default: + nPendingAttributes++; + break; + } + } + + if (pIsText) + HandleNodes(pIsText,nLevel+1); + + switch (pTemp->GetToken().eType) + { + case TWIDEVEC: + case TUNDERLINE: + EndTemplate(nOldPending); + break; + case TOVERLINE: + if ((pIsText->GetToken().eType != NTEXT) || + (pIsText->GetText().Len() > 1)) + EndTemplate(nOldPending); + break; + default: + break; + } + + //if there was no suitable place to put the attribute, + //then we have to just give up on it + if (nPendingAttributes) + nPendingAttributes--; + else + { + if ((nInsertion != 0) && (pTemp = pNode->GetSubNode(0))) + { + ULONG nPos = pS->Tell(); + nInsertion--; + pS->Seek(nInsertion); + switch(pTemp->GetToken().eType) + { + case TACUTE: //Not Exportable + case TGRAVE: //Not Exportable + case TCIRCLE: //Not Exportable + break; + case TCDOT: + *pS << BYTE(2); + break; + case TDDOT: + *pS << BYTE(3); + break; + case TDDDOT: + *pS << BYTE(4); + break; + case TTILDE: + *pS << BYTE(8); + break; + case THAT: + *pS << BYTE(9); + break; + case TVEC: + *pS << BYTE(11); + break; + case TOVERSTRIKE: + *pS << BYTE(16); + break; + case TOVERLINE: + if ((pIsText->GetToken().eType == NTEXT) && + (pIsText->GetText().Len() == 1)) + *pS << BYTE(17); + break; + case TBREVE: + *pS << BYTE(20); + break; + case TWIDEVEC: + case TUNDERLINE: + case TWIDETILDE: + case TWIDEHAT: + break; + case TBAR: + *pS << BYTE(17); + break; + default: + *pS << BYTE(0x2); + break; + } + pS->Seek(nPos); + } + } +} + +void MathType::HandleText(SmNode *pNode,int nLevel) +{ + SmTextNode *pTemp=(SmTextNode *)pNode; + for(int i=0;iGetText().Len();i++) + { + if ((nPendingAttributes) && + (i == ((pTemp->GetText().Len()+1)/2)-1)) + { + *pS << BYTE(0x22); //char, with attributes right + //after the character + } + else + *pS << BYTE(CHAR); + //*pS << BYTE(CHAR|0x10); //char with formula recognition + + if ((pTemp->GetText().GetChar(i) >= '0') && + (pTemp->GetText().GetChar(i) <= '9')) + *pS << BYTE(0x8+128); //typeface + else + *pS << BYTE(0x3+128); //typeface + *pS << USHORT(pTemp->GetText().GetChar(i)); + + //Mathtype can only have these sort of character + //attributes on a single character, starmath can put them + //anywhere, when the entity involved is a text run this is + //a large effort to place the character attribute on the + //central mathtype character so that it does pretty much + //what the user probably has in mind. The attributes + //filled in here are dummy ones which are replaced in the + //ATTRIBUT handler if a suitable location for the + //attributes was found here. Unfortunately it is + //possible for starmath to place character attributes on + //entities which cannot occur in mathtype e.g. a Summation + //symbol so these attributes may be lost + if ((nPendingAttributes) && + (i == ((pTemp->GetText().Len()+1)/2)-1)) + { + *pS << BYTE(EMBEL); + while (nPendingAttributes) + { + *pS << BYTE(2); + //wedge the attributes in here and clear + //the pending stack + nPendingAttributes--; + } + nInsertion=pS->Tell(); + *pS << BYTE(END); //end embel + *pS << BYTE(END); //end embel + } + } +} + diff --git a/starmath/source/mathtype.hxx b/starmath/source/mathtype.hxx new file mode 100644 index 000000000000..a7cf86b1fdb2 --- /dev/null +++ b/starmath/source/mathtype.hxx @@ -0,0 +1,203 @@ +/************************************************************************* + * + * $RCSfile: mathtype.hxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#ifndef MATHTYPE_HXX +#define MATHTYPE_HXX + +#ifndef NODE_HXX +#include "node.hxx" +#endif + +#ifndef _SVSTOR_HXX +#include +#endif + +#define EQNOLEFILEHDR_SIZE 28 +class EQNOLEFILEHDR +{ +public: + EQNOLEFILEHDR() {} + EQNOLEFILEHDR(UINT32 nLenMTEF): nCBHdr(0x1c), nVersion(0x20000), + nCf(0xc1c6), nCBObject(nLenMTEF), nReserved1(0), nReserved2(0x0014F690), + nReserved3(0x0014EBB4), nReserved4(0) {} + UINT16 nCBHdr; // length of header, sizeof(EQNOLEFILEHDR) = 28 bytes + UINT32 nVersion; // hiword = 2, loword = 0 + UINT16 nCf; // clipboard format ("MathType EF") + UINT32 nCBObject; // length of MTEF data following this header in bytes + UINT32 nReserved1; // not used + UINT32 nReserved2; // not used + UINT32 nReserved3; // not used + UINT32 nReserved4; // not used + + void Read(SvStorageStream *pS); + void Write(SvStorageStream *pS); +}; + +class MathType +{ +public: + MathType(String &rIn) : bSilent(FALSE),nDefaultSize(12), + nLSize(0),nDSize(0),nCurSize(0),nLastSize(0),nVAlign(0),nHAlign(0),rRet(rIn) + { + aSizeTable[0]=12; + aSizeTable[1]=8; + aSizeTable[2]=6; + aSizeTable[3]=24; + aSizeTable[4]=10; + aSizeTable[5]=12; + aSizeTable[6]=12; + } + MathType(String &rIn,SmNode *pIn) : bSilent(FALSE),nDefaultSize(12), + nLSize(0),nDSize(0),nCurSize(0),nLastSize(0),nVAlign(0),nHAlign(2),pTree(pIn), + rRet(rIn),nInsertion(0),nSpec(0) + { + aSizeTable[0]=12; + aSizeTable[1]=8; + aSizeTable[2]=6; + aSizeTable[3]=24; + aSizeTable[4]=10; + aSizeTable[5]=12; + aSizeTable[6]=12; + } + int Parse(SvStorage *pS); + int ConvertFromStarMath(SvStorage *pStor); +private: +/*Ver 2 Header*/ + BYTE nVersion; + BYTE nPlatform; + BYTE nProduct; + BYTE nProdVersion; + BYTE nProdSubVersion; + + SvStorageStream *pS; + + int HandleRecords(int nLevel=0,BYTE nSelector=-1, + BYTE nVariation=-1,int nRows=0,int nCols=0); + BOOL LookupChar(sal_Unicode nChar); + BOOL HandleSize(INT16 nLSize,INT16 nDSize, int &rSetSize); + void HandleAlign(BYTE nHAlign,BYTE nVAlign, int &rSetAlign); + int HandlePile(int &rSetAlign,int nLevel,BYTE nSelector,BYTE nVariation); + int HandleMatrix(int nLevel,BYTE nSelector,BYTE nVariarion); + void HandleMatrixSeperator(int nMatrixRows,int nMatrixCols, + int &rCurCol,int &rCurRow); + int HandleTemplate(int nLevel,BYTE &rSelector,BYTE &rVariation); + void HandleEmblishments(); + void HandleSetSize(); + int HandleChar(xub_StrLen &rTextStart,int &rSetSize,int nLevel,BYTE nTag, + BYTE nSelector,BYTE nVariation,BOOL bSilent); + int xfLMOVE(BYTE nTest) {return nTest&0x80;} + int xfAUTO(BYTE nTest) {return nTest&0x10;} + int xfEMBELL(BYTE nTest) {return nTest&0x20;} + int xfNULL(BYTE nTest) {return nTest&0x10;} + int xfLSPACE(BYTE nTest) {return nTest&0x40;} + int xfRULER(BYTE nTest) {return nTest&0x20;} + + BYTE HandleNodes(SmNode *pNode,int nLevel=0); + int StartTemplate(UINT16 nSelector,UINT16 nVariation=0); + void EndTemplate(int nOldPendingAttributes); + void HandleSmMatrix(SmMatrixNode *pMatrix,int nLevel); + void HandleTable(SmNode *pNode,int nLevel); + void HandleRoot(SmNode *pNode,int nLevel); + void HandleSubSupScript(SmNode *pNode,int nLevel); + BYTE HandleCScript(SmNode *pNode,SmNode *pContent,int nLevel,ULONG *pPos=NULL,BOOL bTest=TRUE); + void HandleFractions(SmNode *pNode,int nLevel); + void HandleBrace(SmNode *pNode,int nLevel); + void HandleVerticalBrace(SmNode *pNode,int nLevel); + void HandleOperator(SmNode *pNode,int nLevel); + BOOL HandleLim(SmNode *pNode,int nLevel); + void HandleMAlign(SmNode *pNode,int nLevel); + void HandleMath(SmNode *pNode,int nLevel); + void HandleText(SmNode *pNode,int nLevel); + void HandleAttributes(SmNode *pNode,int nLevel); + + String &rRet; + SmNode *pTree; + + BYTE nHAlign; + BYTE nVAlign; + + int nPendingAttributes; + ULONG nInsertion; + + INT16 aSizeTable[7]; + INT16 nDefaultSize; + INT16 nLSize; + INT16 nDSize; + INT16 nCurSize; + INT16 nLastSize; + BYTE nSpec; + BOOL bSilent,bReInterpBrace; + String sPost; + xub_StrLen nPostSup; + xub_StrLen nPostlSup; + BYTE nTypeFace; + + enum MTOKENS {END,LINE,CHAR,TMPL,PILE,MATRIX,EMBEL,RULER,FONT,SIZE}; + enum MTEMPLATES + { + tmANGLE,tmPAREN,tmBRACE,tmBRACK,tmBAR,tmDBAR,tmFLOOR,tmCEILING, + tmLBLB,tmRBRB,tmRBLB,tmLBRP,tmLPRB,tmROOT,tmFRACT,tmSCRIPT,tmUBAR, + tmOBAR,tmLARROW,tmRARROW,tmBARROW,tmSINT,tmDINT,tmTINT,tmSSINT, + tmDSINT,tmTSINT,tmUHBRACE,tmLHBRACE,tmSUM + }; +}; + + +#endif diff --git a/starmath/source/node.cxx b/starmath/source/node.cxx new file mode 100644 index 000000000000..3680c6883500 --- /dev/null +++ b/starmath/source/node.cxx @@ -0,0 +1,2490 @@ +/************************************************************************* + * + * $RCSfile: node.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef _SV_GEN_HXX //autogen +#include +#endif +#ifndef _FRACT_HXX //autogen +#include +#endif +#ifndef _SV_COLOR_HXX //autogen +#include +#endif +#ifndef _SV_METRIC_HXX //autogen +#include +#endif +#ifndef _SV_LINEINFO_HXX +#include +#endif +#ifndef _SV_OUTDEV_HXX //autogen +#include +#endif +#ifndef _SFXMODULE_HXX //autogen +#include +#endif + +#ifdef USE_POLYGON + +#ifndef _SV_POLY_HXX //autogen +#include +#endif +#ifndef _XPOLY_HXX //autogen +#include +#endif +#ifndef _XOUTX_HXX //autogen +#include +#endif + +#ifndef XCHAR_HXX +#include "xchar.hxx" +#endif + +#endif //USE_POLYGON + + +#ifndef NODE_HXX +#include "node.hxx" +#endif +#ifndef SYMBOL_HXX +#include "symbol.hxx" +#endif +#ifndef _SMMOD_HXX +#include "smmod.hxx" +#endif + +#include +#include + +// define this to draw rectangles for debugging +//#define SM_RECT_DEBUG + +//////////////////////////////////////// +// SmTmpDevice +// A little class that behaves like a "const OutputDevice &" object but +// allows for font changes. The original font will be restored in the +// destructor! (Thus logically it's "const".) +// It's main purpose is to allow for the "const" in the 'OutputDevice' +// argument in the 'Arrange' functions. +// In fact we need to change the font in the 'OutputDevice' to the one +// of the node to calculate sizes (rectangles) for text. +// + +class SmTmpDevice +{ + OutputDevice &rOutDev; + + // disallow use of copy-constructor and assignment-operator + SmTmpDevice(const SmTmpDevice &rTmpDev); + SmTmpDevice & operator = (const SmTmpDevice &rTmpDev); + +public: + SmTmpDevice(OutputDevice &rTheDev); + ~SmTmpDevice() { rOutDev.Pop(); } + + void SetFont(const Font &rNewFont) { rOutDev.SetFont(rNewFont); } + + // conversion operator that allows only const member-functions from + // 'OutputDevice' to be called. (Thus only the font can be changed + // via the above 'SetFont') + operator const OutputDevice & () const { return rOutDev; } +}; + + +SmTmpDevice::SmTmpDevice(OutputDevice &rTheDev) : + rOutDev(rTheDev) +{ + rOutDev.Push( PUSH_FONT | PUSH_MAPMODE ); + rOutDev.SetMapMode( MAP_100TH_MM ); //Immer fuer 100% fomatieren +} + + +/////////////////////////////////////////////////////////////////////////// + + +SmNode::SmNode(SmNodeType eNodeType, const SmToken &rNodeToken) +{ + eType = eNodeType; + eScaleMode = SCALE_NONE; + aNodeToken = rNodeToken; +} + + +SmNode::~SmNode() +{ +} + + +SmNode * SmNode::GetLeftMost() + // returns leftmost node of current subtree. + //! (this assumes the one with index 0 is always the leftmost subnode + //! for the current node). +{ + SmNode *pNode = GetNumSubNodes() > 0 ? + GetSubNode(0) : NULL; + + return pNode ? pNode->GetLeftMost() : this; +} + + +void SmNode::SetPhantom(BOOL bIsPhantomP) +{ + if (! (Flags() & FLG_VISIBLE)) + bIsPhantom = bIsPhantomP; + + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->SetPhantom(bIsPhantom); +} + + +void SmNode::SetColor(const Color& rColor) +{ + if (! (Flags() & FLG_COLOR)) + GetFont().SetColor(rColor); + + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->SetColor(rColor); +} + + +void SmNode::SetAttribut(USHORT nAttrib) +{ + if ( nAttrib == ATTR_BOLD && !(Flags() & FLG_BOLD) + || nAttrib == ATTR_ITALIC && !(Flags() & FLG_ITALIC)) + nAttributes |= nAttrib; + + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->SetAttribut(nAttrib); +} + + +void SmNode::ClearAttribut(USHORT nAttrib) +{ + if ( nAttrib == ATTR_BOLD && !(Flags() & FLG_BOLD) + || nAttrib == ATTR_ITALIC && !(Flags() & FLG_ITALIC)) + nAttributes &= ~nAttrib; + + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->ClearAttribut(nAttrib); +} + + +void SmNode::SetFont(const SmFace &rFace) +{ + if (!(Flags() & FLG_FONT)) + GetFont() = rFace; + + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->SetFont(rFace); +} + + +void SmNode::SetFontSize(const Fraction &rSize, USHORT nType) + //! 'rSize' is in units of pts +{ + Size aSize; + + if (!(Flags() & FLG_SIZE)) + { + Fraction aVal (SmPtsTo100th_mm(rSize.GetNumerator()), + rSize.GetDenominator()); + long nHeight = (long) aVal; + + aSize = GetFont().GetSize(); + aSize.Width() = 0; + switch(nType) + { + case FNTSIZ_ABSOLUT: + aSize.Height() = nHeight; + break; + + case FNTSIZ_PLUS: + aSize.Height() += nHeight; + break; + + case FNTSIZ_MINUS: + aSize.Height() -= nHeight; + break; + + case FNTSIZ_MULTIPLY: + aSize.Height() = (long) (Fraction(aSize.Height()) * rSize); + break; + + case FNTSIZ_DIVIDE: + if (rSize != Fraction(0L)) + aSize.Height() = (long) (Fraction(aSize.Height()) / rSize); + break; + } + + // check the requested size against maximum value + static int __READONLY_DATA nMaxVal = SmPtsTo100th_mm(128); + if (aSize.Height() > nMaxVal) + aSize.Height() = nMaxVal; + + GetFont().SetSize(aSize); + } + + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->SetFontSize(rSize, nType); +} + + +void SmNode::SetSize(const Fraction &rSize) +{ + GetFont() *= rSize; + + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->SetSize(rSize); +} + + +void SmNode::SetRectHorAlign(RectHorAlign eHorAlign) +{ + if (!(Flags() & FLG_HORALIGN)) + eRectHorAlign = eHorAlign; + + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->SetRectHorAlign(eHorAlign); +} + + +void SmNode::PrepareAttributes() +{ + GetFont().SetWeight((Attributes() & ATTR_BOLD) ? WEIGHT_BOLD : WEIGHT_NORMAL); + GetFont().SetItalic((Attributes() & ATTR_ITALIC) ? ITALIC_NORMAL : ITALIC_NONE); +} + + +void SmNode::Prepare(const SmFormat &rFormat) +{ +#ifdef DEBUG + bIsDebug = TRUE; +#else + bIsDebug = FALSE; +#endif + bIsPhantom = FALSE; + nFlags = 0; + nAttributes = 0; + + switch (rFormat.GetHorAlign()) + { case AlignLeft: eRectHorAlign = RHA_LEFT; break; + case AlignCenter: eRectHorAlign = RHA_CENTER; break; + case AlignRight: eRectHorAlign = RHA_RIGHT; break; + } + + GetFont() = rFormat.GetFont(FNT_MATH); + GetFont().SetCharSet(RTL_TEXTENCODING_SYMBOL); + GetFont().SetWeight(WEIGHT_NORMAL); + GetFont().SetItalic(ITALIC_NONE); + + SmNode *pNode; + int nSize = GetNumSubNodes(); + for (int i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->Prepare(rFormat); +} + + +void SmNode::ToggleDebug() const + // toggle 'bIsDebug' in current subtree +{ +#ifdef DEBUG + SmNode *pThis = (SmNode *) this; + + pThis->bIsDebug = bIsDebug ? FALSE : TRUE; + + SmNode *pNode; + int nSize = GetNumSubNodes(); + for (int i = 0; i < nSize; i++) + if (pNode = pThis->GetSubNode(i)) + pNode->ToggleDebug(); +#endif +} + + +#ifdef MAC +#pragma segment FrmNode_02 + +#else + +#endif + + +void SmNode::Move(const Point& rPosition) +{ + if (rPosition.X() == 0 && rPosition.Y() == 0) + return; + + SmRect::Move(rPosition); + + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->Move(rPosition); +} + + +void SmNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->Arrange(rDev, rFormat); +} + + +void SmNode::Draw(OutputDevice &rDev, const Point &rPosition) const +{ + if (IsPhantom()) + return; + + const SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + for (USHORT i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + { Point aOffset (pNode->GetTopLeft() - GetTopLeft()); + pNode->Draw(rDev, rPosition + aOffset); + } + +#ifdef SM_RECT_DEBUG + if (!IsDebug()) + return; + + int nRFlags = SM_RECT_CORE | SM_RECT_ITALIC | SM_RECT_LINES | SM_RECT_MID; + SmRect::Draw(rDev, rPosition, nRFlags); +#endif +} + +const SmNode * SmNode::FindTokenAt(USHORT nRow, USHORT nCol) const + // returns (first) ** visible ** (sub)node with the tokens text at + // position 'nRow', 'nCol'. + //! (there should be exactly one such node if any) +{ + if ( IsVisible() + && nRow == GetToken().nRow + && nCol >= GetToken().nCol && nCol < GetToken().nCol + GetToken().aText.Len()) + return this; + else + { + USHORT nNumSubNodes = GetNumSubNodes(); + for (USHORT i = 0; i < nNumSubNodes; i++) + { const SmNode *pNode = GetSubNode(i); + + if (!pNode) + continue; + + const SmNode *pResult = pNode->FindTokenAt(nRow, nCol); + if (pResult) + return pResult; + } + } + + return 0; +} + + +const SmNode * SmNode::FindRectClosestTo(const Point &rPoint) const +{ + long nDist = LONG_MAX; + const SmNode *pResult = 0; + + if (IsVisible()) + pResult = this; + else + { + USHORT nNumSubNodes = GetNumSubNodes(); + for (USHORT i = 0; i < nNumSubNodes; i++) + { const SmNode *pNode = GetSubNode(i); + + if (!pNode) + continue; + + long nTmp; + const SmNode *pFound = pNode->FindRectClosestTo(rPoint); + if (pFound && (nTmp = pFound->OrientedDist(rPoint)) < nDist) + { nDist = nTmp; + pResult = pFound; + + // quit immediately if 'rPoint' is inside the *should not + // overlap with other rectangles* part. + // This (partly) serves for getting the attributes in eg + // "bar overstrike a". + // ('nDist < 0' is used as *quick shot* to avoid evaluation of + // the following expression, where the result is already determined) + if (nDist < 0 && pFound->IsInsideRect(rPoint)) + break; + } + } + } + + return pResult; +} + + +/**************************************************************************/ + + +SmStructureNode::~SmStructureNode() +{ + SmNode *pNode; + + for (USHORT i = 0; i < GetNumSubNodes(); i++) + if (pNode = GetSubNode(i)) + delete pNode; +} + + +void SmStructureNode::SetSubNodes(SmNode *pFirst, SmNode *pSecond, SmNode *pThird) +{ + if (pFirst) + aSubNodes.Put(0, pFirst); + if (pSecond) + aSubNodes.Put(1, pSecond); + if (pThird) + aSubNodes.Put(2, pThird); +} + + +void SmStructureNode::SetSubNodes(const SmNodeArray &rNodeArray) +{ + aSubNodes = rNodeArray; +} + + +/**************************************************************************/ + + +void SmTableNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) + // arranges all subnodes in one column +{ + Point rPosition; + + USHORT nWidth = 0; + USHORT nHeight = 0; + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + + // make distance depend on font size + long nDist = +(rFormat.GetDistance(DIS_VERTICAL) + * GetFont().GetSize().Height()) / 100L; + + if (nSize < 1) + return; + + // arrange subnodes and get maximum width of them + long nMaxWidth = 0, + nTmp; + USHORT i; + for (i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + { pNode->Arrange(rDev, rFormat); + if ((nTmp = pNode->GetItalicWidth()) > nMaxWidth) + nMaxWidth = nTmp; + } + + Point aPos; + SmRect::operator = (SmRect(nMaxWidth, 0)); + for (i = 0; i < nSize; i++) + { if (pNode = GetSubNode(i)) + { const SmRect &rNodeRect = pNode->GetRect(); + const SmNode *pCoNode = pNode->GetLeftMost(); + SmTokenType eType = pCoNode->GetToken().eType; + RectHorAlign eHorAlign = eType == TTEXT ? + RHA_LEFT : pCoNode->GetRectHorAlign(); + + aPos = rNodeRect.AlignTo(*this, RP_BOTTOM, + eHorAlign, RVA_BASELINE); + if (i) + aPos.Y() += nDist; + pNode->MoveTo(aPos); + ExtendBy(rNodeRect, nSize > 1 ? RCP_NONE : RCP_ARG); + } + } +} + + +/**************************************************************************/ + + +void SmLineNode::Prepare(const SmFormat &rFormat) +{ + SmNode::Prepare(rFormat); + + //! wir verwenden hier den 'FNT_VARIABLE' Font, da er vom Ascent und Descent + //! ia besser zum Rest der Formel passt als der 'FNT_MATH' Font. + GetFont() = rFormat.GetFont(FNT_VARIABLE); + Flags() |= FLG_FONT; +} + + +/**************************************************************************/ + + +void SmLineNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) + // arranges all subnodes in one row with some extra space between +{ + SmRect::operator = (SmRect()); + + SmNode *pNode; + USHORT nSize = GetNumSubNodes(); + USHORT i; + for (i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + pNode->Arrange(rDev, rFormat); + + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + // provide an empty rectangle with alignment parameters for the "current" + // font (in order to make "a^1 {}_2^3 a_4" work correct, that is, have the + // same sub-/supscript positions.) + //! be sure to use a character that has explicitly defined HiAttribut + //! line in rect.cxx such as 'a' in order to make 'vec a' look same to + //! 'vec {a}'. + SmRect::operator = (SmRect(aTmpDev, &rFormat, C2S("a"), + GetFont().GetBorderWidth())); + // make sure that the rectangle occupies (almost) no space + SetWidth(1); + SetItalicSpaces(0, 0); + + if (nSize < 1) + return; + + // make distance depend on font size + long nDist = +(rFormat.GetDistance(DIS_HORIZONTAL) + * GetFont().GetSize().Height()) / 100L; + + Point aPos; + for (i = 0; i < nSize; i++) + if (pNode = GetSubNode(i)) + { + aPos = pNode->AlignTo(*this, RP_RIGHT, RHA_CENTER, RVA_BASELINE); + + // no horizontal space before first node + if (i) + aPos.X() += nDist; + + pNode->MoveTo(aPos); + ExtendBy(*pNode, i ? RCP_XOR : RCP_ARG); + } +} + + +/**************************************************************************/ + + +void SmExpressionNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) + // as 'SmLineNode::Arrange' but keeps alignment of leftmost subnode +{ + DBG_ASSERT(GetNumSubNodes() > 0, "Sm: keine subnodes"); + + SmLineNode::Arrange(rDev, rFormat); + + // copy alignment of leftmost subnode if any + //! (this assumes its the one with index 0) + SmNode *pNode = GetSubNode(0); + if (pNode) + SetRectHorAlign(pNode->GetRectHorAlign()); +} + + +/**************************************************************************/ + + +void SmUnHorNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + BOOL bIsPostfix = GetToken().eType == TFACT; + + SmNode *pOper = GetSubNode(bIsPostfix ? 1 : 0), + *pBody = GetSubNode(bIsPostfix ? 0 : 1); + DBG_ASSERT(pOper, "Sm: NULL pointer"); + DBG_ASSERT(pBody, "Sm: NULL pointer"); + + pOper->SetSize(Fraction (rFormat.GetRelSize(SIZ_OPERATOR), 100)); + pOper->Arrange(rDev, rFormat); + pBody->Arrange(rDev, rFormat); + + Point aPos = pOper->AlignTo(*pBody, bIsPostfix ? RP_RIGHT : RP_LEFT, + RHA_CENTER, RVA_BASELINE); + // add a bit space between operator and argument + // (worst case -{1 over 2} where - and over have almost no space inbetween) + long nDelta = pOper->GetFont().GetSize().Height() / 20; + if (bIsPostfix) + aPos.X() += nDelta; + else + aPos.X() -= nDelta; + pOper->MoveTo(aPos); + + SmRect::operator = (*pBody); + long nOldBot = GetBottom(); + + ExtendBy(*pOper, RCP_XOR); + + // workaround for Bug 50865: "a^2 a^+2" have different baselines + // for exponents (if size of exponent is large enough) + SetBottom(nOldBot); +} + + +/**************************************************************************/ + + +void SmRootNode::GetHeightVerOffset(const SmRect &rRect, + long &rHeight, long &rVerOffset) const + // calculate height and vertical offset of root sign suitable for 'rRect' +{ + rVerOffset = (rRect.GetBottom() - rRect.GetAlignB()) / 2; + rHeight = rRect.GetHeight() - rVerOffset; + + DBG_ASSERT(rHeight >= 0, "Sm : Ooops..."); + DBG_ASSERT(rVerOffset >= 0, "Sm : Ooops..."); +} + + +Point SmRootNode::GetExtraPos(const SmRect &rRootSymbol, + const SmRect &rExtra) const +{ + const Size &rSymSize = rRootSymbol.GetSize(); + + Point aPos = rRootSymbol.GetTopLeft() + + Point((rSymSize.Width() * 70) / 100, + (rSymSize.Height() * 52) / 100); + + // from this calculate topleft edge of 'rExtra' + aPos.X() -= rExtra.GetWidth() + rExtra.GetItalicRightSpace(); + aPos.Y() -= rExtra.GetHeight(); + // if there's enough space move a bit less to the right + // examples: "nroot i a", "nroot j a" + // (it looks better if we don't use italic-spaces here) + long nX = rRootSymbol.GetLeft() + (rSymSize.Width() * 30) / 100; + if (aPos.X() > nX) + aPos.X() = nX; + + return aPos; +} + + +void SmRootNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + //! pExtra needs to have the smaller index than pRootSym in order to + //! not to get the root symbol but the pExtra when clicking on it in the + //! GraphicWindow. (That is because of the simplicity of the algorithm + //! that finds the node corresponding to a mouseclick in the window.) + SmNode *pExtra = GetSubNode(0), + *pRootSym = GetSubNode(1), + *pBody = GetSubNode(2); + DBG_ASSERT(pRootSym, "Sm: NULL pointer"); + DBG_ASSERT(pBody, "Sm: NULL pointer"); + + pBody->Arrange(rDev, rFormat); + + long nHeight, + nVerOffset; + GetHeightVerOffset(*pBody, nHeight, nVerOffset); + nHeight += rFormat.GetDistance(DIS_ROOT) + * GetFont().GetSize().Height() / 100L; + + pRootSym->AdaptToX(rDev, pBody->GetItalicWidth()); + pRootSym->AdaptToY(rDev, nHeight); + + pRootSym->Arrange(rDev, rFormat); + + Point aPos = pRootSym->AlignTo(*pBody, RP_LEFT, RHA_CENTER, RVA_BASELINE); + //! overrride calulated vertical position + aPos.Y() = pRootSym->GetTop() + pBody->GetBottom() - pRootSym->GetBottom(); + aPos.Y() -= nVerOffset; + pRootSym->MoveTo(aPos); + + if (pExtra) + { pExtra->SetSize(Fraction(rFormat.GetRelSize(SIZ_INDEX), 100)); + pExtra->Arrange(rDev, rFormat); + + aPos = GetExtraPos(*pRootSym, *pExtra); + pExtra->MoveTo(aPos); + } + + SmRect::operator = (*pBody); + ExtendBy(*pRootSym, RCP_THIS); + if (pExtra) + ExtendBy(*pExtra, RCP_THIS, (BOOL) TRUE); +} + + +/**************************************************************************/ + + +void SmBinHorNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + SmNode *pLeft = GetSubNode(0), + *pOper = GetSubNode(1), + *pRight = GetSubNode(2); + DBG_ASSERT(pLeft != NULL, "Sm: NULL pointer"); + DBG_ASSERT(pOper != NULL, "Sm: NULL pointer"); + DBG_ASSERT(pRight != NULL, "Sm: NULL pointer"); + + pOper->SetSize(Fraction (rFormat.GetRelSize(SIZ_OPERATOR), 100)); + + pLeft ->Arrange(rDev, rFormat); + pOper ->Arrange(rDev, rFormat); + pRight->Arrange(rDev, rFormat); + + const SmRect &rOpRect = pOper->GetRect(); + + long nDist = (rOpRect.GetWidth() * + rFormat.GetDistance(DIS_HORIZONTAL)) / 100L; + + SmRect::operator = (*pLeft); + + Point aPos; + aPos = pOper->AlignTo(*this, RP_RIGHT, RHA_CENTER, RVA_BASELINE); + aPos.X() += nDist; + pOper->MoveTo(aPos); + ExtendBy(*pOper, RCP_XOR); + + aPos = pRight->AlignTo(*this, RP_RIGHT, RHA_CENTER, RVA_BASELINE); + aPos.X() += nDist; + + pRight->MoveTo(aPos); + ExtendBy(*pRight, RCP_XOR); +} + + +/**************************************************************************/ + + +void SmBinVerNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + SmNode *pNum = GetSubNode(0), + *pLine = GetSubNode(1), + *pDenom = GetSubNode(2); + DBG_ASSERT(pNum, "Sm : NULL pointer"); + DBG_ASSERT(pLine, "Sm : NULL pointer"); + DBG_ASSERT(pDenom, "Sm : NULL pointer"); + + BOOL bIsTextmode = rFormat.IsTextmode(); + if (bIsTextmode) + { + Fraction aFraction(rFormat.GetRelSize(SIZ_INDEX), 100); + pNum ->SetSize(aFraction); + pLine ->SetSize(aFraction); + pDenom->SetSize(aFraction); + } + + pNum ->Arrange(rDev, rFormat); + pDenom->Arrange(rDev, rFormat); + + long nFontHeight = GetFont().GetSize().Height(), + nExtLen = nFontHeight * rFormat.GetDistance(DIS_FRACTION) / 100L, + nThick = nFontHeight * rFormat.GetDistance(DIS_STROKEWIDTH) / 100L, + nWidth = Max(pNum->GetItalicWidth(), pDenom->GetItalicWidth()), + nNumDist = bIsTextmode ? 0 : + nFontHeight * rFormat.GetDistance(DIS_NUMERATOR) / 100L, + nDenomDist = bIsTextmode ? 0 : + nFontHeight * rFormat.GetDistance(DIS_DENOMINATOR) / 100L; + + pLine->AdaptToX(rDev, nWidth + 2 * nExtLen); + pLine->AdaptToY(rDev, nThick); + pLine->Arrange(rDev, rFormat); + + // get horizontal alignment for numerator + const SmNode *pLM = pNum->GetLeftMost(); + RectHorAlign eHorAlign = pLM->GetToken().eType == TTEXT ? + RHA_LEFT : pLM->GetRectHorAlign(); + + // move numerator to its position + Point aPos = pNum->AlignTo(*pLine, RP_TOP, eHorAlign, RVA_BASELINE); + aPos.Y() -= nNumDist; + pNum->MoveTo(aPos); + + // get horizontal alignment for denominator + pLM = pDenom->GetLeftMost(); + eHorAlign = pLM->GetToken().eType == TTEXT ? + RHA_LEFT : pLM->GetRectHorAlign(); + + // move denominator to its position + aPos = pDenom->AlignTo(*pLine, RP_BOTTOM, eHorAlign, RVA_BASELINE); + aPos.Y() += nDenomDist; + pDenom->MoveTo(aPos); + + SmRect::operator = (*pNum); + ExtendBy(*pDenom, RCP_NONE).ExtendBy(*pLine, RCP_NONE, pLine->GetCenterY()); +} + + +/**************************************************************************/ + + +double Det(const Point &rHeading1, const Point &rHeading2) + // gibt den Wert der durch die beiden Punkte gebildeten Determinante + // zurück +{ + return rHeading1.X() * rHeading2.Y() - rHeading1.Y() * rHeading2.X(); +} + + +BOOL IsPointInLine(const Point &rPoint1, + const Point &rPoint2, const Point &rHeading2) + // ergibt TRUE genau dann, wenn der Punkt 'rPoint1' zu der Gerade gehört die + // durch den Punkt 'rPoint2' geht und den Richtungsvektor 'rHeading2' hat +{ + DBG_ASSERT(rHeading2 != Point(), "Sm : 0 vector"); + + BOOL bRes = FALSE; + const double eps = 5.0 * DBL_EPSILON; + + double fLambda; + if (labs(rHeading2.X()) > labs(rHeading2.Y())) + { + fLambda = (rPoint1.X() - rPoint2.X()) / (double) rHeading2.X(); + bRes = fabs(rPoint1.Y() - (rPoint2.Y() + fLambda * rHeading2.Y())) < eps; + } + else + { + fLambda = (rPoint1.Y() - rPoint2.Y()) / (double) rHeading2.Y(); + bRes = fabs(rPoint1.X() - (rPoint2.X() + fLambda * rHeading2.X())) < eps; + } + + return bRes; +} + + +USHORT GetLineIntersectionPoint(Point &rResult, + const Point& rPoint1, const Point &rHeading1, + const Point& rPoint2, const Point &rHeading2) +{ + DBG_ASSERT(rHeading1 != Point(), "Sm : 0 vector"); + DBG_ASSERT(rHeading2 != Point(), "Sm : 0 vector"); + + USHORT nRes = 1; + const double eps = 5.0 * DBL_EPSILON; + + // sind die Richtumgsvektoren linear abhängig ? + double fDet = Det(rHeading1, rHeading2); + if (fabs(fDet) < eps) + { + nRes = IsPointInLine(rPoint1, rPoint2, rHeading2) ? USHRT_MAX : 0; + rResult = nRes ? rPoint1 : Point(); + } + else + { + // hier achten wir nicht auf Rechengenauigkeit + // (das würde aufwendiger und lohnt sich hier kaum) + double fLambda = ( (rPoint1.Y() - rPoint2.Y()) * rHeading2.X() + - (rPoint1.X() - rPoint2.X()) * rHeading2.Y()) + / fDet; + rResult = Point(rPoint1.X() + fLambda * rHeading1.X(), + rPoint1.Y() + fLambda * rHeading1.Y()); + } + + return nRes; +} + + + +SmBinDiagonalNode::SmBinDiagonalNode(const SmToken &rNodeToken) +: SmStructureNode(NBINDIAGONAL, rNodeToken) +{ + bAscending = FALSE; + SetNumSubNodes(3); +} + + +void SmBinDiagonalNode::GetOperPosSize(Point &rPos, Size &rSize, + const Point &rDiagPoint, double fAngleDeg) const + // gibt die Position und Größe für den Diagonalstrich zurück. + // Vor.: das SmRect des Nodes gibt die Begrenzung vor(!), muß also selbst + // bereits bekannt sein. + +{ + const double fPi = 3.1415926535897932384626433; + double fAngleRad = fAngleDeg / 180.0 * fPi; + long nRectLeft = GetItalicLeft(), + nRectRight = GetItalicRight(), + nRectTop = GetTop(), + nRectBottom = GetBottom(); + Point aRightHdg (100, 0), + aDownHdg (0, 100), + aDiagHdg (100.0 * cos(fAngleRad), -100.0 * sin(fAngleRad)); + + long nLeft, nRight, nTop, nBottom; // Ränder des Rechtecks für die + // Diagonale + Point aPoint; + if (IsAscending()) + { + // + // obere rechte Ecke bestimmen + // + GetLineIntersectionPoint(aPoint, + Point(nRectLeft, nRectTop), aRightHdg, + rDiagPoint, aDiagHdg); + // + // gibt es einen Schnittpunkt mit dem oberen Rand ? + if (aPoint.X() <= nRectRight) + { + nRight = aPoint.X(); + nTop = nRectTop; + } + else + { + // es muß einen Schnittpunkt mit dem rechten Rand geben! + GetLineIntersectionPoint(aPoint, + Point(nRectRight, nRectTop), aDownHdg, + rDiagPoint, aDiagHdg); + + nRight = nRectRight; + nTop = aPoint.Y(); + } + + // + // untere linke Ecke bestimmen + // + GetLineIntersectionPoint(aPoint, + Point(nRectLeft, nRectBottom), aRightHdg, + rDiagPoint, aDiagHdg); + // + // gibt es einen Schnittpunkt mit dem unteren Rand ? + if (aPoint.X() >= nRectLeft) + { + nLeft = aPoint.X(); + nBottom = nRectBottom; + } + else + { + // es muß einen Schnittpunkt mit dem linken Rand geben! + GetLineIntersectionPoint(aPoint, + Point(nRectLeft, nRectTop), aDownHdg, + rDiagPoint, aDiagHdg); + + nLeft = nRectLeft; + nBottom = aPoint.Y(); + } + } + else + { + // + // obere linke Ecke bestimmen + // + GetLineIntersectionPoint(aPoint, + Point(nRectLeft, nRectTop), aRightHdg, + rDiagPoint, aDiagHdg); + // + // gibt es einen Schnittpunkt mit dem oberen Rand ? + if (aPoint.X() >= nRectLeft) + { + nLeft = aPoint.X(); + nTop = nRectTop; + } + else + { + // es muß einen Schnittpunkt mit dem linken Rand geben! + GetLineIntersectionPoint(aPoint, + Point(nRectLeft, nRectTop), aDownHdg, + rDiagPoint, aDiagHdg); + + nLeft = nRectLeft; + nTop = aPoint.Y(); + } + + // + // untere rechte Ecke bestimmen + // + GetLineIntersectionPoint(aPoint, + Point(nRectLeft, nRectBottom), aRightHdg, + rDiagPoint, aDiagHdg); + // + // gibt es einen Schnittpunkt mit dem unteren Rand ? + if (aPoint.X() <= nRectRight) + { + nRight = aPoint.X(); + nBottom = nRectBottom; + } + else + { + // es muß einen Schnittpunkt mit dem rechten Rand geben! + GetLineIntersectionPoint(aPoint, + Point(nRectRight, nRectTop), aDownHdg, + rDiagPoint, aDiagHdg); + + nRight = nRectRight; + nBottom = aPoint.Y(); + } + } + + rSize = Size(nRight - nLeft + 1, nBottom - nTop + 1); + rPos.X() = nLeft; + rPos.Y() = nTop; +} + + +void SmBinDiagonalNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + //! die beiden Argumente müssen in den Subnodes vor dem Operator kommen, + //! damit das anklicken im GraphicWindow den FormulaCursor richtig setzt + //! (vgl SmRootNode) + SmNode *pLeft = GetSubNode(0), + *pRight = GetSubNode(1); + DBG_ASSERT(pLeft, "Sm : NULL pointer"); + DBG_ASSERT(pRight, "Sm : NULL pointer"); + + DBG_ASSERT(GetSubNode(2)->GetType() == NPOLYLINE, "Sm : falscher Nodetyp"); + SmPolyLineNode *pOper = (SmPolyLineNode *) GetSubNode(2); + DBG_ASSERT(pOper, "Sm : NULL pointer"); + + //! some routines being called extract some info from the OutputDevice's + //! font (eg the space to be used for borders OR the font name(!!)). + //! Thus the font should reflect the needs and has to be set! + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + pLeft->Arrange(aTmpDev, rFormat); + pRight->Arrange(aTmpDev, rFormat); + + // implizit die Weite (incl Rand) des Diagonalstrichs ermitteln + pOper->Arrange(aTmpDev, rFormat); + + long nDelta = pOper->GetWidth() * 8 / 10; + + // TopLeft Position vom rechten Argument ermitteln + Point aPos; + aPos.X() = pLeft->GetItalicRight() + nDelta + pRight->GetItalicLeftSpace(); + if (IsAscending()) + aPos.Y() = pLeft->GetBottom() + nDelta; + else + aPos.Y() = pLeft->GetTop() - nDelta - pRight->GetHeight(); + + pRight->MoveTo(aPos); + + // neue Baseline bestimmen + long nBaseline = IsAscending() ? (pLeft->GetBottom() + pRight->GetTop()) / 2 + : (pLeft->GetTop() + pRight->GetBottom()) / 2; + Point aLogCenter ((pLeft->GetItalicRight() + pRight->GetItalicLeft()) / 2, + nBaseline); + + SmRect::operator = (*pLeft); + ExtendBy(*pRight, RCP_NONE); + + + // Position und Größe des Diagonalstrich ermitteln + Size aSize; + GetOperPosSize(aPos, aSize, aLogCenter, IsAscending() ? 60.0 : -60.0); + + // die Größe setzen + pOper->AdaptToX(rDev, aSize.Width()); + pOper->AdaptToY(rDev, aSize.Height()); + // und diese wirksam machen + pOper->Arrange(aTmpDev, rFormat); + + pOper->MoveTo(aPos); + + ExtendBy(*pOper, RCP_NONE, nBaseline); +} + + +/**************************************************************************/ + + +void SmSubSupNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + DBG_ASSERT(GetNumSubNodes() == 1 + SUBSUP_NUM_ENTRIES, + "Sm: falsche Anzahl von subnodes"); + + SmNode *pBody = GetBody(); + DBG_ASSERT(pBody, "Sm: NULL pointer"); + + long nOrigHeight = pBody->GetFont().GetSize().Height(); + + pBody->Arrange(rDev, rFormat); + + const SmRect &rBodyRect = pBody->GetRect(); + SmRect::operator = (rBodyRect); + + // line that separates sub- and supscript rectangles + long nDelimLine = SmFromTo(GetAlignB(), GetAlignT(), 0.4); + + Point aPos; + long nDelta, nDist; + + // iterate over all possible sub-/supscripts + SmRect aTmpRect (rBodyRect); + for (int i = 0; i < SUBSUP_NUM_ENTRIES; i++) + { SmSubSup eSubSup = (SmSubSup) i; // cast + SmNode *pSubSup = GetSubSup(eSubSup); + + if (!pSubSup) + continue; + + // switch position of limits if we are in textmode + if (rFormat.IsTextmode() && (GetToken().nGroup & TGLIMIT)) + switch (eSubSup) + { case CSUB: eSubSup = RSUB; break; + case CSUP: eSubSup = RSUP; break; + } + + // prevent sub-/supscripts from diminishing in size + // (as would be in "a_{1_{2_{3_4}}}") + if (GetFont().GetSize().Height() > rFormat.GetBaseSize().Height() / 3) + { + USHORT nIndex = (eSubSup == CSUB || eSubSup == CSUP) ? + SIZ_LIMITS : SIZ_INDEX; + Fraction aFraction ( rFormat.GetRelSize(nIndex), 100 ); + pSubSup->SetSize(aFraction); + } + + pSubSup->Arrange(rDev, rFormat); + + BOOL bIsTextmode = rFormat.IsTextmode(); + nDist = 0; + + //! be sure that CSUB, CSUP are handled before the other cases! + switch (eSubSup) + { case RSUB : + case LSUB : + if (!bIsTextmode) + nDist = nOrigHeight + * rFormat.GetDistance(DIS_SUBSCRIPT) / 100L; + aPos = pSubSup->GetRect().AlignTo(aTmpRect, + eSubSup == LSUB ? RP_LEFT : RP_RIGHT, + RHA_CENTER, RVA_BOTTOM); + aPos.Y() += nDist; + nDelta = nDelimLine - aPos.Y(); + if (nDelta > 0) + aPos.Y() += nDelta; + break; + case RSUP : + case LSUP : + if (!bIsTextmode) + nDist = nOrigHeight + * rFormat.GetDistance(DIS_SUPERSCRIPT) / 100L; + aPos = pSubSup->GetRect().AlignTo(aTmpRect, + eSubSup == LSUP ? RP_LEFT : RP_RIGHT, + RHA_CENTER, RVA_TOP); + aPos.Y() -= nDist; + nDelta = aPos.Y() + pSubSup->GetHeight() - nDelimLine; + if (nDelta > 0) + aPos.Y() -= nDelta; + break; + case CSUB : + if (!bIsTextmode) + nDist = nOrigHeight + * rFormat.GetDistance(DIS_LOWERLIMIT) / 100L; + aPos = pSubSup->GetRect().AlignTo(rBodyRect, RP_BOTTOM, + RHA_CENTER, RVA_BASELINE); + aPos.Y() += nDist; + break; + case CSUP : + if (!bIsTextmode) + nDist = nOrigHeight + * rFormat.GetDistance(DIS_UPPERLIMIT) / 100L; + aPos = pSubSup->GetRect().AlignTo(rBodyRect, RP_TOP, + RHA_CENTER, RVA_BASELINE); + aPos.Y() -= nDist; + break; + default : + DBG_ASSERT(FALSE, "Sm: unbekannter Fall"); + } + + pSubSup->MoveTo(aPos); + ExtendBy(*pSubSup, RCP_THIS, (BOOL) TRUE); + + // update rectangle to which RSUB, RSUP, LSUB, LSUP + // will be aligned to + if (eSubSup == CSUB || eSubSup == CSUP) + aTmpRect = *this; + } +} + + +/**************************************************************************/ + + +void SmBraceNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + SmNode *pLeft = GetSubNode(0), + *pBody = GetSubNode(1), + *pRight = GetSubNode(2); + DBG_ASSERT(pLeft, "Sm: NULL pointer"); + DBG_ASSERT(pBody, "Sm: NULL pointer"); + DBG_ASSERT(pRight, "Sm: NULL pointer"); + + pBody->Arrange(rDev, rFormat); + + BOOL bIsScaleNormal = rFormat.IsScaleNormalBrackets(), + bScale = pBody->GetHeight() > 0 && + (GetScaleMode() == SCALE_HEIGHT || bIsScaleNormal), + bIsABS = GetToken().eType == TABS; + + long nFaceHeight = GetFont().GetSize().Height(); + + // Übergröße in % ermitteln + USHORT nPerc = 0; + if (!bIsABS && bScale) + { // im Fall von Klammern mit Übergröße... + int nIndex = GetScaleMode() == SCALE_HEIGHT ? + DIS_BRACKETSIZE : DIS_NORMALBRACKETSIZE; + nPerc = rFormat.GetDistance(nIndex); + } + + // ermitteln der Höhe für die Klammern + long nBraceHeight; + if (bScale) + { + nBraceHeight = pBody->GetType() == NBRACEBODY ? + ((SmBracebodyNode *) pBody)->GetBodyHeight() + : pBody->GetHeight(); + nBraceHeight += 2 * (nBraceHeight * nPerc / 100L); + } + else + nBraceHeight = nFaceHeight; + + // Abstand zum Argument + nPerc = bIsABS ? 0 : rFormat.GetDistance(DIS_BRACKETSPACE); + long nDist = nFaceHeight * nPerc / 100L; + + // sofern erwünscht skalieren der Klammern auf die gewünschte Größe + if (bScale) + { + Size aSize (pLeft->GetFont().GetSize()); + DBG_ASSERT(pRight->GetFont().GetSize() == aSize, + "Sm : unterschiedliche Fontgrößen"); + aSize.Width() = Min((long) nBraceHeight * 60L / 100L, + rFormat.GetBaseSize().Height() * 3L / 2L); + + xub_Unicode cChar = pLeft->GetToken().cMathChar; + if (cChar != MS_LINE && cChar != MS_DLINE) + pLeft ->GetFont().SetSize(aSize); + + cChar = pRight->GetToken().cMathChar; + if (cChar != MS_LINE && cChar != MS_DLINE) + pRight->GetFont().SetSize(aSize); + + pLeft ->AdaptToY(rDev, nBraceHeight); + pRight->AdaptToY(rDev, nBraceHeight); + } + + pLeft ->Arrange(rDev, rFormat); + pRight->Arrange(rDev, rFormat); + + // damit auch "\(a\) - (a) - left ( a right )" vernünftig aussieht + RectVerAlign eVerAlign = bScale ? RVA_CENTERY : RVA_BASELINE; + + Point aPos; + aPos = pLeft->AlignTo(*pBody, RP_LEFT, RHA_CENTER, eVerAlign); + aPos.X() -= nDist; + pLeft->MoveTo(aPos); + + aPos = pRight->AlignTo(*pBody, RP_RIGHT, RHA_CENTER, eVerAlign); + aPos.X() += nDist; + pRight->MoveTo(aPos); + + SmRect::operator = (*pBody); + ExtendBy(*pLeft, RCP_THIS).ExtendBy(*pRight, RCP_THIS); +} + + +/**************************************************************************/ + + +void SmBracebodyNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + USHORT nNumSubNodes = GetNumSubNodes(); + if (nNumSubNodes == 0) + return; + + // arrange arguments + USHORT i; + for (i = 0; i < nNumSubNodes; i += 2) + GetSubNode(i)->Arrange(rDev, rFormat); + + // build reference rectangle with necessary info for vertical alignment + SmRect aRefRect (*GetSubNode(0)); + for (i = 0; i < nNumSubNodes; i += 2) + { + SmRect aTmpRect (*GetSubNode(i)); + Point aPos = aTmpRect.AlignTo(aRefRect, RP_RIGHT, RHA_CENTER, RVA_BASELINE); + aTmpRect.MoveTo(aPos); + aRefRect.ExtendBy(aTmpRect, RCP_XOR); + } + + nBodyHeight = aRefRect.GetHeight(); + + // scale separators to required height and arrange them + BOOL bScale = GetScaleMode() == SCALE_HEIGHT || rFormat.IsScaleNormalBrackets(); + long nHeight = bScale ? aRefRect.GetHeight() : GetFont().GetSize().Height(); + int nIndex = GetScaleMode() == SCALE_HEIGHT ? + DIS_BRACKETSIZE : DIS_NORMALBRACKETSIZE; + USHORT nPerc = rFormat.GetDistance(nIndex); + if (bScale) + nHeight += 2 * (nHeight * nPerc / 100L); + for (i = 1; i < nNumSubNodes; i += 2) + { + SmNode *pNode = GetSubNode(i); + pNode->AdaptToY(rDev, nHeight); + pNode->Arrange(rDev, rFormat); + } + + // horizontal distance between argument and brackets or separators + long nDist = GetFont().GetSize().Height() + * rFormat.GetDistance(DIS_BRACKETSPACE) / 100L; + + SmNode *pLeft = GetSubNode(0); + SmRect::operator = (*pLeft); + for (i = 1; i < nNumSubNodes; i++) + { + BOOL bIsSeparator = i % 2 != 0; + RectVerAlign eVerAlign = bIsSeparator ? RVA_CENTERY : RVA_BASELINE; + + SmNode *pRight = GetSubNode(i); + Point aPosX = pRight->AlignTo(*pLeft, RP_RIGHT, RHA_CENTER, eVerAlign), + aPosY = pRight->AlignTo(aRefRect, RP_RIGHT, RHA_CENTER, eVerAlign); + aPosX.X() += nDist; + + pRight->MoveTo(Point(aPosX.X(), aPosY.Y())); + ExtendBy(*pRight, bIsSeparator ? RCP_THIS : RCP_XOR); + + pLeft = pRight; + } +} + + +/**************************************************************************/ + + +void SmVerticalBraceNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + SmNode *pBody = GetSubNode(0), + *pBrace = GetSubNode(1), + *pScript = GetSubNode(2); + DBG_ASSERT(pBody, "Sm: NULL pointer!"); + DBG_ASSERT(pBrace, "Sm: NULL pointer!"); + DBG_ASSERT(pScript, "Sm: NULL pointer!"); + + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + pBody->Arrange(aTmpDev, rFormat); + + // Groesse wie bei Grenzen fuer diesen Teil + pScript->SetSize( Fraction( rFormat.GetRelSize(SIZ_LIMITS), 100 ) ); + // etwas hoehere Klammern als normal + pBrace ->SetSize( Fraction(3, 2) ); + + long nItalicWidth = pBody->GetItalicWidth(); + if (nItalicWidth > 0) + pBrace->AdaptToX(aTmpDev, nItalicWidth); + + pBrace ->Arrange(aTmpDev, rFormat); + pScript->Arrange(aTmpDev, rFormat); + + // die relativen Position und die Abstaende zueinander bestimmen + RectPos eRectPos; + long nFontHeight = pBody->GetFont().GetSize().Height(); + long nDistBody = nFontHeight * rFormat.GetDistance(DIS_ORNAMENTSIZE), + nDistScript = nFontHeight; + if (GetToken().eType == TOVERBRACE) + { + eRectPos = RP_TOP; + nDistBody = - nDistBody; + nDistScript *= - rFormat.GetDistance(DIS_UPPERLIMIT); + } + else // TUNDERBRACE + { + eRectPos = RP_BOTTOM; + nDistScript *= + rFormat.GetDistance(DIS_LOWERLIMIT); + } + nDistBody /= 100L; + nDistScript /= 100L; + + Point aPos = pBrace->AlignTo(*pBody, eRectPos, RHA_CENTER, RVA_BASELINE); + aPos.Y() += nDistBody; + pBrace->MoveTo(aPos); + + aPos = pScript->AlignTo(*pBrace, eRectPos, RHA_CENTER, RVA_BASELINE); + aPos.Y() += nDistScript; + pScript->MoveTo(aPos); + + SmRect::operator = (*pBody); + ExtendBy(*pBrace, RCP_THIS).ExtendBy(*pScript, RCP_THIS); +} + + +/**************************************************************************/ + +#ifdef MAC +#pragma segment FrmNode_03 +#endif + + +SmNode * SmOperNode::GetSymbol() +{ + SmNode *pNode = GetSubNode(0); + DBG_ASSERT(pNode, "Sm: NULL pointer!"); + + if (pNode->GetType() == NSUBSUP) + pNode = ((SmSubSupNode *) pNode)->GetBody(); + + DBG_ASSERT(pNode, "Sm: NULL pointer!"); + return pNode; +} + + +long SmOperNode::CalcSymbolHeight(const SmNode &rSymbol, + const SmFormat &rFormat) const + // returns the font height to be used for operator-symbol +{ + long nHeight = GetFont().GetSize().Height(); + + SmTokenType eType = GetToken().eType; + if (eType == TLIM || eType == TLIMINF || eType == TLIMSUP) + return nHeight; + + if (!rFormat.IsTextmode()) + { + // set minimum size () + nHeight += (nHeight * 20L) / 100L; + + nHeight += nHeight + * rFormat.GetDistance(DIS_OPERATORSIZE) / 100L; + nHeight = nHeight * 686L / 845L; + } + + // correct user-defined symbols to match height of sum from StarMath + // font + if (rSymbol.GetToken().eType == TSPECIAL) + nHeight = nHeight * 845L / 686L; + + return nHeight; +} + + +void SmOperNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + SmNode *pOper = GetSubNode(0); + SmNode *pBody = GetSubNode(1); + + DBG_ASSERT(pOper, "Sm: Subnode fehlt"); + DBG_ASSERT(pBody, "Sm: Subnode fehlt"); + + SmNode *pSymbol = GetSymbol(); + pSymbol->SetSize(Fraction(CalcSymbolHeight(*pSymbol, rFormat), + pSymbol->GetFont().GetSize().Height())); + + pBody->Arrange(rDev, rFormat); + pOper->Arrange(rDev, rFormat); + + long nOrigHeight = GetFont().GetSize().Height(), + nDist = nOrigHeight + * rFormat.GetDistance(DIS_OPERATORSPACE) / 100L; + + Point aPos = pOper->AlignTo(*pBody, RP_LEFT, RHA_CENTER, /*RVA_CENTERY*/RVA_MID); + aPos.X() -= nDist; + pOper->MoveTo(aPos); + + SmRect::operator = (*pBody); + ExtendBy(*pOper, RCP_THIS); +} + + +/**************************************************************************/ + + +void SmAlignNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) + // setzt im ganzen subtree (incl aktuellem node) das alignment +{ + DBG_ASSERT(GetNumSubNodes() > 0, "Sm: SubNode fehlt"); + + SmNode *pNode = GetSubNode(0); + + RectHorAlign eHorAlign; + switch (GetToken().eType) + { + case TALIGNL: eHorAlign = RHA_LEFT; break; + case TALIGNC: eHorAlign = RHA_CENTER; break; + case TALIGNR: eHorAlign = RHA_RIGHT; break; + } + SetRectHorAlign(eHorAlign); + + pNode->Arrange(rDev, rFormat); + + SmRect::operator = (pNode->GetRect()); +} + + +/**************************************************************************/ + + +void SmAttributNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + SmNode *pAttr = GetSubNode(0), + *pBody = GetSubNode(1); + DBG_ASSERT(pBody, "Sm: Body fehlt"); + DBG_ASSERT(pAttr, "Sm: Attribut fehlt"); + + pBody->Arrange(rDev, rFormat); + + if (GetScaleMode() == SCALE_WIDTH) + pAttr->AdaptToX(rDev, pBody->GetItalicWidth()); + pAttr->Arrange(rDev, rFormat); + + // get relative position of attribut + RectVerAlign eVerAlign; + long nDist = 0; + switch (GetToken().eType) + { case TUNDERLINE : + eVerAlign = RVA_ATTRIBUT_LO; + break; + case TOVERSTRIKE : + eVerAlign = RVA_ATTRIBUT_MID; + break; + default : + eVerAlign = RVA_ATTRIBUT_HI; + if (pBody->GetType() == NATTRIBUT) + nDist = GetFont().GetSize().Height() + * rFormat.GetDistance(DIS_ORNAMENTSPACE) / 100L; + } + Point aPos = pAttr->AlignTo(*pBody, RP_ATTRIBUT, RHA_CENTER, eVerAlign); + aPos.Y() -= nDist; + pAttr->MoveTo(aPos); + + SmRect::operator = (*pBody); + ExtendBy(*pAttr, RCP_THIS, (BOOL) TRUE); +} + + +/**************************************************************************/ + + +void SmFontNode::Prepare(const SmFormat &rFormat) +{ + //! prepare subnodes first + SmNode::Prepare(rFormat); + + int nFnt = -1; + switch (GetToken().eType) + { + case TFIXED: nFnt = FNT_FIXED; break; + case TSANS: nFnt = FNT_SANS; break; + case TSERIF: nFnt = FNT_SERIF; break; + } + if (nFnt != -1) + { GetFont() = rFormat.GetFont(nFnt); + SetFont(GetFont()); + } + + //! prevent overwrites of this font by 'Arrange' or 'SetFont' calls of + //! other font nodes (those with lower depth in the tree) + Flags() |= FLG_FONT; +} + + +void SmFontNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + SmNode *pNode = GetSubNode(1); + DBG_ASSERT(pNode, "Sm: SubNode fehlt"); + + switch (GetToken().eType) + { case TSIZE : + pNode->SetFontSize(aFontSize, nSizeType); + break; + case TSANS : + case TSERIF : + case TFIXED : + pNode->SetFont(GetFont()); + break; + case TUNKNOWN : break; // no assertion on "font " + + case TPHANTOM : SetPhantom(TRUE); break; + case TBOLD : SetAttribut(ATTR_BOLD); break; + case TITALIC : SetAttribut(ATTR_ITALIC); break; + case TNBOLD : ClearAttribut(ATTR_BOLD); break; + case TNITALIC : ClearAttribut(ATTR_ITALIC); break; + + case TBLACK : SetColor(Color(COL_BLACK)); break; + case TWHITE : SetColor(Color(COL_WHITE)); break; + case TRED : SetColor(Color(COL_RED)); break; + case TGREEN : SetColor(Color(COL_GREEN)); break; + case TBLUE : SetColor(Color(COL_BLUE)); break; + case TCYAN : SetColor(Color(COL_CYAN)); break; + case TMAGENTA : SetColor(Color(COL_MAGENTA)); break; + case TYELLOW : SetColor(Color(COL_YELLOW)); break; + + default: + DBG_ASSERT(FALSE, "Sm: unbekannter Fall"); + } + + pNode->Arrange(rDev, rFormat); + + SmRect::operator = (pNode->GetRect()); +} + + +void SmFontNode::SetSizeParameter(const Fraction& rValue, USHORT Type) +{ + nSizeType = Type; + aFontSize = rValue; +} + + +/**************************************************************************/ + + +SmPolyLineNode::SmPolyLineNode(const SmToken &rNodeToken) +: SmGraphicNode(NPOLYLINE, rNodeToken) +{ + aPoly.SetSize(2); + nWidth = 0; +} + + +void SmPolyLineNode::AdaptToX(const OutputDevice &rDev, ULONG nWidth) +{ + aToSize.Width() = nWidth; +} + + +void SmPolyLineNode::AdaptToY(const OutputDevice &rDev, ULONG nHeight) +{ + GetFont().FreezeBorderWidth(); + aToSize.Height() = nHeight; +} + + +void SmPolyLineNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + //! some routines being called extract some info from the OutputDevice's + //! font (eg the space to be used for borders OR the font name(!!)). + //! Thus the font should reflect the needs and has to be set! + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + long nBorderwidth = GetFont().GetBorderWidth(); + + // + // Das Polygon mit den beiden Endpunkten bilden + // + DBG_ASSERT(aPoly.GetSize() == 2, "Sm : falsche Anzahl von Punkten"); + Point aPointA, aPointB; + if (GetToken().eType == TWIDESLASH) + { + aPointA.X() = nBorderwidth; + aPointA.Y() = aToSize.Height() - nBorderwidth; + aPointB.X() = aToSize.Width() - nBorderwidth; + aPointB.Y() = nBorderwidth; + } + else + { + DBG_ASSERT(GetToken().eType == TWIDEBACKSLASH, "Sm : unerwartetes Token"); + aPointA.X() = + aPointA.Y() = nBorderwidth; + aPointB.X() = aToSize.Width() - nBorderwidth; + aPointB.Y() = aToSize.Height() - nBorderwidth; + } + aPoly.SetPoint(aPointA, 0); + aPoly.SetPoint(aPointB, 1); + + long nThick = GetFont().GetSize().Height() + * rFormat.GetDistance(DIS_STROKEWIDTH) / 100L; + nWidth = nThick + 2 * nBorderwidth; + + SmRect::operator = (SmRect(aToSize.Width(), aToSize.Height())); +} + + +void SmPolyLineNode::Draw(OutputDevice &rDev, const Point &rPosition) const +{ + if (IsPhantom()) + return; + + long nBorderwidth = GetFont().GetBorderWidth(); + + LineInfo aInfo; + aInfo.SetWidth(nWidth - 2 * nBorderwidth); + + Point aOffset (Point() - aPoly.GetBoundRect().TopLeft() + + Point(nBorderwidth, nBorderwidth)), + aPos (rPosition + aOffset); + ((Polygon &) aPoly).Move(aPos.X(), aPos.Y()); + + Color aOldCol (rDev.GetLineColor()); + rDev.SetLineColor( GetFont().GetColor() ); + + rDev.DrawPolyLine(aPoly, aInfo); + + rDev.SetLineColor( aOldCol ); + +#ifdef SM_RECT_DEBUG + if (!IsDebug()) + return; + + int nRFlags = SM_RECT_CORE | SM_RECT_ITALIC | SM_RECT_LINES | SM_RECT_MID; + SmRect::Draw(rDev, rPosition, nRFlags); +#endif +} + + +/**************************************************************************/ + + +void SmPolygonNode::AdaptToX(const OutputDevice &rDev, ULONG nWidth) +{ + aToSize.Width() = nWidth; +} + + +void SmPolygonNode::AdaptToY(const OutputDevice &rDev, ULONG nHeight) +{ + GetFont().FreezeBorderWidth(); + aToSize.Height() = nHeight; +} + + +void SmPolygonNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + //! some routines being called extract some info from the OutputDevice's + //! font (eg the space to be used for borders OR the font name(!!)). + //! Thus the font should reflect the needs and has to be set! + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + long nBorderWidth = GetFont().GetBorderWidth(); + + // das Polygon der gewaehlten FontSize anpassen + Size aSize (rDev.GetFont().GetSize()), + aOrigSize (aPolygon.GetOrigFontSize()); + double fScaleY = (double) aSize.Height() / aOrigSize.Height(), + fScaleX = aSize.Width() ? + (double) aSize.Width() / aOrigSize.Width() : fScaleY; + aPolygon.ScaleBy(fScaleX / aPolygon.GetScaleX(), fScaleY / aPolygon.GetScaleY()); + + long nTmp; + if ((nTmp = aToSize.Width()) > 0) + // Breite anpassen und dabei Platz für Rand links und rechts lassen + // (das resultierende SmRect soll den Rand beinhalten und trotzdem + // nicht breiter als gewünscht sein) + aPolygon.AdaptToX(aTmpDev, Max(nTmp - 2L * nBorderWidth, 10L)); + if ((nTmp = aToSize.Height()) > 0) + // wie oben jedoch mit oberen und unterem Rand + aPolygon.AdaptToY(aTmpDev, Max(nTmp - 2L * nBorderWidth, 10L)); + + if (aPolygon.GetChar() == xub_Unicode('\0')) + SmRect::operator = (SmRect()); + else + SmRect::operator = (SmRect(aTmpDev, &rFormat, aPolygon, nBorderWidth)); +} + + +void SmPolygonNode::Draw(OutputDevice &rDev, const Point &rPosition) const +{ + if (IsPhantom()) + return; + + rDev.Push(PUSH_FILLCOLOR | PUSH_LINECOLOR); + rDev.SetFillColor(GetFont().GetColor()); + rDev.SetLineColor(); + + // calculate offset to position the polygon centered within the + // surrounding rectangle of the node + // (the root sign will be positioned right within the rectangle in order + // to attach the horizontal bar easily) + Size aPolySize (aPolygon.GetBoundRect(rDev).GetSize()), + aRectSize (GetRect().GetSize()); + Point aOffset ((aRectSize.Width() - aPolySize.Width()) / + (aPolygon.GetChar() == MS_SQRT ? 1 : 2), + (aRectSize.Height() - aPolySize.Height()) / 2); + + aPolygon.Draw(rDev, rPosition + aOffset); + + rDev.Pop(); + +#ifdef SM_RECT_DEBUG + if (!IsDebug()) + return; + + int nRFlags = SM_RECT_CORE | SM_RECT_ITALIC | SM_RECT_LINES | SM_RECT_MID; + SmRect::Draw(rDev, rPosition, nRFlags); +#endif +} + + +/**************************************************************************/ + + +void SmRootSymbolNode::DrawBar(OutputDevice &rDev, const Point &rPosition) const +{ + // get polygon and rectangle + SmPolygon aBarPoly = SmPolygon(MS_BAR); + + // extra length to close small (wedge formed) gap between root-sign and + // horizontal bar + long nExtraLen = aBarPoly.GetBoundRect(rDev).GetSize().Height() / 2; + + aBarPoly.AdaptToX((OutputDevice &) rDev, nBodyWidth + nExtraLen); + aBarPoly.ScaleBy( 1.0, (double) GetFont().GetSize().Height() + / aBarPoly.GetOrigFontSize().Height()); + + Point aDrawPos (rPosition); + aDrawPos.X() -= nExtraLen; + aDrawPos = rDev.PixelToLogic(rDev.LogicToPixel(aDrawPos)); + + rDev.Push(PUSH_FILLCOLOR | PUSH_LINECOLOR); + rDev.SetFillColor(GetFont().GetColor()); + rDev.SetLineColor(); + + aBarPoly.Draw(rDev, aDrawPos); + + rDev.Pop(); +} + + +void SmRootSymbolNode::AdaptToY(const OutputDevice &rDev, ULONG nHeight) +{ + // etwas extra Länge damit der horizontale Balken später über dem + // Argument positioniert ist + SmPolygonNode::AdaptToY(rDev, nHeight + nHeight / 10L); +} + + +void SmRootSymbolNode::Draw(OutputDevice &rDev, const Point &rPosition) const +{ + if (IsPhantom()) + return; + + // draw root-sign itself + SmPolygonNode::Draw(rDev, rPosition); + + // get offset for horizontal bar + long nPolyHeight = GetPolygon().GetBoundRect(rDev).GetSize().Height(); + Point aBarOffset (GetWidth(), (GetHeight() - nPolyHeight) / 2); + + DrawBar(rDev, rPosition + aBarOffset); + +#ifdef SM_RECT_DEBUG + if (!IsDebug()) + return; + + int nRFlags = SM_RECT_CORE | SM_RECT_ITALIC | SM_RECT_LINES | SM_RECT_MID; + SmRect::Draw(rDev, rPosition, nRFlags); +#endif +} + + +/**************************************************************************/ + + +void SmRectangleNode::AdaptToX(const OutputDevice &rDev, ULONG nWidth) +{ + aToSize.Width() = nWidth; +} + + +void SmRectangleNode::AdaptToY(const OutputDevice &rDev, ULONG nHeight) +{ + GetFont().FreezeBorderWidth(); + aToSize.Height() = nHeight; +} + + +void SmRectangleNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + long nFontHeight = GetFont().GetSize().Height(); + long nWidth = aToSize.Width(), + nHeight = aToSize.Height(); + if (nHeight == 0) + nHeight = nFontHeight / 30; + if (nWidth == 0) + nWidth = nFontHeight / 3; + + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + // add some borderspace + ULONG nBorderWidth = GetFont().GetBorderWidth(); + //nWidth += nBorderWidth; + nHeight += 2 * nBorderWidth; + + //! use this method in order to have 'SmRect::HasAlignInfo() == TRUE' + //! and thus having the attribut-fences updated in 'SmRect::ExtendBy' + SmRect::operator = (SmRect(nWidth, nHeight)); +} + + +void SmRectangleNode::Draw(OutputDevice &rDev, const Point &rPosition) const +{ + if (IsPhantom()) + return; + + rDev.Push(PUSH_FILLCOLOR | PUSH_LINECOLOR | PUSH_FONT); + rDev.SetFillColor(GetFont().GetColor()); + rDev.SetLineColor(); + + rDev.SetFont(GetFont()); + ULONG nBorderWidth = GetFont().GetBorderWidth(); + + // get rectangle and remove borderspace + Rectangle aTmp (AsRectangle() + rPosition - GetTopLeft()); + aTmp.Left() += nBorderWidth; + aTmp.Right() -= nBorderWidth; + aTmp.Top() += nBorderWidth; + aTmp.Bottom() -= nBorderWidth; + + DBG_ASSERT(aTmp.GetHeight() > 0 && aTmp.GetWidth() > 0, + "Sm: leeres Rechteck"); + + //! avoid GROWING AND SHRINKING of drawn rectangle when constantly + //! increasing zoomfactor. + // This is done by shifting it's output-position to a point that + // corresponds exactly to a pixel on the output device. + Point aPos (rDev.PixelToLogic(rDev.LogicToPixel(aTmp.TopLeft()))); + aTmp.SetPos(aPos); + + rDev.DrawRect(aTmp); + + rDev.Pop(); + +#ifdef SM_RECT_DEBUG + if (!IsDebug()) + return; + + int nRFlags = SM_RECT_CORE | SM_RECT_ITALIC | SM_RECT_LINES | SM_RECT_MID; + SmRect::Draw(rDev, rPosition, nRFlags); +#endif +} + + +/**************************************************************************/ + + +void SmTextNode::Prepare(const SmFormat &rFormat) +{ + SmNode::Prepare(rFormat); + + aText = GetToken().aText; + GetFont() = rFormat.GetFont(GetFontDesc()); + + if (GetFont().GetItalic() == ITALIC_NORMAL) + Attributes() |= ATTR_ITALIC; + if (GetFont().GetWeight() == WEIGHT_BOLD) + Attributes() |= ATTR_BOLD; + +}; + + +void SmTextNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + PrepareAttributes(); + + USHORT nSizeDesc = GetFontDesc() == FNT_FUNCTION ? + SIZ_FUNCTION : SIZ_TEXT; + GetFont() *= Fraction (rFormat.GetRelSize(nSizeDesc), 100); + + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + SmRect::operator = (SmRect(aTmpDev, &rFormat, aText, GetFont().GetBorderWidth())); +} + + +void SmTextNode::Draw(OutputDevice &rDev, const Point& rPosition) const +{ + if (IsPhantom() || aText.Len() == 0 || aText.GetChar(0) == xub_Unicode('\0')) + return; + + rDev.Push(PUSH_FONT); + rDev.SetFont(GetFont()); + + Point aPos (rPosition); + aPos.Y() += GetBaselineOffset(); + // auf Pixelkoordinaten runden + aPos = rDev.PixelToLogic( rDev.LogicToPixel(aPos) ); + + rDev.DrawStretchText(aPos, GetWidth(), aText); + + rDev.Pop(); + +#ifdef SM_RECT_DEBUG + if (!IsDebug()) + return; + + int nRFlags = SM_RECT_CORE | SM_RECT_ITALIC | SM_RECT_LINES | SM_RECT_MID; + SmRect::Draw(rDev, rPosition, nRFlags); +#endif +} + + +/**************************************************************************/ + + +void SmMatrixNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + Point aPosition, + aOffset; + SmNode *pNode; + int i, j; + + // initialize array that is to hold the maximum widhts of all + // elements (subnodes) in that column. + long *pColWidth = new long[nNumCols]; + for (j = 0; j < nNumCols; j++) + pColWidth[j] = 0; + + // arrange subnodes and calculate the aboves arrays contents + for (i = GetNumSubNodes() - 1; i >= 0; i--) + if (pNode = GetSubNode(i)) + { pNode->Arrange(rDev, rFormat); + + int nCol = i % nNumCols; + pColWidth[nCol] + = Max(pColWidth[nCol], pNode->GetItalicWidth()); + } + + // norm distance from which the following two are calcutated + const int nNormDist = 3 * GetFont().GetSize().Height(); + + // define horizontal and vertical minimal distances that seperate + // the elements + long nHorDist = nNormDist * rFormat.GetDistance(DIS_MATRIXCOL) / 100L, + nVerDist = nNormDist * rFormat.GetDistance(DIS_MATRIXROW) / 100L; + + // build array that holds the leftmost position for each column + long *pColLeft = new long[nNumCols]; + long nX = 0; + for (j = 0; j < nNumCols; j++) + { pColLeft[j] = nX; + nX += pColWidth[j] + nHorDist; + } + + Point aPos, aDelta; + SmRect aLineRect; + SmRect::operator = (SmRect()); + for (i = 0; i < nNumRows; i++) + { aLineRect = SmRect(); + for (j = 0; j < nNumCols; j++) + { SmNode *pNode = GetSubNode(i * nNumCols + j); + DBG_ASSERT(pNode, "Sm: NULL pointer"); + + const SmRect &rNodeRect = pNode->GetRect(); + + // align all baselines in that row if possible + aPos = rNodeRect.AlignTo(aLineRect, RP_RIGHT, RHA_CENTER, RVA_BASELINE); + aPos.X() += nHorDist; + + // get horizontal alignment + const SmNode *pCoNode = pNode->GetLeftMost(); + SmTokenType eType = pCoNode->GetToken().eType; + RectHorAlign eHorAlign = eType == TTEXT ? + RHA_LEFT : pCoNode->GetRectHorAlign(); + + // caculate horizontal position of element depending on column + // and horizontal alignment + switch (eHorAlign) + { case RHA_LEFT: + aPos.X() = rNodeRect.GetLeft() + pColLeft[j]; + break; + case RHA_CENTER: + aPos.X() = rNodeRect.GetLeft() + pColLeft[j] + + pColWidth[j] / 2 + - rNodeRect.GetItalicCenterX(); + break; + case RHA_RIGHT: + aPos.X() = rNodeRect.GetLeft() + pColLeft[j] + + pColWidth[j] - rNodeRect.GetItalicWidth(); + break; + } + + pNode->MoveTo(aPos); + aLineRect.ExtendBy(rNodeRect, RCP_XOR); + } + + aPos = aLineRect.AlignTo(*this, RP_BOTTOM, RHA_CENTER, RVA_BASELINE); + aPos.Y() += nVerDist; + + // move 'aLineRect' and rectangles in that line to final position + aDelta.X() = 0; // since horizontal alignment is already done + aDelta.Y() = aPos.Y() - aLineRect.GetTop(); + aLineRect.Move(aDelta); + for (j = 0; j < nNumCols; j++) + if (pNode = GetSubNode(i * nNumCols + j)) + pNode->Move(aDelta); + + ExtendBy(aLineRect, RCP_NONE); + } + + delete [] pColLeft; + delete [] pColWidth; +} + + +void SmMatrixNode::SetRowCol(USHORT nMatrixRows, USHORT nMatrixCols) +{ + nNumRows = nMatrixRows; + nNumCols = nMatrixCols; +} + + +/**************************************************************************/ + + +SmMathSymbolNode::SmMathSymbolNode(const SmToken &rNodeToken) +: SmSpecialNode(NMATH, rNodeToken, FNT_MATH) +{ + xub_Unicode cChar = GetToken().cMathChar; + if ((xub_Unicode) '\0' != cChar) + SetText( cChar ); +} + + +void SmMathSymbolNode::AdaptToX(const OutputDevice &rDev, ULONG nWidth) + // Scale charwidth to mach 'nWidth' while keeping the height + // (that is: actually the font width will be scaled) +{ + // Since there is no function to do this, we try to approximate + // it: + // + Font &rFace = GetFont(); + Size aFntSize (rFace.GetSize()); + + //! however the result is a bit better with 'nWidth' as initial + //! font width + aFntSize.Width() = nWidth; + rFace.SetSize(aFntSize); + + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(rFace); + + // get denominator of error factor for width + long nDenom = SmRect(aTmpDev, NULL, GetText(), + GetFont().GetBorderWidth()).GetItalicWidth(); + + // scale fontwidth with this error factor + aFntSize.Width() *= nWidth; + aFntSize.Width() /= nDenom ? nDenom : 1; + + GetFont().SetSize(aFntSize); +} + + +void SmMathSymbolNode::AdaptToY(const OutputDevice &rDev, ULONG nHeight) +{ + GetFont().FreezeBorderWidth(); + + Font &rFace = GetFont(); + Size aFntSize (rFace.GetSize()); + + // da wir nur die Höhe skalieren wollen müsen wir hier ggf die Fontweite + // ermitteln um diese beizubehalten. + if (aFntSize.Width() == 0) + { + OutputDevice &rDevNC = (OutputDevice &) rDev; + rDevNC.Push(PUSH_FONT); + rDevNC.SetFont(rFace); + aFntSize.Width() = rDev.GetFontMetric().GetSize().Width(); + rDevNC.Pop(); + } + DBG_ASSERT(aFntSize.Width() != 0, "Sm: "); + + //! however the result is a bit better with 'nHeight' as initial + //! font height + aFntSize.Height() = nHeight; + rFace.SetSize(aFntSize); + + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(rFace); + + // get denominator of error factor for height + long nDenom = SmRect(aTmpDev, NULL, GetText(), + GetFont().GetBorderWidth()).GetHeight(); + + // scale fontwidth with this error factor + aFntSize.Height() *= nHeight; + aFntSize.Height() /= nDenom ? nDenom : 1; + + GetFont().SetSize(aFntSize); +} + + +void SmMathSymbolNode::Prepare(const SmFormat &rFormat) +{ + SmNode::Prepare(rFormat); + + DBG_ASSERT(GetFont().GetCharSet() == RTL_TEXTENCODING_SYMBOL, + "Sm : falsches CHARSET für Zeichen aus dem StarMath Font"); + + Flags() |= FLG_FONT | FLG_ITALIC; +}; + + +void SmMathSymbolNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + const XubString &rText = GetText(); + + if (rText.Len() == 0 || rText.GetChar(0) == xub_Unicode('\0')) + { SmRect::operator = (SmRect()); + return; + } + + PrepareAttributes(); + + GetFont() *= Fraction (rFormat.GetRelSize(SIZ_TEXT), 100); + + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + SmRect::operator = (SmRect(aTmpDev, &rFormat, rText, GetFont().GetBorderWidth())); +} + + +/**************************************************************************/ + + +void SmSpecialNode::Prepare(const SmFormat &rFormat) +{ + SmNode::Prepare(rFormat); + + SmSym *pSym; + SmModule *pp = SM_MOD1(); + + Size aOldSize = GetFont().GetSize(); + if (pSym = pp->GetSymSetManager()->GetSymbol(GetToken().aText)) + { SetText( pSym->GetCharacter() ); + GetFont() = pSym->GetFace(); + + if (GetFont().GetName().EqualsIgnoreCaseAscii("StarMath")) + GetFont().SetCharSet(RTL_TEXTENCODING_SYMBOL); + } + else + { SetText( GetToken().aText ); + GetFont() = rFormat.GetFont(FNT_VARIABLE); + } + GetFont().SetSize(aOldSize); + + //! eigentlich sollten nur WEIGHT_NORMAL und WEIGHT_BOLD vorkommen... + //! In der sms-Datei gibt es jedoch zB auch 'WEIGHT_ULTRALIGHT' + //! daher vergleichen wir hier mit > statt mit != . + //! (Langfristig sollte die Notwendigkeit für 'PrepareAttribut', und damit + //! für dieses hier, mal entfallen.) + if (GetFont().GetWeight() > WEIGHT_NORMAL) + SetAttribut(ATTR_BOLD); + if (GetFont().GetItalic() != ITALIC_NONE) + SetAttribut(ATTR_ITALIC); + + Flags() |= FLG_FONT; +}; + + +void SmSpecialNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + PrepareAttributes(); + + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + SmRect::operator = (SmRect(aTmpDev, &rFormat, GetText(), GetFont().GetBorderWidth())); +} + + +void SmSpecialNode::Draw(OutputDevice &rDev, const Point& rPosition) const +{ + //! since this chars might come from any font, that we may not have + //! set to ALIGN_BASELINE yet, we do it now. + ((SmSpecialNode *)this)->GetFont().SetAlign(ALIGN_BASELINE); + + SmTextNode::Draw(rDev, rPosition); +} + + +/**************************************************************************/ + + +void SmGlyphSpecialNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + PrepareAttributes(); + + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + SmRect::operator = (SmRect(aTmpDev, &rFormat, GetText(), + GetFont().GetBorderWidth()).AsGlyphRect()); +} + + +/**************************************************************************/ + + +void SmPlaceNode::Prepare(const SmFormat &rFormat) +{ + SmNode::Prepare(rFormat); + + GetFont().SetColor(COL_GRAY); + Flags() |= FLG_COLOR | FLG_FONT | FLG_ITALIC; +}; + + +void SmPlaceNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + PrepareAttributes(); + + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + SmRect::operator = (SmRect(aTmpDev, &rFormat, GetText(), GetFont().GetBorderWidth())); +} + + +/**************************************************************************/ + + +void SmErrorNode::Prepare(const SmFormat &rFormat) +{ + SmNode::Prepare(rFormat); + + GetFont().SetColor(COL_RED); + Flags() |= FLG_VISIBLE | FLG_BOLD | FLG_ITALIC + | FLG_COLOR | FLG_FONT | FLG_SIZE; +} + + +void SmErrorNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + PrepareAttributes(); + + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + const XubString &rText = GetText(); + DBG_ASSERT(rText.Len() == 1 && rText.GetChar(0) == (xub_Unicode) MS_ERROR, + "Sm : Text ist kein ERROR Symbol"); + SmRect::operator = (SmRect(aTmpDev, &rFormat, rText, GetFont().GetBorderWidth())); +} + + +/**************************************************************************/ + + +void SmBlankNode::IncreaseBy(const SmToken &rToken) +{ + switch(rToken.eType) + { + case TBLANK: nNum += 4; break; + case TSBLANK: nNum += 1; break; + } +} + + +void SmBlankNode::Prepare(const SmFormat &rFormat) +{ + SmNode::Prepare(rFormat); + + //! hier muß/sollte es lediglich nicht der StarMath Font sein, + //! damit für das in Arrange verwendete Zeichen ein "normales" + //! (ungecliptes) Rechteck erzeugt wird. + GetFont() = rFormat.GetFont(FNT_VARIABLE); + + Flags() |= FLG_FONT | FLG_BOLD | FLG_ITALIC; +} + + +void SmBlankNode::Arrange(const OutputDevice &rDev, const SmFormat &rFormat) +{ + SmTmpDevice aTmpDev ((OutputDevice &) rDev); + aTmpDev.SetFont(GetFont()); + + // Abstand von der Fonthöhe abhängig machen + // (damit er beim skalieren (zB size *2 {a ~ b}) mitwächst) + long nDist = GetFont().GetSize().Height() / 10L, + nSpace = nNum * nDist; + + // ein SmRect mit Baseline und allem drum und dran besorgen + SmRect::operator = (SmRect(aTmpDev, &rFormat, XubString(xub_Unicode(' ')), + GetFont().GetBorderWidth())); + + // und dieses auf die gewünschte Breite bringen + SetItalicSpaces(0, 0); + SetWidth(nSpace); +} + + + diff --git a/starmath/source/parse.cxx b/starmath/source/parse.cxx new file mode 100644 index 000000000000..f10d685d864f --- /dev/null +++ b/starmath/source/parse.cxx @@ -0,0 +1,2087 @@ +/************************************************************************* + * + * $RCSfile: parse.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#include + +#define SMDLL 1 + +#ifndef PARSE_HXX +#include "parse.hxx" +#endif +#ifndef XCHAR_HXX +#include "xchar.hxx" +#endif +#ifndef _STARMATH_HRC +#include "starmath.hrc" +#endif +#ifndef _SMDLL_HXX +#include "smdll.hxx" +#endif +#ifndef _SMMOD_HXX +#include "smmod.hxx" +#endif +#ifndef CONFIG_HXX +#include "config.hxx" +#endif + +#include "node.hxx" + + +static inline BOOL strnccmp(const String &u1, xub_StrLen nIdx, + const sal_Char *s2, xub_StrLen nLen) +{ + return u1.EqualsIgnoreCaseAscii( s2, nIdx, nLen ); +} + +static const xub_Unicode aDelimiterTable[] = +{ + ' ', '\t', '\n', '\r', '+', '-', '*', '/', '=', '#', + '%', '\\', '"', '~', '`', '>', '<', '&', '|', '(', + ')', '{', '}', '[', ']', '^', '_', + '\0' // end of list symbol +}; + + +/////////////////////////////////////////////////////////////////////////// + +SmToken::SmToken() : + eType (TUNKNOWN), + cMathChar ('\0') +{ + nGroup = nLevel = nRow = nCol = 0; +} + +/////////////////////////////////////////////////////////////////////////// + +struct SmTokenTableEntry +{ + const sal_Char* pIdent; + SmTokenType eType; + xub_Unicode cMathChar; + ULONG nGroup; + USHORT nLevel; +}; + +static const SmTokenTableEntry aTokenTable[] = +{ + { "#", TPOUND, '\0', 0, 0 }, + { "##", TDPOUND, '\0', 0, 0 }, + { "&", TAND, MS_AND, TGPRODUCT, 0 }, + { "(", TLPARENT, MS_LPARENT, TGLBRACES, 5 }, //! 5 to continue expression + { ")", TRPARENT, MS_RPARENT, TGRBRACES, 0 }, //! 0 to terminate expression + { "*", TMULTIPLY, MS_MULTIPLY, TGPRODUCT, 0 }, + { "+", TPLUS, MS_PLUS, TGUNOPER | TGSUM, 5 }, + { "+-", TPLUSMINUS, MS_PLUSMINUS, TGUNOPER | TGSUM, 5 }, + { "-", TMINUS, MS_MINUS, TGUNOPER | TGSUM, 5 }, + { "-+", TMINUSPLUS, MS_MINUSPLUS, TGUNOPER | TGSUM, 5 }, + { ".", TPOINT, '\0', 0, 0 }, + { "/", TDIVIDEBY, MS_SLASH, TGPRODUCT, 0 }, + { "<", TLT, MS_LT, TGRELATION, 0 }, + { "<<", TLL, MS_LL, TGRELATION, 0 }, + { "<=", TLE, MS_LE, TGRELATION, 0 }, + { "<>", TNEQ, MS_NEQ, TGRELATION, 0}, + { "", TPLACE, MS_PLACE, 0, 5 }, + { "=", TASSIGN, MS_ASSIGN, TGRELATION, 0}, + { ">", TGT, MS_GT, TGRELATION, 0 }, + { ">=", TGE, MS_GE, TGRELATION, 0 }, + { ">>", TGG, MS_GG, TGRELATION, 0 }, + { "Im" , TIM, MS_IM, TGSTANDALONE, 5 }, + { "MZ23", TDEBUG, '\0', TGATTRIBUT, 0 }, + { "Re" , TRE, MS_RE, TGSTANDALONE, 5 }, + { "abs", TABS, '\0', TGUNOPER, 13 }, + { "arcosh", TACOSH, '\0', TGFUNCTION, 5 }, + { "arcoth", TACOTH, '\0', TGFUNCTION, 5 }, + { "acute", TACUTE, MS_ACUTE, TGATTRIBUT, 5 }, + { "aleph" , TALEPH, MS_ALEPH, TGSTANDALONE, 5 }, + { "alignb", TALIGNC, '\0', TGALIGN | TGDISCARDED, 0}, + { "alignc", TALIGNC, '\0', TGALIGN, 0}, + { "alignl", TALIGNL, '\0', TGALIGN, 0}, + { "alignm", TALIGNC, '\0', TGALIGN | TGDISCARDED, 0}, + { "alignr", TALIGNR, '\0', TGALIGN, 0}, + { "alignt", TALIGNC, '\0', TGALIGN | TGDISCARDED, 0}, + { "and", TAND, MS_AND, TGPRODUCT, 0}, + { "approx", TAPPROX, MS_APPROX, TGRELATION, 0}, + { "arccos", TACOS, '\0', TGFUNCTION, 5}, + { "arccot", TACOT, '\0', TGFUNCTION, 5}, + { "arcsin", TASIN, '\0', TGFUNCTION, 5}, + { "arctan", TATAN, '\0', TGFUNCTION, 5}, + { "arsinh", TASINH, '\0', TGFUNCTION, 5}, + { "artanh", TATANH, '\0', TGFUNCTION, 5}, + { "backepsilon" , TBACKEPSILON, MS_BACKEPSILON, TGSTANDALONE, 5}, + { "bar", TBAR, MS_BAR, TGATTRIBUT, 5}, + { "binom", TBINOM, '\0', 0, 5 }, + { "black", TBLACK, '\0', TGCOLOR, 0}, + { "blue", TBLUE, '\0', TGCOLOR, 0}, + { "bold", TBOLD, '\0', TGFONTATTR, 5}, + { "boper", TBOPER, '\0', TGPRODUCT, 0}, + { "breve", TBREVE, MS_BREVE, TGATTRIBUT, 5}, + { "bslash", TBACKSLASH, MS_BACKSLASH, TGPRODUCT, 0 }, + { "cdot", TCDOT, MS_CDOT, TGPRODUCT, 0}, + { "check", TCHECK, MS_CHECK, TGATTRIBUT, 5}, + { "circ" , TCIRC, MS_CIRC, TGSTANDALONE, 5}, + { "circle", TCIRCLE, MS_CIRCLE, TGATTRIBUT, 5}, + { "color", TCOLOR, '\0', TGFONTATTR, 5}, + { "coprod", TCOPROD, MS_COPROD, TGOPER, 5}, + { "cos", TCOS, '\0', TGFUNCTION, 5}, + { "cosh", TCOSH, '\0', TGFUNCTION, 5}, + { "cot", TCOT, '\0', TGFUNCTION, 5}, + { "coth", TCOTH, '\0', TGFUNCTION, 5}, + { "csub", TCSUB, '\0', TGPOWER, 0}, + { "csup", TCSUP, '\0', TGPOWER, 0}, + { "cyan", TCYAN, '\0', TGCOLOR, 0}, + { "dddot", TDDDOT, MS_DDDOT, TGATTRIBUT, 5}, + { "ddot", TDDOT, MS_DDOT, TGATTRIBUT, 5}, + { "def", TDEF, MS_DEF, TGRELATION, 0}, + { "div", TDIV, MS_DIV, TGPRODUCT, 0}, + { "divides", TDIVIDES, MS_LINE, TGRELATION, 0}, + { "dlarrow" , TDLARROW, MS_DLARROW, TGSTANDALONE, 5}, + { "dlrarrow" , TDLRARROW, MS_DLRARROW, TGSTANDALONE, 5}, + { "dot", TDOT, MS_DOT, TGATTRIBUT, 5}, + { "dotsaxis", TDOTSAXIS, MS_DOTSAXIS, TGSTANDALONE, 5}, // 5 to continue expression + { "dotsdiag", TDOTSDIAG, MS_DOTSUP, TGSTANDALONE, 5}, // + { "dotsdown", TDOTSDOWN, MS_DOTSDOWN, TGSTANDALONE, 5}, // + { "dotslow", TDOTSLOW, MS_DOTSLOW, TGSTANDALONE, 5}, // + { "dotsup", TDOTSUP, MS_DOTSUP, TGSTANDALONE, 5}, // + { "dotsvert", TDOTSVERT, MS_DOTSVERT, TGSTANDALONE, 5}, // + { "downarrow" , TDOWNARROW, MS_DOWNARROW, TGSTANDALONE, 5}, + { "drarrow" , TDRARROW, MS_DRARROW, TGSTANDALONE, 5}, + { "emptyset" , TEMPTYSET, MS_EMPTYSET, TGSTANDALONE, 5}, + { "equiv", TEQUIV, MS_EQUIV, TGRELATION, 0}, + { "exists", TEXISTS, MS_EXISTS, TGSTANDALONE, 5}, + { "exp", TEXP, '\0', TGFUNCTION, 5}, + { "fact", TFACT, MS_FACT, TGUNOPER, 5}, + { "fixed", TFIXED, '\0', TGFONT, 0}, + { "font", TFONT, '\0', TGFONTATTR, 5}, + { "forall", TFORALL, MS_FORALL, TGSTANDALONE, 5}, + { "from", TFROM, '\0', TGLIMIT, 0}, + { "func", TFUNC, '\0', TGFUNCTION, 5}, + { "ge", TGE, MS_GE, TGRELATION, 0}, + { "geslant", TGESLANT, MS_GESLANT, TGRELATION, 0 }, + { "gg", TGG, MS_GG, TGRELATION, 0}, + { "grave", TGRAVE, MS_GRAVE, TGATTRIBUT, 5}, + { "green", TGREEN, '\0', TGCOLOR, 0}, + { "gt", TGT, MS_GT, TGRELATION, 0}, + { "hat", THAT, MS_HAT, TGATTRIBUT, 5}, + { "hbar" , THBAR, MS_HBAR, TGSTANDALONE, 5}, + { "iiint", TIIINT, MS_IIINT, TGOPER, 5}, + { "iint", TIINT, MS_IINT, TGOPER, 5}, + { "in", TIN, MS_IN, TGRELATION, 0}, + { "infinity" , TINFINITY, MS_INFINITY, TGSTANDALONE, 5}, + { "infty" , TINFINITY, MS_INFINITY, TGSTANDALONE, 5}, + { "int", TINT, MS_INT, TGOPER, 5}, + { "intersection", TINTERSECT, MS_INTERSECT, TGPRODUCT, 0}, + { "ital", TITALIC, '\0', TGFONTATTR, 5}, + { "italic", TITALIC, '\0', TGFONTATTR, 5}, + { "lambdabar" , TLAMBDABAR, MS_LAMBDABAR, TGSTANDALONE, 5}, + { "langle", TLANGLE, MS_LANGLE, TGLBRACES, 5}, + { "lbrace", TLBRACE, MS_LBRACE, TGLBRACES, 5}, + { "lceil", TLCEIL, MS_LCEIL, TGLBRACES, 5}, + { "ldbracket", TLDBRACKET, MS_LDBRACKET, TGLBRACES, 5}, + { "ldline", TLDLINE, MS_DLINE, TGLBRACES, 5}, + { "le", TLE, MS_LE, TGRELATION, 0}, + { "left", TLEFT, '\0', 0, 5}, + { "leftarrow" , TLEFTARROW, MS_LEFTARROW, TGSTANDALONE, 5}, + { "leslant", TLESLANT, MS_LESLANT, TGRELATION, 0 }, + { "lfloor", TLFLOOR, MS_LFLOOR, TGLBRACES, 5}, + { "lim", TLIM, '\0', TGOPER, 5}, + { "liminf", TLIMINF, '\0', TGOPER, 5}, + { "limsup", TLIMSUP, '\0', TGOPER, 5}, + { "lint", TLINT, MS_LINT, TGOPER, 5}, + { "ll", TLL, MS_LL, TGRELATION, 0}, + { "lline", TLLINE, MS_LINE, TGLBRACES, 5}, + { "llint", TLLINT, MS_LLINT, TGOPER, 5}, + { "lllint", TLLLINT, MS_LLLINT, TGOPER, 5}, + { "ln", TLN, '\0', TGFUNCTION, 5}, + { "log", TLOG, '\0', TGFUNCTION, 5}, + { "lsub", TLSUB, '\0', TGPOWER, 0}, + { "lsup", TLSUP, '\0', TGPOWER, 0}, + { "lt", TLT, MS_LT, TGRELATION, 0}, + { "magenta", TMAGENTA, '\0', TGCOLOR, 0}, + { "matrix", TMATRIX, '\0', 0, 5}, + { "minusplus", TMINUSPLUS, MS_MINUSPLUS, TGUNOPER | TGSUM, 5}, + { "mline", TMLINE, MS_LINE, 0, 0}, //! nicht in TGRBRACES, Level 0 + { "nabla", TNABLA, MS_NABLA, TGSTANDALONE, 5}, + { "nbold", TNBOLD, '\0', TGFONTATTR, 5}, + { "ndivides", TNDIVIDES, MS_NDIVIDES, TGRELATION, 0}, + { "neg", TNEG, MS_NEG, TGUNOPER, 5 }, + { "neq", TNEQ, MS_NEQ, TGRELATION, 0}, + { "newline", TNEWLINE, '\0', 0, 0}, + { "ni", TNI, MS_NI, TGRELATION, 0}, + { "nitalic", TNITALIC, '\0', TGFONTATTR, 5}, + { "none", TNONE, '\0', TGLBRACES | TGRBRACES, 0}, + { "notin", TNOTIN, MS_NOTIN, TGRELATION, 0}, + { "nsubset", TNSUBSET, MS_NSUBSET, TGRELATION, 0 }, + { "nsupset", TNSUPSET, MS_NSUPSET, TGRELATION, 0 }, + { "nsubseteq", TNSUBSETEQ, MS_NSUBSETEQ, TGRELATION, 0 }, + { "nsupseteq", TNSUPSETEQ, MS_NSUPSETEQ, TGRELATION, 0 }, + { "nroot", TNROOT, MS_SQRT, TGUNOPER, 5}, + { "odivide", TODIVIDE, MS_ODIVIDE, TGPRODUCT, 0}, + { "odot", TODOT, MS_ODOT, TGPRODUCT, 0}, + { "ominus", TOMINUS, MS_OMINUS, TGSUM, 0}, + { "oper", TOPER, '\0', TGOPER, 5}, + { "oplus", TOPLUS, MS_OPLUS, TGSUM, 0}, + { "or", TOR, MS_OR, TGSUM, 0}, + { "ortho", TORTHO, MS_ORTHO, TGRELATION, 0}, + { "otimes", TOTIMES, MS_OTIMES, TGPRODUCT, 0}, + { "over", TOVER, '\0', TGPRODUCT, 0}, + { "overbrace", TOVERBRACE, MS_OVERBRACE, TGPRODUCT, 5}, + { "overline", TOVERLINE, '\0', TGATTRIBUT, 5}, + { "overstrike", TOVERSTRIKE, '\0', TGATTRIBUT, 5}, + { "owns", TNI, MS_NI, TGRELATION, 0}, + { "parallel", TPARALLEL, MS_DLINE, TGRELATION, 0}, + { "partial", TPARTIAL, MS_PARTIAL, TGSTANDALONE, 5 }, + { "phantom", TPHANTOM, '\0', TGFONTATTR, 5}, + { "plusminus", TPLUSMINUS, MS_PLUSMINUS, TGUNOPER | TGSUM, 5}, + { "prod", TPROD, MS_PROD, TGOPER, 5}, + { "prop", TPROP, MS_PROP, TGRELATION, 0}, + { "rangle", TRANGLE, MS_RANGLE, TGRBRACES, 0}, //! 0 to terminate expression + { "rbrace", TRBRACE, MS_RBRACE, TGRBRACES, 0}, // + { "rceil", TRCEIL, MS_RCEIL, TGRBRACES, 0}, // + { "rdbracket", TRDBRACKET, MS_RDBRACKET, TGRBRACES, 0}, // + { "rdline", TRDLINE, MS_DLINE, TGRBRACES, 0}, // + { "red", TRED, '\0', TGCOLOR, 0}, + { "rfloor", TRFLOOR, MS_RFLOOR, TGRBRACES, 0}, //! 0 to terminate expression + { "right", TRIGHT, '\0', 0, 0}, + { "rightarrow" , TRIGHTARROW, MS_RIGHTARROW, TGSTANDALONE, 5}, + { "rline", TRLINE, MS_LINE, TGRBRACES, 0}, //! 0 to terminate expression + { "rsub", TRSUB, '\0', TGPOWER, 0}, + { "rsup", TRSUP, '\0', TGPOWER, 0}, + { "sans", TSANS, '\0', TGFONT, 0}, + { "serif", TSERIF, '\0', TGFONT, 0}, + { "setC" , TSETC, MS_SETC, TGSTANDALONE, 5}, + { "setN" , TSETN, MS_SETN, TGSTANDALONE, 5}, + { "setQ" , TSETQ, MS_SETQ, TGSTANDALONE, 5}, + { "setR" , TSETR, MS_SETR, TGSTANDALONE, 5}, + { "setZ" , TSETZ, MS_SETZ, TGSTANDALONE, 5}, + { "setminus", TBACKSLASH, MS_BACKSLASH, TGPRODUCT, 0 }, + { "sim", TSIM, MS_SIM, TGRELATION, 0}, + { "simeq", TSIMEQ, MS_SIMEQ, TGRELATION, 0}, + { "sin", TSIN, '\0', TGFUNCTION, 5}, + { "sinh", TSINH, '\0', TGFUNCTION, 5}, + { "size", TSIZE, '\0', TGFONTATTR, 5}, + { "slash", TSLASH, MS_SLASH, TGPRODUCT, 0 }, + { "sqrt", TSQRT, MS_SQRT, TGUNOPER, 5}, + { "stack", TSTACK, '\0', 0, 5}, + { "sub", TRSUB, '\0', TGPOWER, 0}, + { "subset", TSUBSET, MS_SUBSET, TGRELATION, 0}, + { "subseteq", TSUBSETEQ, MS_SUBSETEQ, TGRELATION, 0}, + { "sum", TSUM, MS_SUM, TGOPER, 5}, + { "sup", TRSUP, '\0', TGPOWER, 0}, + { "supset", TSUPSET, MS_SUPSET, TGRELATION, 0}, + { "supseteq", TSUPSETEQ, MS_SUPSETEQ, TGRELATION, 0}, + { "tan", TTAN, '\0', TGFUNCTION, 5}, + { "tanh", TTANH, '\0', TGFUNCTION, 5}, + { "tilde", TTILDE, MS_TILDE, TGATTRIBUT, 5}, + { "times", TTIMES, MS_TIMES, TGPRODUCT, 0}, + { "to", TTO, '\0', TGLIMIT, 0}, + { "toward", TTOWARD, MS_RIGHTARROW, TGRELATION, 0}, + { "transl", TTRANSL, MS_TRANSL, TGRELATION, 0}, + { "transr", TTRANSR, MS_TRANSR, TGRELATION, 0}, + { "underbrace", TUNDERBRACE, MS_UNDERBRACE, TGPRODUCT, 5}, + { "underline", TUNDERLINE, '\0', TGATTRIBUT, 5}, + { "union", TUNION, MS_UNION, TGSUM, 0}, + { "uoper", TUOPER, '\0', TGUNOPER, 5}, + { "uparrow" , TUPARROW, MS_UPARROW, TGSTANDALONE, 5}, + { "vec", TVEC, MS_VEC, TGATTRIBUT, 5}, + { "white", TWHITE, '\0', TGCOLOR, 0}, + { "widebslash", TWIDEBACKSLASH, MS_BACKSLASH, TGPRODUCT, 0 }, + { "widehat", TWIDEHAT, MS_HAT, TGATTRIBUT, 5}, + { "widetilde", TWIDETILDE, MS_TILDE, TGATTRIBUT, 5}, + { "wideslash", TWIDESLASH, MS_SLASH, TGPRODUCT, 0 }, + { "widevec", TWIDEVEC, MS_VEC, TGATTRIBUT, 5}, + { "wp" , TWP, MS_WP, TGSTANDALONE, 5}, + { "yellow", TYELLOW, '\0', TGCOLOR, 0}, + { "[", TLBRACKET, MS_LBRACKET, TGLBRACES, 5}, //! 5 to continue expression + { "\\", TESCAPE, '\0', 0, 5}, + { "]", TRBRACKET, MS_RBRACKET, TGRBRACES, 0}, //! 0 to terminate expression + { "^", TRSUP, '\0', TGPOWER, 0}, + { "_", TRSUB, '\0', TGPOWER, 0}, + { "`", TSBLANK, '\0', TGBLANK, 5}, + { "{", TLGROUP, MS_LBRACE, 0, 5}, //! 5 to continue expression + { "|", TOR, MS_OR, TGSUM, 0}, + { "}", TRGROUP, MS_RBRACE, 0, 0}, //! 0 to terminate expression + { "~", TBLANK, '\0', TGBLANK, 5}, + { "", TEND, '\0', 0, 0} +}; + + +/////////////////////////////////////////////////////////////////////////// + + +BOOL SmParser::IsDelimiter(sal_Unicode cChar) + // returns 'TRUE' iff cChar is '\0' or a delimeter +{ + if(!cChar) + return TRUE; + + // check if 'cChar' is in the delimeter table + const sal_Unicode *pDelim = &aDelimiterTable[0]; + for ( ; *pDelim != 0; pDelim++) + if (*pDelim == cChar) + break; + + return (*pDelim != 0); +} + + +#ifdef NOT_USED +const xub_Unicode * SmParser::GetText(XubString &rText, const xub_Unicode *pPos) + // put text between current and next '"' in 'rText'. With '\' quoted + // chars will be inserted without '\'. Thus type '\"' to get '"' in + // the text and '\\' for '\'. ('pPos' has to point to start of the + // string (ie the opening '"' char).) +{ + const xub_Unicode *pEnd = (const xub_Unicode *) BufferString + BufferString.Len(); + + DBG_ASSERT(*pPos == '"', "Dies ist kein Text"); + + // get string content without quoting '\' + rText.Erase(); + pPos++; + while (pPos < pEnd && *pPos != '"') + if (*pPos != '\\' || ++pPos < pEnd) + rText += *pPos++; + else + { Error(PE_UNEXPECTED_ENDOFINPUT); + return pEnd; + } + + // check for irregular end of string + if (pPos == pEnd) + { Error(PE_UNEXPECTED_ENDOFINPUT); + return pEnd; + } + + // return pointer to char after closing '"' + return pPos + 1; +} +#endif + + +const xub_Unicode * SmParser::SkipWhiteSpaces(const xub_Unicode *pPos, USHORT &nRow, USHORT &nCol) + // skip white-spaces while keeping track of actual row and column. +{ + DBG_ASSERT(pPos , "NULL pointer"); + + while ( *pPos != '\0' && IsWhiteSpace(*pPos)) + { if (*pPos == CharLineEnd) + { nRow += 1; + nCol = 0; + } + nCol++; + pPos++; + } + + return pPos; +} + + +const xub_Unicode * SmParser::SkipComment(const xub_Unicode *pPos, USHORT &nRow, USHORT &nCol) + // skip rest of line if comment-start ('%%') is encountered. + // return pointer to char after line-end or (in case of end of buffer) + // return pointer to the terminating '\0' char. +{ + DBG_ASSERT(pPos, "NULL pointer"); + + if (!IsComment(pPos)) + return pPos; + + // skip rest of line + const xub_Unicode *pStart = pPos; + while (*pPos != '\0' && *pPos != CharLineEnd) + pPos++; + if (*pPos == CharLineEnd) + { nRow += 1; + nCol = 0; + } + else + nCol += pPos - pStart; + + return *pPos == '\0' ? pPos : pPos + 1; +} + + +void SmParser::Insert(const XubString &rText, USHORT nPos) +{ + BufferString.Insert(rText, nPos); + + xub_StrLen nLen = rText.Len(); + BufferIndex += nLen; + nTokenIndex += nLen; +} + + +void SmParser::NextToken() +{ + //xub_Unicode *pBuffer = &BufferString[BufferIndex]; + const sal_Unicode *pBuffer = BufferString.GetBuffer(); + pBuffer += BufferIndex; + + xub_StrLen nLen = BufferString.Len(); + + // skip comments and white-spaces + const sal_Unicode *pStart; + do + { pStart = pBuffer; + pBuffer = (xub_Unicode *) SkipWhiteSpaces(pStart, Row, Column); + pBuffer = (xub_Unicode *) SkipComment(pBuffer, Row, Column); + } while (pStart != pBuffer); + BufferIndex = pBuffer - BufferString.GetBuffer(); + + // set index of current token + nTokenIndex = BufferIndex; + + // check for end of input + if ((BufferIndex >= nLen) || (*pBuffer == '\0')) + { CurToken.eType = TEND; + CurToken.cMathChar = '\0'; + CurToken.nGroup = 0; + CurToken.nLevel = 0; + CurToken.aText.Erase(); + CurToken.nRow = Row; + CurToken.nCol = Column; + + return; + } + + // table lookup + int l = 0; + int h = sizeof(aTokenTable) / sizeof(aTokenTable[0]); + while (l < h-1) + { + int i = l; + const sal_Char *pIdentI = aTokenTable[i].pIdent; + USHORT n = strlen(pIdentI); + + if (n != 0 && strnccmp(BufferString, BufferIndex, pIdentI, n)) + { int j = i; + DBG_ASSERT(j + 1 < h, "Sm : index out of range"); + const sal_Char *pIdentJ = aTokenTable[j + 1].pIdent; + int m = strlen(pIdentJ); + BOOL u = strnccmp(BufferString, BufferIndex, pIdentJ, m); + + BOOL bReCalcLen = FALSE; + + while ( ( u || strnccmp(BufferString, BufferIndex, pIdentJ, n) ) + && (++j < h - 1) ) + { + if (u) + { + i = j; + bReCalcLen = TRUE; + } + + pIdentJ = aTokenTable[j + 1].pIdent; + m = strlen(pIdentJ); + u = strnccmp(BufferString, BufferIndex, pIdentJ, m); + } + + if (bReCalcLen) + n = strlen(aTokenTable[i].pIdent); + + const SmTokenTableEntry &rTokenI = aTokenTable[i]; + const sal_Unicode *pChar = BufferString.GetBuffer() + BufferIndex + n - 1; + if (IsDelimiter(*pChar) || IsDelimiter(*(pChar + 1))) + { CurToken.eType = rTokenI.eType; + CurToken.cMathChar = rTokenI.cMathChar; + CurToken.nGroup = rTokenI.nGroup; + CurToken.nLevel = rTokenI.nLevel; + CurToken.aText.AssignAscii( rTokenI.pIdent ); + CurToken.nRow = Row; + CurToken.nCol = Column; + + Column += n; + BufferIndex += n; + + return; + } + } + l++; + } // end of table lookup + + if (*pBuffer == '"') + // text token + { CurToken.eType = TTEXT; + CurToken.cMathChar = '\0'; + CurToken.nGroup = 0; + CurToken.nLevel = 5; + CurToken.aText.Erase(); + CurToken.nRow = Row; + CurToken.nCol = Column + 1; + + BufferIndex++; + pBuffer ++; + Column++; + + while ((*pBuffer != '"') && (*pBuffer != '\0')) + { if ((*pBuffer == '\n') || (*pBuffer == '\r')) + { if (*pBuffer == '\n') + { CurToken.aText += ' '; + Row += 1; + } + else + Column = 1; + } + else + CurToken.aText += *pBuffer; + + Column++; + BufferIndex++; + pBuffer ++; + } + + if (*pBuffer == '"') + { BufferIndex++; + pBuffer ++; + Column++; + } + return; + } + + USHORT n; + for (n = 1; !IsDelimiter(BufferString.GetChar(BufferIndex + n)); n++) + ; + + if (*pBuffer == '%') + { CurToken.eType = TSPECIAL; + CurToken.cMathChar = '\0'; + CurToken.nGroup = 0; + CurToken.nLevel = 5; + CurToken.aText = XubString(BufferString, BufferIndex + 1, n - 1); + CurToken.nRow = Row; + CurToken.nCol = Column + 1; + + BufferIndex += n; + pBuffer++; + Column += n; + + return; + } + + USHORT i; + for (i = 0; (i < n) && (isdigit(*pBuffer) || + (*pBuffer == '.') || + (*pBuffer == ',')); i++) + pBuffer ++; + + CurToken.eType = (i < n) ? TIDENT : TNUMBER; + CurToken.cMathChar = '\0'; + CurToken.nGroup = 0; + CurToken.nLevel = 5; + CurToken.aText = XubString(BufferString, BufferIndex, n); + CurToken.nRow = Row; + CurToken.nCol = Column; + + BufferIndex += n; + Column += n; +} + + +//////////////////////////////////////// +// grammar +// + + +void SmParser::Table() +{ + SmNodeArray LineArray; + + Line(); + while (CurToken.eType == TNEWLINE) + { + NextToken(); + Line(); + } + + if (CurToken.eType != TEND) + Error(PE_UNEXPECTED_CHAR); + + USHORT n = NodeStack.Count(); + + LineArray.SetSize(n); + + for (USHORT i = 0; i < n; i++) + LineArray.Put(n - (i + 1), NodeStack.Pop()); + + SmStructureNode *pSNode = new SmTableNode(CurToken); + pSNode->SetSubNodes(LineArray); + NodeStack.Push(pSNode); +} + + +void SmParser::Align() + // parse alignment info (if any), then go on with rest of expression +{ + SmStructureNode *pSNode = 0; + BOOL bNeedGroupClose = FALSE; + + if (TokenInGroup(TGALIGN)) + { + if (IsConvert40To50()) + // encapsulate expression to be aligned in group braces + // (here group-open brace) + { Insert('{', GetTokenIndex()); + bNeedGroupClose = TRUE; + + // get first valid align statement in sequence + // (the dominant one in 4.0) and erase all others (especially old + // discarded tokens) from command string. + while (TokenInGroup(TGALIGN)) + { if (TokenInGroup(TGDISCARDED) || pSNode) + { BufferIndex = GetTokenIndex(); + BufferString.Erase(BufferIndex, CurToken.aText.Len()); + } + else + pSNode = new SmAlignNode(CurToken); + + NextToken(); + } + } + else + { + pSNode = new SmAlignNode(CurToken); + + NextToken(); + + // allow for just one align statement in 5.0 + if (!IsConvert40To50() && TokenInGroup(TGALIGN)) + { Error(PE_DOUBLE_ALIGN); + return; + } + } + } + + Expression(); + + if (bNeedGroupClose) + Insert('}', GetTokenIndex()); + + if (pSNode) + { pSNode->SetSubNodes(NodeStack.Pop(), 0); + NodeStack.Push(pSNode); + } +} + + +void SmParser::Line() +{ + USHORT n = 0; + SmNodeArray ExpressionArray; + + ExpressionArray.SetSize(n); + + // start with single expression that may have an alignment statement + // (and go on with expressions that must not have alignment + // statements in 'while' loop below. See also 'Expression()'.) + if (CurToken.eType != TEND && CurToken.eType != TNEWLINE) + { Align(); + ExpressionArray.SetSize(++n); + ExpressionArray.Put(n - 1, NodeStack.Pop()); + } + + while (CurToken.eType != TEND && CurToken.eType != TNEWLINE) + { if (!IsConvert40To50()) + Expression(); + else + Align(); + ExpressionArray.SetSize(++n); + ExpressionArray.Put(n - 1, NodeStack.Pop()); + } + + SmStructureNode *pSNode = new SmLineNode(CurToken); + pSNode->SetSubNodes(ExpressionArray); + NodeStack.Push(pSNode); +} + + +void SmParser::Expression() +{ + USHORT n = 0; + SmNodeArray RelationArray; + + RelationArray.SetSize(n); + + Relation(); + RelationArray.SetSize(++n); + RelationArray.Put(n - 1, NodeStack.Pop()); + + while (CurToken.nLevel >= 4) + { Relation(); + RelationArray.SetSize(++n); + RelationArray.Put(n - 1, NodeStack.Pop()); + } + + SmStructureNode *pSNode = new SmExpressionNode(CurToken); + pSNode->SetSubNodes(RelationArray); + NodeStack.Push(pSNode); +} + + +void SmParser::Relation() +{ + Sum(); + while (TokenInGroup(TGRELATION)) + { + SmStructureNode *pSNode = new SmBinHorNode(CurToken); + SmNode *pFirst = NodeStack.Pop(); + + OpSubSup(); + SmNode *pSecond = NodeStack.Pop(); + + Sum(); + + pSNode->SetSubNodes(pFirst, pSecond, NodeStack.Pop()); + NodeStack.Push(pSNode); + } +} + + +void SmParser::Sum() +{ + Product(); + while (TokenInGroup(TGSUM)) + { + SmStructureNode *pSNode = new SmBinHorNode(CurToken); + SmNode *pFirst = NodeStack.Pop(); + + OpSubSup(); + SmNode *pSecond = NodeStack.Pop(); + + Product(); + + pSNode->SetSubNodes(pFirst, pSecond, NodeStack.Pop()); + NodeStack.Push(pSNode); + } +} + + +void SmParser::Product() +{ + Power(); + + while (TokenInGroup(TGPRODUCT)) + { SmStructureNode *pSNode; + SmNode *pFirst = NodeStack.Pop(), + *pOper; + BOOL bSwitchArgs = FALSE; + + SmTokenType eType = CurToken.eType; + switch (eType) + { + case TOVER: + pSNode = new SmBinVerNode(CurToken); + pOper = new SmRectangleNode(CurToken); + NextToken(); + break; + + case TBOPER: + pSNode = new SmBinHorNode(CurToken); + + NextToken(); + + GlyphSpecial(); + pOper = NodeStack.Pop(); + break; + + case TOVERBRACE : + case TUNDERBRACE : + pSNode = new SmVerticalBraceNode(CurToken); +#ifdef USE_POLYGON + pOper = new SmPolygonNode(CurToken); +#else + pOper = new SmMathSymbolNode(CurToken); +#endif + NextToken(); + break; + + case TWIDEBACKSLASH: + case TWIDESLASH: + { + SmBinDiagonalNode *pSTmp = new SmBinDiagonalNode(CurToken); + pSTmp->SetAscending(eType == TWIDESLASH); + pSNode = pSTmp; + + pOper = new SmPolyLineNode(CurToken); + NextToken(); + + bSwitchArgs =TRUE; + break; + } + + default: + pSNode = new SmBinHorNode(CurToken); + + OpSubSup(); + pOper = NodeStack.Pop(); + } + + Power(); + + if (bSwitchArgs) + //! vgl siehe SmBinDiagonalNode::Arrange + pSNode->SetSubNodes(pFirst, NodeStack.Pop(), pOper); + else + pSNode->SetSubNodes(pFirst, pOper, NodeStack.Pop()); + NodeStack.Push(pSNode); + } +} + + +void SmParser::SubSup(ULONG nActiveGroup) +{ + DBG_ASSERT(nActiveGroup == TGPOWER || nActiveGroup == TGLIMIT, + "Sm: falsche Tokengruppe"); + + if (!TokenInGroup(nActiveGroup)) + // already finish + return; + + SmSubSupNode *pNode = new SmSubSupNode(CurToken); + //! Of course 'CurToken' ist just the first sub-/supscript token. + //! It should be of no further interest. The positions of the + //! sub-/supscripts will be identified by the corresponding subnodes + //! index in the 'aSubNodes' array (enum value from 'SmSubSup'). + + pNode->SetUseLimits(nActiveGroup == TGLIMIT); + + // initialize subnodes array + SmNodeArray aSubNodes; + aSubNodes.SetSize(1 + SUBSUP_NUM_ENTRIES); + aSubNodes.Put(0, NodeStack.Pop()); + for (int i = 1; i < aSubNodes.GetSize(); i++) + aSubNodes.Put(i, NULL); + + // process all sub-/supscripts + int nIndex; + while (TokenInGroup(nActiveGroup)) + { SmTokenType eType (CurToken.eType); + + // skip sub-/supscript token + NextToken(); + + // get sub-/supscript node on top of stack + if (eType == TFROM || eType == TTO) + { + // parse limits in old 4.0 and 5.0 style + Relation(); + } + else + Term(); + + switch (eType) + { case TRSUB : nIndex = (int) RSUB; break; + case TRSUP : nIndex = (int) RSUP; break; + case TFROM : + case TCSUB : nIndex = (int) CSUB; break; + case TTO : + case TCSUP : nIndex = (int) CSUP; break; + case TLSUB : nIndex = (int) LSUB; break; + case TLSUP : nIndex = (int) LSUP; break; + default : + DBG_ASSERT(FALSE, "Sm: unbekannter Fall"); + } + nIndex++; + DBG_ASSERT(1 <= nIndex && nIndex <= 1 + SUBSUP_NUM_ENTRIES, + "SmParser::Power() : sub-/supscript index falsch") + + // set sub-/supscript if not already done + if (aSubNodes.Get(nIndex) != NULL) + Error(PE_DOUBLE_SUBSUPSCRIPT); + aSubNodes.Put(nIndex, NodeStack.Pop()); + } + + pNode->SetSubNodes(aSubNodes); + NodeStack.Push(pNode); +} + + +void SmParser::OpSubSup() +{ + // push operator symbol + NodeStack.Push(new SmMathSymbolNode(CurToken)); + // skip operator token + NextToken(); + // get sub- supscripts if any + if (TokenInGroup(TGPOWER)) + SubSup(TGPOWER); +} + + +void SmParser::Power() +{ + // get body for sub- supscripts on top of stack + Term(); + + SubSup(TGPOWER); +} + + +void SmParser::Blank() +{ + DBG_ASSERT(TokenInGroup(TGBLANK), "Sm : falsches Token"); + SmBlankNode *pBlankNode = new SmBlankNode(CurToken); + + while (TokenInGroup(TGBLANK)) + { + pBlankNode->IncreaseBy(CurToken); + NextToken(); + } + + // Blanks am Zeilenende ignorieren wenn die entsprechende Option gesetzt ist + if (CurToken.eType == TNEWLINE || CurToken.eType == TEND + && SM_MOD1()->GetConfig()->IsNoRightSpaces()) + pBlankNode->Clear(); + + NodeStack.Push(pBlankNode); +} + + +void SmParser::Term() +{ + switch (CurToken.eType) + { case TESCAPE : + Escape(); + break; + + case TLGROUP : + NextToken(); + + // allow for empty group + if (CurToken.eType == TRGROUP) + { SmStructureNode *pSNode = new SmExpressionNode(CurToken); + pSNode->SetSubNodes(NULL, NULL); + NodeStack.Push(pSNode); + + NextToken(); + } + else // go as usual + { Align(); + if (CurToken.eType != TRGROUP) + Error(PE_RGROUP_EXPECTED); + else + { NextToken(); + } + } + break; + + case TLEFT : + Brace(); + break; + + case TBLANK : + case TSBLANK : + Blank(); + break; + + case TTEXT : + NodeStack.Push(new SmTextNode(CurToken, FNT_TEXT)); + NextToken(); + break; + case TIDENT : + NodeStack.Push(new SmTextNode(CurToken, FNT_VARIABLE)); + NextToken(); + break; + case TNUMBER : + NodeStack.Push(new SmTextNode(CurToken, FNT_NUMBER)); + NextToken(); + break; + + case TLEFTARROW : + case TRIGHTARROW : + case TUPARROW : + case TDOWNARROW : + case TSETN : + case TSETZ : + case TSETQ : + case TSETR : + case TSETC : + case THBAR : + case TLAMBDABAR : + case TCIRC : + case TDRARROW : + case TDLARROW : + case TDLRARROW : + case TBACKEPSILON : + case TALEPH : + case TIM : + case TRE : + case TWP : + case TEMPTYSET : + case TINFINITY : + case TEXISTS : + case TFORALL : + case TPARTIAL : + case TNABLA : + case TTOWARD : + case TDOTSAXIS : + case TDOTSDIAG : + case TDOTSDOWN : + case TDOTSLOW : + case TDOTSUP : + case TDOTSVERT : + NodeStack.Push(new SmMathSymbolNode(CurToken)); + NextToken(); + break; + + case TPLACE: + NodeStack.Push(new SmPlaceNode(CurToken)); + NextToken(); + break; + + case TSPECIAL: + Special(); + break; + + case TBINOM: + Binom(); + break; + + case TSTACK: + Stack(); + break; + + case TMATRIX: + Matrix(); + break; + + default: + if (TokenInGroup(TGLBRACES)) + { Brace(); + } + else if (TokenInGroup(TGOPER)) + { Operator(); + } + else if (TokenInGroup(TGUNOPER)) + { UnOper(); + } + else if ( TokenInGroup(TGATTRIBUT) + || TokenInGroup(TGFONTATTR)) + { SmStructureNodeArray aArray; + + BOOL bIsAttr; + USHORT n = 0; + while ((bIsAttr = TokenInGroup(TGATTRIBUT)) + || TokenInGroup(TGFONTATTR)) + { aArray.SetSize(n + 1); + + if (bIsAttr) + Attribut(); + else + FontAttribut(); + + // check if casting in following line is ok + DBG_ASSERT(!NodeStack.Top()->IsVisible(), "Sm : Ooops..."); + + aArray.Put(n, (SmStructureNode *) NodeStack.Pop()); + n++; + } + + Power(); + + SmNode *pFirstNode = NodeStack.Pop(); + while (n > 0) + { aArray.Get(n - 1)->SetSubNodes(0, pFirstNode); + pFirstNode = aArray.Get(n - 1); + n--; + } + NodeStack.Push(pFirstNode); + } + else if (TokenInGroup(TGFUNCTION)) + { if (!IsConvert40To50()) + { Function(); + } + else // encapsulate old 4.0 style parsing in braces + { + // insert opening brace + Insert('{', GetTokenIndex()); + + // + // parse in 4.0 style + // + Function(); + + SmNode *pFunc = NodeStack.Pop(); + + if (CurToken.eType == TLPARENT) + { Term(); + } + else + { Align(); + } + + // insert closing brace + Insert('}', GetTokenIndex()); + + SmStructureNode *pSNode = new SmExpressionNode(pFunc->GetToken()); + pSNode->SetSubNodes(pFunc, NodeStack.Pop()); + NodeStack.Push(pSNode); + } + } + else + Error(PE_UNEXPECTED_CHAR); + } +} + + +void SmParser::Escape() +{ + NextToken(); + + xub_Unicode cChar; + switch (CurToken.eType) + { case TLPARENT : cChar = MS_LPARENT; break; + case TRPARENT : cChar = MS_RPARENT; break; + case TLBRACKET : cChar = MS_LBRACKET; break; + case TRBRACKET : cChar = MS_RBRACKET; break; + case TLBRACE : + case TLGROUP : cChar = MS_LBRACE; break; + case TRBRACE : + case TRGROUP : cChar = MS_RBRACE; break; + case TLANGLE : cChar = MS_LANGLE; break; + case TRANGLE : cChar = MS_RANGLE; break; + case TLCEIL : cChar = MS_LCEIL; break; + case TRCEIL : cChar = MS_RCEIL; break; + case TLFLOOR : cChar = MS_LFLOOR; break; + case TRFLOOR : cChar = MS_RFLOOR; break; + case TLLINE : + case TRLINE : cChar = MS_LINE; break; + case TLDLINE : + case TRDLINE : cChar = MS_DLINE; break; + default: + Error(PE_UNEXPECTED_TOKEN); + } + + SmNode *pNode = new SmMathSymbolNode(CurToken); + NodeStack.Push(pNode); + + NextToken(); +} + + +void SmParser::Operator() +{ + if (TokenInGroup(TGOPER)) + { SmStructureNode *pSNode = new SmOperNode(CurToken); + + // put operator on top of stack + Oper(); + + if (TokenInGroup(TGLIMIT) || TokenInGroup(TGPOWER)) + SubSup(CurToken.nGroup); + SmNode *pOperator = NodeStack.Pop(); + + // get argument + Power(); + + pSNode->SetSubNodes(pOperator, NodeStack.Pop()); + NodeStack.Push(pSNode); + } +} + + +void SmParser::Oper() +{ + SmTokenType eType (CurToken.eType); + SmNode *pNode = NULL; + + switch (eType) + { + case TSUM : + case TPROD : + case TCOPROD : + case TINT : + case TIINT : + case TIIINT : + case TLINT : + case TLLINT : + case TLLLINT : + pNode = new SmMathSymbolNode(CurToken); + break; + + case TLIM : + case TLIMSUP : + case TLIMINF : + { + const sal_Char* pLim = 0; + switch (eType) + { + case TLIM : pLim = "lim"; break; + case TLIMSUP : pLim = "lim sup"; break; + case TLIMINF : pLim = "lim inf"; break; + } + if( pLim ) + CurToken.aText.AssignAscii( pLim ); + pNode = new SmTextNode(CurToken, FNT_TEXT); + } + break; + + case TOVERBRACE : + case TUNDERBRACE : +#ifdef USE_POLYGON + pNode = new SmPolygonNode(CurToken); +#else + pNode = new SmMathSymbolNode(CurToken); +#endif + break; + + case TOPER : + NextToken(); + + DBG_ASSERT(CurToken.eType == TSPECIAL, "Sm: falsches Token"); + pNode = new SmGlyphSpecialNode(CurToken); + break; + + default : + DBG_ASSERT(0, "Sm: unbekannter Fall"); + } + NodeStack.Push(pNode); + + NextToken(); +} + + +void SmParser::UnOper() +{ + DBG_ASSERT(TokenInGroup(TGUNOPER), "Sm: falsches Token"); + + SmToken aNodeToken = CurToken; + SmTokenType eType = CurToken.eType; + BOOL bIsPostfix = eType == TFACT; + + SmStructureNode *pSNode; + SmNode *pOper, + *pExtra = 0, + *pArg; + + switch (eType) + { + case TABS : + case TSQRT : + NextToken(); + break; + + case TNROOT : + NextToken(); + Power(); + pExtra = NodeStack.Pop(); + break; + + case TUOPER : + NextToken(); + GlyphSpecial(); + pOper = NodeStack.Pop(); + break; + + case TPLUS : + case TMINUS : + case TPLUSMINUS : + case TMINUSPLUS : + case TNEG : + case TFACT : + OpSubSup(); + pOper = NodeStack.Pop(); + break; + + default : + Error(PE_UNOPER_EXPECTED); + } + + // get argument + Power(); + pArg = NodeStack.Pop(); + + if (eType == TABS) + { pSNode = new SmBraceNode(aNodeToken); + pSNode->SetScaleMode(SCALE_HEIGHT); + + // build nodes for left & right lines + // (text, group, level of the used token are of no interrest here) + // we'll use row & column of the keyword for abs + aNodeToken.eType = TABS; + // + aNodeToken.cMathChar = MS_LINE; +#ifdef USE_POLYGON + SmNode* pLeft = new SmPolygonNode(aNodeToken); +#else + SmNode* pLeft = new SmMathSymbolNode(aNodeToken); +#endif + // + aNodeToken.cMathChar = MS_LINE; +#ifdef USE_POLYGON + SmNode* pRight = new SmPolygonNode(aNodeToken); +#else + SmNode* pRight = new SmMathSymbolNode(aNodeToken); +#endif + + pSNode->SetSubNodes(pLeft, pArg, pRight); + } + else if (eType == TSQRT || eType == TNROOT) + { pSNode = new SmRootNode(aNodeToken); + pOper = new SmRootSymbolNode(aNodeToken); + pSNode->SetSubNodes(pExtra, pOper, pArg); + } + else + { pSNode = new SmUnHorNode(aNodeToken); + + if (bIsPostfix) + pSNode->SetSubNodes(pArg, pOper); + else + // prefix operator + pSNode->SetSubNodes(pOper, pArg); + } + + NodeStack.Push(pSNode); +} + + +void SmParser::Attribut() +{ + DBG_ASSERT(TokenInGroup(TGATTRIBUT), "Sm: falsche Tokengruppe"); + + SmStructureNode *pSNode = new SmAttributNode(CurToken); + SmNode *pAttr; + SmScaleMode eScaleMode = SCALE_NONE; + + // get appropriate node for the attribut itself + switch (CurToken.eType) + { case TUNDERLINE : + case TOVERLINE : + case TOVERSTRIKE : + pAttr = new SmRectangleNode(CurToken); + eScaleMode = SCALE_WIDTH; + break; + + case TWIDEVEC : + case TWIDEHAT : + case TWIDETILDE : +#ifdef USE_POLYGON + pAttr = new SmPolygonNode(CurToken); +#else + pAttr = new SmMathSymbolNode(CurToken); +#endif + eScaleMode = SCALE_WIDTH; + break; + + default : + pAttr = new SmMathSymbolNode(CurToken); + } + + NextToken(); + + pSNode->SetSubNodes(pAttr, 0); + pSNode->SetScaleMode(eScaleMode); + NodeStack.Push(pSNode); +} + + +void SmParser::FontAttribut() +{ + DBG_ASSERT(TokenInGroup(TGFONTATTR), "Sm: falsche Tokengruppe"); + + switch (CurToken.eType) + { + case TITALIC : + case TNITALIC : + case TBOLD : + case TNBOLD : + case TPHANTOM : + NodeStack.Push(new SmFontNode(CurToken)); + NextToken(); + break; + + case TSIZE : + FontSize(); + break; + + case TFONT : + Font(); + break; + + case TCOLOR : + Color(); + break; + + default : + DBG_ASSERT(0, "Sm: unbekannter Fall"); + } +} + + +void SmParser::Color() +{ + DBG_ASSERT(CurToken.eType == TCOLOR, "Sm : Ooops..."); + + // last color rules, get that one + SmToken aToken; + do + { NextToken(); + + if (TokenInGroup(TGCOLOR)) + { aToken = CurToken; + NextToken(); + } + else + Error(PE_COLOR_EXPECTED); + } while (CurToken.eType == TCOLOR); + + NodeStack.Push(new SmFontNode(aToken)); +} + + +void SmParser::Font() +{ + DBG_ASSERT(CurToken.eType == TFONT, "Sm : Ooops..."); + + // last font rules, get that one + SmToken aToken; + do + { NextToken(); + + if (TokenInGroup(TGFONT)) + { aToken = CurToken; + NextToken(); + } + else + Error(PE_FONT_EXPECTED); + } while (CurToken.eType == TFONT); + + NodeStack.Push(new SmFontNode(aToken)); +} +BOOL lcl_IsNumber(const UniString& rText) +{ + BOOL bPoint = FALSE; + const sal_Unicode* pBuffer = rText.GetBuffer(); + for(xub_StrLen nPos = 0; nPos < rText.Len(); nPos++, pBuffer++) + { + const sal_Unicode cChar = *pBuffer; + if(cChar == '.') + { + if(bPoint) + return FALSE; + else + bPoint = TRUE; + } + else if ( (cChar < 48) || (cChar > 57) ) + return FALSE; + } + return TRUE; +} + +void SmParser::FontSize() +{ + DBG_ASSERT(CurToken.eType == TSIZE, "Sm : Ooops..."); + + USHORT Type; + SmFontNode *pFontNode = new SmFontNode(CurToken); + + NextToken(); + + switch (CurToken.eType) + { + case TNUMBER: Type = FNTSIZ_ABSOLUT; break; + case TPLUS: Type = FNTSIZ_PLUS; break; + case TMINUS: Type = FNTSIZ_MINUS; break; + case TMULTIPLY: Type = FNTSIZ_MULTIPLY; break; + case TDIVIDEBY: Type = FNTSIZ_DIVIDE; break; + + default: + delete pFontNode; + Error(PE_SIZE_EXPECTED); + return; + } + + if (Type != FNTSIZ_ABSOLUT) + { + NextToken(); + if (CurToken.eType != TNUMBER) + { + delete pFontNode; + Error(PE_SIZE_EXPECTED); + return; + } + } + + // get number argument + double fTmp; + Fraction aValue; + if(lcl_IsNumber(CurToken.aText) && + sscanf(ByteString(CurToken.aText, RTL_TEXTENCODING_ASCII_US).GetBuffer(), "%lf", &fTmp) == 1) + aValue = fTmp; + + NextToken(); + + pFontNode->SetSizeParameter(aValue, Type); + NodeStack.Push(pFontNode); +} + + +void SmParser::Brace() +{ + DBG_ASSERT(CurToken.eType == TLEFT || TokenInGroup(TGLBRACES), + "Sm: kein Klammer Ausdruck"); + + SmStructureNode *pSNode = new SmBraceNode(CurToken); + SmNode *pBody = 0, + *pLeft = 0, + *pRight = 0; + SmScaleMode eScaleMode = SCALE_NONE; + SmParseError eError = PE_NONE; + + if (CurToken.eType == TLEFT) + { NextToken(); + + eScaleMode = SCALE_HEIGHT; + + // check for left bracket + if (TokenInGroup(TGLBRACES) || TokenInGroup(TGRBRACES)) + { +#ifdef USE_POLYGON + pLeft = new SmPolygonNode(CurToken); +#else + pLeft = new SmMathSymbolNode(CurToken); +#endif + NextToken(); + Bracebody(TRUE); + pBody = NodeStack.Pop(); + + if (CurToken.eType == TRIGHT) + { NextToken(); + + // check for right bracket + if (TokenInGroup(TGLBRACES) || TokenInGroup(TGRBRACES)) + { +#ifdef USE_POLYGON + pRight = new SmPolygonNode(CurToken); +#else + pRight = new SmMathSymbolNode(CurToken); +#endif + NextToken(); + } + else + eError = PE_RBRACE_EXPECTED; + } + else + eError = PE_RIGHT_EXPECTED; + } + else + eError = PE_LBRACE_EXPECTED; + } + else + { + if (TokenInGroup(TGLBRACES)) + { +#ifdef USE_POLYGON + pLeft = new SmPolygonNode(CurToken); +#else + pLeft = new SmMathSymbolNode(CurToken); +#endif + NextToken(); + Bracebody(FALSE); + pBody = NodeStack.Pop(); + + SmTokenType eExpectedType; + switch (pLeft->GetToken().eType) + { case TLPARENT : eExpectedType = TRPARENT; break; + case TLBRACKET : eExpectedType = TRBRACKET; break; + case TLBRACE : eExpectedType = TRBRACE; break; + case TLDBRACKET : eExpectedType = TRDBRACKET; break; + case TLLINE : eExpectedType = TRLINE; break; + case TLDLINE : eExpectedType = TRDLINE; break; + case TLANGLE : eExpectedType = TRANGLE; break; + case TLFLOOR : eExpectedType = TRFLOOR; break; + case TLCEIL : eExpectedType = TRCEIL; break; + default : + DBG_ASSERT(0, "Sm: unbekannter Fall"); + } + + if (CurToken.eType == eExpectedType) + { +#ifdef USE_POLYGON + pRight = new SmPolygonNode(CurToken); +#else + pRight = new SmMathSymbolNode(CurToken); +#endif + NextToken(); + } + else + eError = PE_PARENT_MISMATCH; + } + else + eError = PE_LBRACE_EXPECTED; + } + + if (eError == PE_NONE) + { DBG_ASSERT(pLeft, "Sm: NULL pointer"); + DBG_ASSERT(pRight, "Sm: NULL pointer"); + pSNode->SetSubNodes(pLeft, pBody, pRight); + pSNode->SetScaleMode(eScaleMode); + NodeStack.Push(pSNode); + } + else + { delete pSNode; + delete pBody; + delete pLeft; + delete pRight; + + Error(eError); + } +} + + +void SmParser::Bracebody(BOOL bIsLeftRight) +{ + SmStructureNode *pBody = new SmBracebodyNode(CurToken); + SmNodeArray aNodes; + USHORT nNum = 0; + + // get body if any + if (bIsLeftRight) + { + do + { + if (CurToken.eType == TMLINE) + { +#ifdef USE_POLYGON + NodeStack.Push(new SmPolygonNode(CurToken)); +#else + NodeStack.Push(new SmMathSymbolNode(CurToken)); +#endif + NextToken(); + nNum++; + } + else if (CurToken.eType != TRIGHT) + { Align(); + nNum++; + + if (CurToken.eType != TMLINE && CurToken.eType != TRIGHT) + Error(PE_RIGHT_EXPECTED); + } + } while (CurToken.eType != TEND && CurToken.eType != TRIGHT); + } + else + { + do + { + if (CurToken.eType == TMLINE) + { +#ifdef USE_POLYGON + NodeStack.Push(new SmPolygonNode(CurToken)); +#else + NodeStack.Push(new SmMathSymbolNode(CurToken)); +#endif + NextToken(); + nNum++; + } + else if (!TokenInGroup(TGRBRACES)) + { Align(); + nNum++; + + if (CurToken.eType != TMLINE && !TokenInGroup(TGRBRACES)) + Error(PE_RBRACE_EXPECTED); + } + } while (CurToken.eType != TEND && !TokenInGroup(TGRBRACES)); + } + + // build argument vector in parsing order + aNodes.SetSize(nNum); + for (USHORT i = 0; i < nNum; i++) + aNodes.Put(nNum - 1 - i, NodeStack.Pop()); + + pBody->SetSubNodes(aNodes); + pBody->SetScaleMode(bIsLeftRight ? SCALE_HEIGHT : SCALE_NONE); + NodeStack.Push(pBody); +} + + +void SmParser::Function() +{ + switch (CurToken.eType) + { + case TFUNC: + NextToken(); // skip "FUNC"-statement + // fall through + + case TSIN : + case TCOS : + case TTAN : + case TCOT : + case TASIN : + case TACOS : + case TATAN : + case TACOT : + case TSINH : + case TCOSH : + case TTANH : + case TCOTH : + case TASINH : + case TACOSH : + case TATANH : + case TACOTH : + case TLN : + case TLOG : + case TEXP : + NodeStack.Push(new SmTextNode(CurToken, FNT_FUNCTION)); + NextToken(); + break; + + default: + Error(PE_FUNC_EXPECTED); + } +} + + +void SmParser::Binom() +{ + SmNodeArray ExpressionArray; + SmStructureNode *pSNode = new SmTableNode(CurToken); + + NextToken(); + + Sum(); + Sum(); + + ExpressionArray.SetSize(2); + + for (int i = 0; i < 2; i++) + ExpressionArray.Put(2 - (i + 1), NodeStack.Pop()); + + pSNode->SetSubNodes(ExpressionArray); + NodeStack.Push(pSNode); +} + + +void SmParser::Stack() +{ + SmNodeArray ExpressionArray; + NextToken(); + if (CurToken.eType == TLGROUP) + { + USHORT n = 0; + + do + { + NextToken(); + Align(); + n++; + } + while (CurToken.eType == TPOUND); + + ExpressionArray.SetSize(n); + + for (USHORT i = 0; i < n; i++) + ExpressionArray.Put(n - (i + 1), NodeStack.Pop()); + + if (CurToken.eType != TRGROUP) + Error(PE_RGROUP_EXPECTED); + + NextToken(); + + SmStructureNode *pSNode = new SmTableNode(CurToken); + pSNode->SetSubNodes(ExpressionArray); + NodeStack.Push(pSNode); + } + else + Error(PE_LGROUP_EXPECTED); +} + + +void SmParser::Matrix() +{ + SmNodeArray ExpressionArray; + + NextToken(); + if (CurToken.eType == TLGROUP) + { + USHORT c = 0; + + do + { + NextToken(); + Align(); + c++; + } + while (CurToken.eType == TPOUND); + + USHORT r = 1; + + while (CurToken.eType == TDPOUND) + { + NextToken(); + for (USHORT i = 0; i < c; i++) + { + Align(); + if (i < (c - 1)) + { + if (CurToken.eType == TPOUND) + { + NextToken(); + } + else + Error(PE_POUND_EXPECTED); + } + } + + r++; + } + + long nRC = r * c; + + ExpressionArray.SetSize(nRC); + + for (USHORT i = 0; i < (nRC); i++) + ExpressionArray.Put((nRC) - (i + 1), NodeStack.Pop()); + + if (CurToken.eType != TRGROUP) + Error(PE_RGROUP_EXPECTED); + + NextToken(); + + SmMatrixNode *pMNode = new SmMatrixNode(CurToken); + pMNode->SetSubNodes(ExpressionArray); + pMNode->SetRowCol(r, c); + NodeStack.Push(pMNode); + } + else + Error(PE_LGROUP_EXPECTED); +} + + +void SmParser::Special() +{ + NodeStack.Push(new SmSpecialNode(CurToken)); + NextToken(); +} + + +void SmParser::GlyphSpecial() +{ + NodeStack.Push(new SmGlyphSpecialNode(CurToken)); + NextToken(); +} + + +void SmParser::Error(SmParseError eError) +{ + SmStructureNode *pSNode = new SmExpressionNode(CurToken); + SmErrorNode *pErr = new SmErrorNode(eError, CurToken); + pSNode->SetSubNodes(pErr, 0); + + //! put a structure node on the stack (instead of the error node itself) + //! because sometimes such a node is expected in order to attach some + //! subnodes + NodeStack.Push(pSNode); + + AddError(eError, pSNode); + + NextToken(); +} + + +// end gramar + + +SmParser::SmParser() +{ + switch (GetSystemLineEnd()) + { + case LINEEND_CRLF: + case LINEEND_LF: CharLineEnd = '\n'; break; + case LINEEND_CR: CharLineEnd = '\r'; break; + + default: + CharLineEnd = '\n'; + break; + } + + bConvert40To50 = FALSE; +} + + +BOOL SmParser::CheckSyntax(const XubString &rBuffer) +{ + SmErrDescList OldErrorList; + + BufferString = rBuffer; + BufferIndex = + nTokenIndex = 0; + Row = + Column = 1; + + NodeStack.Clear(); + + OldErrorList = ErrDescList; + ErrDescList.Clear(); + + NextToken(); + Table(); + + delete NodeStack.Pop(); + + if (ErrDescList.Count() > 0) + { + for (int i = 0; i < ErrDescList.Count(); i++) + delete ErrDescList.Remove(i); + + ErrDescList = OldErrorList; + + return (FALSE); + } + ErrDescList = OldErrorList; + + return (TRUE); +} + + +SmNode *SmParser::Parse(const XubString &rBuffer) +{ + BufferString = rBuffer; + BufferIndex = + nTokenIndex = 0; + Row = + Column = 1; + CurError = -1; + + for (int i = 0; i < ErrDescList.Count(); i++) + delete ErrDescList.Remove(i); + + ErrDescList.Clear(); + + NodeStack.Clear(); + + NextToken(); + Table(); + + return NodeStack.Pop(); +} + + +USHORT SmParser::AddError(SmParseError Type, SmNode *pNode) +{ + SmErrorDesc *pErrDesc = new SmErrorDesc; + + pErrDesc->Type = Type; + pErrDesc->pNode = pNode; + pErrDesc->Text = XubString(SmResId(RID_ERR_IDENT)); + + USHORT nRID; + switch (Type) + { + case PE_UNEXPECTED_CHAR: nRID = RID_ERR_UNEXPECTEDCHARACTER; break; + case PE_LGROUP_EXPECTED: nRID = RID_ERR_LGROUPEXPECTED; break; + case PE_RGROUP_EXPECTED: nRID = RID_ERR_RGROUPEXPECTED; break; + case PE_LBRACE_EXPECTED: nRID = RID_ERR_LBRACEEXPECTED; break; + case PE_RBRACE_EXPECTED: nRID = RID_ERR_RBRACEEXPECTED; break; + case PE_FUNC_EXPECTED: nRID = RID_ERR_FUNCEXPECTED; break; + case PE_UNOPER_EXPECTED: nRID = RID_ERR_UNOPEREXPECTED; break; + case PE_BINOPER_EXPECTED: nRID = RID_ERR_BINOPEREXPECTED; break; + case PE_SYMBOL_EXPECTED: nRID = RID_ERR_SYMBOLEXPECTED; break; + case PE_IDENTIFIER_EXPECTED: nRID = RID_ERR_IDENTEXPECTED; break; + case PE_POUND_EXPECTED: nRID = RID_ERR_POUNDEXPECTED; break; + case PE_COLOR_EXPECTED: nRID = RID_ERR_COLOREXPECTED; break; + case PE_RIGHT_EXPECTED: nRID = RID_ERR_RIGHTEXPECTED; break; + + default: + nRID = RID_ERR_UNKOWN; + } + pErrDesc->Text += SmResId(nRID); + + ErrDescList.Insert(pErrDesc); + + return ErrDescList.GetPos(pErrDesc); +} + + +const SmErrorDesc *SmParser::NextError() +{ + if (ErrDescList.Count()) + if (CurError > 0) return ErrDescList.Seek(--CurError); + else + { + CurError = 0; + return ErrDescList.Seek(CurError); + } + else return 0; +} + + +const SmErrorDesc *SmParser::PrevError() +{ + if (ErrDescList.Count()) + if (CurError < (int) (ErrDescList.Count() - 1)) return ErrDescList.Seek(++CurError); + else + { + CurError = (int) (ErrDescList.Count() - 1); + return ErrDescList.Seek(CurError); + } + else return 0; +} + + +const SmErrorDesc *SmParser::GetError(USHORT i) +{ + return (i >= 0 && i < ErrDescList.Count()) + ? ErrDescList.Seek(i) + : ErrDescList.Seek(CurError); +} + + diff --git a/starmath/source/rect.cxx b/starmath/source/rect.cxx new file mode 100644 index 000000000000..12853c07189c --- /dev/null +++ b/starmath/source/rect.cxx @@ -0,0 +1,908 @@ +/************************************************************************* + * + * $RCSfile: rect.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef _STRING_HXX //autogen +#include +#endif +#ifndef _TOOLS_DEBUG_HXX //autogen +#include +#endif +#ifndef _SV_SVAPP_HXX //autogen +#include +#endif +#ifndef _SV_WRKWIN_HXX //autogen +#include +#endif +#ifndef _SV_VIRDEV_HXX //autogen +#include +#endif + + +#include "rect.hxx" +#include "types.hxx" +#include "xchar.hxx" +#include "utility.hxx" +#include "smmod.hxx" + + +//////////////////////////////////////////////////////////////////////////////// + + +// '\0' terminiertes Array mit Zeichen, die im StarMath Font als Buchstaben +// betrachtet werden sollen, (um im Gegensatz zu den anderen Operatoren +// und Symbolen ein "normales"(ungecliptes) SmRect zu erhalten). +static xub_Unicode __READONLY_DATA aMathAlpha[] = +{ + MS_ALEPH, MS_IM, MS_RE, MS_WP, + xub_Unicode('\x70'), MS_EMPTYSET, xub_Unicode('\xF0'), xub_Unicode('\xF1'), + xub_Unicode('\xF2'), xub_Unicode('\xF3'), xub_Unicode('\xF4'), MS_HBAR, + MS_LAMBDABAR, MS_SETN, MS_SETZ, MS_SETQ, + MS_SETR, MS_SETC, xub_Unicode('\xB4'), xub_Unicode('\xB5'), + xub_Unicode('\xB8'), xub_Unicode('\xB9'), xub_Unicode('\xBA'), + xub_Unicode('\0') +}; + +BOOL SmIsMathAlpha(const XubString &rText) + // ergibt genau dann TRUE, wenn das Zeichen (aus dem StarMath Font) wie ein + // Buchstabe behandelt werden soll. +{ + if (rText.Len() == 0) + return FALSE; + + DBG_ASSERT(rText.Len() == 1, "Sm : String enthält nicht genau ein Zeichen"); + xub_Unicode cChar = rText.GetChar(0); + + // ist es ein griechisches Zeichen ? + if (xub_Unicode('\xC6') <= cChar && cChar <= xub_Unicode('\xEE')) + return TRUE; + else + { + // kommt es in 'aMathAlpha' vor ? + const xub_Unicode *pChar = aMathAlpha; + while (*pChar && *pChar != cChar) + pChar++; + return *pChar != xub_Unicode('\0'); + } +} + + +//////////////////////////////////////// +// +// SmRect members +// + + +SmRect::SmRect() + // constructs empty rectangle at (0, 0) with width and height 0. +{ + DBG_ASSERT(aTopLeft == Point(0, 0), "Sm: ooops..."); + DBG_ASSERT(aSize == Size(0, 0), "Sm: ooops..."); + + bHasBaseline = bHasAlignInfo = FALSE; + nBaseline = nAlignT = nAlignM = nAlignB = + nGlyphTop = nGlyphBottom = + nItalicLeftSpace = nItalicRightSpace = + nLoAttrFence = nHiAttrFence = 0; +} + + +SmRect::SmRect(const SmRect &rRect) +: aTopLeft(rRect.aTopLeft), + aSize(rRect.aSize) +{ + bHasBaseline = rRect.bHasBaseline; + nBaseline = rRect.nBaseline; + nAlignT = rRect.nAlignT; + nAlignM = rRect.nAlignM; + nAlignB = rRect.nAlignB; + nGlyphTop = rRect.nGlyphTop; + nGlyphBottom = rRect.nGlyphBottom; + nHiAttrFence = rRect.nHiAttrFence; + nLoAttrFence = rRect.nLoAttrFence; + bHasAlignInfo = rRect.bHasAlignInfo; + nItalicLeftSpace = rRect.nItalicLeftSpace; + nItalicRightSpace = rRect.nItalicRightSpace; +} + + +void SmRect::CopyAlignInfo(const SmRect &rRect) +{ + nBaseline = rRect.nBaseline; + bHasBaseline = rRect.bHasBaseline; + nAlignT = rRect.nAlignT; + nAlignM = rRect.nAlignM; + nAlignB = rRect.nAlignB; + bHasAlignInfo = rRect.bHasAlignInfo; + nLoAttrFence = rRect.nLoAttrFence; + nHiAttrFence = rRect.nHiAttrFence; +} + + +void SmRect::BuildRect(const OutputDevice &rDev, const SmFormat *pFormat, + const XubString &rText, long nBorderWidth) +{ +#ifndef PRODUCT + if (rDev.GetOutDevType() != OUTDEV_PRINTER) + DBG_WARNING("Sm : Referenz-Device ist kein Drucker"); +#endif + + DBG_ASSERT(aTopLeft == Point(0, 0), "Sm: Ooops..."); + + aSize = Size(rDev.GetTextWidth(rText), rDev.GetTextHeight()); + + const FontMetric aFM (rDev.GetFontMetric()); + BOOL bIsMath = aFM.GetName().EqualsIgnoreCaseAscii("StarMath"); + BOOL bAllowSmaller = bIsMath && !SmIsMathAlpha(rText); + const long nFontHeight = rDev.GetFont().GetSize().Height(); + + bHasAlignInfo = TRUE; + bHasBaseline = TRUE; + nBaseline = aFM.GetAscent(); + nAlignT = nBaseline - nFontHeight * 750L / 1000L; + nAlignM = nBaseline - nFontHeight * 121L / 422L; + // that's where the horizontal bars of '+', '-', ... are + // (1/3 of ascent over baseline) + // (121 = 1/3 of 12pt ascent, 422 = 12pt fontheight) + nAlignB = nBaseline; + + // workaround for printer fonts with very small (possible 0 or even + // negative(!)) leading + if (aFM.GetLeading() < 5 && rDev.GetOutDevType() == OUTDEV_PRINTER) + { +#if SUPD >= 593 + OutputDevice *pWindow = Application::GetDefaultDevice(); +#else + Window *pWindow = Application::GetAppWindow(); +#endif + + pWindow->Push(PUSH_MAPMODE | PUSH_FONT); + + pWindow->SetMapMode(rDev.GetMapMode()); + pWindow->SetFont(rDev.GetFontMetric()); + + long nDelta = pWindow->GetFontMetric().GetLeading(); + if (nDelta == 0) + { // dieser Wert entspricht etwa einem Leading von 80 bei einer + // Fonthöhe von 422 (12pt) + nDelta = nFontHeight * 8L / 43; + } + SetTop(GetTop() - nDelta); + + pWindow->Pop(); + } + + // get GlyphBoundRect + Rectangle aGlyphRect; + BOOL bSuccess = SmGetGlyphBoundRect(rDev, rText, aGlyphRect); + DBG_ASSERT(bSuccess, "Sm : Ooops... (fehlt evtl. der Font?)"); + + nItalicLeftSpace = GetLeft() - aGlyphRect.Left() + nBorderWidth; + nItalicRightSpace = aGlyphRect.Right() - GetRight() + nBorderWidth; + if (nItalicLeftSpace < 0 && !bAllowSmaller) + nItalicLeftSpace = 0; + if (nItalicRightSpace < 0 && !bAllowSmaller) + nItalicRightSpace = 0; + + long nDist = 0; + if (pFormat) + nDist = (rDev.GetFont().GetSize().Height() + * pFormat->GetDistance(DIS_ORNAMENTSIZE)) / 100L; + + nHiAttrFence = aGlyphRect.TopLeft().Y() - 1 - nBorderWidth - nDist; + nLoAttrFence = SmFromTo(GetAlignB(), GetBottom(), 0.0); + + nGlyphTop = aGlyphRect.Top() - nBorderWidth; + nGlyphBottom = aGlyphRect.Bottom() + nBorderWidth; + + if (bAllowSmaller) + { + // für Symbole und Operatoren aus dem StarMath Font passen wir den + // oberen und unteren Rand dem Zeichen an. + SetTop(nGlyphTop); + SetBottom(nGlyphBottom); + } + + if (nHiAttrFence < GetTop()) + nHiAttrFence = GetTop(); + + if (nLoAttrFence > GetBottom()) + nLoAttrFence = GetBottom(); + + DBG_ASSERT(rText.Len() == 0 || !IsEmpty(), + "Sm: leeres Rechteck erzeugt"); +} + + +void SmRect::Init(const OutputDevice &rDev, const SmFormat *pFormat, + const XubString &rText, long nBorderWidth) + // get rectangle fitting for drawing 'rText' on OutputDevice 'rDev' +{ + SmRectCache *pRectCache = SM_MOD1()->GetRectCache(); + DBG_ASSERT(pRectCache, "Sm : NULL pointer"); + + // build key for rectangle (to look up in cache for) + const SmRectCache::Key aKey (rText, rDev.GetFont()); + + const SmRect *pResult = pRectCache->Search(aKey); + if (pResult) + *this = *pResult; + else + { // build rectangle and put it in cache + BuildRect(rDev, pFormat, rText, nBorderWidth); + pResult = pRectCache->Add(aKey, *this); + } + DBG_ASSERT(pResult, "Sm : NULL pointer"); +} + + +SmRect::SmRect(const OutputDevice &rDev, const SmFormat *pFormat, + const XubString &rText, long nBorderWidth) +{ + Init(rDev, pFormat, rText, nBorderWidth); +} + + +SmRect::SmRect(const OutputDevice &rDev, const SmFormat *pFormat, + const SmPolygon &rPoly, long nBorderWidth) +{ + Init(rDev, pFormat, rPoly.GetChar(), nBorderWidth); + + // den Offset in der Zeichenzelle passend waehlen + Point aPolyOffset (rPoly.GetOrigPos()); + aPolyOffset.X() *= rPoly.GetScaleX(); + aPolyOffset.Y() *= rPoly.GetScaleY(); + + // und es an diese Position schieben + Rectangle aPolyRect ( rPoly.GetBoundRect(rDev) ); + Point aDelta (aPolyOffset - aPolyRect.TopLeft()); + aPolyRect.Move( aDelta.X(), aDelta.Y() ); + + aTopLeft.X() = aPolyRect.Left() - nBorderWidth; + aTopLeft.Y() = aPolyRect.Top() - nBorderWidth; + + aSize = aPolyRect.GetSize(); + aSize.Width() += 2 * nBorderWidth; + aSize.Height() += 2 * nBorderWidth; + + nItalicLeftSpace = nItalicRightSpace = 0; +} + + +SmRect::SmRect(long nWidth, long nHeight) + // this constructor should never be used for anything textlike because + // it will not provide useful values for baseline, AlignT and AlignB! + // It's purpose is to get a 'SmRect' for the horizontal line in fractions + // as used in 'SmBinVerNode'. +: aSize(nWidth, nHeight) +{ + DBG_ASSERT(aTopLeft == Point(0, 0), "Sm: ooops..."); + + bHasBaseline = FALSE; + bHasAlignInfo = TRUE; + nBaseline = 0; + nAlignT = GetTop(); + nAlignB = GetBottom(); + nAlignM = (nAlignT + nAlignB) / 2; // this is the default + nItalicLeftSpace = nItalicRightSpace = 0; + nGlyphTop = nHiAttrFence = GetTop(); + nGlyphBottom = nLoAttrFence = GetBottom(); +} + + +void SmRect::SetLeft(long nLeft) +{ + if (nLeft <= GetRight()) + { aSize.Width() = GetRight() - nLeft + 1; + aTopLeft.X() = nLeft; + } +} + + +void SmRect::SetRight(long nRight) +{ + if (nRight >= GetLeft()) + aSize.Width() = nRight - GetLeft() + 1; +} + + +void SmRect::SetBottom(long nBottom) +{ + if (nBottom >= GetTop()) + aSize.Height() = nBottom - GetTop() + 1; +} + + +void SmRect::SetTop(long nTop) +{ + if (nTop <= GetBottom()) + { aSize.Height() = GetBottom() - nTop + 1; + aTopLeft.Y() = nTop; + } +} + + +void SmRect::Move(const Point &rPosition) + // move rectangle by position 'rPosition'. +{ + aTopLeft += rPosition; + + long nDelta = rPosition.Y(); + nBaseline += nDelta; + nAlignT += nDelta; + nAlignM += nDelta; + nAlignB += nDelta; + nGlyphTop += nDelta; + nGlyphBottom += nDelta; + nHiAttrFence += nDelta; + nLoAttrFence += nDelta; +} + + +const Point SmRect::AlignTo(const SmRect &rRect, RectPos ePos, + RectHorAlign eHor, RectVerAlign eVer) const +{ Point aPos (GetTopLeft()); + // will become the topleft point of the new rectangle position + + // set horizontal or vertical new rectangle position depending on + // 'ePos' is one of 'RP_LEFT', 'RP_RIGHT' or 'RP_TOP', 'RP_BOTTOM' + switch (ePos) + { case RP_LEFT : + aPos.X() = rRect.GetItalicLeft() - GetItalicRightSpace() + - GetWidth(); + break; + case RP_RIGHT : + aPos.X() = rRect.GetItalicRight() + 1 + GetItalicLeftSpace(); + break; + case RP_TOP : + aPos.Y() = rRect.GetTop() - GetHeight(); + break; + case RP_BOTTOM : + aPos.Y() = rRect.GetBottom() + 1; + break; + case RP_ATTRIBUT : + aPos.X() = rRect.GetItalicCenterX() - GetItalicWidth() / 2 + + GetItalicLeftSpace(); + break; + default : + DBG_ASSERT(FALSE, "Sm: unbekannter Fall"); + } + + // check if horizontal position is already set + if (ePos == RP_LEFT || ePos == RP_RIGHT || ePos == RP_ATTRIBUT) + // correct error in current vertical position + switch (eVer) + { case RVA_TOP : + aPos.Y() += rRect.GetAlignT() - GetAlignT(); + break; + case RVA_MID : + aPos.Y() += rRect.GetAlignM() - GetAlignM(); + break; + case RVA_BASELINE : + // align baselines if possible else align mid's + if (HasBaseline() && rRect.HasBaseline()) + aPos.Y() += rRect.GetBaseline() - GetBaseline(); + else + aPos.Y() += rRect.GetAlignM() - GetAlignM(); + break; + case RVA_BOTTOM : + aPos.Y() += rRect.GetAlignB() - GetAlignB(); + break; + case RVA_CENTERY : + aPos.Y() += rRect.GetCenterY() - GetCenterY(); + break; + case RVA_ATTRIBUT_HI: + aPos.Y() += rRect.GetHiAttrFence() - GetBottom(); + break; + case RVA_ATTRIBUT_MID : + aPos.Y() += SmFromTo(rRect.GetAlignB(), rRect.GetAlignT(), 0.4) + - GetCenterY(); + break; + case RVA_ATTRIBUT_LO : + aPos.Y() += rRect.GetLoAttrFence() - GetTop(); + break; + default : + DBG_ASSERT(FALSE, "Sm: unbekannter Fall"); + } + + // check if vertical position is already set + if (ePos == RP_TOP || ePos == RP_BOTTOM) + // correct error in current horizontal position + switch (eHor) + { case RHA_LEFT : + aPos.X() += rRect.GetItalicLeft() - GetItalicLeft(); + break; + case RHA_CENTER : + aPos.X() += rRect.GetItalicCenterX() - GetItalicCenterX(); + break; + case RHA_RIGHT : + aPos.X() += rRect.GetItalicRight() - GetItalicRight(); + break; + default : + DBG_ASSERT(FALSE, "Sm: unbekannter Fall"); + } + + return aPos; +} + + +SmRect & SmRect::Union(const SmRect &rRect) + // rectangle union of current one with 'rRect'. The result is to be the + // smallest rectangles that covers the space of both rectangles. + // (empty rectangles cover no space) + //! Italic correction is NOT taken into account here! +{ + if (rRect.IsEmpty()) + return *this; + + long nL = rRect.GetLeft(), + nR = rRect.GetRight(), + nT = rRect.GetTop(), + nB = rRect.GetBottom(), + nGT = rRect.nGlyphTop, + nGB = rRect.nGlyphBottom; + if (!IsEmpty()) + { long nTmp; + + if ((nTmp = GetLeft()) < nL) + nL = nTmp; + if ((nTmp = GetRight()) > nR) + nR = nTmp; + if ((nTmp = GetTop()) < nT) + nT = nTmp; + if ((nTmp = GetBottom()) > nB) + nB = nTmp; + if ((nTmp = nGlyphTop) < nGT) + nGT = nTmp; + if ((nTmp = nGlyphBottom) > nGB) + nGB = nTmp; + } + + SetLeft(nL); + SetRight(nR); + SetTop(nT); + SetBottom(nB); + nGlyphTop = nGT; + nGlyphBottom = nGB; + + return *this; +} + + +SmRect & SmRect::ExtendBy(const SmRect &rRect, RectCopyMBL eCopyMode) + // let current rectangle be the union of itself and 'rRect' + // (the smallest rectangle surrounding both). Also adapt values for + // 'AlignT', 'AlignM', 'AlignB', baseline and italic-spaces. + // The baseline is set according to 'eCopyMode'. + // If one of the rectangles has no relevant info the other one is copied. +{ + // get some values used for (italic) spaces adaption + // ! (need to be done before changing current SmRect) ! + long nL = Min(GetItalicLeft(), rRect.GetItalicLeft()), + nR = Max(GetItalicRight(), rRect.GetItalicRight()); + + Union(rRect); + + SetItalicSpaces(GetLeft() - nL, nR - GetRight()); + + if (!HasAlignInfo()) + CopyAlignInfo(rRect); + else if (rRect.HasAlignInfo()) + { nAlignT = Min(GetAlignT(), rRect.GetAlignT()); + nAlignB = Max(GetAlignB(), rRect.GetAlignB()); + nHiAttrFence = Min(GetHiAttrFence(), rRect.GetHiAttrFence()); + nLoAttrFence = Max(GetLoAttrFence(), rRect.GetLoAttrFence()); + DBG_ASSERT(HasAlignInfo(), "Sm: ooops..."); + + switch (eCopyMode) + { case RCP_THIS: + // already done + break; + case RCP_ARG: + CopyMBL(rRect); + break; + case RCP_NONE: + ClearBaseline(); + nAlignM = (nAlignT + nAlignB) / 2; + break; + case RCP_XOR: + if (!HasBaseline()) + CopyMBL(rRect); + break; + default : + DBG_ASSERT(FALSE, "Sm: unbekannter Fall"); + } + } + + return *this; +} + + +SmRect & SmRect::ExtendBy(const SmRect &rRect, RectCopyMBL eCopyMode, + long nNewAlignM) + // as 'ExtendBy' but sets AlignM value to 'nNewAlignM'. + // (this version will be used in 'SmBinVerNode' to provide means to + // align eg "{a over b} over c" correctly where AlignM should not + // be (AlignT + AlignB) / 2) +{ + DBG_ASSERT(HasAlignInfo(), "Sm: keine Align Info"); + + ExtendBy(rRect, eCopyMode); + nAlignM = nNewAlignM; + + return *this; +} + + +SmRect & SmRect::ExtendBy(const SmRect &rRect, RectCopyMBL eCopyMode, + BOOL bKeepVerAlignParams) + // as 'ExtendBy' but keeps original values for AlignT, -M and -B and + // baseline. + // (this is used in 'SmSupSubNode' where the sub-/supscripts shouldn't + // be allowed to modify these values.) +{ + long nOldAlignT = GetAlignT(), + nOldAlignM = GetAlignM(), + nOldAlignB = GetAlignB(), + nOldBaseline = nBaseline; //! depends not on 'HasBaseline' + BOOL bOldHasAlignInfo = HasAlignInfo(); + + ExtendBy(rRect, eCopyMode); + + if (bKeepVerAlignParams) + { nAlignT = nOldAlignT; + nAlignM = nOldAlignM; + nAlignB = nOldAlignB; + nBaseline = nOldBaseline; + bHasAlignInfo = bOldHasAlignInfo; + } + + return *this; +} + + +SmRect & SmRect::ExtendBy(const Point &rPoint) + // extend current rectangle to include 'rPoint'. + // The effect should be similar to + // "ExtendBy(rRect, RCP_THIS, (BOOL) TRUE)" + // where 'rRect' is a SmRect of size and width 1 with no italic spaces + // (as by "SmRect (1, 1)") and position at 'rPoint'. +{ + // get some values used for italic spaces adaption + // ! (need to be done before changing current SmRect) ! + long nL = Min(GetItalicLeft(), rPoint.X()), + nR = Max(GetItalicRight(), rPoint.X()); + + // this is the adaption of rectangle union + if (rPoint.X() < GetLeft()) + SetLeft(rPoint.X()); + if (rPoint.X() > GetRight()) + SetRight(rPoint.X()); + if (rPoint.Y() < GetTop()) + SetTop(rPoint.Y()); + if (rPoint.Y() > GetBottom()) + SetBottom(rPoint.Y()); + + SetItalicSpaces(GetLeft() - nL, nR - GetRight()); + + return *this; +} + + +long SmRect::OrientedDist(const Point &rPoint) const + // return oriented distance of rPoint to the current rectangle, + // especially the return value is <= 0 iff the point is inside the + // rectangle. + // For simplicity the maximum-norm is used. +{ + BOOL bIsInside = IsInsideItalicRect(rPoint); + + // build reference point to define the distance + Point aRef; + if (bIsInside) + { Point aIC (GetItalicCenterX(), GetCenterY()); + + aRef.X() = rPoint.X() >= aIC.X() ? GetItalicRight() : GetItalicLeft(); + aRef.Y() = rPoint.Y() >= aIC.Y() ? GetBottom() : GetTop(); + } + else + { + // x-coordinate + if (rPoint.X() > GetItalicRight()) + aRef.X() = GetItalicRight(); + else if (rPoint.X() < GetItalicLeft()) + aRef.X() = GetItalicLeft(); + else + aRef.X() = rPoint.X(); + // y-coordinate + if (rPoint.Y() > GetBottom()) + aRef.Y() = GetBottom(); + else if (rPoint.Y() < GetTop()) + aRef.Y() = GetTop(); + else + aRef.Y() = rPoint.Y(); + } + + // build distance vector + Point aDist (aRef - rPoint); + + long nAbsX = labs(aDist.X()), + nAbsY = labs(aDist.Y()); + + return bIsInside ? - Min(nAbsX, nAbsY) : Max (nAbsX, nAbsY); +} + + +BOOL SmRect::IsInsideRect(const Point &rPoint) const +{ + return rPoint.Y() >= GetTop() + && rPoint.Y() <= GetBottom() + && rPoint.X() >= GetLeft() + && rPoint.X() <= GetRight(); +} + + +BOOL SmRect::IsInsideItalicRect(const Point &rPoint) const +{ + return rPoint.Y() >= GetTop() + && rPoint.Y() <= GetBottom() + && rPoint.X() >= GetItalicLeft() + && rPoint.X() <= GetItalicRight(); +} + +SmRect SmRect::AsGlyphRect() const +{ + SmRect aRect (*this); + aRect.SetTop(nGlyphTop); + aRect.SetBottom(nGlyphBottom); + return aRect; +} + + +// forward declaration +void SmDrawFrame(OutputDevice &rDev, const Rectangle &rRec, + const Color aCol = COL_BLACK); + +void SmRect::Draw(OutputDevice &rDev, const Point &rPosition, int nFlags) const +{ + if (IsEmpty()) + return; + + rDev.Push(PUSH_LINECOLOR); + + if (nFlags & SM_RECT_LINES) + { long nLeftSpace = 0, + nRightSpace = 0; + + if (nFlags & SM_RECT_ITALIC) + { nLeftSpace = GetItalicLeftSpace(); + nRightSpace = GetItalicRightSpace(); + } + + long nLeft = GetLeft() - nLeftSpace, + nRight = GetRight() + nRightSpace; + + Point aOffset (rPosition - GetTopLeft()); + + rDev.SetLineColor(COL_LIGHTBLUE); + rDev.DrawLine(Point(nLeft, GetAlignB()) += aOffset, + Point(nRight, GetAlignB()) += aOffset); + rDev.DrawLine(Point(nLeft, GetAlignT()) += aOffset, + Point(nRight, GetAlignT()) += aOffset); + if (HasBaseline()) + rDev.DrawLine(Point(nLeft, GetBaseline()) += aOffset, + Point(nRight, GetBaseline()) += aOffset); + + rDev.SetLineColor(COL_GRAY); + rDev.DrawLine(Point(nLeft, GetHiAttrFence()) += aOffset, + Point(nRight, GetHiAttrFence()) += aOffset); + } + + if (nFlags & SM_RECT_MID) + { Point aCenter = rPosition + + (Point(GetItalicCenterX(), GetAlignM()) -= GetTopLeft()), + aLenX (GetWidth() / 5, 0), + aLenY (0, GetHeight() / 16); + + rDev.SetLineColor(COL_LIGHTGREEN); + rDev.DrawLine(aCenter - aLenX, aCenter + aLenX); + rDev.DrawLine(aCenter - aLenY, aCenter + aLenY); + } + + if (nFlags & SM_RECT_ITALIC) + SmDrawFrame(rDev, Rectangle(rPosition - Point(GetItalicLeftSpace(), 0), + GetItalicSize())); + + if (nFlags & SM_RECT_CORE) + SmDrawFrame(rDev, Rectangle(rPosition, GetSize()), COL_LIGHTRED); + + rDev.Pop(); +} + + + +//////////////////////////////////////// +// misc functions +// + + +void SmDrawFrame(OutputDevice &rDev, const Rectangle &rRec, + const Color aCol) +{ + rDev.Push(PUSH_LINECOLOR); + + rDev.SetLineColor(aCol); + + rDev.DrawLine(rRec.TopLeft(), rRec.BottomLeft()); + rDev.DrawLine(rRec.BottomLeft(), rRec.BottomRight()); + rDev.DrawLine(rRec.BottomRight(), rRec.TopRight()); + rDev.DrawLine(rRec.TopRight(), rRec.TopLeft()); + + rDev.Pop(); +} + + +BOOL SmGetGlyphBoundRect(const OutputDevice &rDev, + const XubString &rText, Rectangle &rRect) + // basically the same as 'GetGlyphBoundRect' (in class 'OutputDevice') + // but with a string as argument. +{ + // handle special case first + xub_StrLen nLen = rText.Len(); + if (nLen == 0) + { rRect.SetEmpty(); + return TRUE; + } + + // get a device where 'OutputDevice::GetGlyphBoundRect' will be successful + OutputDevice *pGlyphDev; + if (rDev.GetOutDevType() != OUTDEV_PRINTER) + pGlyphDev = (OutputDevice *) &rDev; + else + { + // since we format for the printer (where GetGlyphBoundRect will fail) + // we need a virtual device here. + pGlyphDev = SM_MOD1()->GetRectCache()->GetVirDev(); + } + + const FontMetric aDevFM (rDev.GetFontMetric()); + + pGlyphDev->Push(PUSH_FONT); + pGlyphDev->SetFont(rDev.GetFont()); + //! Da in der FontMetric die Weite immer != 0 ist (was fuer wide-Attribute + //! und skalierbare Klammern auch so benötigt wird) kann dies zu einer + //! Verzerrung der Proportionen im 'pGlyphDev' gegnüber dem 'rDev' kommen! + + const BOOL bOptimize = FALSE; + BOOL bSuccess = TRUE; + Point aPoint; + Rectangle aResult (aPoint, Size(rDev.GetTextWidth(rText), rDev.GetTextHeight())), + aTmp; + long nDelta; + + // setzen des linken Randes (dabei Leerzeichen erhalten!) + xub_Unicode cChar = rText.GetChar(0); + if (cChar != xub_Unicode(' ')) + { + bSuccess &= pGlyphDev->GetGlyphBoundRect(cChar, aTmp, bOptimize); + if (!aTmp.IsEmpty()) + { + // linken Rand am 'rDev' ermitteln + // (wir nehmen den linken Rand bezüglich 'pGlyphDev' und skalieren + // ihn passen für 'rDev') + long nLeftSpace = aTmp.Left() * rDev.GetTextWidth(cChar) + / pGlyphDev->GetTextWidth(cChar); + aResult.Left() += nLeftSpace; + } + } + + // setzen des rechten Randes (dabei Leerzeichen erhalten!) + cChar = rText.GetChar(nLen - 1); + if (cChar != xub_Unicode(' ')) + { + bSuccess &= pGlyphDev->GetGlyphBoundRect(cChar, aTmp, bOptimize); + if (!aTmp.IsEmpty()) + { + // rechten Rand am 'rDev' ermitteln (analog wie beim linken Rand) + long nGlyphWidth = pGlyphDev->GetTextWidth(cChar), + nRightSpace = (nGlyphWidth - 1 - aTmp.Right()) + * rDev.GetTextWidth(cChar) + / nGlyphWidth; + aResult.Right() -= nRightSpace; + } + } + + // oberen und unteren Rand bestimmen. + // Im Augenblick gehen wird davon aus, daß die Texthöhen an den beiden + // Devices im wesentlichen gleich sind und skalieren diese Ränder daher + // nicht um. + long nTop = aResult.Bottom() + 1, + nBottom = aResult.Top() - 1; + for (USHORT i = 0; i < nLen; i++) + { + cChar = rText.GetChar(i); + if (cChar != xub_Unicode(' ')) + { + //! Anmerkung: Leerzeichen *können* leere Rechtecke ergeben, aber + //! der Returnwert sollte auch dann TRUE sein. + bSuccess &= pGlyphDev->GetGlyphBoundRect(cChar, aTmp, bOptimize); + + if (!aTmp.IsEmpty() && aTmp.Top() < nTop) + nTop = aTmp.Top(); + if (!aTmp.IsEmpty() && aTmp.Bottom() > nBottom) + nBottom = aTmp.Bottom(); + } + } + aResult.Top() = nTop; + aResult.Bottom() = nBottom; + + // move rectangle to match possibly different baselines + // (because of different devices) + nDelta = aDevFM.GetAscent() - pGlyphDev->GetFontMetric().GetAscent(); + aResult.Move(0, nDelta); + + rRect = aResult; + pGlyphDev->Pop(); + return bSuccess; +} + + diff --git a/starmath/source/smdll.cxx b/starmath/source/smdll.cxx new file mode 100644 index 000000000000..494036585e49 --- /dev/null +++ b/starmath/source/smdll.cxx @@ -0,0 +1,166 @@ +/************************************************************************* + * + * $RCSfile: smdll.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef _SOT_FACTORY_HXX //autogen +#include +#endif +#ifndef _SVX_SVXIDS_HRC //autogen +#include +#endif +#ifndef _SVX_MODCTRL_HXX //autogen +#include +#endif +#ifndef _SVX_ZOOMCTRL_HXX //autogen +#include +#endif + + +#ifndef _SMDLL_HXX +#include "smdll.hxx" +#endif +#ifndef DOCUMENT_HXX +#include "document.hxx" +#endif +#ifndef TOOLBOX_HXX +#include "toolbox.hxx" +#endif +#ifndef VIEW_HXX +#include "view.hxx" +#endif +#ifndef _STARMATH_HRC +#include "starmath.hrc" +#endif + +BOOL SmDLL::bInitialized = FALSE; + +/************************************************************************* +|* +|* Initialisierung +|* +\************************************************************************/ +void SmDLL::Init() +{ + if ( bInitialized ) + return; + + bInitialized = TRUE; + + // called directly after loading the DLL + // do whatever you want, you may use Sd-DLL too + + // the SdModule must be created +#if 0 + SmDocShell::RegisterFactory(SDT_SMA_DOCFACTPRIO); +#endif + + SmModuleDummy** ppShlPtr = (SmModuleDummy**) GetAppData(SHL_SM); + +#if 1 + SvFactory* pFact = PTR_CAST(SvFactory,(*ppShlPtr)->pSmDocShellFactory); + delete (*ppShlPtr); + (*ppShlPtr) = new SmModule(pFact); + (*ppShlPtr)->pSmDocShellFactory = pFact; +#else + (*ppShlPtr) = new SmModule( &SmDocShell::Factory() ); +#endif + + String aResDll(C2S("sm")); + aResDll += String::CreateFromInt32( SOLARUPD ); + + SfxModule *p = SM_MOD1(); + SmModule *pp = (SmModule *) p; + + SmModule::RegisterInterface(pp); + + SmDocShell::Factory().RegisterMenuBar( SmResId(RID_SMMENU) ); + SmDocShell::Factory().RegisterAccel ( SmResId(RID_SMACCEL) ); + SmDocShell::RegisterInterface(pp); + + SmViewShell::RegisterFactory(1); + SmViewShell::RegisterInterface(pp); + + SvxZoomStatusBarControl::RegisterControl( SID_ATTR_ZOOM, pp ); + SvxModifyControl::RegisterControl( SID_TEXTSTATUS, pp ); + + SmToolBoxWrapper::RegisterChildWindow(TRUE); + SmCmdBoxWrapper::RegisterChildWindow(TRUE); + + ((SmModule*) *ppShlPtr)->InitManager (); +} + +/************************************************************************* +|* +|* Deinitialisierung +|* +\************************************************************************/ +void SmDLL::Exit() +{ + // the SdModule must be destroyed + SmModuleDummy** ppShlPtr = (SmModuleDummy**) GetAppData(SHL_SM); + delete (*ppShlPtr); + (*ppShlPtr) = NULL; + + *GetAppData(SHL_SM) = 0; +} + + diff --git a/starmath/source/smmod.cxx b/starmath/source/smmod.cxx new file mode 100644 index 000000000000..7e1342e3294e --- /dev/null +++ b/starmath/source/smmod.cxx @@ -0,0 +1,231 @@ +/************************************************************************* + * + * $RCSfile: smmod.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + + +#ifndef _GLOBNAME_HXX //autogen +#include +#endif +#ifndef _SV_STATUS_HXX //autogen +#include +#endif +#ifndef _SFXMSG_HXX //autogen +#include +#endif +#ifndef _SFXAPP_HXX //autogen +#include +#endif +#ifndef _SFXOBJFACE_HXX //autogen +#include +#endif +#ifndef _SFX_WHITER_HXX //autogen +#include +#endif +#ifndef _SFXREQUEST_HXX //autogen +#include +#endif +#ifndef _SFX_HRC //autogen +#include +#endif +#ifndef _FACTORY_HXX //autogen +#include +#endif +#ifndef _SV_WRKWIN_HXX //autogen +#include +#endif +#ifndef _SVX_SVXIDS_HRC //autogen +#include +#endif +#ifndef _SV_MSGBOX_HXX //autogen +#include +#endif + +#ifndef _SMMOD_HXX +#include "smmod.hxx" +#endif +#ifndef SYMBOL_HXX +#include "symbol.hxx" +#endif +#ifndef _CONFIG_HXX +#include "config.hxx" +#endif +#ifndef _DIALOG_HXX +#include "dialog.hxx" +#endif +#include "starmath.hrc" + +TYPEINIT1( SmModuleDummy, SfxModule ); +TYPEINIT1( SmModule, SmModuleDummy ); + +#define SmModule +#include "smslots.hxx" + +SFX_IMPL_INTERFACE(SmModule, SfxModule, SmResId(RID_APPLICATION)) +{ + SFX_STATUSBAR_REGISTRATION(SmResId(RID_STATUSBAR)); +} + +SmModule::SmModule(SvFactory* pObjFact) : + SmModuleDummy(SFX_APP()->CreateResManager("sm"), FALSE, pObjFact) +{ + SetName( C2S("StarMath" )); + + pConfig = new SmConfig; + pConfig->Initialize(); + + pSymSetManager = new SmSymSetManager; + pRectCache = new SmRectCache; +} + +SmModule::~SmModule() +{ + delete pConfig; + delete pSymSetManager; + delete pRectCache; +} + +void SmModule::GetState(SfxItemSet &rSet) +{ + SfxWhichIter aIter(rSet); + + for (USHORT nWh = aIter.FirstWhich(); 0 != nWh; nWh = aIter.NextWhich()) + switch (nWh) + { + case SID_CONFIGEVENT : + rSet.DisableItem(SID_CONFIGEVENT); + break; + } +} + +void SmModule::FillStatusBar(StatusBar &rBar) +{ + rBar.InsertItem(SID_TEXTSTATUS, 300, SIB_LEFT | SIB_IN); + rBar.InsertItem(SID_ATTR_ZOOM, rBar.GetTextWidth(C2S(" 100% "))); + rBar.InsertItem(SID_MODIFYSTATUS, rBar.GetTextWidth(C2S(" * "))); +} + +SfxModule *SmModule::Load() +{ + return this; +} + +void SmModule::Free() +{ +} + +void SmModule::InitManager() +{ + pSymSetManager->Init(); +} + + + +SfxModule *SmModuleDummy::Load() +{ + return 0; +} +/* -----------------15.02.99 12:45------------------- + * + * --------------------------------------------------*/ +SfxItemSet* SmModule::CreateItemSet( USHORT nId ) +{ + SfxItemSet* pRet = 0; + if(nId == SID_SM_EDITOPTIONS) + { + pRet = new SfxItemSet(GetPool(), + //TP_SMPRINT + SID_PRINTSIZE, SID_PRINTSIZE, + SID_PRINTZOOM, SID_PRINTZOOM, + SID_PRINTTITLE, SID_PRINTTITLE, + SID_PRINTTEXT, SID_PRINTTEXT, + SID_PRINTFRAME, SID_PRINTFRAME, + SID_NO_RIGHT_SPACES, SID_NO_RIGHT_SPACES, + 0 ); + + GetConfig()->ConfigToItemSet(*pRet); + } + return pRet; +} +/* -----------------15.02.99 12:45------------------- + * + * --------------------------------------------------*/ +void SmModule::ApplyItemSet( USHORT nId, const SfxItemSet& rSet ) +{ + if(nId == SID_SM_EDITOPTIONS) + { + GetConfig()->ItemSetToConfig(rSet); + } +} +/* -----------------15.02.99 12:45------------------- + * + * --------------------------------------------------*/ +SfxTabPage* SmModule::CreateTabPage( USHORT nId, Window* pParent, const SfxItemSet& rSet ) +{ + SfxTabPage* pRet = 0; + if(nId == SID_SM_TP_PRINTOPTIONS) + pRet = SmPrintOptionsTabPage::Create( pParent, rSet ); + return pRet; + +} + + + diff --git a/starmath/source/smres.src b/starmath/source/smres.src new file mode 100644 index 000000000000..a4509391b50f --- /dev/null +++ b/starmath/source/smres.src @@ -0,0 +1,10674 @@ +/************************************************************************* + * + * $RCSfile: smres.src,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:26 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + + + + +#include +#include +#include "starmath.hrc" + +#define IMAGE_STDBTN_COLOR Color { Red = 0xC000; Green = 0xC000; Blue = 0xC000; } + +#define MN_SUB_TOOLBAR 32 + + +ModalDialog RID_FONTDIALOG +{ + Moveable = TRUE ; + OutputSize = TRUE ; + SVLook = TRUE ; + Size = MAP_APPFONT ( 189 , 150 ) ; + Text = "Schriften" ; + Text [ ENGLISH ] = "Fonts" ; + Text [ norwegian ] = "Fonts" ; + Text [ italian ] = "Caratteri" ; + Text [ portuguese_brazilian ] = "Fontes" ; + Text [ portuguese ] = "Tipos de letra" ; + Text [ finnish ] = "Fontit" ; + Text [ danish ] = "Skrifttyper" ; + Text [ french ] = "Polices" ; + Text [ swedish ] = "Teckensnitt" ; + Text [ dutch ] = "Lettertypen" ; + Text [ spanish ] = "Fuentes" ; + Text [ english_us ] = "Fonts" ; + FixedText 1 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 6 , 6 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Schriftart:" ; + Text [ ENGLISH ] = "~Font:" ; + Text [ norwegian ] = "~Font:" ; + Text [ italian ] = "~Tipo di carattere:" ; + Text [ portuguese_brazilian ] = "~Fonte:" ; + Text [ portuguese ] = "~Tipo de letra:" ; + Text [ finnish ] = "~Fontti:" ; + Text [ danish ] = "Skrifttype:" ; + Text [ french ] = "~Police :" ; + Text [ swedish ] = "Tecken~snitt:" ; + Text [ dutch ] = "~Lettertype:" ; + Text [ spanish ] = "~Fuente:" ; + Text [ english_us ] = "~Font:" ; + Text[ chinese_simplified ] = "×ÖÌå(~F)£º"; + Text[ russian ] = "~Òèï øðèôòà:"; + Text[ polish ] = "Czcionka:"; + Text[ japanese ] = "Ì«ÝÄ‚ÌŽí—Þ(~F):"; + Text[ chinese_traditional ] = "¦r«¬(~F)"; + Text[ arabic ] = ":äæÚ ÇáÎØ"; + Text[ greek ] = "ÃñáììáôïóåéñÜ:"; + Text[ korean ] = "±Û²Ã:(~F)"; + Text[ turkish ] = "Yazýtipi:"; + Text[ language_user1 ] = " "; + }; + ComboBox 1 + { + Pos = MAP_APPFONT ( 6 , 18 ) ; + Size = MAP_APPFONT ( 111 , 60 ) ; + TabStop = TRUE ; + Sort = TRUE ; + VScroll = TRUE ; + }; + CheckBox 1 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 135 , 93 ) ; + Size = MAP_APPFONT ( 33 , 12 ) ; + Text = "~Fett" ; + Text [ ENGLISH ] = "~Bold" ; + Text [ norwegian ] = "~Bold" ; + Text [ italian ] = "G~rassetto" ; + Text [ portuguese_brazilian ] = "~Negrito" ; + Text [ portuguese ] = "~Negrito" ; + Text [ finnish ] = "~Lihavoitu" ; + Text [ danish ] = "Fed" ; + Text [ french ] = "~Gras" ; + Text [ swedish ] = "~Fet" ; + Text [ dutch ] = "~Vet" ; + Text [ spanish ] = "~Negrita" ; + Text [ english_us ] = "~Bold" ; + Text[ chinese_simplified ] = "´ÖÌå(~B)"; + Text[ russian ] = "~Æèðíûé"; + Text[ polish ] = "Pogrubienie"; + Text[ japanese ] = "‘¾Žš(~B)"; + Text[ chinese_traditional ] = "²ÊÅé(~B)"; + Text[ arabic ] = "ÚÑíÖ"; + Text[ greek ] = "¸íôïíï"; + Text[ korean ] = "ÁøÇÏ°Ô(~B)"; + Text[ turkish ] = "Kalýn"; + Text[ language_user1 ] = " "; + }; + CheckBox 2 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 135 , 108 ) ; + Size = MAP_APPFONT ( 33 , 12 ) ; + Text = "~Kursiv" ; + Text [ ENGLISH ] = "~Italic" ; + Text [ norwegian ] = "~Italic" ; + Text [ italian ] = "Co~rsivo" ; + Text [ portuguese_brazilian ] = "~Itálico" ; + Text [ portuguese ] = "~Itálico" ; + Text [ finnish ] = "~Kursivoitu" ; + Text [ danish ] = "Kursiv" ; + Text [ french ] = "~Italique" ; + Text [ swedish ] = "~Kursiv" ; + Text [ dutch ] = "~Cursief" ; + Text [ spanish ] = "~Cursiva" ; + Text [ english_us ] = "~Italic" ; + Text[ chinese_simplified ] = "бÌå(~I)"; + Text[ russian ] = "~Êóðñèâ"; + Text[ polish ] = "Kursywa"; + Text[ japanese ] = "ŽÎ‘Ì(~I)"; + Text[ chinese_traditional ] = "±×Åé(~I)"; + Text[ arabic ] = "ãÇÆá"; + Text[ greek ] = "ÐëÜãéá"; + Text[ korean ] = "ÀÌÅŸ¯Ã¼(~I)"; + Text[ turkish ] = "Ýtalik"; + Text[ language_user1 ] = " "; + }; + OKButton 1 + { + Pos = MAP_APPFONT ( 126 , 6 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + DefButton = TRUE ; + }; + CancelButton 1 + { + Pos = MAP_APPFONT ( 126 , 24 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + }; + Control 1 + { + Disable = TRUE ; + Pos = MAP_APPFONT ( 12 , 96 ) ; + Size = MAP_APPFONT ( 99 , 25 ) ; + }; + GroupBox 1 + { + Pos = MAP_APPFONT ( 6 , 84 ) ; + Size = MAP_APPFONT ( 111 , 42 ) ; + Text = "Beispiel" ; + Text [ ENGLISH ] = "Sample" ; + Text [ norwegian ] = "Sample" ; + Text [ italian ] = "Esempio" ; + Text [ portuguese_brazilian ] = "Modelo" ; + Text [ portuguese ] = "Exemplo" ; + Text [ finnish ] = "Malli" ; + Text [ danish ] = "Eksempel" ; + Text [ french ] = "Exemple" ; + Text [ swedish ] = "Exempel" ; + Text [ dutch ] = "Voorbeeld" ; + Text [ spanish ] = "Ejemplo" ; + Text [ english_us ] = "Example" ; + Text[ chinese_simplified ] = "ʾÀý"; + Text[ russian ] = "Ïðèìåð"; + Text[ polish ] = "Przyk³ad"; + Text[ japanese ] = "—á"; + Text[ chinese_traditional ] = "¨Ò¤l"; + Text[ arabic ] = "ãËÇá"; + Text[ greek ] = "ÐáñÜäåéãìá"; + Text[ korean ] = "¿¹"; + Text[ turkish ] = "Örnek"; + Text[ language_user1 ] = " "; + }; + GroupBox 2 + { + Pos = MAP_APPFONT ( 129 , 84 ) ; + Size = MAP_APPFONT ( 42 , 42 ) ; + Text = "Attribute" ; + Text [ ENGLISH ] = "Styles" ; + Text [ norwegian ] = "Styles" ; + Text [ italian ] = "Attributi" ; + Text [ portuguese_brazilian ] = "Estilos" ; + Text [ portuguese ] = "Atributos" ; + Text [ finnish ] = "Tyylit" ; + Text [ danish ] = "Attributter" ; + Text [ french ] = "Styles" ; + Text [ swedish ] = "Attribut" ; + Text [ dutch ] = "Attributen" ; + Text [ spanish ] = "Atributos" ; + Text [ english_us ] = "Attributes" ; + Text[ chinese_simplified ] = "ÊôÐÔ"; + Text[ russian ] = "Àòðèáóòû"; + Text[ polish ] = "Atrybuty"; + Text[ japanese ] = "‘®«"; + Text[ chinese_traditional ] = "ÄÝ©Ê"; + Text[ arabic ] = "ÓãÇÊ"; + Text[ greek ] = "Éäéüôçôåò"; + Text[ korean ] = "¼Ó¼º"; + Text[ turkish ] = "Öznitelikler"; + Text[ language_user1 ] = " "; + }; + Text[ chinese_simplified ] = "×ÖÌå"; + Text[ russian ] = "Øðèôòû"; + Text[ polish ] = "Czcionki"; + Text[ japanese ] = "Ì«ÝÄ"; + Text[ chinese_traditional ] = "¦r«¬"; + Text[ arabic ] = "ÎØæØ"; + Text[ greek ] = "ÃñáììáôïóåéñÝò"; + Text[ korean ] = "±Û²Ã"; + Text[ turkish ] = "Yazýtipleri"; + Text[ language_user1 ] = " "; +}; + +ModalDialog RID_FONTSIZEDIALOG +{ + Moveable = TRUE ; + OutputSize = TRUE ; + SVLook = TRUE ; + HelpID = SID_FONTSIZE ; + Size = MAP_APPFONT ( 171 , 120 ) ; + /* ### ACHTUNG: Neuer Text in Resource? Schriftgrößen : Schriftgrößen */ + Text = "Schriftgrößen" ; + Text [ ENGLISH ] = "Fontsizes" ; + Text [ norwegian ] = "Fontsizes" ; + Text [ italian ] = "Dimensioni carattere" ; + Text [ portuguese_brazilian ] = "Tamanhos de letra" ; + Text [ portuguese ] = "Tamanhos de letra" ; + Text [ finnish ] = "Fonttien koot" ; + Text [ danish ] = "Skriftstørrelse" ; + Text [ french ] = "Tailles de police" ; + Text [ swedish ] = "Teckenstorlekar" ; + Text [ dutch ] = "Lettergrootten" ; + Text [ spanish ] = "Tamaños de fuente" ; + Text [ english_us ] = "Font Sizes" ; + FixedText 1 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 12 , 7 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + /* ### ACHTUNG: Neuer Text in Resource? ~Basisgröße: : ~Basisgröße: */ + Text = "~Basisgröße:" ; + Text [ ENGLISH ] = "~Basis size:" ; + Text [ norwegian ] = "~Basis size:" ; + Text [ italian ] = "Dim. di ~base:" ; + Text [ portuguese_brazilian ] = "~Tamanho de base:" ; + Text [ portuguese ] = "~Tamanho de base:" ; + Text [ finnish ] = "~Peruskoko:" ; + Text [ danish ] = "Basisstørrelse:" ; + Text [ french ] = "~Taille de base :" ; + Text [ swedish ] = "~Basstorlek:" ; + Text [ dutch ] = "~Basisgrootte:" ; + Text [ spanish ] = "~Tamaño de base:" ; + Text [ english_us ] = "Base ~size:" ; + Text[ chinese_simplified ] = "»ù±¾³ß´ç(~S)"; + Text[ russian ] = "~Îñíîâíîé ðàçìåð:"; + Text[ polish ] = "Rozmiar bazy:"; + Text[ japanese ] = "Šî€»²½Þ:(~S)"; + Text[ chinese_traditional ] = "°ò¥»¤Ø¤o(~S)"; + Text[ arabic ] = "ÍÌã ÇáÞÇÚÏÉ:"; + Text[ greek ] = "Âáóéêü ìÝãåèïò:"; + Text[ korean ] = "±âº» Å©±â:(~S)"; + Text[ turkish ] = "Temel boyut:"; + Text[ language_user1 ] = " "; + }; + MetricField 1 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 57 , 6 ) ; + Size = MAP_APPFONT ( 40 , 12 ) ; + TabStop = TRUE ; + Left = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Minimum = 4 ; + Maximum = 127 ; + Unit = FUNIT_POINT ; + }; + FixedText 4 + { + Pos = MAP_APPFONT ( 12 , 37 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Text:" ; + Text [ English ] = "~Text:" ; + Left = TRUE ; + Text [ portuguese ] = "~Texto:" ; + Text [ english_us ] = "~Text:" ; + Text [ portuguese_brazilian ] = "~Text:" ; + Text [ swedish ] = "~Text:" ; + Text [ danish ] = "~Tekst:" ; + Text [ italian ] = "~Testo:" ; + Text [ spanish ] = "~Texto:" ; + Text [ french ] = "Te~xte :" ; + Text [ dutch ] = "~Tekst:" ; + Text[ chinese_simplified ] = "ÎÄ×Ö(~T)"; + Text[ russian ] = "~Òåêñò:"; + Text[ polish ] = "Tekst:"; + Text[ japanese ] = "÷½Ä:(~T)"; + Text[ chinese_traditional ] = "¤å¦r(~T)"; + Text[ arabic ] = ":ÇáäÕ"; + Text[ greek ] = "Êåßìåíï:"; + Text[ korean ] = "ÅؽºÆ®:(~T)"; + Text[ turkish ] = "Metin:"; + Text[ language_user1 ] = " "; + }; + MetricField 4 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 57 , 36 ) ; + Size = MAP_APPFONT ( 40 , 12 ) ; + TabStop = TRUE ; + Left = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Minimum = 5 ; + Maximum = 200 ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + }; + FixedText 5 + { + Pos = MAP_APPFONT ( 12 , 52 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Indizes:" ; + Text [ ENGLISH ] = "~Indices:" ; + Text [ norwegian ] = "~Indices:" ; + Text [ italian ] = "~Indici:" ; + Text [ portuguese_brazilian ] = "~Índices" ; + Text [ portuguese ] = "Í~ndices:" ; + Text [ finnish ] = "~Indices:" ; + Text [ danish ] = "Sub-/Superscript:" ; + Text [ french ] = "~Index :" ; + Text [ swedish ] = "~Index:" ; + Text [ dutch ] = "~Indicies:" ; + Text [ spanish ] = "Í~ndices:" ; + Text [ english_us ] = "~Indices:" ; + Left = TRUE ; + Text[ chinese_simplified ] = "±êÖ¾(~I)"; + Text[ russian ] = "Èíäåêñû:"; + Text[ polish ] = "Indeksy:"; + Text[ japanese ] = "²ÝÃÞ¯¸½:(~I)"; + Text[ chinese_traditional ] = "¼Ð»x(~I)"; + Text[ arabic ] = ":ÝåÇÑÓ"; + Text[ greek ] = "Äåßêôåò:"; + Text[ korean ] = "À妽º:(~I)"; + Text[ turkish ] = "Ýndisler:"; + Text[ language_user1 ] = " "; + }; + MetricField 5 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 57 , 51 ) ; + Size = MAP_APPFONT ( 40 , 12 ) ; + TabStop = TRUE ; + Left = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Minimum = 5 ; + Maximum = 200 ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + }; + FixedText 6 + { + Pos = MAP_APPFONT ( 12 , 67 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Funktionen:" ; + Text [ ENGLISH ] = "~Functions:" ; + Text [ norwegian ] = "~Functions:" ; + Text [ italian ] = "~Funzioni:" ; + Text [ portuguese_brazilian ] = "~Funções:" ; + Text [ portuguese ] = "~Funções:" ; + Text [ finnish ] = "~Funktiot:" ; + Text [ danish ] = "~Funktioner:" ; + Text [ french ] = "~Fonctions :" ; + Text [ swedish ] = "~Funktioner:" ; + Text [ dutch ] = "~Functies:" ; + Text [ spanish ] = "~Funciones:" ; + Text [ english_us ] = "~Functions:" ; + Left = TRUE ; + Text[ chinese_simplified ] = "º¯Êý(~F)"; + Text[ russian ] = "Ôóíêöèè:"; + Text[ polish ] = "Funkcje:"; + Text[ japanese ] = "̧ݸ¼®Ý:(~F)"; + Text[ chinese_traditional ] = "¨ç¼Æ(~F)"; + Text[ arabic ] = ":ÏÇáÇÊ"; + Text[ greek ] = "ÓõíáñôÞóåéò:"; + Text[ korean ] = "±â´É:(~F)"; + Text[ turkish ] = "Fonksiyonlar:"; + Text[ language_user1 ] = " "; + }; + MetricField 6 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 57 , 66 ) ; + Size = MAP_APPFONT ( 40 , 12 ) ; + TabStop = TRUE ; + Left = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Minimum = 5 ; + Maximum = 200 ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + }; + FixedText 7 + { + Pos = MAP_APPFONT ( 12 , 82 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Operatoren:" ; + Text [ ENGLISH ] = "~Operators:" ; + Text [ norwegian ] = "~Operators:" ; + Text [ italian ] = "~Operatori:" ; + Text [ portuguese_brazilian ] = "~Operadores:" ; + Text [ portuguese ] = "~Operadores:" ; + Text [ finnish ] = "~Operaattorit:" ; + Text [ danish ] = "~Operatorer:" ; + Text [ french ] = "~Opérateurs :" ; + Text [ swedish ] = "~Operatorer:" ; + Text [ dutch ] = "~Operatoren:" ; + Text [ spanish ] = "~Operadores:" ; + Text [ english_us ] = "~Operators:" ; + Left = TRUE ; + Text[ chinese_simplified ] = "ÔËËã·û(~O)"; + Text[ russian ] = "Îïðåàòîðû:"; + Text[ polish ] = "Operatory:"; + Text[ japanese ] = "µÍßÚ°À:(~O)"; + Text[ chinese_traditional ] = "¹Bºâ²Å(~O)"; + Text[ arabic ] = "ÚæÇãá ÇáÊÔÛíá:"; + Text[ greek ] = "ÔåëåóôÝò:"; + Text[ korean ] = "¿¬»êÀÚ:(~O)"; + Text[ turkish ] = "Ýþleçler:"; + Text[ language_user1 ] = " "; + }; + MetricField 7 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 57 , 81 ) ; + Size = MAP_APPFONT ( 40 , 12 ) ; + TabStop = TRUE ; + Left = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Minimum = 5 ; + Maximum = 200 ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + }; + FixedText 8 + { + Pos = MAP_APPFONT ( 12 , 97 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Grenzen:" ; + Text [ ENGLISH ] = "~Borders:" ; + Text [ norwegian ] = "~Borders:" ; + Text [ italian ] = "~Bordi:" ; + Text [ portuguese_brazilian ] = "~Bordas:" ; + Text [ portuguese ] = "~Contornos:" ; + Text [ finnish ] = "~Reunaviivat:" ; + Text [ danish ] = "~Grænser:" ; + Text [ french ] = "~Limites :" ; + Text [ swedish ] = "~Gränser:" ; + Text [ dutch ] = "~Grenzen:" ; + Text [ spanish ] = "~Límites:" ; + Text [ english_us ] = "~Limits:" ; + Left = TRUE ; + Text[ chinese_simplified ] = "½çÏÞ(~L)"; + Text[ russian ] = "~Ãðàíèöû:"; + Text[ polish ] = "Granice:"; + Text[ japanese ] = "ØЯÄ:(~L)"; + Text[ chinese_traditional ] = "¬É­­(~L)"; + Text[ arabic ] = ":ÍÏæÏ"; + Text[ greek ] = "¼ñéá:"; + Text[ korean ] = "±ØÇÑ:(~L)"; + Text[ turkish ] = "Limitler:"; + Text[ language_user1 ] = " "; + }; + MetricField 8 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 57 , 96 ) ; + Size = MAP_APPFONT ( 40 , 12 ) ; + TabStop = TRUE ; + Left = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Minimum = 5 ; + Maximum = 200 ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + }; + GroupBox 1 + { + Pos = MAP_APPFONT ( 6 , 24 ) ; + Size = MAP_APPFONT ( 99 , 90 ) ; + /* ### ACHTUNG: Neuer Text in Resource? relative Größen : relative Größen */ + Text = "relative Größen" ; + Text [ ENGLISH ] = "relativ sizes" ; + Text [ norwegian ] = "relativ sizes" ; + Text [ italian ] = "Dimensioni relative" ; + Text [ portuguese_brazilian ] = "tamanhos relativos" ; + Text [ portuguese ] = "Tamanhos relativos" ; + Text [ finnish ] = "suhteutetut koot" ; + Text [ danish ] = "Relative størrelser" ; + Text [ french ] = "Tailles relatives" ; + Text [ swedish ] = "Relativa storlekar" ; + Text [ dutch ] = "Relatieve grootten" ; + Text [ spanish ] = "Tamaños relativos" ; + Text [ english_us ] = "Relative sizes" ; + Text[ chinese_simplified ] = "Ïà¶Ô´óС"; + Text[ russian ] = "Îòíîñèòåëüíûå ðàçìåðû"; + Text[ polish ] = "Wzglêdne wielkoœci"; + Text[ japanese ] = "‘Š‘ΓI»²½Þ"; + Text[ chinese_traditional ] = "¬Û¹ï¤j¤p"; + Text[ arabic ] = "ÃÍÌÇã äÓÈíÉ"; + Text[ greek ] = "Ó÷åôéêÜ ìåãÝèç"; + Text[ korean ] = "»ó´ëÀû Å©±â"; + Text[ turkish ] = "Göreceli boyutlar"; + Text[ language_user1 ] = " "; + }; + OKButton 1 + { + Pos = MAP_APPFONT ( 114 , 3 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + DefButton = TRUE ; + }; + CancelButton 1 + { + Pos = MAP_APPFONT ( 114 , 21 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + }; + PushButton 1 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 114 , 45 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text = "~Standard" ; + Text [ ENGLISH ] = "~Standard" ; + Text [ english_us ] = "~Default" ; + Text [ italian ] = "~Standard" ; + Text [ spanish ] = "~Predeterminado" ; + Text [ french ] = "~Par défaut" ; + Text [ dutch ] = "Standaar~d" ; + Text [ swedish ] = "~Standard" ; + Text [ danish ] = "Standard" ; + Text [ portuguese_brazilian ] = "~Standard" ; + Text [ portuguese ] = "~Padrão" ; + Text[ chinese_simplified ] = "±ê×¼(~D)"; + Text[ russian ] = "Ñòàíäàðò"; + Text[ polish ] = "Domyœlnie"; + Text[ japanese ] = "•W€(~D)"; + Text[ chinese_traditional ] = "¼Ð·Ç(~D)"; + Text[ arabic ] = "ÇÝÊÑÇÖí"; + Text[ greek ] = "ÐñïåðéëïãÞ"; + Text[ korean ] = "±âº»(~D)"; + Text[ turkish ] = "Standart"; + Text[ language_user1 ] = " "; + }; + Text[ chinese_simplified ] = "×ÖÌå"; + Text[ russian ] = "Ðàçìåðû øðèôòà"; + Text[ polish ] = "Rozmiar czcionek"; + Text[ japanese ] = "Ì«ÝÄ »²½Þ"; + Text[ chinese_traditional ] = "¦r«¬"; + Text[ arabic ] = "ÃÍÌÇã ÇáÎØ"; + Text[ greek ] = "ÌÝãåèïò ãñáììáôïóåéñÜò"; + Text[ korean ] = "±Û²Ã Å©±â"; + Text[ turkish ] = "Yazýtipi boyutu"; + Text[ language_user1 ] = " "; +}; + +ModalDialog RID_FONTTYPEDIALOG +{ + OutputSize = TRUE ; + SVLook = TRUE ; + HelpID = SID_FONT ; + Size = MAP_APPFONT ( 282 , 153 ) ; + Text = "Schriftarten" ; + Text [ ENGLISH ] = "Fonts" ; + Text[ chinese_simplified ] = "×ÖÌå"; + Text[ russian ] = "Òèïû øðèôòà"; + Text[ polish ] = "Czcionki"; + Text[ japanese ] = "Ì«ÝÄ‚ÌŽí—Þ"; + Text[ chinese_traditional ] = "¦r«¬"; + Text[ arabic ] = "ÃäæÇÚ ÇáÎØ"; + Text [ norwegian ] = "Fonts" ; + Text [ italian ] = "Tipi di carattere" ; + Text [ portuguese_brazilian ] = "Fontes" ; + Text [ portuguese ] = "Tipos de letra" ; + Text [ finnish ] = "Fontit" ; + Text [ danish ] = "Skrifttyper" ; + Text [ french ] = "Polices" ; + Text [ swedish ] = "Teckensnitt" ; + Text [ dutch ] = "Lettertypen" ; + Text [ spanish ] = "Fuentes" ; + Text [ english_us ] = "Font Types" ; + Moveable = TRUE ; + GroupBox 1 + { + Pos = MAP_APPFONT ( 6 , 6 ) ; + Size = MAP_APPFONT ( 207 , 75 ) ; + Text = "Formelschriften" ; + Text [ ENGLISH ] = "Equationfonts" ; + Text[ chinese_simplified ] = "¹«Ê½×ÖÌå"; + Text[ chinese_traditional ] = "¤½¦¡¦r«¬"; + Text[ russian ] = "Øðèôòû ôîðìóë"; + Text[ polish ] = "Czcionki formu³y"; + Text[ japanese ] = "”Ž®Ì«ÝÄ"; + Text[ arabic ] = "ÎØæØ ÇáÕíÛÉ"; + Text [ norwegian ] = "Equationfonts" ; + Text [ italian ] = "Carattere formule" ; + Text [ portuguese_brazilian ] = "Fontes das equações" ; + Text [ portuguese ] = "Tipos de letra das equações" ; + Text [ finnish ] = "Kaavafontit" ; + Text [ danish ] = "Fomelskrifttyper" ; + Text [ french ] = "Polices de formules" ; + Text [ swedish ] = "Formelteckensnitt" ; + Text [ dutch ] = "Lettertypen fomules" ; + Text [ spanish ] = "Fuentes de fórmula" ; + Text [ english_us ] = "Formula fonts" ; + Text[ greek ] = "ÃñáììáôïóåéñÝò ôýðùí"; + Text[ korean ] = "¼ö½Ä ±Û²Ã"; + Text[ turkish ] = "Formül yazýtipleri"; + Text[ language_user1 ] = " "; + }; + GroupBox 2 + { + Pos = MAP_APPFONT ( 6 , 84 ) ; + Size = MAP_APPFONT ( 207 , 63 ) ; + Text = "Benutzerschriften" ; + Text [ ENGLISH ] = "Userfonts" ; + Text[ chinese_simplified ] = "ʹÓÃÕßÉ趨×ÖÌå"; + Text[ chinese_traditional ] = "¦Û­q¦r«¬"; + Text[ russian ] = "Øðèôòû ïîëüçîâàòåëÿ"; + Text[ polish ] = "Czcionki niestandardowe"; + Text[ japanese ] = "Õ°»Þ°Žw’è‚ÌÌ«ÝÄ"; + Text[ arabic ] = "ÎØæØ ãÎÕÕÉ"; + Text [ norwegian ] = "Userfonts" ; + Text [ italian ] = "Caratteri dell'utente" ; + Text [ portuguese_brazilian ] = "Fontes do usuário" ; + Text [ portuguese ] = "Tipos de letra do utilizador" ; + Text [ finnish ] = "Käyttäjän fontit" ; + Text [ danish ] = "Brugerskrifttyper" ; + Text [ french ] = "Polices d'utilisateur" ; + Text [ swedish ] = "Användarteckensnitt" ; + Text [ dutch ] = "Eigen lettertypen" ; + Text [ spanish ] = "Fuentes del usuario" ; + Text [ english_us ] = "Custom fonts" ; + Text[ greek ] = "ÃñáììáôïóåéñÝò ÷ñÞóôç"; + Text[ korean ] = "»ç¿ëÀÚ ±Û²Ã"; + Text[ turkish ] = "Kullanýcý yazýtipleri"; + Text[ language_user1 ] = " "; + }; + FixedText 1 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 12 , 18 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Variablen:" ; + Text [ ENGLISH ] = "~Variables:" ; + Text [ norwegian ] = "~Variables:" ; + Text [ italian ] = "~Variabili:" ; + Text [ portuguese_brazilian ] = "~Variáveis:" ; + Text [ portuguese ] = "~Variáveis:" ; + Text [ finnish ] = "~Muuttujat:" ; + Text [ danish ] = "~Variabler:" ; + Text [ french ] = "~Variables :" ; + Text [ swedish ] = "~Variabler:" ; + Text [ dutch ] = "~Variabelen:" ; + Text [ spanish ] = "~Variables:" ; + Text [ english_us ] = "~Variables:" ; + Text[ chinese_simplified ] = "±äÁ¿(~V)"; + Text[ russian ] = "Ïåðåìåííûå:"; + Text[ polish ] = "Zmienne:"; + Text[ japanese ] = "•ÏX‰Â”\\:(~V)"; + Text[ chinese_traditional ] = "Åܶq(~V)"; + Text[ arabic ] = "ÇáãÊÛíÑÇÊ:"; + Text[ greek ] = "ÌåôáâëçôÝò:"; + Text[ korean ] = "º¯¼ö:(~V)"; + Text[ turkish ] = "Deðiþkenler:"; + Text[ language_user1 ] = " "; + }; + ListBox 1 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 54 , 18 ) ; + Size = MAP_APPFONT ( 150 , 69 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + }; + FixedText 2 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 12 , 33 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Funktionen:" ; + Text [ ENGLISH ] = "~Functions:" ; + Text [ norwegian ] = "~Functions:" ; + Text [ italian ] = "~Funzioni:" ; + Text [ portuguese_brazilian ] = "~Funções:" ; + Text [ portuguese ] = "~Funções:" ; + Text [ finnish ] = "~Funktiot:" ; + Text [ danish ] = "~Funktioner:" ; + Text [ french ] = "~Fonctions :" ; + Text [ swedish ] = "~Funktioner:" ; + Text [ dutch ] = "~Functies:" ; + Text [ spanish ] = "~Funciones:" ; + Text [ english_us ] = "~Functions:" ; + Text[ chinese_simplified ] = "º¯Êý(~F)"; + Text[ russian ] = "Ôóíêöèè:"; + Text[ polish ] = "Funkcje:"; + Text[ japanese ] = "ŠÖ”(~F)"; + Text[ chinese_traditional ] = "¨ç¼Æ(~F)"; + Text[ arabic ] = ":ÏÇáÇÊ"; + Text[ greek ] = "ÓõíáñôÞóåéò:"; + Text[ korean ] = "ÇÔ¼ö:(~F)"; + Text[ turkish ] = "Fonksiyonlar:"; + Text[ language_user1 ] = " "; + }; + ListBox 2 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 54 , 33 ) ; + Size = MAP_APPFONT ( 150 , 69 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + }; + FixedText 3 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 12 , 51 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Zahlen:" ; + Text [ ENGLISH ] = "~Numbers:" ; + Text [ norwegian ] = "~Numbers:" ; + Text [ italian ] = "~Numeri:" ; + Text [ portuguese_brazilian ] = "~Números:" ; + Text [ portuguese ] = "~Números:" ; + Text [ finnish ] = "~Numerot:" ; + Text [ danish ] = "Tal:" ; + Text [ french ] = "~Nombres :" ; + Text [ swedish ] = "T~al:" ; + Text [ dutch ] = "~Getallen:" ; + Text [ spanish ] = "~Números:" ; + Text [ english_us ] = "~Numbers:" ; + Text[ chinese_simplified ] = "Êý×Ö(~N)"; + Text[ russian ] = "×èñëà:"; + Text[ polish ] = "Liczby:"; + Text[ japanese ] = "”:(~N)"; + Text[ chinese_traditional ] = "¼Æ¦r(~N)"; + Text[ arabic ] = ":ÃÑÞÇã"; + Text[ greek ] = "Áñéèìïß:"; + Text[ korean ] = "¹øÈ£:(~N)"; + Text[ turkish ] = "Sayýlar:"; + Text[ language_user1 ] = " "; + }; + ListBox 3 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 54 , 48 ) ; + Size = MAP_APPFONT ( 150 , 69 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + }; + FixedText 4 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 12 , 66 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Text:" ; + Text [ English ] = "~Text:" ; + Text [ english_us ] = "~Text:" ; + Text [ portuguese_brazilian ] = "~Text:" ; + Text [ swedish ] = "~Text:" ; + Text [ danish ] = "Tekst:" ; + Text [ italian ] = "~Testo:" ; + Text [ spanish ] = "~Texto:" ; + Text [ french ] = "~Texte :" ; + Text [ dutch ] = "~Tekst:" ; + Text [ portuguese ] = "~Texto:" ; + Text[ chinese_simplified ] = "ÎÄ×Ö(~T)"; + Text[ russian ] = "Òåêñò:"; + Text[ polish ] = "Tekst:"; + Text[ japanese ] = "÷½Ä:(~T)"; + Text[ chinese_traditional ] = "¤å¦r(~T)"; + Text[ arabic ] = ":äÕ"; + Text[ greek ] = "Êåßìåíï:"; + Text[ korean ] = "ÅؽºÆ®:(~T)"; + Text[ turkish ] = "Metin:"; + Text[ language_user1 ] = " "; + }; + ListBox 4 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 54 , 63 ) ; + Size = MAP_APPFONT ( 150 , 69 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + }; + FixedText 5 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 12 , 97 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Serif:" ; + }; + ListBox 5 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 54 , 96 ) ; + Size = MAP_APPFONT ( 150 , 69 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + }; + FixedText 6 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 12 , 112 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "S~ans:" ; + }; + ListBox 6 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 54 , 111 ) ; + Size = MAP_APPFONT ( 150 , 69 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + }; + FixedText 7 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 12 , 127 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "F~ixed:" ; + }; + ListBox 7 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 54 , 126 ) ; + Size = MAP_APPFONT ( 150 , 69 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + }; + OKButton 1 + { + Pos = MAP_APPFONT ( 225 , 6 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + DefButton = TRUE ; + }; + CancelButton 1 + { + Pos = MAP_APPFONT ( 225 , 24 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + }; + MenuButton 1 + { + TabStop = TRUE ; + ButtonMenu = Menu , RID_FONTMENU ; + Pos = MAP_APPFONT ( 225 , 48 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text = "Ä~ndern" ; + Text [ ENGLISH ] = "~Change" ; + Text[ chinese_simplified ] = "¸ü¸Ä(~M)"; + Text[ chinese_traditional ] = "Åܧó(~M)"; + Text[ russian ] = "Èçìåíèòü"; + Text[ polish ] = "~Modyfikuj"; + Text[ japanese ] = "•ÏX(~M)"; + Text[ arabic ] = "ÊÚÏí~á"; + Text [ norwegian ] = "~Endre" ; + Text [ italian ] = "~Cambia" ; + Text [ portuguese_brazilian ] = "~Mudar" ; + Text [ portuguese ] = "~Modificar" ; + Text [ finnish ] = "~Muuta" ; + Text [ danish ] = "~Modificer" ; + Text [ french ] = "~Modifier" ; + Text [ swedish ] = "Ä~ndra" ; + Text [ dutch ] = "Wij~zigen" ; + Text [ spanish ] = "~Modificar" ; + Text [ english_us ] = "~Modify" ; + Text[ greek ] = "~Ôñïðïðïßçóç"; + Text[ korean ] = "º¯°æ(~M)"; + Text[ turkish ] = "Deðiþtir"; + Text[ language_user1 ] = " "; + }; + PushButton 2 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 225 , 66 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text = "~Standard" ; + Text [ ENGLISH ] = "~Standard" ; + Text[ chinese_simplified ] = "±ê×¼(~D)"; + Text[ chinese_traditional ] = "¼Ð·Ç(~D)"; + Text[ russian ] = "Ñòàíäàðò"; + Text[ polish ] = "Domyœlnie"; + Text[ japanese ] = "•W€(~D)"; + Text[ arabic ] = "ÇÝÊÑÇÖí"; + Text [ english_us ] = "~Default" ; + Text [ italian ] = "~Standard" ; + Text [ spanish ] = "~Predeterminado" ; + Text [ french ] = "~Par défaut" ; + Text [ dutch ] = "Standaar~d" ; + Text [ swedish ] = "~Standard" ; + Text [ danish ] = "Standard" ; + Text [ portuguese_brazilian ] = "~Standard" ; + Text [ portuguese ] = "~Padrão" ; + Text[ greek ] = "ÐñïåðéëïãÞ"; + Text[ korean ] = "±âº»(~D)"; + Text[ turkish ] = "Standart"; + Text[ language_user1 ] = " "; + }; + Text[ greek ] = "Ôýðïò ãñáììáôïóåéñÜò"; + Text[ korean ] = "±Û²Ã À¯Çü"; + Text[ turkish ] = "Yazýtipleri"; + Text[ language_user1 ] = " "; +}; + +ModalDialog RID_DISTANCEDIALOG +{ + Moveable = TRUE ; + OutputSize = TRUE ; + SVLook = TRUE ; + HelpID = SID_DISTANCE ; + Size = MAP_APPFONT ( 258 , 90 ) ; + /* ### ACHTUNG: Neuer Text in Resource? Abstände : Abstände */ + Text = "Abstände" ; + Text [ ENGLISH ] = "Spacing" ; + Text [ norwegian ] = "Distances" ; + Text [ italian ] = "Distanze" ; + Text [ portuguese_brazilian ] = "Distâncias" ; + Text [ portuguese ] = "Espaços" ; + Text [ finnish ] = "Etäisyydet" ; + Text [ danish ] = "Afstand" ; + Text [ french ] = "Écarts" ; + Text [ swedish ] = "Avstånd" ; + Text [ dutch ] = "Afstanden" ; + Text [ spanish ] = "Espacios" ; + Text [ english_us ] = "Spacing" ; + FixedText 1 + { + Pos = MAP_APPFONT ( 12 , 19 ) ; + Size = MAP_APPFONT ( 65 , 10 ) ; + Left = TRUE ; + }; + MetricField 1 + { + Border = TRUE ; + TabStop = TRUE ; + Left = TRUE ; + Spin = TRUE ; + SpinSize = 1 ; + Repeat = TRUE; + Pos = MAP_APPFONT ( 78 , 18 ) ; + Size = MAP_APPFONT ( 38 , 12 ) ; + CustomUnitText [ english_us ] = "%" ; + CustomUnitText [ portuguese_brazilian ] = "0.0" ; + CustomUnitText = "%" ; + CustomUnitText [ swedish ] = "%" ; + CustomUnitText [ danish ] = "%" ; + CustomUnitText [ italian ] = "%" ; + CustomUnitText [ spanish ] = "%" ; + CustomUnitText [ french ] = "%" ; + CustomUnitText [ dutch ] = "%" ; + CustomUnitText [ portuguese ] = "%" ; + CustomUnitText[ chinese_simplified ] = "%"; + CustomUnitText[ russian ] = "%"; + CustomUnitText[ polish ] = "%"; + CustomUnitText[ japanese ] = "%"; + CustomUnitText[ chinese_traditional ] = "%"; + CustomUnitText[ arabic ] = "%"; + CustomUnitText[ greek ] = "%"; + CustomUnitText[ korean ] = "%"; + CustomUnitText[ turkish ] = "%"; + CustomUnitText[ language_user1 ] = " "; + }; + FixedText 2 + { + Disable = TRUE ; + Hide = TRUE ; + Pos = MAP_APPFONT ( 12 , 35 ) ; + Size = MAP_APPFONT ( 65 , 10 ) ; + Left = TRUE ; + }; + MetricField 2 + { + Border = TRUE ; + TabStop = TRUE ; + Left = TRUE ; + Spin = TRUE ; + SpinSize = 1 ; + Repeat = TRUE; + Pos = MAP_APPFONT ( 78 , 34 ) ; + Size = MAP_APPFONT ( 38 , 12 ) ; + CustomUnitText [ portuguese ] = "%" ; + CustomUnitText [ english_us ] = "%" ; + CustomUnitText [ portuguese_brazilian ] = "0.0" ; + CustomUnitText = "%" ; + CustomUnitText [ swedish ] = "%" ; + CustomUnitText [ danish ] = "%" ; + CustomUnitText [ italian ] = "%" ; + CustomUnitText [ spanish ] = "%" ; + CustomUnitText [ french ] = "%" ; + CustomUnitText [ dutch ] = "%" ; + CustomUnitText[ chinese_simplified ] = "%"; + CustomUnitText[ russian ] = "%"; + CustomUnitText[ polish ] = "%"; + CustomUnitText[ japanese ] = "%"; + CustomUnitText[ chinese_traditional ] = "%"; + CustomUnitText[ arabic ] = "%"; + CustomUnitText[ greek ] = "%"; + CustomUnitText[ korean ] = "%"; + CustomUnitText[ turkish ] = "%"; + CustomUnitText[ language_user1 ] = " "; + }; + CheckBox 1 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 12 , 55 ) ; + Size = MAP_APPFONT ( 110 , 12 ) ; + Text = "Alle Klammern skalieren" ; + Text [ ENGLISH ] = "Scale all Brackets" ; + Text[ english_us ] = "Scale ~all brackets"; + Text[ portuguese ] = "Redimensionar parênteses todos"; + Text[ russian ] = "Ìàñøòàáèðîâàòü âñå ñêîáêè"; + Text[ dutch ] = "Alle haken op scala brengen"; + Text[ french ] = "Redimensionner ttes les parenthèses"; + Text[ spanish ] = "Dimensionar todos los paréntesis"; + Text[ italian ] = "Tutte le parentesi in scala"; + Text[ danish ] = "Skaler alle parenteser"; + Text[ swedish ] = "Dimensionera alla parenteserna"; + Text[ polish ] = "Skaluj wszystkie nawiasy"; + Text[ portuguese_brazilian ] = "Scale all Brackets"; + Text[ japanese ] = "‚·‚ׂĂ̂©‚Á‚±‚ð½¹°Ù‚·‚é"; + Text[ chinese_simplified ] = "ÏÔʾËùÓÐÀ¨ºÅµÄ¿Ì¶È"; + Text[ chinese_traditional ] = "Åã¥Ü©Ò¦³¬A¸¹ªº¨è«×"; + Text[ arabic ] = "ÊÏÑíÌ ßá ÇáÃÞæÇÓ"; + Text[ greek ] = "ÊëéìÜêùóç üëùí ôùí ðáñåíèÝóåùí"; + Text[ korean ] = "¸ðµç °ýÈ£ÀÇ ¹èÀ² Á¶Á¤(~A)"; + Text[ turkish ] = "Tüm ayraçlarý ölçekle"; + Text[ language_user1 ] = " "; + }; + FixedText 3 + { + Disable = TRUE ; + Hide = TRUE ; + Pos = MAP_APPFONT ( 12 , 51 ) ; + Size = MAP_APPFONT ( 65 , 10 ) ; + Left = TRUE ; + }; + MetricField 3 + { + Border = TRUE ; + TabStop = TRUE ; + Left = TRUE ; + Spin = TRUE ; + SpinSize = 1 ; + Repeat = TRUE; + Pos = MAP_APPFONT ( 78 , 50 ) ; + Size = MAP_APPFONT ( 38 , 12 ) ; + CustomUnitText [ english_us ] = "%" ; + CustomUnitText [ portuguese_brazilian ] = "0.0" ; + CustomUnitText = "%" ; + CustomUnitText [ swedish ] = "%" ; + CustomUnitText [ danish ] = "%" ; + CustomUnitText [ italian ] = "%" ; + CustomUnitText [ spanish ] = "%" ; + CustomUnitText [ french ] = "%" ; + CustomUnitText [ dutch ] = "%" ; + CustomUnitText [ portuguese ] = "%" ; + CustomUnitText[ chinese_simplified ] = "%"; + CustomUnitText[ russian ] = "%"; + CustomUnitText[ polish ] = "%"; + CustomUnitText[ japanese ] = "%"; + CustomUnitText[ chinese_traditional ] = "%"; + CustomUnitText[ arabic ] = "%"; + CustomUnitText[ greek ] = "%"; + CustomUnitText[ korean ] = "%"; + CustomUnitText[ turkish ] = "%"; + CustomUnitText[ language_user1 ] = " "; + }; + FixedText 4 + { + Disable = TRUE ; + Hide = TRUE ; + Pos = MAP_APPFONT ( 12 , 67 ) ; + Size = MAP_APPFONT ( 65 , 10 ) ; + Left = TRUE ; + }; + MetricField 4 + { + Border = TRUE ; + TabStop = TRUE ; + Left = TRUE ; + Spin = TRUE ; + SpinSize = 1 ; + Repeat = TRUE; + Pos = MAP_APPFONT ( 78 , 66 ) ; + Size = MAP_APPFONT ( 38 , 12 ) ; + TabStop = TRUE ; + }; + OKButton 1 + { + Pos = MAP_APPFONT ( 198 , 6 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + DefButton = TRUE ; + }; + CancelButton 1 + { + Pos = MAP_APPFONT ( 198 , 24 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + }; + PushButton 1 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 198 , 69 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text = "~Standard" ; + Text [ ENGLISH ] = "~Standard" ; + Text [ english_us ] = "~Default" ; + Text [ italian ] = "~Standard" ; + Text [ spanish ] = "~Predeterminado" ; + Text [ french ] = "Par ~défaut" ; + Text [ dutch ] = "Standaar~d" ; + Text [ swedish ] = "~Standard" ; + Text [ danish ] = "Standard" ; + Text [ portuguese_brazilian ] = "~Standard" ; + Text [ portuguese ] = "~Padrão" ; + Text[ chinese_simplified ] = "±ê×¼(~D)"; + Text[ russian ] = "Ñòàíäàðò"; + Text[ polish ] = "Domyœlnie"; + Text[ japanese ] = "•W€(~D)"; + Text[ chinese_traditional ] = "¼Ð·Ç(~D)"; + Text[ arabic ] = "ÇÝÊÑÇÖí"; + Text[ greek ] = "ÐñïåðéëïãÞ"; + Text[ korean ] = "±âº»(~D)"; + Text[ turkish ] = "Standart"; + Text[ language_user1 ] = " "; + }; + MenuButton 1 + { + TabStop = TRUE ; + ButtonMenu = Menu , RID_DISTANCEMENU ; + Pos = MAP_APPFONT ( 198 , 51 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text = "~Kategorie" ; + Text [ ENGLISH ] = "~Category" ; + Text [ norwegian ] = "~Category" ; + Text [ italian ] = "~Categoria" ; + Text [ portuguese_brazilian ] = "~Categoria" ; + Text [ portuguese ] = "~Categoria" ; + Text [ finnish ] = "~Ryhmä" ; + Text [ danish ] = "Kategori" ; + Text [ french ] = "~Catégorie" ; + Text [ swedish ] = "~Kategori" ; + Text [ dutch ] = "~Categorie" ; + Text [ spanish ] = "~Categoría" ; + Text [ english_us ] = "~Category" ; + Text[ chinese_simplified ] = "·ÖÀà(~C)"; + Text[ russian ] = "Êàòåãîðèÿ"; + Text[ polish ] = "~Kategoria"; + Text[ japanese ] = "•ª—Þ(~C)"; + Text[ chinese_traditional ] = "¤ÀÃþ(~C)"; + Text[ arabic ] = "ÝÆÉ"; + Text[ greek ] = "~Êáôçãïñßá"; + Text[ korean ] = "Ä«Å×°í¸®(~C)"; + Text[ turkish ] = "Kategori"; + Text[ language_user1 ] = " "; + }; + FixedBitmap 1 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 120 , 18 ) ; + Size = MAP_APPFONT ( 57 , 60 ) ; + }; + GroupBox 1 + { + Pos = MAP_APPFONT ( 6 , 6 ) ; + Size = MAP_APPFONT ( 180 , 78 ) ; + Text = "Kategorie" ; + Text [ ENGLISH ] = "~Category" ; + Text [ norwegian ] = "~Category" ; + Text [ italian ] = "~Categoria" ; + Text [ portuguese_brazilian ] = "~Categoria" ; + Text [ portuguese ] = "Categoria" ; + Text [ finnish ] = "~Ryhmä" ; + Text [ danish ] = "Kategori" ; + Text [ french ] = "Catégorie" ; + Text [ swedish ] = "Kategori" ; + Text [ dutch ] = "Categorie" ; + Text [ spanish ] = "Categoría" ; + Text [ english_us ] = "Functions" ; + Text[ chinese_simplified ] = "·ÖÀà"; + Text[ russian ] = "Êàòåãîðèÿ"; + Text[ polish ] = "Kategoria"; + Text[ japanese ] = "•ª—Þ"; + Text[ chinese_traditional ] = "¤ÀÃþ"; + Text[ arabic ] = "ÝÆÉ"; + Text[ greek ] = "Êáôçãïñßåò"; + Text[ korean ] = "Ä«Å×°í¸®"; + Text[ turkish ] = "Kategori"; + Text[ language_user1 ] = " "; + }; + Resource 1 + { + String 1 + { + /* ### ACHTUNG: Neuer Text in Resource? Abstände : Abstände */ + Text = "Abstände" ; + Text [ ENGLISH ] = "Distances" ; + Text [ norwegian ] = "Distances" ; + Text [ italian ] = "Distanze" ; + Text [ portuguese_brazilian ] = "Distâncias" ; + Text [ portuguese ] = "Espaços" ; + Text [ finnish ] = "Etäisyydet" ; + Text [ danish ] = "Afstand" ; + Text [ french ] = "Écarts" ; + Text [ swedish ] = "Avstånd" ; + Text [ dutch ] = "Afstanden" ; + Text [ spanish ] = "Espacios" ; + Text [ english_us ] = "Spacing" ; + Text[ chinese_simplified ] = "¼ä¸ô"; + Text[ russian ] = "Èíòåðâàëû"; + Text[ polish ] = "Odstêpy"; + Text[ japanese ] = "ŠÔŠu"; + Text[ chinese_traditional ] = "¶¡¹j"; + Text[ arabic ] = "ÊÈÇÚÏ"; + Text[ greek ] = "AðïóôÜóåéò"; + Text[ korean ] = "°£°Ý"; + Text[ turkish ] = "Aralýklar"; + Text[ language_user1 ] = " "; + }; + String 2 + { + Text = "~Abstand:" ; + Text [ ENGLISH ] = "~Distance:" ; + Text [ norwegian ] = "~Distance:" ; + Text [ italian ] = "~Distanza:" ; + Text [ portuguese_brazilian ] = "~Distância:" ; + Text [ portuguese ] = "~Espaçamento:" ; + Text [ finnish ] = "~Etäisyys:" ; + Text [ danish ] = "Afstand:" ; + Text [ french ] = "~Écart :" ; + Text [ swedish ] = "~Avstånd:" ; + Text [ dutch ] = "~Afstand:" ; + Text [ spanish ] = "~Espacio:" ; + Text [ english_us ] = "~Spacing:" ; + Text[ chinese_simplified ] = "¼ä¸ô(~S)"; + Text[ russian ] = "Èíòåðâàë:"; + Text[ polish ] = "Odstêp:"; + Text[ japanese ] = "ŠÔŠu:(~S)"; + Text[ chinese_traditional ] = "¶¡¹j(~S)"; + Text[ arabic ] = ":ÊÈÇÚÏ"; + Text[ language_user1 ] = " "; + Text[ greek ] = "~Áðüóôáóç:"; + Text[ korean ] = "°£°Ý:(~S)"; + Text[ turkish ] = "Aralýk:"; + }; + Bitmap 2 + { + File = "dist11.bmp" ; + }; + String 3 + { + Text = "~Zeilenabstand:" ; + Text [ ENGLISH ] = "~Linespacing:" ; + Text [ norwegian ] = "~Linespacing:" ; + Text [ italian ] = "Distanza linee:" ; + Text [ portuguese_brazilian ] = "~Espaçamento de linha:" ; + Text [ portuguese ] = "~Entrelinhas:" ; + Text [ finnish ] = "~Riviväli:" ; + Text [ danish ] = "Linjeafstand:" ; + Text [ french ] = "Interligne :" ; + Text [ swedish ] = "Ra~davstånd:" ; + Text [ dutch ] = "~Regelafstand:" ; + Text [ spanish ] = "~Interlineado:" ; + Text [ english_us ] = "~Line spacing:" ; + Text[ chinese_simplified ] = "Ðоà(~L)"; + Text[ russian ] = "Ìåæäó ñòðîêàìè:"; + Text[ polish ] = "Odstêp wierszy:"; + Text[ japanese ] = "sŠÔ:(~L)"; + Text[ chinese_traditional ] = "¦æ¶Z(~L)"; + Text[ arabic ] = ":ÊÈÇÚÏ ÇáÃÓØÑ"; + Text[ greek ] = "ÄéÜóôé÷ï:"; + Text[ korean ] = "ÁÙ °£°Ý:(~L)"; + Text[ turkish ] = "Satýr aralýðý:"; + Text[ language_user1 ] = " "; + }; + Bitmap 3 + { + File = "dist12.bmp" ; + }; + String 4 + { + Text = "~Wurzelabstand:" ; + Text [ ENGLISH ] = "~Rootspacing:" ; + Text [ norwegian ] = "~Rootspacing:" ; + Text [ italian ] = "Distanza radice:" ; + Text [ portuguese_brazilian ] = "~Espaçamento de raiz:" ; + Text [ portuguese ] = "~Espaçamento de raíz:" ; + Text [ finnish ] = "~Juuriväli:" ; + Text [ danish ] = "Rodafstand: ." ; + Text [ french ] = "~Espacement :" ; + Text [ swedish ] = "R~otavstånd:" ; + Text [ dutch ] = "Afstand tot ~wortel:" ; + Text [ spanish ] = "Intervalo de ~raíz:" ; + Text [ english_us ] = "~Root spacing:" ; + Text[ chinese_simplified ] = "¸ùʽ¼ä¸ô(~R)"; + Text[ russian ] = "~Ðàññòîÿíèå îò êîðíÿ:"; + Text[ polish ] = "Odstêp pierwiast.:"; + Text[ japanese ] = "Ù°Ä‚ÌŠÔŠu:(~R)"; + Text[ chinese_traditional ] = "®Ú¦¡¶¡¹j(~R)"; + Text[ arabic ] = ":ÊÈÇÚÏ ÇáÌÐæÑ"; + Text[ greek ] = "Áðüóôáóç ñßæáò:"; + Text[ korean ] = "·çÆ® °£°Ý:(~R)"; + Text[ turkish ] = "Kök aralýðý:"; + Text[ language_user1 ] = " "; + }; + Bitmap 4 + { + File = "dist13.bmp" ; + }; + }; + Resource 2 + { + String 1 + { + Text = "Indizes" ; + Text [ ENGLISH ] = "Indices" ; + Text [ norwegian ] = "Indices" ; + Text [ italian ] = "Indici" ; + Text [ portuguese_brazilian ] = "Índices" ; + Text [ portuguese ] = "Índices" ; + Text [ finnish ] = "Indices" ; + Text [ danish ] = "Sub-/Superscript" ; + Text [ french ] = "Index" ; + Text [ swedish ] = "Index" ; + Text [ dutch ] = "Indicies" ; + Text [ spanish ] = "Índices" ; + Text [ english_us ] = "Indices" ; + Text[ chinese_simplified ] = "±êÖ¾"; + Text[ russian ] = "Èíäåêñû"; + Text[ polish ] = "Indeksy"; + Text[ japanese ] = "²ÝÃÞ¯¸½"; + Text[ chinese_traditional ] = "¼Ð»x"; + Text[ arabic ] = "ÅÓÇÓ (ÃÏáÉ)"; + Text[ greek ] = "Äåßêôåò"; + Text[ korean ] = "À妽º"; + Text[ turkish ] = "Ýndisler"; + Text[ language_user1 ] = " "; + }; + String 2 + { + Text = "~Hochstellung:" ; + Text [ ENGLISH ] = "~Superscript:" ; + Text [ norwegian ] = "~Superscript:" ; + Text [ italian ] = "A~pice:" ; + Text [ portuguese_brazilian ] = "~Sobrescrito:" ; + Text [ portuguese ] = "~Sup. à linha:" ; + Text [ finnish ] = "~Yläindeksi:" ; + Text [ danish ] = "~Hævet:" ; + Text [ french ] = "~Exposant :" ; + Text [ swedish ] = "~Upphöjning:" ; + Text [ dutch ] = "~Superscript:" ; + Text [ spanish ] = "~Superíndice:" ; + Text [ english_us ] = "~Superscript:" ; + Text[ chinese_simplified ] = "Éϱê(~S)"; + Text[ russian ] = "~Âåðõíèé èíäåêñ:"; + Text[ polish ] = "Indeks górny:"; + Text[ japanese ] = "ã•t‚«:(~S)"; + Text[ chinese_traditional ] = "¤W¼Ð(~S)"; + Text[ arabic ] = ":ãÑÊÝÚ"; + Text[ greek ] = "ÅêèÝôçò:"; + Text[ korean ] = "À§Ã·ÀÚ:(~S)"; + Text[ turkish ] = "Üst simge:"; + Text[ language_user1 ] = " "; + }; + Bitmap 2 + { + File = "dist21.bmp" ; + }; + String 3 + { + Text = "~Tiefstellung:" ; + Text [ ENGLISH ] = "S~upscript:" ; + Text [ norwegian ] = "S~upscript:" ; + Text [ italian ] = "Pe~dice:" ; + Text [ portuguese_brazilian ] = "S~ubscrito:" ; + Text [ portuguese ] = "~Inf. à linha:" ; + Text [ finnish ] = "~Alaindeksi:" ; + Text [ danish ] = "~Sænket:" ; + Text [ french ] = "I~ndice :" ; + Text [ swedish ] = "~Nedsänkning:" ; + Text [ dutch ] = "S~ubscript:" ; + Text [ spanish ] = "S~ubíndice:" ; + Text [ english_us ] = "S~ubscript:" ; + Text[ chinese_simplified ] = "ϱê(~U)"; + Text[ russian ] = "~Íèæíèé èíäåêñ:"; + Text[ polish ] = "Indeks dolny:"; + Text[ japanese ] = "‰º•t‚«:(~U)"; + Text[ chinese_traditional ] = "¤U¼Ð(~U)"; + Text[ arabic ] = ":ãäÎÝÖ"; + Text[ greek ] = "Äåßêôçò:"; + Text[ korean ] = "¾Æ·¡Ã·ÀÚ:(~U)"; + Text[ turkish ] = "Alt simge:"; + Text[ language_user1 ] = " "; + }; + Bitmap 3 + { + File = "dist22.bmp" ; + }; + }; + Resource 3 + { + String 1 + { + /* ### ACHTUNG: Neuer Text in Resource? Brüche : Br³che */ + Text = "Brüche" ; + Text [ ENGLISH ] = "Fractions" ; + Text [ norwegian ] = "Fractions" ; + Text [ italian ] = "Frazioni" ; + Text [ portuguese_brazilian ] = "Frações" ; + Text [ portuguese ] = "Fracções" ; + Text [ finnish ] = "Murtomerkinnät" ; + Text [ danish ] = "Brøker" ; + Text [ french ] = "Fractions" ; + Text [ swedish ] = "Bråk" ; + Text [ dutch ] = "Breuken" ; + Text [ spanish ] = "Fracciones" ; + Text [ english_us ] = "Fractions" ; + Text[ chinese_simplified ] = "·ÖÊý"; + Text[ russian ] = "Ïðîñòûå äðîáè"; + Text[ polish ] = "U³amki"; + Text[ japanese ] = "•ª”"; + Text[ chinese_traditional ] = "¤À¼Æ"; + Text[ arabic ] = "ßÓæÑ"; + Text[ greek ] = "ÊëÜóìáôá"; + Text[ korean ] = "ºÐ¼ö"; + Text[ turkish ] = "Kesirler"; + Text[ language_user1 ] = " "; + }; + String 2 + { + /* ### ACHTUNG: Neuer Text in Resource? ~Zählerhöhe: : ~Zählerhöhe: */ + Text = "~Zählerhöhe:" ; + Text [ ENGLISH ] = "~Numerator high:" ; + Text [ norwegian ] = "~Numerator high:" ; + Text [ italian ] = "Val. del contatore:" ; + Text [ portuguese_brazilian ] = "~Numerador alto:" ; + Text [ portuguese ] = "Altura do ~numerador:" ; + Text [ finnish ] = "~Osoittaja:" ; + Text [ danish ] = "~Tællerhøjde:" ; + Text [ french ] = "~Numérateur :" ; + Text [ swedish ] = "~Täljare höjd:" ; + Text [ dutch ] = "~Noemer boven:" ; + Text [ spanish ] = "Altura del ~numerador:" ; + Text [ english_us ] = "~Numerator:" ; + Text[ chinese_simplified ] = "·Ö×Ó(~N)"; + Text[ russian ] = "~×èñëèòåëü:"; + Text[ polish ] = "Wys. licznika u³amka:"; + Text[ japanese ] = "•ªŽq:(~N)"; + Text[ chinese_traditional ] = "¤À¤l(~N)"; + Text[ arabic ] = ":ÈÓØ ÇáßÓÑ"; + Text[ greek ] = "ÁñéèìçôÞò:"; + Text[ korean ] = "ºÐÀÚ:(~N)"; + Text[ turkish ] = "Bölünen aralýðý:"; + Text[ language_user1 ] = " "; + }; + Bitmap 2 + { + File = "dist31.bmp" ; + }; + String 3 + { + Text = "~Nennertiefe:" ; + Text [ ENGLISH ] = "~Denominator deep:" ; + Text [ norwegian ] = "~Denominator deep:" ; + Text [ italian ] = "Prof. del denominatore:" ; + Text [ portuguese_brazilian ] = "~Denominador baixo:" ; + Text [ portuguese ] = "Altura do ~denominador:" ; + Text [ finnish ] = "~Nimittäjä:" ; + Text [ danish ] = "~Nævnerdybde:" ; + Text [ french ] = "~Dénominateur :" ; + Text [ swedish ] = "~Nämnaredjup:" ; + Text [ dutch ] = "~Deler onder:" ; + Text [ spanish ] = "~Altura del denominador:" ; + Text [ english_us ] = "~Denominator:" ; + Text[ chinese_simplified ] = "·Öĸ(~D)"; + Text[ russian ] = "~Çíàìåíàòåëü:"; + Text[ polish ] = "Pozycja mian. u³amka:"; + Text[ japanese ] = "•ª•ê:(~D)"; + Text[ chinese_traditional ] = "¤À¥À(~D)"; + Text[ arabic ] = ":ãÎÑÌ ÇáßÓÑ"; + Text[ greek ] = "ÂÜèïò ðáñïíïìáóôÞ:"; + Text[ korean ] = "ºÐ¸ð:(~D)"; + Text[ turkish ] = "Bölen aralýðý:"; + Text[ language_user1 ] = " "; + }; + Bitmap 3 + { + File = "dist32.bmp" ; + }; + }; + Resource 4 + { + String 1 + { + Text = "Bruchstriche" ; + Text [ ENGLISH ] = "Fraction lines" ; + Text [ norwegian ] = "Fraction lines" ; + Text [ italian ] = "Linee di frazione" ; + Text [ portuguese_brazilian ] = "Linhas de fração" ; + Text [ portuguese ] = "Traços de fracção" ; + Text [ finnish ] = "Murtoviivat" ; + Text [ danish ] = "Brøkstreger" ; + Text [ french ] = "Traits de fraction" ; + Text [ swedish ] = "Bråkstreck" ; + Text [ dutch ] = "Breuklijnen" ; + Text [ spanish ] = "Líneas de fracción" ; + Text [ english_us ] = "Fraction bar" ; + Text[ chinese_simplified ] = "·ÖÊýÏß"; + Text[ russian ] = "Äðîáíàÿ ÷åðòà"; + Text[ polish ] = "Kreski u³amkowe"; + Text[ japanese ] = "•ª”ü"; + Text[ chinese_traditional ] = "¤À¼Æ½u"; + Text[ arabic ] = "ÔÑØÉ ÇáßÓÑ"; + Text[ greek ] = "ÃñáììÝò êëÜóìáôïò"; + Text[ korean ] = "ºÐ¼ö ÁÙ"; + Text[ turkish ] = "Kesir çizgisi"; + Text[ language_user1 ] = " "; + }; + String 2 + { + /* ### ACHTUNG: Neuer Text in Resource? ~Überlänge: : ~šberlänge: */ + Text = "~Überlänge:" ; + Text [ ENGLISH ] = "~Excessive lenght:" ; + Text [ norwegian ] = "~Excessive lenght:" ; + Text [ italian ] = "L~ungh. in eccesso:" ; + Text [ portuguese_brazilian ] = "~Comprimento excessivo:" ; + Text [ portuguese ] = "Comprimento ~excessivo:" ; + Text [ finnish ] = "~Ylipitkä:" ; + Text [ danish ] = "~Overlængde:" ; + Text [ french ] = "~Longueur excessive :" ; + Text [ swedish ] = "~Överskjutning:" ; + Text [ dutch ] = "~Extra lengte:" ; + Text [ spanish ] = "Longitud ~excesiva:" ; + Text [ english_us ] = "~Excess length:" ; + Text[ chinese_simplified ] = "³¬³¤¶È(~E)"; + Text[ russian ] = "~Âûñòóï:"; + Text[ polish ] = "Nadd³ugoœæ:"; + Text[ japanese ] = "’´’·»²½Þ:(~E)"; + Text[ chinese_traditional ] = "¶Wªø«×(~E)"; + Text[ arabic ] = ":Øæá ÒÇÆÏ"; + Text[ greek ] = "ÌÞêïò õðÝñâáóçò:"; + Text[ korean ] = "ÃÊ°ú ±æÀÌ:(~E)"; + Text[ turkish ] = "Taþma uzunluðu:"; + Text[ language_user1 ] = " "; + }; + Bitmap 2 + { + File = "dist41.bmp" ; + }; + String 3 + { + /* ### ACHTUNG: Neuer Text in Resource? ~Strichstärke: : ~Strichstärke: */ + Text = "~Strichstärke:" ; + Text [ ENGLISH ] = "~Line width:" ; + Text [ norwegian ] = "~Line width:" ; + Text [ italian ] = "~Spessore del tratto:" ; + Text [ portuguese_brazilian ] = "~Largura da linha:" ; + Text [ portuguese ] = "~Espessura do traço:" ; + Text [ finnish ] = "~Viivan leveys:" ; + Text [ danish ] = "~Stregstyrke:" ; + Text [ french ] = "~Épaisseur de trait :" ; + Text [ swedish ] = "~Linjestyrka:" ; + Text [ dutch ] = "~Lijndikte:" ; + Text [ spanish ] = "Espesor del ~trazo:" ; + Text [ english_us ] = "~Weight:" ; + Text[ chinese_simplified ] = "»®Ïß´Ö(~L)"; + Text[ russian ] = "~Òîëùèíà ëèíèè:"; + Text[ polish ] = "Gruboœæ linii:"; + Text[ japanese ] = "ü‚Ì‘¾‚³:(~L)"; + Text[ chinese_traditional ] = "½u²Ê(~L)"; + Text[ arabic ] = "Óõãß ÇáÎØ:"; + Text[ greek ] = "ÐÜ÷ïò ãñáììÞò:"; + Text[ korean ] = "ÁÙÀÇ µÎ²²:(~W)"; + Text[ turkish ] = "Çizgi kalýnlýðý:"; + Text[ language_user1 ] = " "; + }; + Bitmap 3 + { + File = "dist42.bmp" ; + }; + }; + Resource 5 + { + String 1 + { + Text = "Grenzen" ; + Text [ ENGLISH ] = "Borders" ; + Text [ norwegian ] = "Borders" ; + Text [ italian ] = "Margini" ; + Text [ portuguese_brazilian ] = "Margens" ; + Text [ portuguese ] = "Limites" ; + Text [ finnish ] = "Reunaviivat" ; + Text [ danish ] = "Grænser" ; + Text [ french ] = "Limites" ; + Text [ swedish ] = "Gränser" ; + Text [ dutch ] = "Begrenzing" ; + Text [ spanish ] = "Límites" ; + Text [ english_us ] = "Limits" ; + Text[ chinese_simplified ] = "½çÏÞ"; + Text[ russian ] = "Ïðåäåëû"; + Text[ polish ] = "Granice"; + Text[ japanese ] = "ØЯÄ"; + Text[ chinese_traditional ] = "¬É­­"; + Text[ arabic ] = "ÇáÍÏæÏ"; + Text[ greek ] = "¼ñéá"; + Text[ korean ] = "±ØÇÑ"; + Text[ turkish ] = "Limitler"; + Text[ language_user1 ] = " "; + }; + String 2 + { + /* ### ACHTUNG: Neuer Text in Resource? Grenz~höhe: : Grenz~höhe: */ + Text = "Grenz~höhe:" ; + Text [ ENGLISH ] = "Maximum ~hight:" ; + Text [ norwegian ] = "Maximum ~hight:" ; + Text [ italian ] = "Valore massimo:" ; + Text [ portuguese_brazilian ] = "Altura ~máxima:" ; + Text [ portuguese ] = "Altura ~máxima:" ; + Text [ finnish ] = "Suurin korkeus:" ; + Text [ danish ] = "Grænsehøjde:" ; + Text [ french ] = "Hauteur ~maximale :" ; + Text [ swedish ] = "Gräns~höjd:" ; + Text [ dutch ] = "Maximum~hoogte:" ; + Text [ spanish ] = "~Altura máxima:" ; + Text [ english_us ] = "~Upper limit:" ; + Text[ chinese_simplified ] = "ÉϽçÏÞ(~U)"; + Text[ russian ] = "Âåðõíèé ïðåäåë:"; + Text[ polish ] = "Wysokoœæ granicy:"; + Text[ japanese ] = "ãŒÀ:(~U)"; + Text[ chinese_traditional ] = "¤W¬É­­(~U)"; + Text[ arabic ] = ":ÇáÍÏ ÇáÚáæí"; + Text[ greek ] = "¢íù üñéï:"; + Text[ korean ] = "ÃÖ´ë ±ØÇÑ:(~U)"; + Text[ turkish ] = "Üst limit:"; + Text[ language_user1 ] = " "; + }; + Bitmap 2 + { + File = "dist51.bmp" ; + }; + String 3 + { + Text = "Grenz~tiefe:" ; + Text [ ENGLISH ] = "Minimum hight:" ; + Text [ english_us ] = "~Lower limit:" ; + Text [ italian ] = "Limi~te profondità:" ; + Text [ spanish ] = "Altura ~mínima:" ; + Text [ french ] = "~Hauteur minimale :" ; + Text [ dutch ] = "~Maximum diepte:" ; + Text [ swedish ] = "Gräns~djup:" ; + Text [ danish ] = "Grænsedybde:" ; + Text [ portuguese ] = "Altura mí~nima:" ; + Text [ portuguese_brazilian ] = "Grenz~tiefe:" ; + Text[ chinese_simplified ] = "ϽçÏÞ(~L)"; + Text[ russian ] = "Íèæíèé ïðåäåë:"; + Text[ polish ] = "Pozycja granicy:"; + Text[ japanese ] = "‰ºŒÀ(~L)"; + Text[ chinese_traditional ] = "¤U¬É­­(~L)"; + Text[ arabic ] = ":ÇáÍÏ ÇáÓÝáí"; + Text[ greek ] = "ÊÜôù üñéï:"; + Text[ korean ] = "ÃÖ¼Ò ±ØÇÑ:(~L)"; + Text[ turkish ] = "Alt limit:"; + Text[ language_user1 ] = " "; + }; + Bitmap 3 + { + File = "dist52.bmp" ; + }; + }; + Resource 6 + { + String 1 + { + Text = "Klammern" ; + Text [ ENGLISH ] = "Brackets" ; + Text [ norwegian ] = "Brackets" ; + Text [ italian ] = "Parentesi" ; + Text [ portuguese_brazilian ] = "Colchetes" ; + Text [ portuguese ] = "Parênteses" ; + Text [ finnish ] = "Sulkeet" ; + Text [ danish ] = "Parenteser" ; + Text [ french ] = "Crochets" ; + Text [ swedish ] = "Parenteser" ; + Text [ dutch ] = "Haakjes" ; + Text [ spanish ] = "Paréntesis" ; + Text [ english_us ] = "Brackets" ; + Text[ chinese_simplified ] = "À¨ºÅ"; + Text[ russian ] = "Ñêîáêè"; + Text[ polish ] = "Nawiasy"; + Text[ japanese ] = "Š‡ŒÊ"; + Text[ chinese_traditional ] = "¬A¸¹"; + Text[ arabic ] = "ÃÞæÇÓ"; + Text[ greek ] = "ÐáñåíèÝóåéò"; + Text[ korean ] = "°ýÈ£"; + Text[ turkish ] = "Ayraçlar"; + Text[ language_user1 ] = " "; + }; + String 2 + { + Text = "~left/right Übergröße:" ; + Text [ ENGLISH ] = "~left/right excess height:" ; + Text[ english_us ] = "~Excess size (left/right):"; + Text[ portuguese ] = "Tamanho ~excessivo (esquerda/direita):"; + Text[ russian ] = "~Âûñòóï (ñëåâà/ñïðàâà):"; + Text[ dutch ] = "~links/rechts te groot:"; + Text[ french ] = "~Dépassement latéral :"; + Text[ spanish ] = "~Sobredimensión izquierda/derecha:"; + Text[ italian ] = "Sovradimensionato (sinistra/destra):"; + Text[ danish ] = "Venstre/højre overstørrelse:"; + Text[ swedish ] = "~vänster/höger överstorlek:"; + Text[ polish ] = "Nadwymiar:"; + Text[ portuguese_brazilian ] = "~Tamanho excedente:"; + Text[ japanese ] = "’´‘廲½Þ¶/‰E:(~E)"; + Text[ chinese_simplified ] = "×óÓÒ³¬´ó(~E)"; + Text[ chinese_traditional ] = "¥ª¥k¶W¤j(~E)"; + Text[ arabic ] = ":ÍÌã ÒÇÆÏ íãíä/íÓÇÑ"; + Text[ greek ] = "Õð~åñâÜëëïí ìÝãåèïò (áñéóôåñÜ/äåîéÜ):"; + Text[ korean ] = "¿ÞÂÊ/¿À¸¥ÂÊ ÃÊ°ú Å©±â:(~E)"; + Text[ turkish ] = "Sol/sað taþma:"; + Text[ language_user1 ] = " "; + }; + Bitmap 2 + { + File = "dist61.bmp" ; + }; + String 3 + { + Text = "~Abstand:" ; + Text [ ENGLISH ] = "~Distance:" ; + Text [ norwegian ] = "~Distance:" ; + Text [ italian ] = "~Distanza:" ; + Text [ portuguese_brazilian ] = "~Distância:" ; + Text [ portuguese ] = "~Espaçamento:" ; + Text [ finnish ] = "~Etäisyys:" ; + Text [ danish ] = "Afstand:" ; + Text [ french ] = "É~cart :" ; + Text [ swedish ] = "~Avstånd sidled:" ; + Text [ dutch ] = "~Afstand:" ; + Text [ spanish ] = "~Espacio:" ; + Text [ english_us ] = "~Spacing:" ; + Text[ chinese_simplified ] = "¼ä¸ô(~S)"; + Text[ russian ] = "Èíòåðâàë:"; + Text[ polish ] = "Odstêp:"; + Text[ japanese ] = "ŠÔŠu:(~S)"; + Text[ chinese_traditional ] = "¶¡¹j(~S)"; + Text[ arabic ] = ":ÊÈÇÚÏ"; + Text[ greek ] = "~Áðüóôáóç:"; + Text[ korean ] = "°£°Ý:(~S)"; + Text[ turkish ] = "Aralýk:"; + Text[ language_user1 ] = " "; + }; + Bitmap 3 + { + File = "dist62.bmp" ; + }; + String 5 + { + Text = "~Übergröße:" ; + Text [ ENGLISH ] = "~Excess size:" ; + Text[ english_us ] = "~Excess size:"; + Text[ portuguese ] = "~Tamanho excessivo:"; + Text[ russian ] = "~Âûñòóï:"; + Text[ dutch ] = "~Te groot:"; + Text[ french ] = "~Dépassement :"; + Text[ spanish ] = "~Sobredimensión:"; + Text[ italian ] = "Sovradimensionato:"; + Text[ danish ] = "Overstørrelse:"; + Text[ swedish ] = "~Överstorlek:"; + Text[ polish ] = "Nadrozmiar:"; + Text[ portuguese_brazilian ] = "~Excess size:"; + Text[ japanese ] = "’´‘廲½Þ(~E)"; + Text[ chinese_simplified ] = "ÌØÊâ´óС(~E)"; + Text[ chinese_traditional ] = "¯S®í¤j¤p(~E)"; + Text[ arabic ] = ":ÍÌã ÒÇÆÏ"; + Text[ greek ] = "Õð~åñâÜëëïí ìÝãåèïò:"; + Text[ korean ] = "ÃÊ°ú Å©±â:(~E)"; + Text[ turkish ] = "Taþma:"; + Text[ language_user1 ] = " "; + }; + Bitmap 5 + { + File = "dist61.bmp" ; + }; + }; + Resource 7 + { + String 1 + { + Text = "Matrizen" ; + Text [ ENGLISH ] = "Matrix" ; + Text [ norwegian ] = "Matrix" ; + Text [ italian ] = "Matrici" ; + Text [ portuguese_brazilian ] = "Matriz" ; + Text [ portuguese ] = "Matriz" ; + Text [ finnish ] = "Matriisi" ; + Text [ danish ] = "Matrixer" ; + Text [ french ] = "Matrices" ; + Text [ swedish ] = "Matriser" ; + Text [ dutch ] = "Matrix" ; + Text [ spanish ] = "Matrices" ; + Text [ english_us ] = "Matrix" ; + Text[ chinese_simplified ] = "¾ØÕó"; + Text[ russian ] = "Ìàòðèöû"; + Text[ polish ] = "Macierze"; + Text[ japanese ] = "ÏÄظ½"; + Text[ chinese_traditional ] = "¯x°}"; + Text[ arabic ] = "ãÕÝæÝÇÊ"; + Text[ greek ] = "ÌÞôñá"; + Text[ korean ] = "Çà·Ä"; + Text[ turkish ] = "Matrisler"; + Text[ language_user1 ] = " "; + }; + String 2 + { + Text = "~Zeilenabstand:" ; + Text [ ENGLISH ] = "~Line spacing:" ; + Text [ norwegian ] = "~Line spacing:" ; + Text [ italian ] = "Distanza linee:" ; + Text [ portuguese_brazilian ] = "~Espaçamento de linha:" ; + Text [ portuguese ] = "~Entrelinhas:" ; + Text [ finnish ] = "~Riviväli:" ; + Text [ danish ] = "Linjeafstand:" ; + Text [ french ] = "~Interligne :" ; + Text [ swedish ] = "~Radavstånd:" ; + Text [ dutch ] = "~Regelafstand:" ; + Text [ spanish ] = "~Interlineado:" ; + Text [ english_us ] = "~Line spacing:" ; + Text[ chinese_simplified ] = "Ðоà(~L)"; + Text[ russian ] = "Ìåæäó ñòðîêàìè:"; + Text[ polish ] = "Odstêp wierszy:"; + Text[ japanese ] = "sŠÔ:(~L)"; + Text[ chinese_traditional ] = "¦æ¶Z(~L)"; + Text[ arabic ] = ":ÊÈÇÚÏ ÇáÃÓØÑ"; + Text[ greek ] = "ÄéÜóôé÷ï:"; + Text[ korean ] = "ÁÙ °£°Ý:(~L)"; + Text[ turkish ] = "Satýr aralýðý:"; + Text[ language_user1 ] = " "; + }; + Bitmap 2 + { + File = "dist71.bmp" ; + }; + String 3 + { + Text = "~Spaltenabstand:" ; + Text [ ENGLISH ] = "~Column spacing:" ; + Text [ norwegian ] = "~Column spacing:" ; + Text [ italian ] = "Distanza colonne:" ; + Text [ portuguese_brazilian ] = "~Espaçamento de coluna:" ; + Text [ portuguese ] = "~Espaçamento de coluna:" ; + Text [ finnish ] = "~Sarakeväli:" ; + Text [ danish ] = "~Kolonneafstand:" ; + Text [ french ] = "E~spacem. colonnes :" ; + Text [ swedish ] = "~Kolumnavstånd:" ; + Text [ dutch ] = "~Kolomafstand:" ; + Text [ spanish ] = "Distancia entre ~columnas:" ; + Text [ english_us ] = "~Column spacing:" ; + Text[ chinese_simplified ] = "Áмä¸ô(~C)"; + Text[ russian ] = "~Ìåæäó ñòîëáöàìè:"; + Text[ polish ] = "Odstêp kolum:"; + Text[ japanese ] = "—ñ‚ÌŠÔŠu:(~C)"; + Text[ chinese_traditional ] = "¦C¶¡¹j(~C)"; + Text[ arabic ] = ":ÊÈÇÚÏ ÇáÃÚãÏÉ"; + Text[ greek ] = "Áðü~óôáóç óôçëþí:"; + Text[ korean ] = "¿­ °£°Ý:(~C)"; + Text[ turkish ] = "Sütun aralýðý:"; + Text[ language_user1 ] = " "; + }; + Bitmap 3 + { + File = "dist72.bmp" ; + }; + }; + Resource 8 + { + String 1 + { + Text = "Ornamente" ; + Text [ ENGLISH ] = "Ornaments" ; + Text [ norwegian ] = "Ornaments" ; + Text [ italian ] = "Ornamenti" ; + Text [ portuguese_brazilian ] = "Ornamentos" ; + Text [ portuguese ] = "Ornamentos" ; + Text [ finnish ] = "Koristeet" ; + Text [ danish ] = "Ornamenter" ; + Text [ french ] = "Ornements" ; + Text [ swedish ] = "Ornament" ; + Text [ dutch ] = "Ornamenten" ; + Text [ spanish ] = "Ornamentos" ; + Text [ english_us ] = "Symbols" ; + Text[ chinese_simplified ] = "ͼ±ê"; + Text[ russian ] = "Ñèìâîëû"; + Text[ polish ] = "Ornamenty"; + Text[ japanese ] = "‘•ü"; + Text[ chinese_traditional ] = "¹Ï¥Ü"; + Text[ arabic ] = "ÑãæÒ"; + Text[ greek ] = "Äéáêüóìçóç"; + Text[ korean ] = "Àå½Ä ±âÈ£"; + Text[ turkish ] = "Simgeler"; + Text[ language_user1 ] = " "; + }; + String 2 + { + /* ### ACHTUNG: Neuer Text in Resource? ~Primärhöhe: : ~Primärhöhe: */ + Text = "~Primärhöhe:" ; + Text [ ENGLISH ] = "~Primary hight:" ; + Text [ norwegian ] = "~Primary hight:" ; + Text [ italian ] = "Valore ~primario:" ; + Text [ portuguese_brazilian ] = "~Altura primária:" ; + Text [ portuguese ] = "Altura ~primária:" ; + Text [ finnish ] = "Perus~korkeus:" ; + Text [ danish ] = "~Primærhøjde:" ; + Text [ french ] = "~Hauteur principale :" ; + Text [ swedish ] = "~Primärhöjd:" ; + Text [ dutch ] = "~Primaire hoogte:" ; + Text [ spanish ] = "Altura ~primaria:" ; + Text [ english_us ] = "~Primary height:" ; + Text[ chinese_simplified ] = "»ù±¾¸ß¶È(~P)"; + Text[ russian ] = "~Îñíîâíàÿ âûñîòà:"; + Text[ polish ] = "Wysokoœæ pierwotna:"; + Text[ japanese ] = "Šî–{‚Ì‚‚³:(~P)"; + Text[ chinese_traditional ] = "°ò¥»°ª«×(~P)"; + Text[ arabic ] = ":ÇáÇÑÊÝÇÚ ÇáÃÓÇÓí"; + Text[ greek ] = "~Ðñùôåýïí ýøïò:"; + Text[ korean ] = "ÀÏÂ÷ ³ôÀÌ:(~P)"; + Text[ turkish ] = "Birincil yükseklik:"; + Text[ language_user1 ] = " "; + }; + Bitmap 2 + { + File = "dist81.bmp" ; + }; + String 3 + { + Text = "~Mindestabstand:" ; + Text [ ENGLISH ] = "~Minimum distance:" ; + Text [ norwegian ] = "~Minimum distance:" ; + Text [ italian ] = "Distanza ~minima:" ; + Text [ portuguese_brazilian ] = "~Distância mínima:" ; + Text [ portuguese ] = "Distância ~mínima:" ; + Text [ finnish ] = "~Pienin etäisyys:" ; + Text [ danish ] = "~Mindste afstand:" ; + Text [ french ] = "~Écart minimum :" ; + Text [ swedish ] = "~Minimiavstånd:" ; + Text [ dutch ] = "~Minimum afstand:" ; + Text [ spanish ] = "Distancia ~mínima:" ; + Text [ english_us ] = "~Minimum spacing:" ; + Text[ chinese_simplified ] = "×îС¸ß¶È(~M)"; + Text[ russian ] = "~Ìèí. ðàññòîÿíèå:"; + Text[ polish ] = "Minimalny odstêp:"; + Text[ japanese ] = "Å’ZŠÔŠu:(~M)"; + Text[ chinese_traditional ] = "³Ì¤p°ª«×(~M)"; + Text[ arabic ] = ":ÃÞá ÊÈÇÚÏ"; + Text[ greek ] = "ÅëÜ÷éóôç áðüóôáóç:"; + Text[ korean ] = "ÃÖ¼Ò °£°Ý:(~M)"; + Text[ turkish ] = "Asgari aralýk:"; + Text[ language_user1 ] = " "; + }; + Bitmap 3 + { + File = "dist82.bmp" ; + }; + }; + Resource 9 + { + String 1 + { + Text = "Operatoren" ; + Text [ ENGLISH ] = "Operators" ; + Text [ norwegian ] = "Operators" ; + Text [ italian ] = "Operatori" ; + Text [ portuguese_brazilian ] = "Operadores" ; + Text [ portuguese ] = "Operadores" ; + Text [ finnish ] = "Operaattorit" ; + Text [ danish ] = "Operatorer" ; + Text [ french ] = "Opérateurs" ; + Text [ swedish ] = "Operatorer" ; + Text [ dutch ] = "Operatoren" ; + Text [ spanish ] = "Operadores" ; + Text [ english_us ] = "Operators" ; + Text[ chinese_simplified ] = "ÔËËã·û"; + Text[ russian ] = "Îïåðàòîðû"; + Text[ polish ] = "Operatory"; + Text[ japanese ] = "‰‰ŽZŽq"; + Text[ chinese_traditional ] = "¹Bºâ²Å"; + Text[ arabic ] = "ÚæÇãá ÇáÊÔÛíá"; + Text[ greek ] = "ÔåëåóôÝò"; + Text[ korean ] = "¿¬»êÀÚ"; + Text[ turkish ] = "Ýþleçler"; + Text[ language_user1 ] = " "; + }; + String 2 + { + /* ### ACHTUNG: Neuer Text in Resource? ~Übergröße: : ~šbergröße: */ + Text = "~Übergröße:" ; + Text [ ENGLISH ] = "~Oversize:" ; + Text [ norwegian ] = "~Oversize:" ; + Text [ italian ] = "~Sovradimensionato:" ; + Text [ portuguese_brazilian ] = "~Tamanho excedente:" ; + Text [ portuguese ] = "Tamanho ~excessivo:" ; + Text [ finnish ] = "~Ylisuuri:" ; + Text [ danish ] = "~Overstørrelse:" ; + Text [ french ] = "~Dépassement :" ; + Text [ swedish ] = "~Överstorlek:" ; + Text [ dutch ] = "~Te groot:" ; + Text [ spanish ] = "~Sobredimensión:" ; + Text [ english_us ] = "~Excess size:" ; + Text[ chinese_simplified ] = "³¬¸ß(~E)"; + Text[ russian ] = "Âûñòóï:"; + Text[ polish ] = "Nadwymiar:"; + Text[ japanese ] = "’´‘廲½Þ:(~E)"; + Text[ chinese_traditional ] = "¶W°ª(~E)"; + Text[ arabic ] = ":ÍÌã ÒÇÆÏ"; + Text[ greek ] = "Õð~åñâÜëëïí ìÝãåèïò:"; + Text[ korean ] = "ÃÊ°ú Å©±â:(~E)"; + Text[ turkish ] = "Taþma:"; + Text[ language_user1 ] = " "; + }; + Bitmap 2 + { + File = "dist91.bmp" ; + }; + String 3 + { + Text = "~Abstand:" ; + Text [ ENGLISH ] = "~Distance:" ; + Text [ norwegian ] = "~Distance:" ; + Text [ italian ] = "~Distanza:" ; + Text [ portuguese_brazilian ] = "~Distância:" ; + Text [ portuguese ] = "~Espaçamento:" ; + Text [ finnish ] = "~Etäisyys:" ; + Text [ danish ] = "~Afstand:" ; + Text [ french ] = "~Écart : " ; + Text [ swedish ] = "~Avstånd sidled:" ; + Text [ dutch ] = "~Afstand:" ; + Text [ spanish ] = "~Espacio:" ; + Text [ english_us ] = "~Spacing:" ; + Text[ chinese_simplified ] = "¼ä¸ô(~S)"; + Text[ russian ] = "~Èíòåðâàë:"; + Text[ polish ] = "Odstêp:"; + Text[ japanese ] = "ŠÔŠu:(~S)"; + Text[ chinese_traditional ] = "¶¡¹j(~S)"; + Text[ arabic ] = ":ÇáÊÈÇÚÏ"; + Text[ greek ] = "~Áðüóôáóç:"; + Text[ korean ] = "°£°Ý:(~S)"; + Text[ turkish ] = "Aralýk:"; + Text[ language_user1 ] = " "; + }; + Bitmap 3 + { + File = "dist92.bmp" ; + }; + }; + Resource 10 + { + String 1 + { + Text = "Ränder" ; + Text [ ENGLISH ] = "Border" ; + TEXT[ italian ] = "Margini"; + TEXT[ portuguese_brazilian ] = "Ränder"; + TEXT[ portuguese ] = "Margens"; + TEXT[ danish ] = "Margener"; + TEXT[ french ] = "Marges"; + TEXT[ swedish ] = "Marginaler"; + TEXT[ dutch ] = "Marges"; + TEXT[ spanish ] = "Márgenes"; + TEXT[ english_us ] = "Borders"; + TEXT[ chinese_simplified ] = "±ß¿ò"; + TEXT[ russian ] = "Ïîëÿ"; + TEXT[ polish ] = "Krawêdzie"; + TEXT[ japanese ] = "—]”’"; + TEXT[ chinese_traditional ] = "Ãä®Ø"; + TEXT[ arabic ] = "ÇáåæÇãÔ"; + TEXT[ greek ] = "ÐåñéãñÜììáôá"; + TEXT[ korean ] = "Å׵θ®"; + TEXT[ turkish ] = "Kenarlar"; + TEXT[ language_user1 ] = " "; + }; + String 2 + { + Text = "~Links:" ; + Text [ ENGLISH ] = "~Left:" ; + TEXT[ italian ] = "~Sinistra:"; + TEXT[ portuguese_brazilian ] = "~Links:"; + TEXT[ portuguese ] = "~Esquerda:"; + TEXT[ danish ] = "~Venstre:"; + TEXT[ french ] = "~À gauche :"; + TEXT[ swedish ] = "~Vänster:"; + TEXT[ dutch ] = "~Links:"; + TEXT[ spanish ] = "~Izquierda:"; + TEXT[ english_us ] = "~Left:"; + TEXT[ chinese_simplified ] = "×ó(~L)"; + TEXT[ russian ] = "Ñëåâà:"; + TEXT[ polish ] = "Z lewej:"; + TEXT[ japanese ] = "¶:(~L)"; + TEXT[ chinese_traditional ] = "¥ª(~L)"; + TEXT[ arabic ] = ":íÓÇÑ"; + TEXT[ greek ] = "ÁñéóôåñÜ:"; + TEXT[ korean ] = "¿ÞÂÊ:(~L)"; + TEXT[ turkish ] = "Sol:"; + TEXT[ language_user1 ] = " "; + }; + Bitmap 2 + { + File = "dist101.bmp" ; + }; + String 3 + { + Text = "~Rechts:" ; + Text [ ENGLISH ] = "~Right:" ; + TEXT[ italian ] = "Dest~ra:"; + TEXT[ portuguese_brazilian ] = "~Rechts:"; + TEXT[ portuguese ] = "~Direita:"; + TEXT[ danish ] = "Høj~re:"; + TEXT[ french ] = "~À droite :"; + TEXT[ swedish ] = "~Höger:"; + TEXT[ dutch ] = "~Rechts:"; + TEXT[ spanish ] = "~Derecha:"; + TEXT[ english_us ] = "~Right:"; + TEXT[ chinese_simplified ] = "ÓÒ(~R)"; + TEXT[ russian ] = "Ñïðàâà:"; + TEXT[ polish ] = "Z prawej:"; + TEXT[ japanese ] = "‰E:(~R)"; + TEXT[ chinese_traditional ] = "¥k(~R)"; + TEXT[ arabic ] = ":íãíä"; + TEXT[ greek ] = "ÄåîéÜ:"; + TEXT[ korean ] = "¿À¸¥ÂÊ:(~R)"; + TEXT[ turkish ] = "Sað:"; + TEXT[ language_user1 ] = " "; + }; + Bitmap 3 + { + File = "dist102.bmp" ; + }; + String 4 + { + Text = "~Oben:" ; + Text [ ENGLISH ] = "~Top:" ; + TEXT[ italian ] = "~Alto:"; + TEXT[ portuguese_brazilian ] = "~Oben:"; + TEXT[ portuguese ] = "~Topo:"; + TEXT[ danish ] = "Foroven:"; + TEXT[ french ] = "~En haut :"; + TEXT[ swedish ] = "~Överst:"; + TEXT[ dutch ] = "~Boven:"; + TEXT[ spanish ] = "~Arriba:"; + TEXT[ english_us ] = "~Top:"; + TEXT[ chinese_simplified ] = "ÉÏ(~T)"; + TEXT[ russian ] = "Ñâåðõó:"; + TEXT[ polish ] = "W górze:"; + TEXT[ japanese ] = "ã:(~T)"; + TEXT[ chinese_traditional ] = "¤W(~T)"; + TEXT[ arabic ] = ":ÃÚáì"; + TEXT[ greek ] = "ÐÜíù:"; + TEXT[ korean ] = "À§:(~T)"; + TEXT[ turkish ] = "Üst:"; + TEXT[ language_user1 ] = " "; + }; + Bitmap 4 + { + File = "dist103.bmp" ; + }; + String 5 + { + Text = "~Unten:" ; + Text [ ENGLISH ] = "~Bottom:" ; + TEXT[ italian ] = "~In basso:"; + TEXT[ portuguese_brazilian ] = "~Unten:"; + TEXT[ portuguese ] = "~Base:"; + TEXT[ danish ] = "Forneden:"; + TEXT[ french ] = "En ~bas :"; + TEXT[ swedish ] = "~Underst:"; + TEXT[ dutch ] = "~Beneden:"; + TEXT[ spanish ] = "~Abajo:"; + TEXT[ english_us ] = "~Bottom:"; + TEXT[ chinese_simplified ] = "ÏÂ(~B)"; + TEXT[ russian ] = "Ñíèçó:"; + TEXT[ polish ] = "W dole:"; + TEXT[ japanese ] = "‰º:(~B)"; + TEXT[ chinese_traditional ] = "¤U(~B)"; + TEXT[ arabic ] = ":ÃÓÝá"; + TEXT[ greek ] = "ÊÜôù:"; + TEXT[ korean ] = "¾Æ·¡:(~B)"; + TEXT[ turkish ] = "Alt:"; + TEXT[ language_user1 ] = " "; + }; + Bitmap 5 + { + File = "dist104.bmp" ; + }; + }; + Text[ chinese_simplified ] = "¼ä¸ô"; + Text[ russian ] = "Èíòåðâàëû"; + Text[ polish ] = "Odstêpy"; + Text[ japanese ] = "ŠÔŠu"; + Text[ chinese_traditional ] = "¶¡¹j"; + Text[ arabic ] = "ÊÈÇÚÏ"; + Text[ greek ] = "AðïóôÜóåéò"; + Text[ korean ] = "°£°Ý"; + Text[ turkish ] = "Aralýklar"; + Text[ language_user1 ] = " "; +}; + + +ModalDialog RID_ALIGNDIALOG +{ + Moveable = TRUE ; + OutputSize = TRUE ; + SVLook = TRUE ; + HelpID = SID_ALIGN ; + Size = MAP_APPFONT ( 119 , 66 ) ; + Text = "Ausrichtung" ; + Text [ ENGLISH ] = "Adjustment" ; + Text [ norwegian ] = "Justering" ; + Text [ italian ] = "Allineamento" ; + Text [ portuguese_brazilian ] = "Ajuste" ; + Text [ portuguese ] = "Ajuste" ; + Text [ finnish ] = "Säätö" ; + Text [ danish ] = "Justering" ; + Text [ french ] = "Alignement" ; + Text [ swedish ] = "Justering" ; + Text [ dutch ] = "Uitlijning" ; + Text [ spanish ] = "Alineación" ; + Text [ english_us ] = "Alignment" ; + RadioButton 1 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 12 , 18 ) ; + Size = MAP_APPFONT ( 40 , 12 ) ; + Text = "~Links" ; + Text [ ENGLISH ] = "~Left" ; + Text [ norwegian ] = "~Left" ; + Text [ italian ] = "~Sinistra" ; + Text [ portuguese_brazilian ] = "~Esquerda" ; + Text [ portuguese ] = "~Esquerda" ; + Text [ finnish ] = "~Vasemmalle" ; + Text [ danish ] = "~Venstre" ; + Text [ french ] = "À ~gauche" ; + Text [ swedish ] = "~Vänster" ; + Text [ dutch ] = "~Links" ; + Text [ spanish ] = "~Izquierda" ; + Text [ english_us ] = "~Left" ; + Text[ chinese_simplified ] = "Ïò×ó(~L)"; + Text[ russian ] = "Ñëåâà"; + Text[ polish ] = "Z lewej"; + Text[ japanese ] = "¶‘µ‚¦(~L)"; + Text[ chinese_traditional ] = "¦V¥ª(~L)"; + Text[ arabic ] = "íÓÇÑ"; + Text[ greek ] = "ÁñéóôåñÜ"; + Text[ korean ] = "¿ÞÂÊ(~L)"; + Text[ turkish ] = "Sol"; + Text[ language_user1 ] = " "; + }; + RadioButton 2 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 12 , 30 ) ; + Size = MAP_APPFONT ( 40 , 12 ) ; + Text = "~Zentriert" ; + Text [ ENGLISH ] = "~Center" ; + Text [ norwegian ] = "~Center" ; + Text [ italian ] = "~Centro" ; + Text [ portuguese_brazilian ] = "~Centro" ; + Text [ portuguese ] = "~Centro" ; + Text [ finnish ] = "~Keski" ; + Text [ danish ] = "~Centreret" ; + Text [ french ] = "~Centré" ; + Text [ swedish ] = "~Centrerad" ; + Text [ dutch ] = "~Centreren" ; + Text [ spanish ] = "~Centrado" ; + Text [ english_us ] = "~Centered" ; + Text[ chinese_simplified ] = "¾ÓÖÐ(~C)"; + Text[ russian ] = "Ïî öåíòðó"; + Text[ polish ] = "Wyœrodkuj"; + Text[ japanese ] = "’†‰›‘µ‚¦(~C)"; + Text[ chinese_traditional ] = "¸m¤¤(~C)"; + Text[ arabic ] = "ÊæÓíØ"; + Text[ greek ] = "ÊåíôñáñéóìÝíá"; + Text[ korean ] = "°¡¿îµ¥(~C)"; + Text[ turkish ] = "Orta"; + Text[ language_user1 ] = " "; + }; + RadioButton 3 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 12 , 42 ) ; + Size = MAP_APPFONT ( 40 , 12 ) ; + Text = "~Rechts" ; + Text [ ENGLISH ] = "~Right" ; + Text [ norwegian ] = "~Right" ; + Text [ italian ] = "~Destra" ; + Text [ portuguese_brazilian ] = "~Direita" ; + Text [ portuguese ] = "~Direita" ; + Text [ finnish ] = "~Oikealle" ; + Text [ danish ] = "Høj~re" ; + Text [ french ] = "À ~droite" ; + Text [ swedish ] = "~Höger" ; + Text [ dutch ] = "~Rechts" ; + Text [ spanish ] = "~Derecha" ; + Text [ english_us ] = "~Right" ; + Text[ chinese_simplified ] = "ÏòÓÒ(~R)"; + Text[ russian ] = "Ñïðàâà"; + Text[ polish ] = "W praw~o"; + Text[ japanese ] = "‰E‘µ‚¦(~R)"; + Text[ chinese_traditional ] = "¦V¥k(~R)"; + Text[ arabic ] = "íãíä"; + Text[ greek ] = "ÄåîéÜ"; + Text[ korean ] = "¿À¸¥ÂÊ(~R)"; + Text[ turkish ] = "Sað"; + Text[ language_user1 ] = " "; + }; + GroupBox 1 + { + Pos = MAP_APPFONT ( 6 , 6 ) ; + Size = MAP_APPFONT ( 51 , 54 ) ; + Text = "Horizontal" ; + Text [ ENGLISH ] = "Horizontal" ; + Text [ english_us ] = "Horizontal" ; + Text [ italian ] = "Orizzontale" ; + Text [ spanish ] = "Horizontal" ; + Text [ french ] = "Horizontal" ; + Text [ dutch ] = "Horizontaal" ; + Text [ swedish ] = "Horisontell" ; + Text [ danish ] = "Vandret" ; + Text [ portuguese ] = "Horizontal" ; + Text [ portuguese_brazilian ] = "Horizontal" ; + Text[ chinese_simplified ] = "ˮƽ·½Ïò"; + Text[ russian ] = "Ãîðèçîíòàëüíî"; + Text[ polish ] = "Poziomo"; + Text[ japanese ] = "…•½‚É”z—ñ"; + Text[ chinese_traditional ] = "¤ô¥­¤è¦V"; + Text[ arabic ] = "ÃÝÞí"; + Text[ greek ] = "Ïñéæüíôéá"; + Text[ korean ] = "¼öÆò"; + Text[ turkish ] = "Yatay"; + Text[ language_user1 ] = " "; + }; + OKButton 1 + { + Pos = MAP_APPFONT ( 63 , 6 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + DefButton = TRUE ; + }; + CancelButton 1 + { + Pos = MAP_APPFONT ( 63 , 23 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + }; + PushButton 1 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 63 , 46 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text = "~Standard" ; + Text [ ENGLISH ] = "~Standard" ; + Text [ english_us ] = "~Default" ; + Text [ dutch ] = "Standaar~d" ; + Text [ italian ] = "~Standard" ; + Text [ spanish ] = "~Predeterminado" ; + Text [ french ] = "~Par défaut" ; + Text [ swedish ] = "~Standard" ; + Text [ danish ] = "Standard" ; + Text [ portuguese ] = "~Padrão" ; + Text [ portuguese_brazilian ] = "~Standard" ; + Text[ chinese_simplified ] = "±ê×¼(~D)"; + Text[ russian ] = "Ñòàíäàðò"; + Text[ polish ] = "Domyœlnie"; + Text[ japanese ] = "•W€(~D)"; + Text[ chinese_traditional ] = "¼Ð·Ç(~D)"; + Text[ arabic ] = "ÇÝÊÑÇÖí"; + Text[ greek ] = "ÐñïåðéëïãÞ"; + Text[ korean ] = "±âº»(~D)"; + Text[ turkish ] = "Standart"; + Text[ language_user1 ] = " "; + }; + Text[ chinese_simplified ] = "¶ÔÆë"; + Text[ russian ] = "Âûðàâíèâàíèå"; + Text[ polish ] = "Wyrównanie"; + Text[ japanese ] = "”z’u"; + Text[ chinese_traditional ] = "¹ï»ô"; + Text[ arabic ] = "ÇáãÍÇÐÇÉ"; + Text[ greek ] = "Óôïß÷éóç"; + Text[ korean ] = "¸ÂÃã"; + Text[ turkish ] = "Hizalama"; + Text[ language_user1 ] = " "; +}; + +TabPage RID_PRINTOPTIONPAGE +{ + OutputSize = TRUE ; + SVLook = TRUE ; + Size = MAP_APPFONT ( 260 , 135 ) ; + Text = "Optionen Formel:Einstellungen" ; + GroupBox 1 + { + Pos = MAP_APPFONT ( 6 , 3 ) ; + Size = MAP_APPFONT ( 80 , 50 ) ; + Text = "Druck Optionen" ; + Text[ english_us ] = "Print options"; + Text[ portuguese ] = "Opções de impressão"; + Text[ russian ] = "Ïàðàìåòðû ïå÷àòè"; + Text[ dutch ] = "Afdrukopties"; + Text[ french ] = "Options d'impression"; + Text[ spanish ] = "Opciones de impresión"; + Text[ italian ] = "Opzioni stampa"; + Text[ danish ] = "Udskriftsindstillinger"; + Text[ swedish ] = "Utskriftsalternativ"; + Text[ polish ] = "Opcje wydruku"; + Text[ portuguese_brazilian ] = "Opções"; + Text[ japanese ] = "ˆóüµÌß¼®Ý"; + Text[ chinese_simplified ] = "´òÓ¡Ñ¡Ïî"; + Text[ chinese_traditional ] = "¦C¦L¿ï¶µ"; + Text[ arabic ] = "ÎíÇÑÇÊ ÇáØÈÇÚÉ"; + Text[ greek ] = "ÅðéëïãÝò åêôýðùóçò"; + Text[ korean ] = "Àμ⠿ɼÇ"; + Text[ turkish ] = "Yazdýrma seçenekleri"; + Text[ language_user1 ] = " "; + }; + CheckBox 1 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 12 , 13 ) ; + Size = MAP_APPFONT ( 65 , 12 ) ; + Text = "~Titelzeile" ; + Text [ ENGLISH ] = "~Title" ; + Text [ dutch ] = "~Titelregel" ; + Text [ english_us ] = "~Title row" ; + Text [ swedish ] = "R~ubrikrad" ; + Text [ danish ] = "Titellinje" ; + Text [ italian ] = "Riga del ~titolo" ; + Text [ spanish ] = "~Fila del título" ; + Text [ french ] = "~Ligne du titre" ; + Text [ portuguese ] = "Linha do ~título" ; + Text [ portuguese_brazilian ] = "~Titelzeile" ; + Text[ chinese_simplified ] = "±êÌâÐÐ(~T)"; + Text[ russian ] = "~Çàãëàâíàÿ ñòðîêà"; + Text[ polish ] = "~Wiersz tytu³owy"; + Text[ japanese ] = "À²ÄÙs(~T)"; + Text[ chinese_traditional ] = "¼ÐÃD¦æ(~T)"; + Text[ arabic ] = "ÓØÑ ÇáÚäæÇä"; + Text[ greek ] = "ÃñáììÞ ôßôëïõ"; + Text[ korean ] = "Á¦¸ñ Çà(~T)"; + Text[ turkish ] = "Baþlýk satýrý"; + Text[ language_user1 ] = " "; + }; + CheckBox 2 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 12 , 24 ) ; + Size = MAP_APPFONT ( 65 , 12 ) ; + Text = "~Formeltext" ; + Text [ ENGLISH ] = "~Equation text" ; + Text [ dutch ] = "~Formuletekst" ; + Text [ english_us ] = "~Formula text" ; + Text [ swedish ] = "~Formeltext" ; + Text [ danish ] = "~Formeltekst" ; + Text [ italian ] = "~Testo formula" ; + Text [ spanish ] = "~Texto de la fórmula" ; + Text [ french ] = "~Texte de la formule" ; + Text [ portuguese ] = "Te~xto da fórmula" ; + Text [ portuguese_brazilian ] = "~Formeltext" ; + Text[ chinese_simplified ] = "¹«Ê½ËµÃ÷ÎÄ(~F)"; + Text[ russian ] = "Òåêñò ôîðìóëû"; + Text[ polish ] = "~Tekst formu³y"; + Text[ japanese ] = "”Ž®‚Ì•¶Žš—ñ(~F)"; + Text[ chinese_traditional ] = "¤½¦¡´£¥Ü¤å(~F)"; + Text[ arabic ] = "äÕ ÇáÕíÛÉ"; + Text[ greek ] = "Êåßìåíï ôýðïõ"; + Text[ korean ] = "¼ö½Ä ÅؽºÆ®(~F)"; + Text[ turkish ] = "Formül metni"; + Text[ language_user1 ] = " "; + }; + CheckBox 3 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 12 , 35 ) ; + Size = MAP_APPFONT ( 65 , 12 ) ; + Text = "~Rahmen" ; + Text [ ENGLISH ] = "~Frame" ; + Text [ dutch ] = "~Kader" ; + Text [ english_us ] = "B~order" ; + Text [ swedish ] = "~Ram" ; + Text [ danish ] = "Ramme" ; + Text [ italian ] = "~Cornice" ; + Text [ spanish ] = "~Borde" ; + Text [ french ] = "~Cadre" ; + Text [ portuguese ] = "~Quadro" ; + Text [ portuguese_brazilian ] = "~Rahmen" ; + Text[ chinese_simplified ] = "±ß¿ò(~B)"; + Text[ russian ] = "Ðàìêà"; + Text[ polish ] = "~Ramka"; + Text[ japanese ] = "˜g(~B)"; + Text[ chinese_traditional ] = "Ãä®Ø(~B)"; + Text[ arabic ] = "ÅØÇÑ"; + Text[ greek ] = "Ðåñßãñáììá"; + Text[ korean ] = "Å׵θ®(~O)"; + Text[ turkish ] = "Çerçeve"; + Text[ language_user1 ] = " "; + }; + GroupBox 3 + { + Pos = MAP_APPFONT ( 94 , 3 ) ; + Size = MAP_APPFONT ( 160 , 50 ) ; + Text = "Sonstige Optionen" ; + Text [ ENGLISH ] = "Misc Options" ; + Text[ english_us ] = "Miscellaneous options"; + Text[ portuguese ] = "Outras opções"; + Text[ russian ] = "Ïðî÷èå ïàðàìåòðû"; + Text[ dutch ] = "Verdere opties"; + Text[ french ] = "Autres options"; + Text[ spanish ] = "Otras opciones"; + Text[ italian ] = "Ulteriori opzioni"; + Text[ danish ] = "Andre indstilllinger"; + Text[ swedish ] = "Övriga alternativ"; + Text[ polish ] = "Inne opcje"; + Text[ portuguese_brazilian ] = "Misc Options"; + Text[ japanese ] = "‚»‚Ì‘¼"; + Text[ chinese_simplified ] = "ÆäËûÑ¡Ïî"; + Text[ chinese_traditional ] = "¨ä¥L¿ï¶µ"; + Text[ arabic ] = "ÚãáíÇÊ ÃÎÑì"; + Text[ greek ] = "¢ëëåò åðéëïãÝò"; + Text[ korean ] = "°¢Á¾ ¿É¼Ç"; + Text[ turkish ] = "Diðer seçenekler"; + Text[ language_user1 ] = " "; + }; + CheckBox 4 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 100 , 13 ) ; + Size = MAP_APPFONT ( 150 , 12 ) ; + Text = "~~ und ` am ~Zeilenende ignorieren" ; + Text [ ENGLISH ] = "~Ignore ~~ and ` at ~lineend" ; + Text[ english_us ] = "Ig~nore ~~ and ` at the end of the line"; + Text[ portuguese ] = "Ignorar ~~ e ` no ~fim da linha"; + Text[ russian ] = "Ïðîïóñêàòü ~~ è ` â êîíöå ñòðîêè"; + Text[ dutch ] = "~~ en ` aan het einde van de regel ~negeren"; + Text[ french ] = "~Ignorer ~~ et ` en ~fin de ligne"; + Text[ spanish ] = "Ignorar ~~ y ` al ~final de línea"; + Text[ italian ] = "Ignora ~~ e ` a fine riga"; + Text[ danish ] = "Ignorer ~~ og ` ved linjeslut"; + Text[ swedish ] = "~Ignorera ~~ och ` vid radslutet"; + Text[ polish ] = "~Ignoruj ~~i na 'koñcu wiersza"; + Text[ portuguese_brazilian ] = "~Ignore ~~ and ` at ~lineend"; + Text[ japanese ] = "~~‚Æ`‚ð~s––‚Å–³Ž‹"; + Text[ chinese_simplified ] = "ºöÂÔÐÐÄ©µÄ·ûºÏ ~~ ºÍ `"; + Text[ chinese_traditional ] = "©¿²¤¦æ¥½ªº²Å¦X ~~ ©M `"; + Text[ arabic ] = "ÊÌÇåá ~~ æ ` ÚäÏ äåÇíÉ ÇáÓØÑ"; + Text[ greek ] = "ÐáñÜâëåøç ~~ êáé ` óôï ôÝëïò ôçò ãñáììÞò"; + Text[ korean ] = "ÁÙÀÇ ¸¶Áö¸·¿¡¼­~~ ¿Í ` ¹«½Ã"; + Text[ turkish ] = "Satýr sonundaki ~~ ve ` iþaretlerini dikkate alma"; + Text[ language_user1 ] = " "; + }; + GroupBox 2 + { + Pos = MAP_APPFONT ( 6 , 56 ) ; + Size = MAP_APPFONT ( 248 , 73 ) ; + Text = "Druckformat" ; + Text [ ENGLISH ] = "Print format" ; + Text [ norwegian ] = "Print format" ; + Text [ italian ] = "Formato stampa" ; + Text [ portuguese_brazilian ] = "Imprimir formato" ; + Text [ portuguese ] = "Formato de impressão" ; + Text [ finnish ] = "Tulostusmuoto" ; + Text [ danish ] = "Udskriftsformat" ; + Text [ french ] = "Format d'impression" ; + Text [ swedish ] = "Utskriftsformat" ; + Text [ dutch ] = "Afdrukopmaak" ; + Text [ spanish ] = "Formato de impresión" ; + Text [ english_us ] = "Print format" ; + Text[ chinese_simplified ] = "´òÓ¡¸ñʽ"; + Text[ russian ] = "Ôîðìàò ïå÷àòè"; + Text[ polish ] = "Format wydruku"; + Text[ japanese ] = "ˆóü‘Ž®"; + Text[ chinese_traditional ] = "¦C¦L®æ¦¡"; + Text[ arabic ] = "ÊäÓíÞ ÇáØÈÇÚÉ"; + Text[ greek ] = "ÌïñöÞ åêôýðùóçò"; + Text[ korean ] = "Àμ⠼­½Ä"; + Text[ turkish ] = "Yazdýrma formatý"; + Text[ language_user1 ] = " "; + }; + RadioButton 1 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 12 , 66 ) ; + Size = MAP_APPFONT ( 60 , 12 ) ; + /* ### ACHTUNG: Neuer Text in Resource? ~Originalgröße : ~Originalgröße */ + Text = "~Originalgröße" ; + Text [ ENGLISH ] = "~Originale size" ; + Text [ norwegian ] = "~Originale size" ; + Text [ italian ] = "Dimensione ~originale" ; + Text [ portuguese_brazilian ] = "~Tamanho original" ; + Text [ portuguese ] = "~Tamanho original" ; + Text [ finnish ] = "~Todellinen koko" ; + Text [ danish ] = "Oprindelig størrelse" ; + Text [ french ] = "~Taille d'origine" ; + Text [ swedish ] = "~Originalstorlek" ; + Text [ dutch ] = "~Originele grootte" ; + Text [ spanish ] = "T~amaño original" ; + Text [ english_us ] = "O~riginal size" ; + Text[ chinese_simplified ] = "Ô­ÓдóС(~O)"; + Text[ russian ] = "Èñõîäíûé ðàçìåð"; + Text[ polish ] = "~Rozmiar oryginalny"; + Text[ japanese ] = "µØ¼ÞÅÙ »²½Þ(~O)"; + Text[ chinese_traditional ] = "­ì¦³¤j¤p(~O)"; + Text[ arabic ] = "ÇáÍÌã ÇáÃÕáí"; + Text[ greek ] = "Áñ÷éêü ìÝãåè~ïò"; + Text[ korean ] = "¿ø·¡ Å©±â(~R)"; + Text[ turkish ] = "Gerçek boyut"; + Text[ language_user1 ] = " "; + }; + RadioButton 2 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 12 , 77 ) ; + Size = MAP_APPFONT ( 81 , 12 ) ; + Text = "~Seite anpassen" ; + Text [ ENGLISH ] = "~Fit to Page" ; + Text [ norwegian ] = "~Fit to Page" ; + Text [ italian ] = "Adatta alla p~agina" ; + Text [ portuguese_brazilian ] = "~Encaixar na Página" ; + Text [ portuguese ] = "~Ajustar página" ; + Text [ finnish ] = "S~ovita sivulle" ; + Text [ danish ] = "Tilpas til siden" ; + Text [ french ] = "~Adapter à la page" ; + Text [ swedish ] = "Anpassa ~sida" ; + Text [ dutch ] = "~Pagina aanpassen" ; + Text [ spanish ] = "Ajustar a la ~página" ; + Text [ english_us ] = "Fit to ~page" ; + Text[ chinese_simplified ] = "¶ÔÓ¦Ò³Ãæ(~P)"; + Text[ russian ] = "Ñîãëàñíî ñòðàíèöû"; + Text[ polish ] = "~Dopasuj stronê"; + Text[ japanese ] = "Íß°¼Þ‚É“K‡(~P)"; + Text[ chinese_traditional ] = "¹ïÀ³­¶­±(~P)"; + Text[ arabic ] = "ãáÇÁãÉ ÇáÕÝÍÉ"; + Text[ greek ] = "ÐñïóáñìïãÞ óåëßäáò"; + Text[ korean ] = "ÆäÀÌÁö Á¶Á¤(~P)"; + Text[ turkish ] = "Sayfaya sýðdýr"; + Text[ language_user1 ] = " "; + }; + RadioButton 3 + { + Pos = MAP_APPFONT ( 12 , 88 ) ; + Size = MAP_APPFONT ( 45 , 12 ) ; + Text = "S~kalierung" ; + Text [ ENGLISH ] = "~Scaling" ; + Text [ norwegian ] = "~Scaling" ; + Text [ italian ] = "~Scala" ; + Text [ portuguese_brazilian ] = "~Dimensionar" ; + Text [ portuguese ] = "~Escala" ; + Text [ finnish ] = "~Skaalaus" ; + Text [ danish ] = "Skalering" ; + Text [ french ] = "~Échelle" ; + Text [ swedish ] = "S~kalering" ; + Text [ dutch ] = "~Schaal" ; + Text [ spanish ] = "~Escala" ; + Text [ english_us ] = "~Scaling" ; + TabStop = TRUE ; + Text[ chinese_simplified ] = "¿Ì¶È(~S)"; + Text[ russian ] = "Ìàñøòàáèðîâàíèå"; + Text[ polish ] = "~Skalowanie"; + Text[ japanese ] = "½¹°Ù(~S)"; + Text[ chinese_traditional ] = "Åã¥Ü¤ñ¨Ò(~S)"; + Text[ arabic ] = "ÊÏÑíÌ"; + Text[ greek ] = "Êëßìáêá"; + Text[ korean ] = "¹èÀ²(~S)"; + Text[ turkish ] = "Ölçeklendirme"; + Text[ language_user1 ] = " "; + }; + MetricField 1 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 23 , 102 ) ; + Size = MAP_APPFONT ( 50 , 12 ) ; + TabStop = TRUE ; + Left = TRUE ; + Repeat = TRUE ; + Spin = TRUE ; + Minimum = 10 ; + Maximum = 400 ; + Unit = FUNIT_CUSTOM ; + CustomUnitText = "%" ; + }; + Text[ english_us ] = "Formula Options: Settings"; + Text[ portuguese ] = "Opções de fórmulas: configuração"; + Text[ russian ] = "Ïàðàìåòðû ôîðìóëû: Íàñòðîéêè"; + Text[ dutch ] = "Optie Formule: Instellingen"; + Text[ french ] = "Options de formule : paramètres"; + Text[ spanish ] = "Opciones de fórmulas: Configuración"; + Text[ italian ] = "Opzioni formula: impostazioni"; + Text[ danish ] = "Formelalternativer: Indstillinger"; + Text[ swedish ] = "Alternativ formel: Inställningar"; + Text[ polish ] = "Opcje formu³y:Ustawienia"; + Text[ portuguese_brazilian ] = "Imprimir"; + Text[ japanese ] = "”Ž®µÌß¼®Ý:Ý’è"; + Text[ chinese_simplified ] = "¹«Ê½Ñ¡ÏÉ趨"; + Text[ chinese_traditional ] = "¤½¦¡¿ï¶µ¡G³]©w"; + Text[ arabic ] = "ÎíÇÑÇÊ ÇáÕíÛÉ: ÇáÅÚÏÇÏÇÊ"; + Text[ greek ] = "ÅðéëïãÝò ôýðïõ:Ñõèìßóåéò"; + Text[ korean ] = "¼ö½Ä ¿É¼Ç: ¼³Á¤"; + Text[ turkish ] = "Formül seçenekleri: Ayarlar"; + Text[ language_user1 ] = " "; +}; + +ModalDialog RID_SYMBOLDIALOG +{ + OutputSize = TRUE ; + SVLook = TRUE ; + Closeable = TRUE; // Close Button in Window Leiste explizit einbauen + Size = MAP_APPFONT ( 262 , 123 ) ; + Text = "Symbole" ; + Text [ ENGLISH ] = "Symbols" ; + Text [ norwegian ] = "Symbols" ; + Text [ italian ] = "Simboli" ; + Text [ portuguese_brazilian ] = "Símbolos" ; + Text [ portuguese ] = "Símbolos" ; + Text [ finnish ] = "Symbolit" ; + Text [ danish ] = "Symboler" ; + Text [ french ] = "Symboles" ; + Text [ swedish ] = "Symboler" ; + Text [ dutch ] = "Symbolen" ; + Text [ spanish ] = "Símbolos" ; + Text [ english_us ] = "Symbols" ; + Moveable = TRUE ; + FixedText 1 + { + Pos = MAP_APPFONT ( 6 , 6 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + Text = "~Symbolset:" ; + Text [ English ] = "~Symbolset:" ; + Left = TRUE ; + Text [ portuguese ] = "~Grupo de símbolos:" ; + Text [ english_us ] = "~Symbol Set:" ; + Text [ portuguese_brazilian ] = "~Symbolset:" ; + Text [ swedish ] = "~Symbolset:" ; + Text [ danish ] = "~Symbolsæt:" ; + Text [ italian ] = "~Simboli:" ; + Text [ spanish ] = "~Símbolos:" ; + Text [ french ] = "~Jeu :" ; + Text [ dutch ] = "S~ymbolenset" ; + Text[ chinese_simplified ] = "ͼ±ê×é(~S)"; + Text[ russian ] = "~Íàáîð ñèìâîëîâ:"; + Text[ polish ] = "Zbiór symboli:"; + Text[ japanese ] = "‹L†¾¯Ä:(~S)"; + Text[ chinese_traditional ] = "¹Ï¥Ü²Õ(~S)"; + Text[ arabic ] = ":ãÌãæÚÉ ÑãæÒ"; + Text[ greek ] = "Óýíïëï óõìâüëùí:"; + Text[ korean ] = "±âÈ£ ¼¼Æ®:(~S)"; + Text[ turkish ] = "Simge kümesi:"; + Text[ language_user1 ] = " "; + }; + ListBox 1 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 6 , 21 ) ; + Size = MAP_APPFONT ( 104 , 57 ) ; + TabStop = TRUE ; + Sort = TRUE ; + DropDown = TRUE ; + VScroll = TRUE ; + }; + Control 1 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 6 , 39 ) ; + Size = MAP_APPFONT ( 108 , 72 ) ; + TabStop = TRUE ; + }; + Control 2 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 123 , 42 ) ; + Size = MAP_APPFONT ( 63 , 63 ) ; + }; + FixedText 2 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 123 , 27 ) ; + Size = MAP_APPFONT ( 63 , 10 ) ; + Text = "Unbekannt" ; + Text [ ENGLISH ] = "Unknown" ; + Text [ norwegian ] = "Unknown" ; + Text [ italian ] = "Sconosciuto" ; + Text [ portuguese_brazilian ] = "Desconhecido" ; + Text [ portuguese ] = "Desconhecido" ; + Text [ finnish ] = "Tuntematon" ; + Text [ danish ] = "Ukendt" ; + Text [ french ] = "Inconnu" ; + Text [ swedish ] = "Okänd" ; + Text [ dutch ] = "Onbekend" ; + Text [ spanish ] = "Desconocido" ; + Text [ english_us ] = "Unknown" ; + Text[ chinese_simplified ] = "²»Ã÷"; + Text[ russian ] = "Íåèçâåñòíî"; + Text[ polish ] = "Bez tytu³u"; + Text[ japanese ] = "•s–¾‚Ì"; + Text[ chinese_traditional ] = "¤£©ú"; + Text[ arabic ] = "ÛíÑ ãÚÑæÝ"; + Text[ greek ] = "¢ãíùóôï"; + Text[ korean ] = "¾Ë·ÁÁöÁö ¾ÊÀ½"; + Text[ turkish ] = "Bilinmiyor"; + Text[ language_user1 ] = " "; + }; + GroupBox 1 + { + Pos = MAP_APPFONT ( 117 , 15 ) ; + Size = MAP_APPFONT ( 75 , 96 ) ; + Text = "Symbol" ; + Text [ English ] = "Symbol" ; + Text [ english_us ] = "Symbol" ; + Text [ portuguese_brazilian ] = "Symbol" ; + Text [ swedish ] = "Symbol" ; + Text [ danish ] = "Symbol" ; + Text [ italian ] = "Simbolo" ; + Text [ spanish ] = "Símbolo" ; + Text [ french ] = "Symbole" ; + Text [ dutch ] = "Symbool" ; + Text [ portuguese ] = "Símbolo" ; + Text[ chinese_simplified ] = "ͼ±ê"; + Text[ russian ] = "Ñèìâîë"; + Text[ polish ] = "Symbol"; + Text[ japanese ] = "‹L†"; + Text[ chinese_traditional ] = "¹Ï¥Ü"; + Text[ arabic ] = "ÑãÒ"; + Text[ greek ] = "Óýìâïëï"; + Text[ korean ] = "±âÈ£"; + Text[ turkish ] = "Simge"; + Text[ language_user1 ] = " "; + }; + PushButton 3 + { + Pos = MAP_APPFONT ( 200 , 9 ) ; + Size = MAP_APPFONT ( 56 , 14 ) ; + TabStop = TRUE ; + DefButton = TRUE ; + Text = "Schließe~n" ; + Text [ ENGLISH ] = "Close" ; + Text[ english_us ] = "~Close"; + Text[ portuguese ] = "~Fechar"; + Text[ russian ] = "Çàêðûòü"; + Text[ dutch ] = "Sluiten~n"; + Text[ french ] = "~Fermer"; + Text[ spanish ] = "~Cerrar"; + Text[ italian ] = "Chiudi"; + Text[ danish ] = "Luk"; + Text[ swedish ] = "Stä~ng"; + Text[ polish ] = "Zamknij"; + Text[ portuguese_brazilian ] = "Close"; + Text[ japanese ] = "•Â‚¶‚é(~C)"; + Text[ chinese_simplified ] = "¹Ø±Õ(~C)"; + Text[ chinese_traditional ] = "Ãö³¬(~C)"; + Text[ arabic ] = "ÅÛáÇÞ"; + Text[ greek ] = "Êëåßóéìï"; + Text[ korean ] = "´Ý±â(~C)"; + Text[ turkish ] = "Kapat"; + Text[ language_user1 ] = " "; + }; + PushButton 1 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 200 , 54 ) ; + Size = MAP_APPFONT ( 56 , 14 ) ; + Text = "~Bearbeiten..." ; + Text [ ENGLISH ] = "~Edit..." ; + Text [ norwegian ] = "~Edit..." ; + Text [ italian ] = "~Modifica..." ; + Text [ portuguese_brazilian ] = "~Editar..." ; + Text [ portuguese ] = "~Editar..." ; + Text [ finnish ] = "~Muokkaa..." ; + Text [ danish ] = "Rediger..." ; + Text [ french ] = "~Éditer..." ; + Text [ swedish ] = "~Redigera..." ; + Text [ dutch ] = "Be~werken..." ; + Text [ spanish ] = "~Editar..." ; + Text [ english_us ] = "~Edit..." ; + Text[ chinese_simplified ] = "±à¼­(~E)..."; + Text[ russian ] = "Ïðàâêà..."; + Text[ polish ] = "Edytuj..."; + Text[ japanese ] = "•ÒW(~E)..."; + Text[ chinese_traditional ] = "½s¿è(~E)..."; + Text[ arabic ] = "...ÊÍÑíÑ"; + Text[ greek ] = "~Åðåîåñãáóßá..."; + Text[ korean ] = "ÆíÁý(~E)..."; + Text[ turkish ] = "Düzenle..."; + Text[ language_user1 ] = " "; + }; + PushButton 2 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 200 , 81 ) ; + Size = MAP_APPFONT ( 56 , 14 ) ; + /* ### ACHTUNG: Neuer Text in Resource? ~Übernehmen : ~šbernehmen */ + Text = "~Übernehmen" ; + Text [ ENGLISH ] = "~Get" ; + Text [ norwegian ] = "~Get" ; + Text [ english_us ] = "~Insert" ; + Text [ italian ] = "Applica" ; + Text [ spanish ] = "~Aplicar" ; + Text [ french ] = "~Appliquer" ; + Text [ dutch ] = "~Overnemen" ; + Text [ swedish ] = "~Överta" ; + Text [ danish ] = "Accepter" ; + Text [ portuguese_brazilian ] = "~Übernehmen" ; + Text [ portuguese ] = "~Aplicar" ; + Text[ chinese_simplified ] = "½ÓÊÜ(~I)"; + Text[ russian ] = "Ïðèíÿòü"; + Text[ polish ] = "Zastosuj"; + Text[ japanese ] = "‘}“ü(~I)"; + Text[ russian ] = "Ïðèíÿòü"; + Text[ polish ] = "Zastosuj"; + Text[ japanese ] = "‘}“ü(~I)"; + Text[ chinese_simplified ] = "½ÓÊÜ(~I)"; + Text[ chinese_traditional ] = "±µ¨ü(~I)"; + Text[ arabic ] = "ÅÏÑÇÌ"; + Text[ greek ] = "ÅöáñìïãÞ"; + Text[ korean ] = "Àû¿ë(~I)"; + Text[ turkish ] = "Kullan"; + Text[ language_user1 ] = " "; + }; + Text[ chinese_simplified ] = "ͼ±ê"; + Text[ russian ] = "Ñèìâîëû"; + Text[ polish ] = "Symbole"; + Text[ japanese ] = "‹L†"; + Text[ chinese_traditional ] = "¹Ï¥Ü"; + Text[ arabic ] = "ÑãæÒ"; + Text[ greek ] = "Óýìâïëá"; + Text[ korean ] = "±âÈ£"; + Text[ turkish ] = "Simgeler"; + Text[ language_user1 ] = " "; +}; + +ModalDialog RID_SYMDEFINEDIALOG +{ + Moveable = TRUE ; + OutputSize = TRUE ; + SVLook = TRUE ; + Size = MAP_APPFONT ( 365 , 195 ) ; + Text = "Symbole bearbeiten" ; + Text [ ENGLISH ] = "Edit symbols" ; + Text[ chinese_simplified ] = "±à¼­Í¼±ê"; + Text[ russian ] = "Ïðàâêà ñèìâîëîâ"; + Text[ polish ] = "Edytuj symbole"; + Text[ japanese ] = "‹L†‚Ì•ÒW"; + Text[ chinese_traditional ] = "½s¿è¹Ï¥Ü"; + Text[ arabic ] = "ÊÍÑíÑ ÑãæÒ"; + Text [ norwegian ] = "Edit symbols" ; + Text [ italian ] = "Modifica simboli" ; + Text [ portuguese_brazilian ] = "Editar símbolos" ; + Text [ portuguese ] = "Editar símbolos" ; + Text [ finnish ] = "Muokkaa symboleita" ; + Text [ danish ] = "Rediger symboler" ; + Text [ french ] = "Édition des symboles" ; + Text [ swedish ] = "Redigera symboler" ; + Text [ dutch ] = "Symbolen bewerken" ; + Text [ spanish ] = "Editar símbolos" ; + Text [ english_us ] = "Edit Symbols" ; + FixedText 1 + { + Pos = MAP_APPFONT ( 6 , 8 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + Left = TRUE ; + Text = "~Altes Symbol:" ; + Text [ English ] = "~Old Symbol:" ; + Text[ english_us ] = "~Old Symbol:"; + Text[ portuguese ] = "~Símbolo precedente:"; + Text[ russian ] = "~Ñèìâîë:"; + Text[ dutch ] = "~Oud symbool:"; + Text[ french ] = "Actuel :"; + Text[ spanish ] = "~Símbolo anterior:"; + Text[ italian ] = "Simbolo:"; + Text[ danish ] = "Oprindeligt symbol:"; + Text[ swedish ] = "~Gammal symbol:"; + Text[ polish ] = "Stary symbol:"; + Text[ portuguese_brazilian ] = "~Symbol:"; + Text[ japanese ] = "ŒÃ‚¢‹L†:(~O)"; + Text[ chinese_simplified ] = "¾Éͼ±ê(~O)"; + Text[ chinese_traditional ] = "¹ϥÜ(~O)"; + Text[ arabic ] = ":ÑãÒ ÞÏíã"; + Text[ greek ] = "Ð~áëéü óýìâïëï:"; + Text[ korean ] = "ÀÌÀü ±âÈ£:(~O)"; + Text[ turkish ] = "Eski simge:"; + Text[ language_user1 ] = " "; + }; + ComboBox 1 + { + Pos = MAP_APPFONT ( 55 , 6 ) ; + Size = MAP_APPFONT ( 80 , 50 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + Sort = TRUE ; + }; + FixedText 2 + { + Pos = MAP_APPFONT ( 150 , 8 ) ; + Size = MAP_APPFONT ( 60 , 10 ) ; + Left = TRUE ; + Text = "Alt~es Symbolset:" ; + Text [ English ] = "Ol~d Symbolset:" ; + Text[ english_us ] = "Ol~d Symbol Set:"; + Text[ portuguese ] = "Conjunto de ~símbolos precedente:"; + Text[ russian ] = "Ïðåæíèé íàáîð:"; + Text[ dutch ] = "Oud s~ymbolenset:"; + Text[ french ] = "Jeu actuel :"; + Text[ spanish ] = "Conjunto ~anterior:"; + Text[ italian ] = "Gamma simboli:"; + Text[ danish ] = "Oprindeligt symbolsæt:"; + Text[ swedish ] = "Gammalt s~ymbolset:"; + Text[ polish ] = "Zbiór symboli:"; + Text[ portuguese_brazilian ] = "S~ymbolset:"; + Text[ japanese ] = "ŒÃ‚¢‹L†‚̾¯Ä:(~D)"; + Text[ chinese_simplified ] = "¾Éͼ±ê×é(~D)"; + Text[ chinese_traditional ] = "¹ϥܲÕ(~D)"; + Text[ arabic ] = ":ãÌãæÚÉ ÑãæÒ ÞÏíãÉ"; + Text[ greek ] = "ÐáëéÜ ó~åéñÜ óõìâüëùí:"; + Text[ korean ] = "ÀÌÀü ±âÈ£ ¼¼Æ®:(~D)"; + Text[ turkish ] = "Eski simge kümesi:"; + Text[ language_user1 ] = " "; + }; + ComboBox 2 + { + Pos = MAP_APPFONT ( 210 , 6 ) ; + Size = MAP_APPFONT ( 80 , 50 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + Sort = TRUE ; + }; + Control 1 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 6 , 24 ) ; + Size = MAP_APPFONT ( 295 , 90 ) ; + TabStop = TRUE ; + }; + FixedText 9 + { + Pos = MAP_APPFONT ( 6 , 113 ) ; + Size = MAP_APPFONT ( 56 , 10 ) ; + Text = "~Symbol:" ; + Text [ English ] = "~Symbol:" ; + Left = TRUE ; + Text [ portuguese ] = "~Símbolo:" ; + Text [ english_us ] = "~Symbol:" ; + Text [ portuguese_brazilian ] = "~Symbol:" ; + Text [ swedish ] = "~Symbol:" ; + Text [ danish ] = "Symbol:" ; + Text [ italian ] = "Simbolo:" ; + Text [ spanish ] = "Sím~bolo:" ; + Text [ french ] = "~Symbole :" ; + Text [ dutch ] = "~Symbool:" ; + Text[ chinese_simplified ] = "ͼ±ê(~S)"; + Text[ russian ] = "Ñèìâîë:"; + Text[ polish ] = "Symbol:"; + Text[ japanese ] = "‹L†:(~S)"; + Text[ chinese_traditional ] = "¹Ï¥Ü(~S)"; + Text[ arabic ] = ":ÑãÒ"; + Text[ greek ] = "Óýìâïëï:"; + Text[ korean ] = "±âÈ£:(~S)"; + Text[ turkish ] = "Simge:"; + Text[ language_user1 ] = " "; + }; + ComboBox 4 + { + Pos = MAP_APPFONT ( 70 , 110 ) ; + Size = MAP_APPFONT ( 100 , 80 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + Sort = TRUE ; + }; + FixedText 10 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 6 , 128 ) ; + Size = MAP_APPFONT ( 56 , 10 ) ; + Text = "S~ymbolset:" ; + Text [ English ] = "S~ymbolset:" ; + Text[ chinese_simplified ] = "ͼ±ê×é(~E)"; + Text[ chinese_traditional ] = "¹Ï¥Ü²Õ(~E)"; + Text[ russian ] = "Íàáîð ñèìâîëîâ:"; + Text[ polish ] = "Zbiór symboli:"; + Text[ japanese ] = "‹L†¾¯Ä(~E)"; + Text[ arabic ] = ":ãÌãæÚÉ ÑãæÒ"; + Text [ portuguese ] = "Conjunto de ~símbolos:" ; + Text [ english_us ] = "Symbol S~et:" ; + Text [ portuguese_brazilian ] = "S~ymbolset:" ; + Text [ swedish ] = "S~ymbolset:" ; + Text [ danish ] = "Symbolsæt:" ; + Text [ italian ] = "Simboli:" ; + Text [ spanish ] = "Con~junto:" ; + Text [ french ] = "Jeu :" ; + Text [ dutch ] = "S~ymbolenset:" ; + Text[ greek ] = "Óýíïëï óõìâüëùí:"; + Text[ korean ] = "±âÈ£ ¼¼Æ®:(~E)"; + Text[ turkish ] = "Simge kümesi:"; + Text[ language_user1 ] = " "; + }; + ComboBox 5 + { + Pos = MAP_APPFONT ( 70 , 125 ) ; + Size = MAP_APPFONT ( 100 , 50 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + Sort = TRUE ; + }; + FixedText 3 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 6 , 143 ) ; + Size = MAP_APPFONT ( 56 , 10 ) ; + Text = "Schri~ftart:" ; + Text [ ENGLISH ] = "~Font:" ; + Text[ chinese_simplified ] = "×ÖÌå(~F)£º"; + Text[ chinese_traditional ] = "¦r«¬(~F)"; + Text[ russian ] = "Òèï øðèôòà:"; + Text[ polish ] = "Czcionka:"; + Text[ japanese ] = "Ì«ÝÄ‚ÌŽí—Þ(~F):"; + Text[ arabic ] = ":äæÚ ÇáÎØ"; + Text [ norwegian ] = "~Font:" ; + Text [ italian ] = "~Tipo di carattere:" ; + Text [ portuguese_brazilian ] = "~Fonte:" ; + Text [ portuguese ] = "Tipo de letra:" ; + Text [ finnish ] = "~Fontti:" ; + Text [ danish ] = "Skrifttype:" ; + Text [ french ] = "~Police :" ; + Text [ swedish ] = "Te~ckensnitt:" ; + Text [ dutch ] = "~Lettertype:" ; + Text [ spanish ] = "~Fuente:" ; + Text [ english_us ] = "~Font:" ; + Text[ greek ] = "ÃñáììáôïóåéñÜ:"; + Text[ korean ] = "±Û²Ã:(~F)"; + Text[ turkish ] = "Yazýtipi:"; + Text[ language_user1 ] = " "; + }; + ListBox 1 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 70 , 140 ) ; + Size = MAP_APPFONT ( 100 , 50 ) ; + TabStop = TRUE ; + Sort = TRUE ; + DropDown = TRUE ; + }; + FixedText 4 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 6 , 158 ) ; + Size = MAP_APPFONT ( 56 , 10 ) ; + Text = "Schriftschni~tt:" ; + Text [ ENGLISH ] = "S~tyle:" ; + Text[ italian ] = "S~tile:"; + Text[ portuguese_brazilian ] = "Schriftschni~tt:"; + Text[ portuguese ] = "~Tipo:"; + Text[ danish ] = "Typografi:"; + Text[ french ] = "Type~ :"; + Text[ swedish ] = "Teckens~til:"; + Text[ dutch ] = "~Type:"; + Text[ spanish ] = "~Carácter:"; + Text[ english_us ] = "Type:"; + Text[ chinese_simplified ] = "×ÖÌ壺"; + Text[ chinese_traditional ] = "¦r«¬¡G"; + Text[ russian ] = "~Íà÷åðòàíèå øðèôòà:"; + Text[ polish ] = "Krój czcionki:"; + Text[ japanese ] = "Ì«ÝÄ‚ÌŽí—Þ:"; + Text[ arabic ] = "äãØ ÇáÎØ:"; + Text[ greek ] = "~Ôýðïò ãñáöÞò:"; + Text[ korean ] = "À¯Çü:"; + Text[ turkish ] = "Yazýtipi varyantý:"; + Text[ language_user1 ] = " "; + }; + ComboBox 3 + { + Border = TRUE; + Pos = MAP_APPFONT ( 70 , 155 ) ; + Size = MAP_APPFONT ( 100 , 50 ) ; + TabStop = TRUE ; + DropDown = TRUE ; + Sort = FALSE ; + }; + FixedText 5 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 310 , 110 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + }; + Control 2 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 310 , 120 ) ; + Size = MAP_APPFONT ( 40 , 40 ) ; + }; + FixedText 6 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 310 , 160 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + }; + FixedImage BMP_ARROW_RIGHT + { + Pos = MAP_APPFONT ( 252 , 122 ) ; + Size = MAP_APPFONT ( 36 , 36 ) ; + + Fixed = Image + { + ImageBitmap = Bitmap { File = "ar_right.bmp" ; }; + MaskColor = IMAGE_STDBTN_COLOR ; + }; + }; + FixedText 7 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 190 , 110 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + }; + Control 3 + { + Border = TRUE ; + Pos = MAP_APPFONT ( 190 , 120 ) ; + Size = MAP_APPFONT ( 40 , 40 ) ; + }; + FixedText 8 + { + Left = TRUE ; + Pos = MAP_APPFONT ( 190 , 160 ) ; + Size = MAP_APPFONT ( 40 , 10 ) ; + }; + PushButton 1 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 305 , 175 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text = "H~inzufügen" ; + Text [ ENGLISH ] = "~Add" ; + Text[ chinese_simplified ] = "ÐÂÔö(~A)"; + Text[ russian ] = "Äîáàâèòü"; + Text[ polish ] = "Dodaj"; + Text[ japanese ] = "’ljÁ(~A)"; + Text[ chinese_traditional ] = "·s¼W(~A)"; + Text[ arabic ] = "ÅÖÇÝÉ"; + Text [ norwegian ] = "Leg~g til" ; + Text [ italian ] = "~Aggiungi" ; + Text [ portuguese_brazilian ] = "~Acrescentar" ; + Text [ portuguese ] = "Adicionar" ; + Text [ finnish ] = "~Lisää" ; + Text [ danish ] = "Tilføj" ; + Text [ french ] = "~Ajouter" ; + Text [ swedish ] = "Lägg t~ill" ; + Text [ dutch ] = "~Toevoegen" ; + Text [ spanish ] = "~Añadir" ; + Text [ english_us ] = "~Add" ; + Text[ greek ] = "ÐñïóèÞê~ç"; + Text[ korean ] = "Ãß°¡(~A)"; + Text[ turkish ] = "Ekle"; + Text[ language_user1 ] = " "; + }; + PushButton 2 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 245 , 175 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text = "Ä~ndern" ; + Text [ ENGLISH ] = "~Change" ; + Text[ chinese_simplified ] = "¸ü¸Ä(~M)"; + Text[ russian ] = "Èçìåíèòü"; + Text[ polish ] = "Modyfikuj"; + Text[ japanese ] = "•ÏX(~M)"; + Text[ chinese_traditional ] = "Åܧó(~M)"; + Text[ arabic ] = "ÊÚÏíá"; + Text [ norwegian ] = "~Endre" ; + Text [ italian ] = "~Cambia" ; + Text [ portuguese_brazilian ] = "~Mudar" ; + Text [ portuguese ] = "Modificar" ; + Text [ finnish ] = "~Muuta" ; + Text [ danish ] = "Modificer" ; + Text [ french ] = "~Modifier" ; + Text [ swedish ] = "Ä~ndra" ; + Text [ dutch ] = "Wij~zigen" ; + Text [ spanish ] = "~Modificar" ; + Text [ english_us ] = "~Modify" ; + Text[ greek ] = "Ôñïðïðïßçóç"; + Text[ korean ] = "º¯°æ(~M)"; + Text[ turkish ] = "Deðiþtir"; + Text[ language_user1 ] = " "; + }; + PushButton 3 + { + TabStop = TRUE ; + Pos = MAP_APPFONT ( 185 , 175 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + Text = "~Löschen" ; + Text [ ENGLISH ] = "~Delete" ; + Text[ chinese_simplified ] = "ɾ³ý(~D)"; + Text[ russian ] = "Óäàëèòü"; + Text[ polish ] = "Usuñ"; + Text[ japanese ] = "íœ(~D)"; + Text[ chinese_traditional ] = "§R°£(~D)"; + Text[ arabic ] = "ÍÐÝ"; + Text [ norwegian ] = "~Slett" ; + Text [ italian ] = "C~ancella" ; + Text [ portuguese_brazilian ] = "~Apagar" ; + Text [ portuguese ] = "Limpar" ; + Text [ finnish ] = "~Poista" ; + Text [ danish ] = "~Slet" ; + Text [ french ] = "~Supprimer" ; + Text [ swedish ] = "~Radera" ; + Text [ dutch ] = "~Wissen" ; + Text [ spanish ] = "~Eliminar" ; + Text [ english_us ] = "~Delete" ; + Text[ greek ] = "ÄéáãñáöÞ"; + Text[ korean ] = "»èÁ¦(~D)"; + Text[ turkish ] = "Sil"; + Text[ language_user1 ] = " "; + }; + OKButton 1 + { + Pos = MAP_APPFONT ( 310 , 6 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + DefButton = TRUE ; + }; + CancelButton 1 + { + Pos = MAP_APPFONT ( 310 , 24 ) ; + Size = MAP_APPFONT ( 50 , 14 ) ; + TabStop = TRUE ; + }; + Text[ greek ] = "Åðåîåñãáóßá óõìâüëùí"; + Text[ korean ] = "±âÈ£ ÆíÁý"; + Text[ turkish ] = "Simgeleri düzenle"; + Text[ language_user1 ] = " "; +}; + +WarningBox RID_NOMATHTYPEFACEWARNING +{ + Message = "Der \"StarMath\" Font ist nicht installiert !\nOhne diesen Font kann StarMath nicht korrekt arbeiten...\nInstallieren Sie den Font und starten Sie StarMath erneut." ; + Message [ ENGLISH ] = "The Font \"StarMath\" is not installed!\nWithout this Font StarMath is not working correct...\nPlease install this Font and restart StarMath." ; + Message [ norwegian ] = "The Font \"StarMath\" is not installed!\nWithout this Font StarMath is not working correct...\nPlease install this Font and restart StarMath." ; + Message [ italian ] = "Il carattere \"StarMath\" non è installato.\nSenza questo carattere StarOffice Math non funzionerà in modo corretto.\nInstallate questo carattere e riavviate StarOffice Math." ; + Message [ portuguese_brazilian ] = "A Fonte \"StarOffice Math\" não está instalada!\nSem esta Fonte o StarOffice Math não está operando corretamente...\nPor favor instale esta Fonte e reinicieStarOffice Math." ; + Message [ portuguese ] = "O tipo de letra \"StarMath\" não está instalado!\nSem este tipo de letra o StarOffice Math não operará correctamente...\nInstale este tipo de letra e reinicie a aplicação." ; + Message [ finnish ] = "Fonttia \"StarMath\" ei ole asennettu!\nStarMath ei toimikunnolla ilman sitä...\nAsenna tämä fontti ja käynnistä StarMath uudelleen." ; + Message [ danish ] = "Skrifttypen \"StarMath\" er ikke installeret!\nUden denne skrifttype kan StarOffice Math ikke arbejde korrekt...\nInstaller venligst skrifttypen og genstart StarOffice Math." ; + Message [ french ] = "La police \"StarMath\" n'est pas installée !\nSans cette police, StarOffice Math ne fonctionne pas correctement...\nInstallez la police et redémarrez StarOffice Math." ; + Message [ swedish ] = "Teckensnittet \"StarMath\" är inte installerat!\nUtan detta teckensnitt kan StarOffice Math inte arbeta korrekt....\nInstallera teckensnittet och starta om StarOffice Math." ; + Message [ dutch ] = "Het lettertype \"StarMath\" is niet geïnstalleerd!\nZonder dit lettertype werkt StarOffice Math niet correct...\nInstalleer dit lettertype en start StarOffice Math opnieuw." ; + Message [ spanish ] = "¡La fuente \"StarMath\" no está instalada!\nSin esta fuente StarMath no funcionará correctamente...\nInstale la fuente y reinicie StarMath." ; + Message [ english_us ] = "The font \"StarMath\" is not installed.\nWithout this font StarOffice Math will not perform correctly.\nPlease install this font and restart StarOffice Math." ; + Message[ chinese_simplified ] = "ûÓа²×°¡°StarMath¡± ×ÖÌ壡\nûÓÐÕâ¸ö×ÖÌå StarOffice Math ÎÞ·¨Õý³£ÔË×÷¡£\nÇëÔÚ°²×°Õâ¸ö×ÖÌåºóÖØÐÂÆô¶¯ StarOffice Math ¡£"; + Message[ russian ] = "Øðèôò \"StarMath\" íå èíñòàëëèðîâàí !\nÁåç ýòîãî øðèôòà StarOffice Math ìîæåò íåïðàâèëüíî ðàáîòàòü...\nÈíñòàëëèðóéòå øðèôò è ïåðåçàïóñòèòå StarOffice Math."; + Message[ polish ] = "Czcionka \"StarMath\" nie jest zainstalowana!\nBez tej czcionki StarOffice Math nie mo¿e poprawnie pracowaæ...\nZainstaluj tê czcionkê i uruchom StarOffice Math ponownie."; + Message[ japanese ] = "\"StarMath\" Ì«ÝÄ‚ª²Ý½Ä°Ù‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ¡\n‚±‚ÌÌ«ÝÄ‚È‚µ‚Å‚Í StarOffice Math ‚ª‚¤‚Ü‚­‹@”\\‚µ‚Ü‚¹‚ñ...\n‚Ü‚¸Ì«ÝÄ‚ð²Ý½Ä°Ù‚µ‚Ä StarOffice Math ‚ðÄ‹N“®‚µ‚Ä‚­‚¾‚³‚¢B"; + Message[ chinese_traditional ] = "¨S¦³¦w¸Ë StarMath ¦r«¬\n¦ÓµLªk¥¿±`¹B§@¡I\n½Ð±z¦w¸Ë StarMath ¦r«¬¡AµM¦Z¦A­«·s¶}±Ò StaMath¡C"; + Message[ arabic ] = "ÇáÎØ \"StarMath\" ÛíÑ ãõËÈøóÊ!\nÈÏæä åÐÇ ÇáÎØ áÇ íÓÊØíÚ StarOffice Math ÇáÚãá ÈÔßá ÕÍíÍ...\nÇáÑÌÇÁ ÊËÈíÊ åÐÇ ÇáÎØ¡ Ëã ÈÏÁ StarOffice Math ãÌÏÏÇð."; + Message[ greek ] = "Äåí Ýãéíå ç åãêáôÜóôáóç ôçò ãñáììáôïóåéñÜò \"StarMath\".\n×ùñßò áõôÞ ôç ãñáììáôïóåéñÜ ôï StarOffice Math äåí èá åêôåëåóôåß óùóôÜ.\nÐáñáêáëþ íá ãßíåé ðñþôá ç åãêáôÜóôáóç áõôÞò ôçò ãñáììáôïóåéñÜò êáé óôç óõíÝ÷åéá ç åðáíåêêßíçóç ôïõ StarOffice Math."; + Message[ korean ] = "\"StarOffice Math\" ±Û²ÃÀÌ ¼³Ä¡µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù!\nÀÌ ±Û²ÃÀÌ ¾øÀ¸¸é StarOffice Math°¡ Á¦´ë·Î ÀÛ¾÷À» ÇÒ ¼ö ¾ø½À´Ï´Ù...\n±Û²ÃÀ» ¼³Ä¡ÇÏ°í StarOffice Math¸¦ »õ·Î ½ÃÀÛÇϽʽÿÀ."; + Message[ turkish ] = "\"StarMath\" yazýtipi yüklenmedi!\nBu yazýtipi olmadan StarMath programý doðru bir biçimde çalýþmaz...\nYazýtipini yükleyin ve StarMath programýný yeniden baþlatýn."; + Message[ language_user1 ] = " "; +}; + +QueryBox RID_DEFAULTSAVEQUERY +{ + Buttons = WB_YES_NO ; + DefButton = WB_DEF_YES ; + /* ### ACHTUNG: Neuer Text in Resource? Sollen die Änderungen als Standard gespeichert werden ?\n\nDiese Änderungen wirken sich auf alle neuen Formeln aus. : Sollen die Žnderungen als Standard gespeichert werden ?\n\nDiese Žnderungen wirken sich auf alle neuen Formeln aus. */ + Message = "Sollen die Änderungen als Standard gespeichert werden ?\n\nDiese Änderungen wirken sich auf alle neuen Formeln aus." ; + Message [ ENGLISH ] = "Save the current changes as default?\n\nThese changeswill influence all new Equations." ; + Message [ norwegian ] = "Save the current changes as default?\n\nThese changeswill influence all new Equations." ; + Message [ italian ] = "Salvare le modifiche correnti come predefinite?\n\nLe modifiche verranno applicate a tutte le nuove formule." ; + Message [ portuguese_brazilian ] = "Gravar as mudanças atuais como default?\n\nEstas mudançasser o válidas para todas as novas Equações." ; + Message [ portuguese ] = "Guardar modificações como padrão?\n\nEstas modificações serão válidas para todas as novas equações." ; + Message [ finnish ] = "Tallennetaanko nykyiset muutokset oletuksiksi?\n\nNe vaikuttavat kaikkiin uusiin kaavoihin." ; + Message [ danish ] = "Skal ændringerne gemmes som standard?\n\nÆndringerne vil påvirke alle nye formler." ; + Message [ french ] = "Enregistrer les modifications par défaut ?\n\nCes modifications s'appliqueront à toutes les nouvelles formules." ; + Message [ swedish ] = "Skall ändringarna sparas som standard?\n\nDessa ändringar påverkar alla nya formler." ; + Message [ dutch ] = "Wilt u deze wijzigingen opslaan als standaardinstellingen?\n\nDeze wijzigingen hebben uitwerkingen op alle nieuwe formules." ; + Message [ spanish ] = "¿Desea guardar los cambios como predeterminados?\n\nEstos cambios tendrán efecto en todas las nuevas fórmulas." ; + Message [ english_us ] = "Save changes as default?\n\nThese changes will influence all new formulas." ; + Message[ chinese_simplified ] = "ÄúÒª½«¸ü¸Ä×÷Ϊ±ê×¼¸ñʽ´æÅÌ£¿\n\nÕâ¸ö¸ü¸Ä»áÓ°ÏìËùÓÐй«Ê½¡£"; + Message[ russian ] = "Ñîõðàíèòü èçìåíåíèÿ êàê ñòàíäàðòíûå ?\n\nÝòè èçìåíåíèÿ ïîâëèÿþò íà âñå íîâûå ôîðìóëû."; + Message[ polish ] = "Czy zapisaæ zmiany jako domyœlne?\n\nTe zmiany wywieraj¹ wp³yw na wszystkie nowe formu³y."; + Message[ japanese ] = "‚±‚Ì•ÏX‚ð•W€‚Æ‚µ‚Ä•Û‘¶‚µ‚Ü‚·‚©?\n\n‚±‚Ì•ÏX‚Í‚·‚ׂĂÌV‚µ‚¢”Ž®‚ɉe‹¿‚µ‚Ü‚·B"; + Message[ chinese_traditional ] = "±z­n±NÅܧó§@¬°¼Ð·Ç®æ¦¡Àx¦s¡H\n\n³o­ÓÅܧó·|¼vÅT©Ò¦³ªº·s¤½¦¡¡C"; + Message[ arabic ] = "åá ÊÑíÏ ÍÝÙ ÇáÊÛííÑÇÊ ßÇÝÊÑÇÖí¿\n\nÓæÝ íßæä áåÐå ÇáÊÛííÑÇÊ ÃËÑÇð Úáì ßá ÇáÕíÛ ÇáÌÏíÏÉ."; + Message[ greek ] = "Íá áðïèçêåõôïýí ïé áëëáãÝò ùò ðñïåðéëïãÞ;\n\nÏé áëëáãÝò áõôÝò èá Ý÷ïõí åðßäñáóç óå üëïõò ôïõò íÝïõò ôýðïõò."; + Message[ korean ] = "º¯°æ»çÇ×À» ±âº»À¸·Î ÀúÀåÇϽðڽÀ´Ï±î?\n\nÀÌ º¯°æ»çÇ×µéÀº ¸ðµç »õ ¼ö½Ä¿¡ ¿µÇâÀ» ¹ÌĨ´Ï´Ù."; + Message[ turkish ] = "Deðiþiklikler standart deðerler olarak kaydedilsin mi?\n\nBu deðiþiklikler tüm yeni formülleri etkileyecektir."; + Message[ language_user1 ] = " "; +}; + +String RID_FONTREGULAR +{ + Text = ", Normal" ; + Text [ ENGLISH ] = "Standard" ; + Text [ norwegian ] = "Standard" ; + Text [ italian ] = "Standard" ; + Text [ portuguese_brazilian ] = "Padrão" ; + Text [ portuguese ] = ", Padrão" ; + Text [ finnish ] = "Vakio" ; + Text [ danish ] = ", Normal" ; + Text [ french ] = "Par défaut" ; + Text [ swedish ] = ", Normal" ; + Text [ dutch ] = ", Normaal" ; + Text [ spanish ] = ", Estándar" ; + Text [ english_us ] = ", Standard" ; + Text[ chinese_simplified ] = ", ÆÕͨ"; + Text[ russian ] = ", Îáû÷íûé"; + Text[ polish ] = ", Standard"; + Text[ japanese ] = ",’Êí"; + Text[ chinese_traditional ] = "¡A´¶³q"; + Text[ arabic ] = "ÚÇÏí ,"; + Text[ greek ] = ", ÊáíïíéêÜ"; + Text[ korean ] = ", º¸Åë"; + Text[ turkish ] = ", standart"; + Text[ language_user1 ] = " "; +}; +String RID_FONTITALIC +{ + Text = ", Kursiv" ; + Text [ ENGLISH ] = "Italic" ; + Text [ norwegian ] = "Kursiv" ; + Text [ italian ] = ", Corsivo" ; + Text [ portuguese_brazilian ] = "Itálico" ; + Text [ portuguese ] = ", Itálico" ; + Text [ finnish ] = "Kursivoitu" ; + Text [ danish ] = ", Kursiv" ; + Text [ french ] = "Italique" ; + Text [ swedish ] = ", Kursiv" ; + Text [ dutch ] = ", Cursief" ; + Text [ spanish ] = ", Cursiva" ; + Text [ english_us ] = "Italic" ; + Text[ chinese_simplified ] = ", бÌå"; + Text[ russian ] = ", Íàêëîííûé"; + Text[ polish ] = "Kursywa"; + Text[ japanese ] = ",ŽÎ‘Ì"; + Text[ chinese_traditional ] = ", ±×Åé"; + Text[ arabic ] = "ãÇÆá"; + Text[ greek ] = ", ÐëÜãéá"; + Text[ korean ] = "ÀÌÅŸ¯Ã¼"; + Text[ turkish ] = ", italik"; + Text[ language_user1 ] = " "; +}; +String RID_FONTBOLD +{ + Text = ", Fett" ; + Text [ ENGLISH ] = "Bold" ; + Text [ norwegian ] = "Fet" ; + Text [ italian ] = "Grassetto" ; + Text [ portuguese_brazilian ] = "Negrito" ; + Text [ portuguese ] = ", Negrito" ; + Text [ finnish ] = "Lihavoitu" ; + Text [ danish ] = ", Fed" ; + Text [ french ] = "Gras" ; + Text [ swedish ] = ", Fett" ; + Text [ dutch ] = ", Vet" ; + Text [ spanish ] = ", Negrita" ; + Text [ english_us ] = "Bold" ; + Text[ chinese_simplified ] = ", ´ÖÌå"; + Text[ russian ] = ", Æèðíûé"; + Text[ polish ] = ", Pogrubienie"; + Text[ japanese ] = ",‘¾Žš"; + Text[ chinese_traditional ] = ", ²ÊÅé"; + Text[ arabic ] = "ÚÑíÖ"; + Text[ greek ] = ";¸íôïíï"; + Text[ korean ] = ", ÁøÇÏ°Ô"; + Text[ turkish ] = ", kalýn"; + Text[ language_user1 ] = " "; +}; +String RID_APPLICATION +{ + Text = "StarMath" ; +}; +String RID_OBJECTNAME +{ + Text = "SMath3" ; +}; +String RID_VIEWNAME +{ + Text = "StarMath" ; +}; +String RID_UNDOEDITNAME +{ + Text = "Edit" ; +}; +String RID_UNDOFORMATNAME +{ + Text = "Format" ; +}; +String GID_FORMEL +{ + Text = "StarMath" ; +}; +Menu RID_VIEWMENU +{ + ItemList = + { + MenuItem + { + Identifier = SID_VIEW050 ; + HelpID = SID_VIEW050 ; + Text = "Ansicht ~50%" ; + Text [ ENGLISH ] = "Zoom ~50%" ; + Text [ norwegian ] = "Zoom ~50%" ; + Text [ italian ] = "Zoom 50%" ; + Text [ portuguese_brazilian ] = "Zoom 50%" ; + Text [ portuguese ] = "Zoom ~50%" ; + Text [ finnish ] = "Zoomaa ~50 %" ; + Text [ danish ] = "Zoom 50%" ; + Text [ french ] = "Zoom ~50 %" ; + Text [ swedish ] = "Visa ~50%" ; + Text [ dutch ] = "Zoomwaarde ~50%" ; + Text [ spanish ] = "Zoom ~50%" ; + Text [ english_us ] = "View 50%" ; + Text[ chinese_simplified ] = "ÊÓͼ 50%"; + Text[ russian ] = "Âèä ~50%"; + Text[ polish ] = "Widok 50%"; + Text[ japanese ] = "•\\Ž¦50%"; + Text[ chinese_traditional ] = "À˵ø 50%"; + Text[ arabic ] = "%ÚÑÖ 50"; + Text[ greek ] = "ÌåãÝèõíóç ~50%"; + Text[ korean ] = "º¸±â 50%"; + Text[ turkish ] = "Görünüm %~50"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = SID_VIEW100 ; + HelpID = SID_VIEW100 ; + Text = "Ansicht ~100%" ; + Text [ ENGLISH ] = "Zoom ~100%" ; + Text [ norwegian ] = "Zoom ~100%" ; + Text [ italian ] = "Zoom 100%" ; + Text [ portuguese_brazilian ] = "Zoom 100%" ; + Text [ portuguese ] = "Zoom ~100%" ; + Text [ finnish ] = "Normaali ~100%" ; + Text [ danish ] = "Zoom 100%" ; + Text [ french ] = "Zoom ~100 %" ; + Text [ swedish ] = "Visa ~100%" ; + Text [ dutch ] = "Zoomwaarde ~100%" ; + Text [ spanish ] = "Zoom ~100%" ; + Text [ english_us ] = "View 100%" ; + Text[ chinese_simplified ] = "ÊÓͼ 100%"; + Text[ russian ] = "Âèä ~100%"; + Text[ polish ] = "Widok 100%"; + Text[ japanese ] = "•\\Ž¦100%"; + Text[ chinese_traditional ] = "À˵ø 100%"; + Text[ arabic ] = "%ÚÑÖ 100"; + Text[ greek ] = "ÌåãÝèõíóç ~100%"; + Text[ korean ] = "100%·Î º¸±â"; + Text[ turkish ] = "Görünüm %~100"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = SID_VIEW200 ; + HelpID = SID_VIEW200 ; + Text = "Ansicht ~200%" ; + Text [ ENGLISH ] = "Zoom ~200%" ; + Text [ norwegian ] = "Zoom ~200%" ; + Text [ italian ] = "Zoom 200%" ; + Text [ portuguese_brazilian ] = "Zoom 200%" ; + Text [ portuguese ] = "Zoom ~200%" ; + Text [ finnish ] = "Zoomaa ~200 %" ; + Text [ danish ] = "Zoom 200%" ; + Text [ french ] = "Zoom ~200 %" ; + Text [ swedish ] = "Visa ~200%" ; + Text [ dutch ] = "Zoomwaarde ~200%" ; + Text [ spanish ] = "Zoom ~200%" ; + Text [ english_us ] = "View 200%" ; + Text[ chinese_simplified ] = "ÊÓͼ 200%"; + Text[ russian ] = "Âèä ~200%"; + Text[ polish ] = "Widok 200%"; + Text[ japanese ] = "•\\Ž¦200%"; + Text[ chinese_traditional ] = "À˵ø 200%"; + Text[ arabic ] = "%ÚÑÖ 200"; + Text[ greek ] = "ÌåãÝèõíóç ~200%"; + Text[ korean ] = "200%·Î º¸±â"; + Text[ turkish ] = "Görünüm %~200"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = SID_ZOOMIN ; + HelpID = SID_ZOOMIN ; + /* ### ACHTUNG: Neuer Text in Resource? Vergrößern : Vergrößern */ + Text = "~Vergrößern" ; + Text [ ENGLISH ] = "Zoom in" ; + Text [ norwegian ] = "Forstørr" ; + Text [ italian ] = "Zoom avanti" ; + Text [ portuguese_brazilian ] = "Mais zoom" ; + Text [ portuguese ] = "Apro~ximar" ; + Text [ finnish ] = "Suurenna" ; + Text [ danish ] = "Forstør" ; + Text [ french ] = "A~grandir" ; + Text [ swedish ] = "För~stora" ; + Text [ dutch ] = "~Inzoomen" ; + Text [ spanish ] = "~Aumentar" ; + Text [ english_us ] = "Zoom In" ; + Text[ chinese_simplified ] = "·Å´ó(~I)"; + Text[ russian ] = "Óâåëè÷èòü"; + Text[ polish ] = "Powiêksz"; + Text[ japanese ] = "Šg‘å"; + Text[ chinese_traditional ] = "©ñ¤j(~I)"; + Text[ arabic ] = "ÊßÈíÑ"; + Text[ greek ] = "ÌåãÝèõ~íóç"; + Text[ korean ] = "È®´ë"; + Text[ turkish ] = "Büyüt"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = SID_ZOOMOUT ; + HelpID = SID_ZOOMOUT ; + Text = "V~erkleinern" ; + Text [ ENGLISH ] = "Zoom out" ; + Text [ norwegian ] = "Forminsk" ; + Text [ italian ] = "Zoom indietro" ; + Text [ portuguese_brazilian ] = "Menos zoom" ; + Text [ portuguese ] = "Af~astar" ; + Text [ finnish ] = "Pienennä" ; + Text [ danish ] = "Formindsk" ; + Text [ french ] = "R~éduire" ; + Text [ swedish ] = "För~minska" ; + Text [ dutch ] = "~Uitzoomen" ; + Text [ spanish ] = "~Reducir" ; + Text [ english_us ] = "Zoom Out" ; + Text[ chinese_simplified ] = "ËõС(~O)"; + Text[ russian ] = "Óìåíüøèòü"; + Text[ polish ] = "Pomniejsz"; + Text[ japanese ] = "k¬"; + Text[ chinese_traditional ] = "ÁY¤p(~O)"; + Text[ arabic ] = "ÊÕÛíÑ"; + Text[ greek ] = "Óìßêñõíó~ç"; + Text[ korean ] = "Ãà¼Ò"; + Text[ turkish ] = "Küçült"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = SID_ADJUST ; + HelpID = SID_ADJUST ; + Text = "~Alles anzeigen" ; + Text [ ENGLISH ] = "Show all" ; + Text [ norwegian ] = "Show all" ; + Text [ italian ] = "Mostra tutto" ; + Text [ portuguese_brazilian ] = "Mostrar tudo" ; + Text [ portuguese ] = "Mostrar ~tudo" ; + Text [ finnish ] = "Näytä kaikki" ; + Text [ danish ] = "Vis alt" ; + Text [ french ] = "A~fficher tout" ; + Text [ swedish ] = "Visa ~allt" ; + Text [ dutch ] = "Alles wee~rgeven" ; + Text [ spanish ] = "Mostrar ~todo" ; + Text [ english_us ] = "Display All" ; + Text[ chinese_simplified ] = "È«²¿ÏÔʾ"; + Text[ russian ] = "~Ïîêàçàòü âñå"; + Text[ polish ] = "Poka¿ wszystko"; + Text[ japanese ] = "‚·‚ׂĕ\\Ž¦"; + Text[ chinese_traditional ] = "¥þ³¡Åã¥Ü"; + Text[ arabic ] = "ÅÙåÇÑ Çáßá"; + Text[ greek ] = "~ÅìöÜíéóç üëùí"; + Text[ korean ] = "¸ðµÎ Ç¥½Ã"; + Text[ turkish ] = "Tümünü görüntüle"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Separator = TRUE ; + }; + MenuItem + { + Identifier = SID_DRAW ; + HelpID = SID_DRAW ; + Text = "A~ktualisieren" ; + Text [ ENGLISH ] = "Update" ; + Text [ norwegian ] = "Update" ; + Text [ italian ] = "Aggiorna" ; + Text [ portuguese_brazilian ] = "Atualizar" ; + Text [ portuguese ] = "A~ctualizar" ; + Text [ finnish ] = "Päivitä" ; + Text [ danish ] = "Opdater" ; + Text [ french ] = "~Actualiser" ; + Text [ swedish ] = "~Uppdatera" ; + Text [ dutch ] = "A~ctualiseren" ; + Text [ spanish ] = "A~ctualizar" ; + Text [ english_us ] = "U~pdate" ; + Text[ chinese_simplified ] = "¸üÐÂ(~P)"; + Text[ russian ] = "Îáíîâèòü"; + Text[ polish ] = "Aktualizuj"; + Text[ japanese ] = "XV(~P)"; + Text[ chinese_traditional ] = "§ó·s(~P)"; + Text[ arabic ] = "ÊÍÏíË"; + Text[ greek ] = "Å~íçìÝñùóç"; + Text[ korean ] = "¾÷ µ¥ÀÌÆ®(~P)"; + Text[ turkish ] = "Güncelle"; + Text[ language_user1 ] = " "; + }; + }; +}; +Menu RID_DISTANCEMENU +{ + ItemList = + { + MenuItem + { + /* ### ACHTUNG: Neuer Text in Resource? Abstände : Abstände */ + Text = "Abstände" ; + Text [ ENGLISH ] = "Distances" ; + Text [ norwegian ] = "Distances" ; + Text [ italian ] = "Distanze" ; + Text [ portuguese_brazilian ] = "Distâncias" ; + Text [ portuguese ] = "Espaços" ; + Text [ finnish ] = "Etäisyydet" ; + Text [ danish ] = "Afstand" ; + Text [ french ] = "Écarts" ; + Text [ swedish ] = "Avstånd" ; + Text [ dutch ] = "Afstanden" ; + Text [ spanish ] = "Espacios" ; + Text [ english_us ] = "Spacing" ; + Text[ chinese_simplified ] = "¼ä¸ô"; + Text[ russian ] = "Èíòåðâàëû"; + Text[ polish ] = "Odstêpy"; + Text[ japanese ] = "ŠÔŠu"; + Text[ chinese_traditional ] = "¶¡¹j"; + Text[ arabic ] = "ÊÈÇÚÏ"; + Text[ greek ] = "AðïóôÜóåéò"; + Text[ korean ] = "Ä­ ¶ç¿ì±â"; + Text[ turkish ] = "Aralýklar"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = 2 ; + Text = "Indizes" ; + Text [ ENGLISH ] = "Indices" ; + Text [ norwegian ] = "Indices" ; + Text [ italian ] = "Indici" ; + Text [ portuguese_brazilian ] = "Índices" ; + Text [ portuguese ] = "Índices" ; + Text [ finnish ] = "Indices" ; + Text [ danish ] = "Sub-/Superscript" ; + Text [ french ] = "Indices" ; + Text [ swedish ] = "Index" ; + Text [ dutch ] = "Indices" ; + Text [ spanish ] = "Índices" ; + Text [ english_us ] = "Indexes" ; + Text[ chinese_simplified ] = "±êÖ¾"; + Text[ russian ] = "Èíäåêñû"; + Text[ polish ] = "Indeksy"; + Text[ japanese ] = "²ÝÃÞ¯¸½"; + Text[ chinese_traditional ] = "¼Ð»x"; + Text[ arabic ] = "ÝåÇÑÓ"; + Text[ greek ] = "Äåßêôåò"; + Text[ korean ] = "À妽º"; + Text[ turkish ] = "Ýndisler"; + }; + MenuItem + { + Identifier = 3 ; + /* ### ACHTUNG: Neuer Text in Resource? Brüche : Br³che */ + Text = "Brüche" ; + Text [ ENGLISH ] = "Fractions" ; + Text [ norwegian ] = "Fractions" ; + Text [ italian ] = "Frazioni" ; + Text [ portuguese_brazilian ] = "Frações" ; + Text [ portuguese ] = "Fracções" ; + Text [ finnish ] = "Murtomerkinnät" ; + Text [ danish ] = "Brøker" ; + Text [ french ] = "Fractions" ; + Text [ swedish ] = "Bråk" ; + Text [ dutch ] = "Breuken" ; + Text [ spanish ] = "Fracciones" ; + Text [ english_us ] = "Fractions" ; + Text[ chinese_simplified ] = "·ÖÊý"; + Text[ russian ] = "Äðîáè"; + Text[ polish ] = "U³amki"; + Text[ japanese ] = "•ª”"; + Text[ chinese_traditional ] = "¤À¼Æ"; + Text[ arabic ] = "ßÓæÑ"; + Text[ greek ] = "ÊëÜóìáôá"; + Text[ korean ] = "ºÐ¼ö"; + Text[ turkish ] = "Kesirler"; + }; + MenuItem + { + Identifier = 4 ; + Text = "Bruchstriche" ; + Text [ ENGLISH ] = "Fraction line" ; + Text [ norwegian ] = "Fraction line" ; + Text [ italian ] = "Linee di frazione" ; + Text [ portuguese_brazilian ] = "Linha de fração" ; + Text [ portuguese ] = "Linhas de fracção" ; + Text [ finnish ] = "Murtoviiva" ; + Text [ danish ] = "Brøkstreger" ; + Text [ french ] = "Traits de fraction" ; + Text [ swedish ] = "Bråkstreck" ; + Text [ dutch ] = "Breuklijnen" ; + Text [ spanish ] = "Líneas de fracción" ; + Text [ english_us ] = "Fraction Bars" ; + Text[ chinese_simplified ] = "·ÖÊýÏß"; + Text[ russian ] = "Äðîáíàÿ ÷åðòà"; + Text[ polish ] = "Kreski u³amkowe"; + Text[ japanese ] = "•ª”ü"; + Text[ chinese_traditional ] = "¤À¼Æ½u"; + Text[ arabic ] = "ÔÑØÉ ÇáßÓÑ"; + Text[ greek ] = "ÃñáììÝò êëÜóìáôïò"; + Text[ korean ] = "ºÐ¼ö Ç¥½ÃÁÙ"; + Text[ turkish ] = "Kesir çizgisi"; + }; + MenuItem + { + Identifier = 5 ; + Text = "Grenzen" ; + Text [ ENGLISH ] = "Limits" ; + Text [ norwegian ] = "Border" ; + Text [ italian ] = "Bordi" ; + Text [ portuguese_brazilian ] = "Borda" ; + Text [ portuguese ] = "Limites" ; + Text [ finnish ] = "Reunaviiva" ; + Text [ danish ] = "Grænser" ; + Text [ french ] = "Limites" ; + Text [ swedish ] = "Gränser" ; + Text [ dutch ] = "Begrenzing" ; + Text [ spanish ] = "Límites" ; + Text [ english_us ] = "Limits" ; + Text[ chinese_simplified ] = "½çÏÞ"; + Text[ russian ] = "Ãðàíèöû"; + Text[ polish ] = "Granice"; + Text[ japanese ] = "ØЯÄ"; + Text[ chinese_traditional ] = "¬É­­"; + Text[ arabic ] = "ÍÏæÏ"; + Text[ greek ] = "¼ñéá"; + Text[ korean ] = "±ØÇÑ"; + Text[ turkish ] = "Limitler"; + }; + MenuItem + { + Identifier = 6 ; + Text = "Klammern" ; + Text [ ENGLISH ] = "Brackets" ; + Text [ norwegian ] = "Brackets" ; + Text [ italian ] = "Parentesi" ; + Text [ portuguese_brazilian ] = "Colchetes" ; + Text [ portuguese ] = "Parênteses" ; + Text [ finnish ] = "Sulkeet" ; + Text [ danish ] = "Parenteser" ; + Text [ french ] = "Parenthèses" ; + Text [ swedish ] = "Parenteser" ; + Text [ dutch ] = "Haakjes" ; + Text [ spanish ] = "Paréntesis" ; + Text [ english_us ] = "Brackets" ; + Text[ chinese_simplified ] = "À¨ºÅ"; + Text[ russian ] = "Ñêîáêè"; + Text[ polish ] = "Nawiasy"; + Text[ japanese ] = "Š‡ŒÊ"; + Text[ chinese_traditional ] = "¬A¸¹"; + Text[ arabic ] = "ÃÞæÇÓ"; + Text[ greek ] = "ÐáñåíèÝóåéò"; + Text[ korean ] = "°ýÈ£"; + Text[ turkish ] = "Ayraçlar"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = 7 ; + Text = "Matrizen" ; + Text [ ENGLISH ] = "Matrix" ; + Text [ norwegian ] = "Matrix" ; + Text [ italian ] = "Matrici" ; + Text [ portuguese_brazilian ] = "Matriz" ; + Text [ portuguese ] = "Matrizes" ; + Text [ finnish ] = "Matriisi" ; + Text [ danish ] = "Matrixer" ; + Text [ french ] = "Matrices" ; + Text [ swedish ] = "Matriser" ; + Text [ dutch ] = "Matrices" ; + Text [ spanish ] = "Matrices" ; + Text [ english_us ] = "Matrixes" ; + Text[ chinese_simplified ] = "¾ØÕó"; + Text[ russian ] = "Ìàòðèöû"; + Text[ polish ] = "Macierze"; + Text[ japanese ] = "ÏÄظ½"; + Text[ chinese_traditional ] = "¯x°}"; + Text[ arabic ] = "ãÕÝæÝÇÊ"; + Text[ greek ] = "ÌÞôñåò"; + Text[ korean ] = "Çà¿­"; + Text[ turkish ] = "Matrisler"; + }; + MenuItem + { + Identifier = 8 ; + Text = "Ornamente" ; + Text [ ENGLISH ] = "Ornaments" ; + Text [ norwegian ] = "Ornaments" ; + Text [ italian ] = "Ornamenti" ; + Text [ portuguese_brazilian ] = "Ornamentos" ; + Text [ portuguese ] = "Ornamentos" ; + Text [ finnish ] = "Koristeet" ; + Text [ danish ] = "Ornamenter" ; + Text [ french ] = "Ornements" ; + Text [ swedish ] = "Ornament" ; + Text [ dutch ] = "Ornamenten" ; + Text [ spanish ] = "Ornamentos" ; + Text [ english_us ] = "Symbols" ; + Text[ chinese_simplified ] = "×°ÊÎ"; + Text[ russian ] = "Ñèìâîëû"; + Text[ polish ] = "Ornamenty"; + Text[ japanese ] = "‘•ü"; + Text[ chinese_traditional ] = "¹Ï¥Ü"; + Text[ arabic ] = "ÑãæÒ"; + Text[ greek ] = "Äéáêüóìçóç"; + Text[ korean ] = "±âÈ£"; + Text[ turkish ] = "Simgeler"; + }; + MenuItem + { + Identifier = 9 ; + Text = "Operatoren" ; + Text [ ENGLISH ] = "Operands" ; + Text [ norwegian ] = "Operands" ; + Text [ italian ] = "Operatori" ; + Text [ portuguese_brazilian ] = "Operands" ; + Text [ portuguese ] = "Operadores" ; + Text [ finnish ] = "Operaattorit" ; + Text [ danish ] = "Operatorer" ; + Text [ french ] = "Opérateurs" ; + Text [ swedish ] = "Operatorer" ; + Text [ dutch ] = "Operatoren" ; + Text [ spanish ] = "Operadores" ; + Text [ english_us ] = "Operators" ; + Text[ chinese_simplified ] = "ÔËËã·û"; + Text[ russian ] = "Îïðåàòîðû"; + Text[ polish ] = "Operatory"; + Text[ japanese ] = "‰‰ŽZŽq"; + Text[ chinese_traditional ] = "¹Bºâ²Å"; + Text[ arabic ] = "ÚæÇãá ÇáÊÔÛíá"; + Text[ greek ] = "ÔåëåóôÝò"; + Text[ korean ] = "¿¬»êÀÚ"; + Text[ turkish ] = "Ýþleçler"; + }; + MenuItem + { + Identifier = 10 ; + Text = "Ränder" ; + Text [ ENGLISH ] = "Border" ; + TEXT[ italian ] = "Margini"; + TEXT[ portuguese_brazilian ] = "Ränder"; + TEXT[ portuguese ] = "Margens"; + TEXT[ danish ] = "Margener"; + TEXT[ french ] = "Marges"; + TEXT[ swedish ] = "Marginaler"; + TEXT[ dutch ] = "Marges"; + TEXT[ spanish ] = "Márgenes"; + TEXT[ english_us ] = "Borders"; + TEXT[ chinese_simplified ] = "±ß"; + TEXT[ russian ] = "Ïîëÿ"; + TEXT[ polish ] = "Krawêdzie"; + TEXT[ japanese ] = "—]”’"; + TEXT[ chinese_traditional ] = "Ãä®Ø"; + TEXT[ arabic ] = "ÃØÑÇÝ"; + TEXT[ greek ] = "ÐåñéãñÜììáôá"; + TEXT[ korean ] = "¿Ü°û¼±"; + TEXT[ turkish ] = "Kenarlar"; + }; + }; +}; + +Menu RID_FONTMENU +{ + ItemList = + { + MenuItem + { + Text = "Variablen" ; + Text [ ENGLISH ] = "Variables" ; + Text [ norwegian ] = "Variabler" ; + Text [ italian ] = "Variabili" ; + Text [ portuguese_brazilian ] = "Variáveis" ; + Text [ portuguese ] = "Variáveis" ; + Text [ finnish ] = "Muuttujat" ; + Text [ danish ] = "Variabler" ; + Text [ french ] = "Variables" ; + Text [ swedish ] = "Variabler" ; + Text [ dutch ] = "Variabelen" ; + Text [ spanish ] = "Variables" ; + Text [ english_us ] = "Variables" ; + Text[ chinese_simplified ] = "±äÁ¿"; + Text[ russian ] = "Ïåðåìåííûå"; + Text[ polish ] = "Zmienne"; + Text[ japanese ] = "•Ï”"; + Text[ chinese_traditional ] = "Åܶq"; + Text[ arabic ] = "ãÊÛíÑÇÊ"; + Text[ greek ] = "ÌåôáâëçôÝò"; + Text[ korean ] = "º¯¼ö"; + Text[ turkish ] = "Deðiþkenler"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = 2 ; + Text = "Funktionen" ; + Text [ ENGLISH ] = "Functions" ; + Text [ norwegian ] = "Funksjoner" ; + Text [ italian ] = "Funzioni" ; + Text [ portuguese_brazilian ] = "Funções" ; + Text [ portuguese ] = "Funções" ; + Text [ finnish ] = "Toiminnot" ; + Text [ danish ] = "Funktioner" ; + Text [ french ] = "Fonctions" ; + Text [ swedish ] = "Funktioner" ; + Text [ dutch ] = "Functies" ; + Text [ spanish ] = "Funciones" ; + Text [ english_us ] = "Functions" ; + Text[ chinese_simplified ] = "º¯Êý"; + Text[ russian ] = "Ôóíêöèè"; + Text[ polish ] = "Funkcje"; + Text[ japanese ] = "ŠÖ”"; + Text[ chinese_traditional ] = "¨ç¼Æ"; + Text[ arabic ] = "ÏÇáÇÊ"; + Text[ greek ] = "ÓõíáñôÞóåéò"; + Text[ korean ] = "ÇÔ¼ö"; + Text[ turkish ] = "Fonksiyon"; + }; + MenuItem + { + Identifier = 3 ; + Text = "Zahlen" ; + Text [ ENGLISH ] = "Numbers" ; + Text [ norwegian ] = "Numbers" ; + Text [ italian ] = "Numeri" ; + Text [ portuguese_brazilian ] = "Números" ; + Text [ portuguese ] = "Números" ; + Text [ finnish ] = "Numerot" ; + Text [ danish ] = "Tal" ; + Text [ french ] = "Nombres" ; + Text [ swedish ] = "Tal" ; + Text [ dutch ] = "Getallen" ; + Text [ spanish ] = "Números" ; + Text [ english_us ] = "Numbers" ; + Text[ chinese_simplified ] = "Êý×Ö"; + Text[ russian ] = "×èñëà"; + Text[ polish ] = "Liczby"; + Text[ japanese ] = "”’l"; + Text[ chinese_traditional ] = "¼Æ¦r"; + Text[ arabic ] = "ÃÑÞÇã"; + Text[ greek ] = "Áñéèìïß"; + Text[ korean ] = "¹øÈ£"; + Text[ turkish ] = "Sayýlar"; + }; + MenuItem + { + Identifier = 4 ; + Text = "Text" ; + Text [ ENGLISH ] = "Text" ; + Text [ norwegian ] = "Text" ; + Text [ italian ] = "Testo" ; + Text [ portuguese_brazilian ] = "Texto" ; + Text [ portuguese ] = "Texto" ; + Text [ finnish ] = "Teksti" ; + Text [ danish ] = "Tekst" ; + Text [ french ] = "Texte" ; + Text [ swedish ] = "Text" ; + Text [ dutch ] = "Tekst" ; + Text [ spanish ] = "Texto" ; + Text [ english_us ] = "Text" ; + Text[ chinese_simplified ] = "ÎÄ×Ö"; + Text[ russian ] = "Òåêñò"; + Text[ polish ] = "Tekst"; + Text[ japanese ] = "÷½Ä"; + Text[ chinese_traditional ] = "¤å¦r"; + Text[ arabic ] = "äÕ"; + Text[ greek ] = "Êåßìåíï"; + Text[ korean ] = "ÅؽºÆ®"; + Text[ turkish ] = "Metin"; + Text[ language_user1 ] = " "; + }; + MenuItem + { + Identifier = 5 ; + Text = "Serif" ; + Text [ ENGLISH ] = "Serif" ; + Text [ norwegian ] = "Serif" ; + Text [ italian ] = "Serif" ; + Text [ portuguese_brazilian ] = "Serif" ; + Text [ portuguese ] = "Serif" ; + Text [ finnish ] = "Serif" ; + Text [ danish ] = "Serif" ; + Text [ french ] = "Serif" ; + Text [ swedish ] = "Serif" ; + Text [ dutch ] = "Schreefletters" ; + Text [ spanish ] = "Serif" ; + Text [ english_us ] = "Serif" ; + Text[ chinese_simplified ] = "ϸÌå"; + Text[ russian ] = "Ñåðèô"; + Text[ polish ] = "Serif"; + Text[ japanese ] = "Serif"; + Text[ chinese_traditional ] = "Serif"; + Text[ arabic ] = "Serif"; + Text[ greek ] = "Serif"; + Text[ korean ] = "Serif"; + Text[ turkish ] = "Serif"; + }; + MenuItem + { + Identifier = 6 ; + Text = "Sans" ; + Text [ ENGLISH ] = "Sans" ; + Text [ norwegian ] = "Sans" ; + Text [ italian ] = "Sans" ; + Text [ portuguese_brazilian ] = "Sans" ; + Text [ portuguese ] = "Sans" ; + Text [ finnish ] = "Sans" ; + Text [ danish ] = "Sans" ; + Text [ french ] = "Sans" ; + Text [ swedish ] = "Sans" ; + Text [ dutch ] = "Schreefloze letters" ; + Text [ spanish ] = "Sans" ; + Text [ english_us ] = "Sans" ; + Text[ chinese_simplified ] = "Sans"; + Text[ russian ] = "Ñàíñ"; + Text[ polish ] = "Sans"; + Text[ japanese ] = "Sans"; + Text[ chinese_traditional ] = "Sans"; + Text[ arabic ] = "Sans"; + Text[ greek ] = "Sans"; + Text[ korean ] = "Sans"; + Text[ turkish ] = "Sans"; + }; + MenuItem + { + Identifier = 7 ; + Text = "Fixed" ; + Text [ ENGLISH ] = "Fixed" ; + Text [ norwegian ] = "Fixed" ; + Text [ italian ] = "Fisso" ; + Text [ portuguese_brazilian ] = "Fixo" ; + Text [ portuguese ] = "Fixo" ; + Text [ finnish ] = "Vakio" ; + Text [ danish ] = "Fixed" ; + Text [ french ] = "Fixe" ; + Text [ swedish ] = "Fixerad" ; + Text [ dutch ] = "Vast" ; + Text [ spanish ] = "Fijo" ; + Text [ english_us ] = "Fixed" ; + Text[ chinese_simplified ] = "¹Ì¶¨µÄ"; + Text[ russian ] = "Ôèêñèðîâàííûé"; + Text[ polish ] = "Sta³y"; + Text[ japanese ] = "ŒÅ’è"; + Text[ chinese_traditional ] = "©T©wªº"; + Text[ arabic ] = "ËÇÈÊ"; + Text[ greek ] = "ÓôáèåñÜ"; + Text[ korean ] = "°íÁ¤µÊ"; + Text[ turkish ] = "Sabit"; + }; + }; +}; + +ErrorBox RID_WRITESYMBOLERROR +{ + Message = "Die Symboldatei '%FILE%' kann nicht gespeichert werden !" ; + Message [ ENGLISH ] = "The symbolfile '%FILE%' can not save!" ; + Message [ norwegian ] = "The symbolfile '%FILE%' can not save!" ; + Message [ italian ] = "Impossibile salvare il file dei simboli '%FILE%'." ; + Message [ portuguese_brazilian ] = "O arquivo símbolo '%FILE%' não pode gravar!" ; + Message [ portuguese ] = "O ficheiro de símbolos '%FILE%' não pode ser guardado!" ; + Message [ finnish ] = "Symbolitiedostoa '%FILE%' ei voi tallentaa!" ; + Message [ danish ] = "Det er ikke muligt at gemme symbolfilen '%FILE%'!" ; + Message [ french ] = "Impossible d'enregistrer le fichier de symboles '%FILE%' !" ; + Message [ swedish ] = "Symbolfilen '%FILE%' kan inte sparas !" ; + Message [ dutch ] = "Het symbolenbestand '%FILE%' kan niet worden opgeslagen!" ; + Message [ spanish ] = "¡No se puede guardar el archivo de símbolos '%FILE%'!" ; + Message [ english_us ] = "The symbol file '%FILE%' cannot be saved." ; + Message[ chinese_simplified ] = "ÎÞ·¨´æÅÌÎļþ'%FILE%' £¡"; + Message[ russian ] = "Ñîõðàíèòü ôàéë ñèìâîëîâ '%FILE%' íå óäàåòñÿ !"; + Message[ polish ] = "Pliku symboli '%FILE%' nie mo¿na zapisaæ!"; + Message[ japanese ] = "¼ÝÎÞ٠̧²Ù'%FILE%'‚ª•Û‘¶‚Å‚«‚Ü‚¹‚ñ!"; + Message[ chinese_traditional ] = "µLªkÀx¦sÀÉ®×'%FILE%' ¡I"; + Message[ arabic ] = "áÇ íãßä ÍÝÙ ãáÝ ÇáÑãæÒ '%FILE%'!"; + Message[ greek ] = "Ôï áñ÷åßï óõìâüëùí '%FILE%' äåí åßíáé äõíáôüí íá áðïèçêåõôåß!"; + Message[ korean ] = "±âÈ£ ÆÄÀÏ'%FILE%'À» ÀúÀåÇÒ ¼ö ¾ø½À´Ï´Ù!"; + Message[ turkish ] = "Simge dosyasý '%FILE%' kaydedilemiyor!"; + Message[ language_user1 ] = " "; +}; +ErrorBox RID_READSYMBOLERROR +{ + Message = "Die Symboldatei '%FILE%' kann nicht geladen werden !" ; + Message [ ENGLISH ] = "The symbolfile '%FILE%' can not load!" ; + Message [ norwegian ] = "The symbolfile '%FILE%' can not load!" ; + Message [ italian ] = "Impossibile caricare il file dei simboli '%FILE%'." ; + Message [ portuguese_brazilian ] = "O arquivo símbolo '%FILE%' não pode carregar!" ; + Message [ portuguese ] = "O ficheiro de símbolos '%FILE%' não pode ser carregado!" ; + Message [ finnish ] = "Symbolitiedostoa '%FILE%' ei voi lukea!" ; + Message [ danish ] = "Det er ikke muligt at indlæse symbolfilen '%FILE%'!" ; + Message [ french ] = "Impossible de charger le fichier de symboles '%FILE%' !" ; + Message [ swedish ] = "Symbolfilen '%FILE%' kan inte laddas !" ; + Message [ dutch ] = "Het symbolenbestand '%FILE%' kan niet worden geladen!" ; + Message [ spanish ] = "¡No se puede cargar el archivo de símbolos '%FILE%'!" ; + Message [ english_us ] = "The symbol file '%FILE%' cannot be loaded." ; + Message[ chinese_simplified ] = "ÎÞ·¨×°ÔØͼ±êÎļþ'%FILE%' £¡"; + Message[ russian ] = "Çàãðóçèòü ôàéë ñèìâîëîâ '%FILE%' íå óäàåòñÿ !"; + Message[ polish ] = "Pliku symboli '%FILE%' nie mo¿na za³adowaæ!"; + Message[ japanese ] = "¼ÝÎÞ٠̧²Ù'%FILE%'‚ª“Ç‚Ýž‚Ý‚Å‚«‚Ü‚¹‚ñ!"; + Message[ chinese_traditional ] = "µLªk¸Ë¸ü¹Ï¥ÜÀÉ®×'%FILE%' ¡I"; + Message[ arabic ] = "áÇ íãßä ÊÍãíá ãáÝ ÇáÑãæÒ '%FILE%'!"; + Message[ greek ] = "Äåí åßíáé äõíáôüí íá ãßíåé öüñôùóç ôïõ áñ÷åßïõ óõìâüëùí '%FILE%'!"; + Message[ korean ] = "±âÈ£ ÆÄÀÏ'%FILE%'À» ·ÎµåÇÒ ¼ö ¾ø½À´Ï´Ù!"; + Message[ turkish ] = "Simge dosyasý '%FILE%' yüklenemiyor!"; + Message[ language_user1 ] = " "; +}; + +FloatingWindow RID_TOOLBOXWINDOW +{ + HelpId = HID_SMA_OPERATOR_WIN ; + Border = TRUE ; + Moveable = TRUE ; + Closeable = TRUE ; + Hide = TRUE ; + OutputSize = TRUE ; + SVLook = TRUE ; + Size = MAP_APPFONT ( 0 , 0 ) ; + Text = "Auswahl" ; + Text [ ENGLISH ] = "Selection" ; + ToolBox 1 + { + // unary/binary operators + HelpId = HID_SMA_UNBINOPS_TBX ; + Pos = MAP_APPFONT ( 0 , 41 ) ; + Size = MAP_APPFONT ( 65 , 95 ) ; + SVLook = TRUE ; + Hide = TRUE ; + LineCount = 4 ; + ItemImageList = ImageList + { + ImageBitmap = Bitmap + { + FILE = "unop.bmp" ; + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + RID_PLUSX ; + RID_MINUSX ; + RID_PLUSMINUSX ; + RID_MINUSPLUSX ; + RID_XPLUSY ; + RID_XCDOTY ; + RID_XTIMESY ; + RID_XSYMTIMESY ; + RID_XMINUSY ; + RID_XOVERY ; + RID_XDIVY ; + RID_XSYMDIVIDEY ; + RID_NEGX ; + RID_XANDY ; + RID_XORY ; + RID_XCIRCY ; + }; + IdCount = + { + 16 ; + }; + }; + ItemList = + { + ToolBoxItem + { + Identifier = RID_PLUSX ; + HelpId = HID_SMA_PLUSX ; + Text = "Vorzeichen +" ; + Text [ ENGLISH ] = "sign +" ; + Text [ english_us ] = "+ sign" ; + Text [ portuguese_brazilian ] = "Vorzeichen +" ; + Text [ swedish ] = "Förtecken +" ; + Text [ danish ] = "fortegn +" ; + Text [ italian ] = "Segno +" ; + Text [ spanish ] = "Signo +" ; + Text [ french ] = "Signe +" ; + Text [ dutch ] = "Voorteken +" ; + Text [ portuguese ] = "sinal +" ; + Text[ chinese_simplified ] = "·ûºÅ +"; + Text[ russian ] = "Çíàê âïåðåäè +"; + Text[ polish ] = "Znak +"; + Text[ japanese ] = "•„†+"; + Text[ chinese_traditional ] = "²Å¸¹ +"; + Text[ arabic ] = "+ ÚáÇãÉ"; + Text[ greek ] = "Ðñüóçìï +"; + Text[ korean ] = "+ ±âÈ£"; + Text[ turkish ] = "+ iþareti"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_MINUSX ; + HelpId = HID_SMA_MINUSX ; + Text = "Vorzeichen -" ; + Text [ ENGLISH ] = "sign -" ; + Text [ english_us ] = "- sign" ; + Text [ portuguese_brazilian ] = "Vorzeichen -" ; + Text [ swedish ] = "Förtecken -" ; + Text [ danish ] = "fortegn -" ; + Text [ italian ] = "Segno -" ; + Text [ spanish ] = "Signo -" ; + Text [ french ] = "Signe -" ; + Text [ dutch ] = "Voorteken -" ; + Text [ portuguese ] = "Sinal -" ; + Text[ chinese_simplified ] = "¸º·ûºÅ"; + Text[ russian ] = "Çíàê -"; + Text[ polish ] = "Znak -"; + Text[ japanese ] = "•„†-"; + Text[ chinese_traditional ] = "­t²Å¸¹"; + Text[ arabic ] = "- ÚáÇãÉ"; + Text[ greek ] = "Ðñüóçìï -"; + Text[ korean ] = "- ±âÈ£"; + Text[ turkish ] = "- iþareti"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_PLUSMINUSX ; + HelpId = HID_SMA_PLUSMINUSX ; + Text = "Vorzeichen +-" ; + Text [ ENGLISH ] = "sign +-" ; + Text [ english_us ] = "+- Sign" ; + Text [ portuguese_brazilian ] = "Vorzeichen +-" ; + Text [ swedish ] = "Förtecken +-" ; + Text [ danish ] = "fortegn +-" ; + Text [ italian ] = "Segno +-" ; + Text [ spanish ] = "Signo +-" ; + Text [ french ] = "Signe +" ; + Text [ dutch ] = "Voorteken +-" ; + Text [ portuguese ] = "Sinal +-" ; + Text[ chinese_simplified ] = "Õý¸º·ûºÅ"; + Text[ russian ] = "Çíàê +-"; + Text[ polish ] = "Znak +-"; + Text[ japanese ] = "•„†+-"; + Text[ chinese_traditional ] = "¥¿­t²Å¸¹"; + Text[ arabic ] = "+- ÚáÇãÉ"; + Text[ greek ] = "Ðñüóçìï +-"; + Text[ korean ] = "+- ±âÈ£"; + Text[ turkish ] = "+- iþareti"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_MINUSPLUSX ; + HelpId = HID_SMA_MINUSPLUSX ; + Text = "Vorzeichen -+" ; + Text [ ENGLISH ] = "sign-+" ; + Text [ english_us ] = "-+ Sign" ; + Text [ portuguese_brazilian ] = "Vorzeichen -+" ; + Text [ swedish ] = "Förtecken -+" ; + Text [ danish ] = "fortegn -+" ; + Text [ italian ] = "Segno -+" ; + Text [ spanish ] = "Signo -+" ; + Text [ french ] = "Signe -+" ; + Text [ dutch ] = "Voorteken -+" ; + Text [ portuguese ] = "Sinal -+" ; + Text[ chinese_simplified ] = "¸ºÕý·ûºÅ"; + Text[ russian ] = "Çíàê -+"; + Text[ polish ] = "Znak -+"; + Text[ japanese ] = "•„†-+"; + Text[ chinese_traditional ] = "­t¥¿²Å¸¹"; + Text[ arabic ] = "-+ ÚáÇãÉ"; + Text[ greek ] = "Ðñüóçìï -+"; + Text[ korean ] = "-+ ±âÈ£"; + Text[ turkish ] = "-+ iþareti"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_NEGX ; + HelpId = HID_SMA_NEGX ; + Text = "Logisches NICHT" ; + Text [ ENGLISH ] = "logical NOT" ; + Text [ english_us ] = "Boolean NOT" ; + Text [ portuguese_brazilian ] = "Logisches NICHT" ; + Text [ swedish ] = "logiskt INTE" ; + Text [ danish ] = "logisk IKKE" ; + Text [ italian ] = "NO logico" ; + Text [ spanish ] = "NO lógico" ; + Text [ french ] = "NON logique" ; + Text [ dutch ] = "Logisch NIET" ; + Text [ portuguese ] = "NÃO lógico" ; + Text[ chinese_simplified ] = "Âß¼­µÄ NOT"; + Text[ russian ] = "Ëîãè÷åñêîå ÍÅ"; + Text[ polish ] = "Funkcja logiczna NIE"; + Text[ japanese ] = "˜_—‰‰ŽZŽq NOT"; + Text[ chinese_traditional ] = "Å޿誺 NOT"; + Text[ arabic ] = "áÇ ãäØÞíÉ"; + Text[ greek ] = "ÔåëåóôÞò NOT ôïõ Boole"; + Text[ korean ] = "ºÒ¸®¾ð NOT"; + Text[ turkish ] = "Mantýksal DEÐÝL"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_XPLUSY ; + HelpId = HID_SMA_XPLUSY ; + Text = "Additions +" ; + Text [ ENGLISH ] = "addition +" ; + Text [ english_us ] = "Addition +" ; + Text [ portuguese_brazilian ] = "Additions +" ; + Text [ swedish ] = "addition +" ; + Text [ danish ] = "additions +" ; + Text [ italian ] = "Addizione +" ; + Text [ spanish ] = "+ de suma" ; + Text [ french ] = "+ d'addition" ; + Text [ dutch ] = "Optellen +" ; + Text [ portuguese ] = "Adição +" ; + Text[ chinese_simplified ] = "¼Ó·¨ +"; + Text[ russian ] = "Ñëîæåíèå +"; + Text[ polish ] = "Dodawanie +"; + Text[ japanese ] = "‘«ŽZ+"; + Text[ chinese_traditional ] = "¥[ªk +"; + Text[ arabic ] = "+ ÌãÚ"; + Text[ greek ] = "¢èñïéóìá +"; + Text[ korean ] = "µ¡¼À +"; + Text[ turkish ] = "Toplama +"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XCDOTY ; + HelpId = HID_SMA_XCDOTY ; + Text = "Multiplikation (Punkt)" ; + Text [ ENGLISH ] = "multiplication (dot)" ; + Text [ english_us ] = "multiplication (Dot )" ; + Text [ portuguese_brazilian ] = "Multiplikation (Punkt)" ; + Text [ swedish ] = "multiplikation (punkt)" ; + Text [ danish ] = "multiplikation (punkt)" ; + Text [ italian ] = "Moltiplicazione (punto)" ; + Text [ spanish ] = "Multiplicación (Punto)" ; + Text [ french ] = "Multiplication (Point)" ; + Text [ dutch ] = "Vermenigvuldigen (punt)" ; + Text [ portuguese ] = "Multiplicação (ponto)" ; + Text[ chinese_simplified ] = "³Ë·¨(µã)"; + Text[ russian ] = "Óìíîæåíèå (òî÷êà)"; + Text[ polish ] = "Mno¿enie (Kropka)"; + Text[ japanese ] = "Š|ŽZ(“_)"; + Text[ chinese_traditional ] = "­¼ªk(ÂI)"; + Text[ arabic ] = "(.) ÖÑÈ"; + Text[ greek ] = "Ðïëëáðëáóéáóìüò (Êïõêêßäá)"; + Text[ korean ] = "°ö¼À(. )"; + Text[ turkish ] = "Çarpým (.)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XTIMESY ; + HelpId = HID_SMA_XTIMESY ; + Text = "Multiplikation (Kreuz)" ; + Text [ ENGLISH ] = "multiplication (cross)" ; + Text [ english_us ] = "multiplication (x)" ; + Text [ portuguese_brazilian ] = "Multiplikation (Kreuz)" ; + Text [ swedish ] = "multiplikation (x)" ; + Text [ danish ] = "multiplikation (x)" ; + Text [ italian ] = "Moltiplicazione (per)" ; + Text [ spanish ] = "Multiplicación (cruz)" ; + Text [ french ] = "Multiplication (croix)" ; + Text [ dutch ] = "Vermenigvuldigen (kruisje)" ; + Text [ portuguese ] = "Multiplicação (cruz)" ; + Text[ chinese_simplified ] = "³Ë·¨(½»²æ·û)"; + Text[ russian ] = "Óìíîæåíèå (êðåñòèê)"; + Text[ polish ] = "Mno¿enie (x)"; + Text[ japanese ] = "Š|ŽZ(Íß¹)"; + Text[ chinese_traditional ] = "­¼ªk(¥æ¤e²Å)"; + Text[ arabic ] = "(x) ÖÑÈ"; + Text[ greek ] = "Ðïëëáðëáóéáóìüò (x)"; + Text[ korean ] = "°ö¼À(x)"; + Text[ turkish ] = "Çarpým (x)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XSYMTIMESY ; + HelpId = HID_SMA_XSYMTIMESY ; + Text = "Multiplikation (Stern)" ; + Text [ ENGLISH ] = "multiplication (star)" ; + Text [ english_us ] = "multiplication (*)" ; + Text [ portuguese_brazilian ] = "Multiplikation (Stern)" ; + Text [ swedish ] = "multiplikation (*)" ; + Text [ danish ] = "multiplikation (stjerne)" ; + Text [ italian ] = "Moltiplicazione (asterisco)" ; + Text [ spanish ] = "Multiplicación (estrella)" ; + Text [ french ] = "Multiplication (étoile)" ; + Text [ dutch ] = "Vermenigvuldigen (sterretje)" ; + Text [ portuguese ] = "Multiplicação (asterisco)" ; + Text[ chinese_simplified ] = "³Ë·¨(ÐǺÅ)"; + Text[ russian ] = "Óìíîæåíèå (çâåçäî÷êà)"; + Text[ polish ] = "Mno¿enie (gwiazdka)"; + Text[ japanese ] = "Š|ŽZ(•Äˆó)"; + Text[ chinese_traditional ] = "­¼ªk(¬P¸¹)"; + Text[ arabic ] = "(*) ÖÑÈ"; + Text[ greek ] = "Ðïëëáðëáóéáóìüò (*)"; + Text[ korean ] = "°ö¼À (*)"; + Text[ turkish ] = "Çarpým (*)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XANDY ; + HelpId = HID_SMA_XANDY ; + Text = "Logisches UND" ; + Text [ ENGLISH ] = "logical AND" ; + Text [ english_us ] = "Boolean AND" ; + Text [ portuguese_brazilian ] = "Logisches UND" ; + Text [ swedish ] = "logiskt OCH" ; + Text [ danish ] = "logisk OG" ; + Text [ italian ] = "E logico" ; + Text [ spanish ] = "Y lógico" ; + Text [ french ] = "ET logique" ; + Text [ dutch ] = "Logisch EN" ; + Text [ portuguese ] = "E lógico" ; + Text[ chinese_simplified ] = "Âß¼­µÄ AND"; + Text[ russian ] = "Ëîãè÷åñêîå È"; + Text[ polish ] = "Funkcja logiczna ORAZ"; + Text[ japanese ] = "˜_—Ï AND"; + Text[ chinese_traditional ] = "Å޿誺 AND"; + Text[ arabic ] = "æ ãäØÞíÉ"; + Text[ greek ] = "ÔåëåóôÞò ANDôïõ Boole"; + Text[ korean ] = "ºÒ¸®¾ð AND"; + Text[ turkish ] = "Mantýksal VE"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_XMINUSY ; + HelpId = HID_SMA_XMINUSY ; + Text = "Subtraktions -" ; + Text [ ENGLISH ] = "subtraction -" ; + Text [ english_us ] = "subtraction -" ; + Text [ portuguese_brazilian ] = "Subtraktions -" ; + Text [ swedish ] = "subtraktion -" ; + Text [ danish ] = "subtraktions -" ; + Text [ italian ] = "Sottrazione -" ; + Text [ spanish ] = "Restas -" ; + Text [ french ] = "- de soustraction" ; + Text [ dutch ] = "Aftrekken (-)" ; + Text [ portuguese ] = "Subtracção -" ; + Text[ chinese_simplified ] = "¼õ·¨ -"; + Text[ russian ] = "Âû÷èòàíèå -"; + Text[ polish ] = "Odejmowanie -"; + Text[ japanese ] = "ˆøŽZ-"; + Text[ chinese_traditional ] = "´îªk -"; + Text[ arabic ] = "ØÑÍ Ü"; + Text[ greek ] = "Áöáßñåóç -"; + Text[ korean ] = "»¬¼À -"; + Text[ turkish ] = "Çýkarma -"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XOVERY ; + HelpId = HID_SMA_XOVERY ; + Text = "Division (Bruch)" ; + Text [ ENGLISH ] = "division (fraction)" ; + Text [ english_us ] = "Division (Fraction)" ; + Text [ portuguese_brazilian ] = "Division (Bruch)" ; + Text [ swedish ] = "Division (bråk)" ; + Text [ danish ] = "division (brøk)" ; + Text [ italian ] = "Divisione (frazione)" ; + Text [ spanish ] = "División (fracción)" ; + Text [ french ] = "Division (fraction)" ; + Text [ dutch ] = "Delen (breuk)" ; + Text [ portuguese ] = "Divisão (fracção)" ; + Text[ chinese_simplified ] = "³ý·¨(·ÖÊý)"; + Text[ russian ] = "Äåëåíèå (äðîáü)"; + Text[ polish ] = "Dzielenie (U³amek)"; + Text[ japanese ] = "Š„ŽZ(•ª”)"; + Text[ chinese_traditional ] = "°£ªk(¤À¼Æ)"; + Text[ arabic ] = "ÞÓãÉ (ßÓÑ)"; + Text[ greek ] = "Äéáßñåóç (ÊëÜóìá)"; + Text[ korean ] = "³ª´°¼À (ºÐ¼ö)"; + Text[ turkish ] = "Bölme (kesir)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XDIVY ; + HelpId = HID_SMA_XDIVY ; + Text = "Division (Doppelpunkt-Strich)" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Division (÷)" ; + Text [ portuguese_brazilian ] = "Division (Doppelpunkt-Strich)" ; + Text [ swedish ] = "Division (kolon/snedstreck)" ; + Text [ danish ] = "division (kolon-streg)" ; + Text [ italian ] = "Divisione (due punti-trattino)" ; + Text [ spanish ] = "División (dos puntos-raya)" ; + Text [ french ] = "Division (÷)" ; + Text [ dutch ] = "Delen (dubbele punt-streepje)" ; + Text [ portuguese ] = "Divisão (÷)" ; + Text[ chinese_simplified ] = "³ý·¨(Ò»ÐÐË«µã)"; + Text[ russian ] = "Äåëåíèå (äâîåòî÷èå ñ ÷åðòîé)"; + Text[ polish ] = "Dzielenie (Dwukropek-Kreska)"; + Text[ japanese ] = "Š„ŽZ(ü‚É2“_)"; + Text[ chinese_traditional ] = "°£ªk(¤@¦æÂùÂI)"; + Text[ arabic ] = "(÷) ÞÓãÉ"; + Text[ greek ] = "Division (¸)"; + Text[ korean ] = "³ª´°¼À (?"; + Text[ turkish ] = "Bölme (÷)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XSYMDIVIDEY ; + HelpId = HID_SMA_XSYMDIVIDEY ; + Text = "Division (Schrägstrich)" ; + Text [ ENGLISH ] = "division (slash)" ; + Text [ english_us ] = "Division (Slash)" ; + Text [ portuguese_brazilian ] = "Division (Schrägstrich)" ; + Text [ swedish ] = "Division (snedstreck)" ; + Text [ danish ] = "division (skråstreg)" ; + Text [ italian ] = "Divisione (barra)" ; + Text [ spanish ] = "División (barra oblicua)" ; + Text [ french ] = "Division (barre oblique)" ; + Text [ dutch ] = "Delen (schuine streep)" ; + Text [ portuguese ] = "Divisão (barra diagonal)" ; + Text[ chinese_simplified ] = "³ý·¨(бÏß)"; + Text[ russian ] = "Äåëåíèå (êîñàÿ ÷åðòà)"; + Text[ polish ] = "Dzielenie (Kreska ukoœna)"; + Text[ japanese ] = "Š„ŽZ(ŽÎü)"; + Text[ chinese_traditional ] = "°£ªk(±×½u)"; + Text[ arabic ] = "(/) ÞÓãÉ"; + Text[ greek ] = "Äéáßñåóç (ÊÜèåôïò)"; + Text[ korean ] = "³ª´°¼À (/)"; + Text[ turkish ] = "Bölme (/)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XORY ; + HelpId = HID_SMA_XORY ; + Text = "Logisches ODER" ; + Text [ ENGLISH ] = "logical OR" ; + Text [ english_us ] = "Boolean OR" ; + Text [ portuguese_brazilian ] = "Logisches ODER" ; + Text [ swedish ] = "logiskt ELLER" ; + Text [ danish ] = "logisk ELLER" ; + Text [ italian ] = "O logico" ; + Text [ spanish ] = "O lógico" ; + Text [ french ] = "OU logique" ; + Text [ dutch ] = "Logisch OF" ; + Text [ portuguese ] = "OU lógico" ; + Text[ chinese_simplified ] = "Âß¼­µÄ OR"; + Text[ russian ] = "Ëîãè÷åñêîå ÈËÈ"; + Text[ polish ] = "Funkcja logiczna LUB"; + Text[ japanese ] = "˜_—˜a(OR)"; + Text[ chinese_traditional ] = "Å޿誺 OR"; + Text[ arabic ] = "Ãæ ãäØÞíÉ"; + Text[ greek ] = "ÔåëåóôÞò ORôïõ Boole"; + Text[ korean ] = "ºÒ¸®¾ð OR"; + Text[ turkish ] = "Mantýksal VEYA"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_XCIRCY ; + HelpId = HID_SMA_XCIRCY ; + Text = "Verkettung" ; + Text [ ENGLISH ] = "Composition" ; + TEXT[ italian ] = "Concatenazione"; + TEXT[ portuguese_brazilian ] = "Verkettung"; + TEXT[ portuguese ] = "Concatenar"; + TEXT[ danish ] = "funktionssammensætning"; + TEXT[ french ] = "Enchaînement"; + TEXT[ swedish ] = "Kedjning"; + TEXT[ dutch ] = "Aaneenschakeling"; + TEXT[ spanish ] = "Encadenamiento"; + TEXT[ english_us ] = "Catenate"; + TEXT[ chinese_simplified ] = "Á¬Ëø"; + TEXT[ russian ] = "Êîìïîçèöèÿ"; + TEXT[ polish ] = "Z³¹czenie"; + TEXT[ japanese ] = "˜AŒ‹"; + TEXT[ chinese_traditional ] = "³sÂê"; + TEXT[ arabic ] = "ÓóáÓóáÉ"; + TEXT[ greek ] = "Äçìéïõñãßá áëëçëïõ÷ßáò"; + TEXT[ korean ] = "¿¬°á"; + TEXT[ turkish ] = "Zincirleme"; + TEXT[ language_user1 ] = " "; + }; + }; + }; + ToolBox 2 + { + // relations + HelpId = HID_SMA_RELATIONS_TBX ; + Pos = MAP_APPFONT ( 0 , 41 ) ; + Size = MAP_APPFONT ( 65 , 95 ) ; + SVLook = TRUE ; + Hide = TRUE ; + LineCount = 5 ; + ItemImageList = ImageList + { + ImageBitmap = Bitmap + { + FILE = "biop.bmp" ; + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + RID_XEQY ; + RID_XNEQY ; + RID_XEQUIVY ; + RID_XORTHOY ; + RID_XLTY ; + RID_XGTY ; + RID_XAPPROXY ; + RID_XPARALLELY ; + RID_XLESLANTY ; + RID_XGESLANTY ; + RID_XSIMEQY ; + RID_XPROPY ; + RID_XLEY ; + RID_XGEY ; + RID_XSIMY ; + RID_XTOWARDY ; + RID_XDIVIDESY ; + RID_XNDIVIDESY; + RID_DLARROW ; + RID_DLRARROW ; + RID_DRARROW ; + }; + IdCount = + { + 21 ; + }; + }; + ItemList = + { + ToolBoxItem + { + Identifier = RID_XEQY ; + HelpId = HID_SMA_XEQY ; + Text = "ist gleich" ; + Text [ ENGLISH ] = "is equal" ; + Text [ english_us ] = "Is Equal" ; + Text [ portuguese_brazilian ] = "ist gleich" ; + Text [ swedish ] = "är lika med" ; + Text [ danish ] = "lig med" ; + Text [ italian ] = "Uguale a" ; + Text [ spanish ] = "es igual" ; + Text [ french ] = "est égal à" ; + Text [ dutch ] = "is gelijk aan" ; + Text [ portuguese ] = "é igual" ; + Text[ chinese_simplified ] = "ÏàµÈ"; + Text[ russian ] = "ðàâíî"; + Text[ polish ] = "jest równy"; + Text[ japanese ] = "“™‚µ‚¢"; + Text[ chinese_traditional ] = "¬Ûµ¥"; + Text[ arabic ] = "íÓÇæí"; + Text[ greek ] = "åßíáé ßóï"; + Text[ korean ] = "µî°¡ÀÔ´Ï´Ù"; + Text[ turkish ] = "Eþittir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XNEQY ; + HelpId = HID_SMA_XNEQY ; + Text = "ist ungleich" ; + Text [ ENGLISH ] = "is not equal" ; + Text [ english_us ] = "Is Not Equal" ; + Text [ portuguese_brazilian ] = "ist ungleich" ; + Text [ swedish ] = "är inte lika med" ; + Text [ danish ] = "forskellig fra" ; + Text [ italian ] = "Diverso" ; + Text [ spanish ] = "no es igual" ; + Text [ french ] = "est différent de" ; + Text [ dutch ] = "is niet gelijk aan" ; + Text [ portuguese ] = "é desigual" ; + Text[ chinese_simplified ] = "²»µÈÓÚ"; + Text[ russian ] = "íå ðàâíî"; + Text[ polish ] = "nie jest równy"; + Text[ japanese ] = "“™‚µ‚­‚È‚¢"; + Text[ chinese_traditional ] = "¤£µ¥©ó"; + Text[ arabic ] = "áÇ íÓÇæí"; + Text[ greek ] = "åßíáé äéÜöïñï"; + Text[ korean ] = "µ¿ÀÏÇÏÁö ¾Ê½À´Ï´Ù."; + Text[ turkish ] = "Eþit deðil"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XAPPROXY ; + HelpId = HID_SMA_XAPPROXY ; + Text = "ist ungefähr gleich" ; + Text [ ENGLISH ] = "is approximately equal" ; + Text [ english_us ] = "Is Approximately Equal" ; + Text [ portuguese_brazilian ] = "ist ungefähr gleich" ; + Text [ swedish ] = "är ungefär lika" ; + Text [ danish ] = "omtrent lig med" ; + Text [ italian ] = "Approssimativamente uguale" ; + Text [ spanish ] = "es aprox. igual" ; + Text [ french ] = "est approximativement égal à" ; + Text [ dutch ] = "is ongeveer gelijk aan" ; + Text [ portuguese ] = "é aprox. igual" ; + Text[ chinese_simplified ] = "½üËƵÈÓÚ"; + Text[ russian ] = "ïðèáëèçèòåëüíî ðàâíî"; + Text[ polish ] = "jest w przybli¿eniu równy"; + Text[ japanese ] = "‚Ù‚Ú“™‚µ‚¢"; + Text[ chinese_traditional ] = "ªñ¦üµ¥©ó"; + Text[ arabic ] = "íÓÇæí ÊÞÑíÈÇð"; + Text[ greek ] = "åßíáé êáôÜ ðñïóÝããéóç ßóï"; + Text[ korean ] = "°ÅÀÇ °°À½"; + Text[ turkish ] = "Yaklaþýk olarak eþit"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XDIVIDESY ; + HelpId = HID_SMA_XDIVIDESY ; + Text = "teilt" ; + Text [ ENGLISH ] = "divides" ; + TEXT[ italian ] = "Divide"; + TEXT[ portuguese_brazilian ] = "teilt"; + TEXT[ portuguese ] = "divide"; + TEXT[ danish ] = "er divisor i"; + TEXT[ french ] = "est un diviseur de"; + TEXT[ swedish ] = "delar"; + TEXT[ dutch ] = "deelt"; + TEXT[ spanish ] = "divide"; + TEXT[ english_us ] = "Divides"; + TEXT[ chinese_simplified ] = "¿É±»³ýÓÚ"; + TEXT[ russian ] = "äåëèòñÿ"; + TEXT[ polish ] = "dzieli"; + TEXT[ japanese ] = "Š„‚é"; + TEXT[ chinese_traditional ] = "¥i³Q°£¤_"; + TEXT[ arabic ] = "íÞÈá ÇáÞÓãÉ"; + TEXT[ greek ] = "äéáéñåß"; + TEXT[ korean ] = "³ª´©±â"; + TEXT[ turkish ] = "Böler"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XNDIVIDESY ; + HelpId = HID_SMA_XNDIVIDESY ; + Text = "teilt nicht" ; + Text [ ENGLISH ] = "divides not" ; + TEXT[ italian ] = "Non divide"; + TEXT[ portuguese_brazilian ] = "teilt nicht"; + TEXT[ portuguese ] = "não divide"; + TEXT[ danish ] = "er ikke divisor i"; + TEXT[ french ] = "n'est pas un diviseur de"; + TEXT[ swedish ] = "delar ej"; + TEXT[ dutch ] = "deelt niet"; + TEXT[ spanish ] = "no divide"; + TEXT[ english_us ] = "Does Not Divide"; + TEXT[ chinese_simplified ] = "²»Äܱ»³ýÓÚ"; + TEXT[ russian ] = "íå äåëèòñÿ"; + TEXT[ polish ] = "nie dzieli"; + TEXT[ japanese ] = "Š„‚ç‚È‚¢"; + TEXT[ chinese_traditional ] = "¤£¯à³Q°£¤_"; + TEXT[ arabic ] = "áÇ íÞÈá ÇáÞÓãÉ"; + TEXT[ greek ] = "äåí äéáéñåß"; + TEXT[ korean ] = "³ª´©¾î ÁöÁö ¾ÊÀ½"; + TEXT[ turkish ] = "Bölmez"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_XLTY ; + HelpId = HID_SMA_XLTY ; + Text = "ist kleiner als" ; + Text [ ENGLISH ] = "is less than" ; + Text [ english_us ] = "Is Less Than" ; + Text [ portuguese_brazilian ] = "ist kleiner als" ; + Text [ swedish ] = "är mindre än" ; + Text [ danish ] = "mindre end" ; + Text [ italian ] = "Minore di" ; + Text [ spanish ] = "es menor que" ; + Text [ french ] = "est inférieur à" ; + Text [ dutch ] = "is kleiner dan" ; + Text [ portuguese ] = "é menor que" ; + Text[ chinese_simplified ] = "СÓÚ"; + Text[ russian ] = "ìåíüøå ÷åì"; + Text[ polish ] = "jest mniejszy ni¿"; + Text[ japanese ] = "‚æ‚謂³‚¢"; + Text[ chinese_traditional ] = "¤p©ó"; + Text[ arabic ] = "ÃÞá ãä"; + Text[ greek ] = "åßíáé ìéêñüôåñï áðü"; + Text[ korean ] = "´ÙÀ½ÀÇ ¹Ì¸¸ÀÓ"; + Text[ turkish ] = "Küçüktür"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XGTY ; + HelpId = HID_SMA_XGTY ; + Text = "ist größer als" ; + Text [ ENGLISH ] = "is greater than" ; + Text [ english_us ] = "Is Greater Than" ; + Text [ portuguese_brazilian ] = "ist größer als" ; + Text [ swedish ] = "är större än" ; + Text [ danish ] = "større end" ; + Text [ italian ] = "Maggiore di" ; + Text [ spanish ] = "es mayor que" ; + Text [ french ] = "est supérieur à" ; + Text [ dutch ] = "is groter dan" ; + Text [ portuguese ] = "é maior que" ; + Text[ chinese_simplified ] = "´óÓÚ"; + Text[ russian ] = "áîëüøå ÷åì"; + Text[ polish ] = "jest wiêkszy ni¿"; + Text[ japanese ] = "‚æ‚è‘å‚«‚¢"; + Text[ chinese_traditional ] = "¤j©ó"; + Text[ arabic ] = "ÃßÈÑ ãä"; + Text[ greek ] = "åßíáé ìåãáëýôåñï áðü"; + Text[ korean ] = "´ÙÀ½ÀÇ ÃÊ°úÀÓ"; + Text[ turkish ] = "Büyüktür"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XSIMEQY ; + HelpId = HID_SMA_XSIMEQY ; + /* ### ACHTUNG: Neuer Text in Resource? ist ähnlich oder gleich : ist ähnlich oder glech */ + Text = "ist ähnlich oder gleich" ; + Text [ ENGLISH ] = "is similar or equal" ; + Text [ english_us ] = "Is Similar or Equal" ; + Text [ portuguese_brazilian ] = "ist ähnlich oder glech" ; + Text [ swedish ] = "är liknande eller lika med" ; + Text [ danish ] = "tilnærmet eller lig med" ; + Text [ italian ] = "È simile o uguale" ; + Text [ spanish ] = "es parecido o igual" ; + Text [ french ] = "est similaire ou égal à" ; + Text [ dutch ] = "is ongeveer gelijk of gelijk aan" ; + Text [ portuguese ] = "é idêntico ou igual" ; + Text[ chinese_simplified ] = "ÏàËÆÓÚ»òµÈÓÚ"; + Text[ russian ] = "ïîäîáíî èëè ðàâíî"; + Text[ polish ] = "jest podobny lub równy"; + Text[ japanese ] = "‚Ù‚Ú“™‚µ‚¢¤‚ ‚é‚¢‚Í“™‚µ‚¢"; + Text[ chinese_traditional ] = "¬Û¦ü¤_©Îµ¥©ó"; + Text[ arabic ] = "ãÔÇÈå Ãæ ãÓÇæí"; + Text[ greek ] = "åßíáé üìïéï Þ ßóï ìå"; + Text[ korean ] = "À¯»çÇϰųª µ¿ÀÏÇÔ"; + Text[ turkish ] = "Benzer ya da eþittir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XPARALLELY ; + HelpId = HID_SMA_XPARALLELY ; + Text = "ist parallel zu" ; + Text [ ENGLISH ] = "is parallel to" ; + Text [ english_us ] = "Is Parallel To" ; + Text [ portuguese_brazilian ] = "ist parallel zu" ; + Text [ swedish ] = "är parallell med" ; + Text [ danish ] = "parallel med" ; + Text [ italian ] = "parallelo a" ; + Text [ spanish ] = "es paralelo a" ; + Text [ french ] = "est parallèle à" ; + Text [ dutch ] = "is parallel aan" ; + Text [ portuguese ] = "é paralelo a" ; + Text[ chinese_simplified ] = "ƽÐÐÓÚ"; + Text[ russian ] = "ïàðàëëåëüíî"; + Text[ polish ] = "jest równoleg³y do"; + Text[ japanese ] = "•½s‚·‚é‘ÎÛ"; + Text[ chinese_traditional ] = "¥­¦æ¤_"; + Text[ arabic ] = "ãÊæÇÒí ãÚ"; + Text[ greek ] = "åßíáé ðáñÜëëçëï ðñïò"; + Text[ korean ] = "¿¡ ÆòÇàÀ¸·Î"; + Text[ turkish ] = "Paraleldir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XORTHOY ; + HelpId = HID_SMA_XORTHOY ; + Text = "ist orthogonal zu" ; + Text [ ENGLISH ] = "is orthogonal to" ; + Text [ english_us ] = "Is Orthogonal to" ; + Text [ portuguese_brazilian ] = "ist orthogonal zu" ; + Text [ swedish ] = "är ortogonal med" ; + Text [ danish ] = "ortogonal på" ; + Text [ italian ] = "ortogonale a" ; + Text [ spanish ] = "es ortogonal a" ; + Text [ french ] = "est perpendiculaire à" ; + Text [ dutch ] = "is orthogonaal met" ; + Text [ portuguese ] = "é hortogonal a" ; + Text[ chinese_simplified ] = "Ö±½ÇÓÚ"; + Text[ russian ] = "îðòîãîíàëüíî"; + Text[ polish ] = "jest prostopad³y do"; + Text[ japanese ] = "’¼Œð‚·‚é‘ÎÛ"; + Text[ chinese_traditional ] = "ª½¨¤¤_"; + Text[ arabic ] = "ãÊÚÇãÏ Úáì"; + Text[ greek ] = "ó÷çìáôßæåé ïñèÞ ãùíßá íå"; + Text[ korean ] = "¿¡ Á÷°¢À¸·Î"; + Text[ turkish ] = "dikgen"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_XLESLANTY ; + HelpId = HID_SMA_XLESLANTY ; + /* ### ACHTUNG: Neuer Text in Resource? ist kleiner gleich (schräg) : ist keiner gleich */ + Text = "ist kleiner gleich (schräg)" ; + Text [ ENGLISH ] = "is less than" ; + Text [ english_us ] = "Is Less Than or Equal to" ; + Text [ portuguese_brazilian ] = "ist keiner gleich" ; + Text [ swedish ] = "är mindre än eller lika med (sned)" ; + Text [ danish ] = "mindre end eller lig med (skrå)" ; + Text [ italian ] = "Minore uguale (barra)" ; + Text [ spanish ] = "es menor que o igual a (oblicuo)" ; + Text [ french ] = "est inférieur ou égal à (trait oblique)" ; + Text [ dutch ] = "is kleiner dan of gelijk aan (schuin)" ; + Text [ portuguese ] = "é menor que ou igual a (oblíquo)" ; + Text[ chinese_simplified ] = "СÓÚ»òµÈÓÚ"; + Text[ russian ] = "ìåíüøå èëè ðàâíî (ïîä íàêëîíîì)"; + Text[ polish ] = "jest mniejszy lub równy (ukoœny)"; + Text[ japanese ] = "¬‚Ȃ貺°Ù"; + Text[ chinese_traditional ] = "¤p©ó©Îµ¥©ó"; + Text[ arabic ] = "ÃÕÛÑ ãä Ãæ íÓÇæí"; + Text[ greek ] = "åßíáé ìéêñüôåñï Þ ßóï ìå (ìå êëßóç)"; + Text[ korean ] = "ÀÌÇÏ"; + Text[ turkish ] = "Küçüktür ya da eþittir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XGESLANTY ; + HelpId = HID_SMA_XGESLANTY ; + Text = "ist größer gleich (schräg)" ; + Text [ ENGLISH ] = "is greater than" ; + Text [ english_us ] = "Is Greater Than or Equal to" ; + Text [ portuguese_brazilian ] = "ist größer gleich" ; + Text [ swedish ] = "är större än eller lika med (sned)" ; + Text [ danish ] = "større end eller lig med (skrå)" ; + Text [ italian ] = "Maggiore uguale (obliquo)" ; + Text [ spanish ] = "es mayor que o igual a (oblicuo)" ; + Text [ french ] = "est supérieur ou égal à (trait oblique)" ; + Text [ dutch ] = "is groter dan of gelijk aan (schuin)" ; + Text [ portuguese ] = "é maior que ou igual a (oblíquo)" ; + Text[ chinese_simplified ] = "´óÓÚ»ò´óÓÚ"; + Text[ russian ] = "áîëüøå èëè ðàâíî (ïîä íàêëîíîì)"; + Text[ polish ] = "jest wiêkszy lub równy (ukoœny)"; + Text[ japanese ] = "‘å‚Ȃ貺°Ù"; + Text[ chinese_traditional ] = "¤j©ó©Î¤j©ó"; + Text[ arabic ] = "ÃßÈÑ ãä Ãæ íÓÇæí (ãÇÆá)"; + Text[ greek ] = "åßíáé ìåãáëýôåñï Þ ßóï ìå (ðëÜãéá)"; + Text[ korean ] = "ÀÌ»ó"; + Text[ turkish ] = "Büyüktür ya da eþittir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XSIMY ; + HelpId = HID_SMA_XSIMY ; + Text = "ist ähnlich zu" ; + Text [ ENGLISH ] = "is similar to" ; + Text [ english_us ] = "Is Similar to" ; + Text [ portuguese_brazilian ] = "ist ähnlich zu" ; + Text [ swedish ] = "är liknade med" ; + Text [ danish ] = "ækvivalent med" ; + Text [ italian ] = "È simile a" ; + Text [ spanish ] = "es parecido a" ; + Text [ french ] = "est similaire à" ; + Text [ dutch ] = "is ongeveer gelijk met" ; + Text [ portuguese ] = "é idêntico a" ; + Text[ chinese_simplified ] = "ÏàËÆÓÚ"; + Text[ russian ] = "ïîäîáíî"; + Text[ polish ] = "jest podobny do"; + Text[ japanese ] = "‘ŠŽ—"; + Text[ chinese_traditional ] = "¬Û¦ü¤_"; + Text[ arabic ] = "ãÔÇÈå á"; + Text[ greek ] = "åßíáé üìïéï ìå"; + Text[ korean ] = "¿¡ À¯»ç"; + Text[ turkish ] = "Benzerdir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XEQUIVY ; + HelpId = HID_SMA_XEQUIVY ; + Text = "ist kongruent zu" ; + Text [ ENGLISH ] = "is congruent zu" ; + Text [ english_us ] = "Is congruent to" ; + Text [ portuguese_brazilian ] = "ist kongruent zu" ; + Text [ swedish ] = "är kongruent med" ; + Text [ danish ] = "identisk med" ; + Text [ italian ] = "Congruente a" ; + Text [ spanish ] = "es congruente con" ; + Text [ french ] = "est congru à" ; + Text [ dutch ] = "is congruent met" ; + Text [ portuguese ] = "congruente com" ; + Text[ chinese_simplified ] = "È«µÈÓÚ"; + Text[ russian ] = "êîíãðóýíòíî"; + Text[ polish ] = "jest równy to¿samoœciowo"; + Text[ japanese ] = "‡“¯"; + Text[ chinese_traditional ] = "¥þµ¥©ó"; + Text[ arabic ] = "ãÑÇÏÝ á"; + Text[ greek ] = "åßíáé éóïäýíáìï ìå"; + Text[ korean ] = "¿¡ µî°¡"; + Text[ turkish ] = "Örtüþür"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_XLEY ; + HelpId = HID_SMA_XLEY ; + Text = "ist kleiner gleich" ; + Text [ ENGLISH ] = "is less than" ; + Text [ english_us ] = "Is Less Than or Equal to" ; + Text [ portuguese_brazilian ] = "ist kleiner gleich" ; + Text [ swedish ] = "är mindre än eller lika med" ; + Text [ danish ] = "mindre end eller lig med" ; + Text [ italian ] = "Minore uguale" ; + Text [ spanish ] = "es menor que o igual a" ; + Text [ french ] = "est inférieur ou égal à" ; + Text [ dutch ] = "is kleiner dan of gelijk aan" ; + Text [ portuguese ] = "é menor que ou igual a" ; + Text[ chinese_simplified ] = "СÓÚ»òµÈÓÚ"; + Text[ russian ] = "ìåíüøå èëè ðàâíî"; + Text[ polish ] = "jest mniejszy lub równy"; + Text[ japanese ] = "¬‚Ȃ貺°Ù"; + Text[ chinese_traditional ] = "¤p©ó©Îµ¥©ó"; + Text[ arabic ] = "ÃÕÛÑ ãä Ãæ íÓÇæí"; + Text[ greek ] = "åßíáé ìéêñüôåñï Þ ßóï ìå"; + Text[ korean ] = "ÀÌÇÏ"; + Text[ turkish ] = "Küçüktür ya da eþittir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XGEY ; + HelpId = HID_SMA_XGEY ; + Text = "ist größer gleich" ; + Text [ ENGLISH ] = "is greater than" ; + Text [ english_us ] = "Is Greater Than or Equal to" ; + Text [ portuguese_brazilian ] = "ist größer gleich" ; + Text [ swedish ] = "är större än eller lika med" ; + Text [ danish ] = "større end eller lig med" ; + Text [ italian ] = "Maggiore uguale" ; + Text [ spanish ] = "es mayor que o igual a" ; + Text [ french ] = "est supérieur ou égal à" ; + Text [ dutch ] = "is groter dan of gelijk aan" ; + Text [ portuguese ] = "é maior que ou igual a" ; + Text[ chinese_simplified ] = "´óÓÚ»òµÈÓÚ"; + Text[ russian ] = "áîëüøå èëè ðàâíî"; + Text[ polish ] = "jest wiêkszy lub równy"; + Text[ japanese ] = "‘å‚Ȃ貺°Ù"; + Text[ chinese_traditional ] = "¤j©ó©Îµ¥©ó"; + Text[ arabic ] = "ÃßÈÑ ãä Ãæ íÓÇæí"; + Text[ greek ] = "åßíáé ìåãáëýôåñï Þ ßóï ìå"; + Text[ korean ] = "ÀÌ»ó"; + Text[ turkish ] = "Büyük ya da eþittir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XPROPY ; + HelpId = HID_SMA_XPROPY ; + Text = "ist proportional zu" ; + Text [ ENGLISH ] = "is proportional to" ; + Text [ english_us ] = "Is Proportional To" ; + Text [ portuguese_brazilian ] = "ist proportional zu" ; + Text [ swedish ] = "är propotionell med" ; + Text [ danish ] = "proportional med" ; + Text [ italian ] = "Proporzionale a" ; + Text [ spanish ] = "es proporcional a" ; + Text [ french ] = "est proportionnel à" ; + Text [ dutch ] = "is proportioneel met" ; + Text [ portuguese ] = "é proporcional a" ; + Text[ chinese_simplified ] = "³É±ÈÀýÓÚ"; + Text[ russian ] = "ïðîïîðöèîíàëüíî"; + Text[ polish ] = "jest proporcjonalny do"; + Text[ japanese ] = "”ä—á"; + Text[ chinese_traditional ] = "¦¨¤ñ¨Ò¤_"; + Text[ arabic ] = "ãÊäÇÓÈ ãÚ"; + Text[ greek ] = "åßíáé áíÜëïãï ðñïò"; + Text[ korean ] = "¿¡ ºñ·Ê"; + Text[ turkish ] = "Orantýlýdýr"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XTOWARDY ; + HelpId = HID_SMA_XTOWARDY ; + Text = "strebt gegen" ; + Text [ ENGLISH ] = "towards" ; + Text [ english_us ] = "Toward" ; + Text [ portuguese_brazilian ] = "strebt gegen" ; + Text [ swedish ] = "strävar mot" ; + Text [ danish ] = "går mod" ; + Text [ italian ] = "Tendente a" ; + Text [ spanish ] = "tiende a" ; + Text [ french ] = "tend vers" ; + Text [ dutch ] = "streeft naar" ; + Text [ portuguese ] = "tende a" ; + Text[ chinese_simplified ] = "½Ó½ü"; + Text[ russian ] = "ñòðåìèòñÿ ê"; + Text[ polish ] = "d¹¿y przeciw"; + Text[ japanese ] = "ŒX‚­"; + Text[ chinese_traditional ] = "±µªñ"; + Text[ arabic ] = "ÈÇÊÌÇå"; + Text[ greek ] = "ôåßíåé ðñïò"; + Text[ korean ] = "ÁøÇà ¹æÇâ"; + Text[ turkish ] = "Yönü"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_DLARROW ; + HelpId = HID_SMA_DLARROW ; + Text = "doppelter Pfeil nach links" ; + Text [ ENGLISH ] = "Double left arrow" ; + TEXT[ italian ] = "Freccia doppia a sinistra"; + TEXT[ portuguese_brazilian ] = "doppelter Pfeil nach links"; + TEXT[ portuguese ] = "Seta dupla para a esquerda"; + TEXT[ danish ] = "implikation mod venstre"; + TEXT[ french ] = "double flèche vers la gauche"; + TEXT[ swedish ] = "dubbelpil till vänster"; + TEXT[ dutch ] = "dubbele pijl naar links"; + TEXT[ spanish ] = "Flecha doble hacia la izquierda"; + TEXT[ english_us ] = "Double Arrow Left"; + TEXT[ chinese_simplified ] = "×óÏòË«¼ýÍ·"; + TEXT[ russian ] = "Äâîéíàÿ ñòðåëêà âëåâî"; + TEXT[ polish ] = "podwójna strza³ka w lewo"; + TEXT[ japanese ] = "¶Œü‚«“ñd–îˆó"; + TEXT[ chinese_traditional ] = "¥ª¦VÂù½bÀY"; + TEXT[ arabic ] = "Óåã ãÒÏæÌ Åáì ÇáíÓÇÑ"; + TEXT[ greek ] = "Äéðëü âÝëïò ðñïò ôá áñéóôåñÜ"; + TEXT[ korean ] = "2Áß È­»ìÇ¥ ¿ÞÂÊ"; + TEXT[ turkish ] = "Sola çift ok"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_DLRARROW ; + HelpId = HID_SMA_DLRARROW ; + Text = "doppelter Pfeil nach links und rechts" ; + Text [ ENGLISH ] = "Double left-right arrow" ; + TEXT[ italian ] = "Freccia doppia verso sinistra e destra"; + TEXT[ portuguese_brazilian ] = "doppelter Pfeil nach links und rechts"; + TEXT[ portuguese ] = "Seta dupla para a esquerda e direita"; + TEXT[ danish ] = "biimplikation"; + TEXT[ french ] = "doubles flèches vers la gauche et la droite"; + TEXT[ swedish ] = "dubbelpil till vänster och till höger"; + TEXT[ dutch ] = "dubbele pijl naar links en rechts"; + TEXT[ spanish ] = "Flecha doble hacia izquierda y derecha"; + TEXT[ english_us ] = "Double Arrow Left and Right"; + TEXT[ chinese_simplified ] = "×óÓÒÏòË«¼ýÍ·"; + TEXT[ russian ] = "Äâîéíàÿ ñòðåëêà âëåâî è âïðàâî"; + TEXT[ polish ] = "podwójna strza³ka w lewo i w prawo"; + TEXT[ japanese ] = "¶‰EŒü‚«‚Ì“ñd–îˆó"; + TEXT[ chinese_traditional ] = "¥ª¥k¦VÂù½bÀY"; + TEXT[ arabic ] = "Óåã ãÒÏæÌ Åáì ÇáíÓÇÑ æÇáíãíä"; + TEXT[ greek ] = "Äéðëü âÝëïò ðñïò ôá áñéóôåñÜ êáé äåîéÜ"; + TEXT[ korean ] = "2Áß È­»ìÇ¥ ¿ÞÂÊ°ú ¿À¸¥ÂÊ"; + TEXT[ turkish ] = "Sola ve saða çift ok"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_DRARROW ; + HelpId = HID_SMA_DRARROW ; + Text = "doppelter Pfeil nach rechts" ; + Text [ ENGLISH ] = "Double right arrow" ; + TEXT[ italian ] = "Freccia doppia verso destra"; + TEXT[ portuguese_brazilian ] = "doppelter Pfeil nach rechts"; + TEXT[ portuguese ] = "seta dupla para a direita"; + TEXT[ danish ] = "implikation mod højre"; + TEXT[ french ] = "double flèche vers la droite"; + TEXT[ swedish ] = "dubbelpil till höger"; + TEXT[ dutch ] = "dubbele pijl naar rechts"; + TEXT[ spanish ] = "Flecha doble hacia la derecha"; + TEXT[ english_us ] = "Double Arrow Right"; + TEXT[ chinese_simplified ] = "ÓÒÏòË«¼ýÍ·"; + TEXT[ russian ] = "Äâîéíàÿ ñòðåëêà âïðàâî"; + TEXT[ polish ] = "podwójna strza³ka w prawo"; + TEXT[ japanese ] = "‰EŒü‚«“ñd–îˆó"; + TEXT[ chinese_traditional ] = "¥k¦VÂù½bÀY"; + TEXT[ arabic ] = "Óåã ãÒÏæÌ Åáì Çáíãíä"; + TEXT[ greek ] = "Äéðëü âÝëïò ðñïò ôá äåîéÜ"; + TEXT[ korean ] = "2Áß È­»ìÇ¥ ¿À¸¥ÂÊ"; + TEXT[ turkish ] = "Saða çift ok"; + TEXT[ language_user1 ] = " "; + }; + }; + }; + ToolBox 3 + { + // set operations + HelpId = HID_SMA_SETOPERATIONS_TBX ; + Pos = MAP_APPFONT ( 0 , 41 ) ; + Size = MAP_APPFONT ( 65 , 95 ) ; + SVLook = TRUE ; + Hide = TRUE ; + LineCount = 5 ; + ItemImageList = ImageList + { + ImageBitmap = Bitmap + { + FILE = "oper.bmp" ; + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + RID_XINY ; + RID_XNOTINY ; + RID_XOWNSY ; + RID_XINTERSECTIONY ; + RID_XUNIONY ; + RID_XSETMINUSY ; + RID_XSLASHY ; + RID_XSUBSETY ; + RID_XSUBSETEQY ; + RID_XSUPSETY ; + RID_XSUPSETEQY ; + RID_XNSUBSETY ; + RID_XNSUBSETEQY ; + RID_XNSUPSETY ; + RID_XNSUPSETEQY ; + RID_EMPTYSET ; + RID_ALEPH ; + RID_SETN ; + RID_SETZ ; + RID_SETQ ; + RID_SETR ; + RID_SETC ; + }; + IdCount = + { + 22 ; + }; + }; + ItemList = + { + ToolBoxItem + { + Identifier = RID_XINY ; + HelpId = HID_SMA_XINY ; + Text = "ist enthalten in" ; + Text [ ENGLISH ] = "is in" ; + Text [ english_us ] = "Is In" ; + Text [ portuguese_brazilian ] = "ist enthalten in" ; + Text [ swedish ] = "finns i" ; + Text [ danish ] = "tilhører" ; + Text [ italian ] = "Incluso in" ; + Text [ spanish ] = "está en" ; + Text [ french ] = "est inclus dans" ; + Text [ dutch ] = "is in" ; + Text [ portuguese ] = "contido em" ; + Text[ chinese_simplified ] = "°üº¬ÔÚ"; + Text[ russian ] = "ñîäåðæèòñÿ â"; + Text[ polish ] = "nale¿y do"; + Text[ japanese ] = "ŠÜ‚Þ"; + Text[ chinese_traditional ] = "¥]§t¦b"; + Text[ arabic ] = "ãæÌæÏ Ýí"; + Text[ greek ] = "ðåñéëáìâÜíåôáé óôï"; + Text[ korean ] = "´ÙÀ½¿¡ Æ÷ÇԵǾî ÀÖÀ½"; + Text[ turkish ] = "Ýçerir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XNOTINY ; + HelpId = HID_SMA_XNOTINY ; + Text = "ist nicht enthalten in" ; + Text [ ENGLISH ] = "is not in" ; + Text [ english_us ] = "Is Not In" ; + Text [ portuguese_brazilian ] = "ist nicht enthalten in" ; + Text [ swedish ] = "finns ej i" ; + Text [ danish ] = "tihører ikke" ; + Text [ italian ] = "Non compreso in" ; + Text [ spanish ] = "no contenido en" ; + Text [ french ] = "n'est pas inclus dans" ; + Text [ dutch ] = "is niet in" ; + Text [ portuguese ] = "não contido em" ; + Text[ chinese_simplified ] = "²»°üº¬ÔÚ"; + Text[ russian ] = "íå ñîäåðæèòñÿ â"; + Text[ polish ] = "nie jest zawarty w"; + Text[ japanese ] = "ŠÜ‚Ü‚È‚¢"; + Text[ chinese_traditional ] = "¤£¥]§t¦b"; + Text[ arabic ] = "ÛíÑ ãæÌæÏ Ýí"; + Text[ greek ] = "äåí óõìðåñéëáìâÜíåôáé óôï"; + Text[ korean ] = "Æ÷ÇԵǾî ÀÖÁö ¾ÊÀ½"; + Text[ turkish ] = "Elemandýr"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XOWNSY ; + HelpId = HID_SMA_XOWNSY ; + Text = "enthält" ; + Text [ ENGLISH ] = "owns" ; + Text [ english_us ] = "Owns" ; + Text [ portuguese_brazilian ] = "enthält" ; + Text [ swedish ] = "innehåller" ; + Text [ danish ] = "indeholder" ; + Text [ italian ] = "Contiene" ; + Text [ spanish ] = "contiene" ; + Text [ french ] = "contient" ; + Text [ dutch ] = "bevat" ; + Text [ portuguese ] = "contém" ; + Text[ chinese_simplified ] = "º¬ÓÐ"; + Text[ russian ] = "ñîäåðæèò"; + Text[ polish ] = "zawiera"; + Text[ japanese ] = "ŠÜ‚Þ"; + Text[ chinese_traditional ] = "§t¦³"; + Text[ arabic ] = "íÍÊæí Úáì"; + Text[ greek ] = "ðåñéëáìâÜíåé"; + Text[ korean ] = "¼ÒÀ¯"; + Text[ turkish ] = "Ýçerir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Identifier = RID_EMPTYSET ; + HelpId = HID_SMA_EMPTYSET ; + Text = "leere Menge" ; + Text [ ENGLISH ] = "empty set" ; + TEXT[ italian ] = "Insieme vuoto"; + TEXT[ portuguese_brazilian ] = "leere Menge"; + TEXT[ portuguese ] = "conjunto vazio"; + TEXT[ danish ] = "tom mængde"; + TEXT[ french ] = "Ensemble vide"; + TEXT[ swedish ] = "tom mängd"; + TEXT[ dutch ] = "lege set"; + TEXT[ spanish ] = "Conjunto vacío"; + TEXT[ english_us ] = "Empty Set"; + TEXT[ chinese_simplified ] = "¿Õ¼¯"; + TEXT[ russian ] = "ïóñòîå ìíîæåñòâî"; + TEXT[ polish ] = "Zbiór pusty"; + TEXT[ japanese ] = "‹óW‡"; + TEXT[ language_user1 ] = " "; + TEXT[ chinese_traditional ] = "ªÅ¶°"; + TEXT[ arabic ] = "ãÌãæÚÉ ÝÇÑÛÉ"; + TEXT[ greek ] = "êåíü óýíïëï"; + TEXT[ korean ] = "°ø¹é ¼¼Æ®"; + TEXT[ turkish ] = "Boþ küme"; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_XINTERSECTIONY ; + HelpId = HID_SMA_XINTERSECTIONY ; + Text = "Durchschnitt" ; + Text [ ENGLISH ] = "intersection" ; + Text [ english_us ] = "intersection" ; + Text [ portuguese_brazilian ] = "Durchschnitt" ; + Text [ swedish ] = "Genomsnitt" ; + Text [ danish ] = "fællesmængde" ; + Text [ italian ] = "Intersezione" ; + Text [ spanish ] = "Promedio" ; + Text [ french ] = "Moyenne" ; + Text [ dutch ] = "Gemiddelde" ; + Text [ portuguese ] = "Média" ; + Text[ chinese_simplified ] = "ƽ¾ùÖµ"; + Text[ russian ] = "Ïåðåñå÷åíèå ìíîæåñòâ"; + Text[ polish ] = "Iloczyn zbiorów"; + Text[ japanese ] = "‹¤’Ê•”•ª"; + Text[ chinese_traditional ] = "¥­§¡­È"; + Text[ arabic ] = "ÇáÊÞÇØÚ"; + Text[ greek ] = "ÌÝóïò üñïò"; + Text[ korean ] = "±³Â÷Á¡"; + Text[ turkish ] = "Kesiþme"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XUNIONY ; + HelpId = HID_SMA_XUNIONY ; + Text = "Vereinigung" ; + Text [ ENGLISH ] = "union" ; + Text [ english_us ] = "Union" ; + Text [ portuguese_brazilian ] = "Vereinigung" ; + Text [ swedish ] = "union" ; + Text [ danish ] = "foreningsmængde" ; + Text [ italian ] = "Unione" ; + Text [ spanish ] = "Unión" ; + Text [ french ] = "Union" ; + Text [ dutch ] = "Vereniging" ; + Text [ portuguese ] = "União" ; + Text[ chinese_simplified ] = "²¢¼¯"; + Text[ russian ] = "Ñóììà ìíîæåñòâ"; + Text[ polish ] = "Suma zbiorów"; + Text[ japanese ] = "˜aW‡"; + Text[ chinese_traditional ] = "¨Ö¶°"; + Text[ arabic ] = "ÊæÍíÏ"; + Text[ greek ] = "¸íùóç"; + Text[ korean ] = "ÇÕÁýÇÕ"; + Text[ turkish ] = "Birleþme"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XSETMINUSY ; + HelpId = HID_SMA_XSETMINUSY ; + Text = "Differenz" ; + Text [ ENGLISH ] = "difference" ; + Text [ english_us ] = "Difference" ; + Text [ portuguese_brazilian ] = "Differenz" ; + Text [ swedish ] = "Differens" ; + Text [ danish ] = "differensmængde" ; + Text [ italian ] = "Differenza" ; + Text [ spanish ] = "Diferencia" ; + Text [ french ] = "Différence" ; + Text [ dutch ] = "verschil" ; + Text [ portuguese ] = "Diferença" ; + Text[ chinese_simplified ] = "²îÒìÖµ"; + Text[ russian ] = "Ðàçíîñòü"; + Text[ polish ] = "Ró¿nica"; + Text[ japanese ] = "·"; + Text[ chinese_traditional ] = "®t²§­È"; + Text[ arabic ] = "ÇÎÊáÇÝ"; + Text[ greek ] = "ÄéáöïñÜ"; + Text[ korean ] = "Â÷ÀÌ"; + Text[ turkish ] = "Fark"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XSLASHY ; + HelpId = HID_SMA_XSLASHY ; + Text = "Quotientenmenge " ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Quotient Set " ; + Text [ portuguese_brazilian ] = "Quotientenmenge " ; + Text [ swedish ] = "Kvotmängd " ; + Text [ danish ] = "kvotientmængde " ; + Text [ italian ] = "Insieme quoziente " ; + Text [ spanish ] = "Conjunto cociente " ; + Text [ french ] = "Ensemble quotient de " ; + Text [ dutch ] = "Quotiëntenverzameling " ; + Text [ portuguese ] = "Conjunto de quociente " ; + Text[ chinese_simplified ] = "ÉÌÊý¼¯ "; + Text[ russian ] = "Ìíîæåñòâî ÷àñòíûõ "; + Text[ polish ] = "Zbiór ilorazów "; + Text[ japanese ] = "Žw”‚ÌW‡ "; + Text[ chinese_traditional ] = "°Ó¼Æ¶° "; + Text[ arabic ] = "ãÌãæÚÉ ÎÇÑÌ ÇáÞÓãÉ "; + Text[ greek ] = "Óýíïëï ðçëßêïõ "; + Text[ korean ] = "¸ò ¼³Á¤ "; + Text[ turkish ] = "Bölüm kümesi "; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_ALEPH ; + HelpId = HID_SMA_ALEPH ; + Text = "aleph " ; + Text [ ENGLISH ] = "aleph" ; + TEXT[ italian ] = "Aleph "; + TEXT[ portuguese_brazilian ] = "aleph "; + TEXT[ portuguese ] = "aleph "; + TEXT[ danish ] = "aleph "; + TEXT[ french ] = "aleph."; + TEXT[ swedish ] = "alef "; + TEXT[ dutch ] = "aleph "; + TEXT[ spanish ] = "aleph "; + TEXT[ english_us ] = "aleph "; + TEXT[ chinese_simplified ] = "°¢¶û·¨ "; + TEXT[ russian ] = "Àëåô "; + TEXT[ polish ] = "Alef "; + TEXT[ japanese ] = "±ÚÌ "; + TEXT[ chinese_traditional ] = "ªüº¸ªk "; + TEXT[ arabic ] = "aleph "; + TEXT[ greek ] = "aleph "; + TEXT[ korean ] = "¾Ë·¹ÇÁ "; + TEXT[ turkish ] = "aleph "; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_XSUBSETY ; + HelpId = HID_SMA_XSUBSETY ; + Text = "Teilmenge" ; + Text [ ENGLISH ] = "subset" ; + Text [ english_us ] = "Subset" ; + Text [ portuguese_brazilian ] = "Teilmenge" ; + Text [ swedish ] = "delmängd" ; + Text [ danish ] = "ægte delmængde" ; + Text [ italian ] = "Insieme parziale" ; + Text [ spanish ] = "Conjunto parcial" ; + Text [ french ] = "Sous-ensemble" ; + Text [ dutch ] = "Deelverzameling" ; + Text [ portuguese ] = "Subconjunto" ; + Text[ chinese_simplified ] = "×Ó¼¯"; + Text[ russian ] = "Ïîäìíîæåñòâî"; + Text[ polish ] = "Podzbiór"; + Text[ japanese ] = "•”•ªW‡"; + Text[ chinese_traditional ] = "¤l¶°"; + Text[ arabic ] = "ãÌãæÚÉ ÌÒÆíÉ"; + Text[ greek ] = "Õðïóýíïëï"; + Text[ korean ] = "ºÎºÐÁýÇÕ"; + Text[ turkish ] = "Alt küme"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XSUBSETEQY ; + HelpId = HID_SMA_XSUBSETEQY ; + Text = "Teilmenge oder gleich" ; + Text [ ENGLISH ] = "subset or equal" ; + Text [ english_us ] = "Subset or Equal to" ; + Text [ portuguese_brazilian ] = "Teilmenge oder gleich" ; + Text [ swedish ] = "delmängd eller lika" ; + Text [ danish ] = "delmængde" ; + Text [ italian ] = "Insieme parziale o uguale" ; + Text [ spanish ] = "Conjunto parcial o igual" ; + Text [ french ] = "est sous-ensemble de ou égal à" ; + Text [ dutch ] = "Subset of gelijk aan" ; + Text [ portuguese ] = "Parcial ou igual" ; + Text[ chinese_simplified ] = "×Ó¼¯»òµÈ¼¯"; + Text[ russian ] = "Ïîäìíîæåñòâî èëè ðàâíî"; + Text[ polish ] = "Podzbiór lub równy"; + Text[ japanese ] = "•”•ªW‡¤‚ ‚é‚¢‚Í“™‚µ‚¢"; + Text[ chinese_traditional ] = "¤l¶°©Îµ¥¶°"; + Text[ arabic ] = "ãÌãæÚÉ ÌÒÆíÉ Ãæ íÓÇæí"; + Text[ greek ] = "Õðïóýíïëï Þ ßóï"; + Text[ korean ] = "¿¡ ºÎºÐÁýÇÕ ¶Ç´Â µ¿ÀÏ"; + Text[ turkish ] = "Alt kümesi ya da eþittir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XSUPSETY ; + HelpId = HID_SMA_XSUPSETY ; + Text = "Obermenge" ; + Text [ ENGLISH ] = "superset" ; + Text [ english_us ] = "Superset" ; + Text [ portuguese_brazilian ] = "Obermenge" ; + Text [ swedish ] = "grundmängd" ; + Text [ danish ] = "indeholder som ægte delmængde" ; + Text [ italian ] = "Insieme superiore" ; + Text [ spanish ] = "Conjunto superior" ; + Text [ french ] = "Sur-ensemble" ; + Text [ dutch ] = "Superset" ; + Text [ portuguese ] = "Conjunto superior" ; + Text[ chinese_simplified ] = "È«¼¯"; + Text[ russian ] = "Íàäìíîæåñòâî"; + Text[ polish ] = "Nadzbiór"; + Text[ japanese ] = "W‡"; + Text[ chinese_traditional ] = "¥þ¶°"; + Text[ arabic ] = "ãÌãæÚÉ ÚÇáíÉ"; + Text[ greek ] = "Õðåñóýíïëï"; + Text[ korean ] = "À­Ã·ÀÚ"; + Text[ turkish ] = "Üst küme"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XSUPSETEQY ; + HelpId = HID_SMA_XSUPSETEQY ; + Text = "Obermenge oder gleich" ; + Text [ ENGLISH ] = "superset or equal" ; + Text [ english_us ] = "Superset or Equal to" ; + Text [ portuguese_brazilian ] = "Obermenge oder gleich" ; + Text [ swedish ] = "grundmängd eller lika" ; + Text [ danish ] = "indeholder som delmængde" ; + Text [ italian ] = "Insieme superiore o uguale" ; + Text [ spanish ] = "Conjunto superior o igual" ; + Text [ french ] = "est sur-ensemble de ou égal à" ; + Text [ dutch ] = "Superset of gelijk aan" ; + Text [ portuguese ] = "Conjunto superior ou igual" ; + Text[ chinese_simplified ] = "È«¼¯»òµÈ¼¯"; + Text[ russian ] = "Íàäìíîæåñòâî èëè ðàâíî"; + Text[ polish ] = "Nadzbiór lub równy"; + Text[ japanese ] = "W‡¤‚ ‚é‚¢‚Í“™‚µ‚¢"; + Text[ chinese_traditional ] = "¥þ¶°©Îµ¥¶°"; + Text[ arabic ] = "ãÌãæÚÉ ÚÇáíÉ Ãæ íÓÇæí"; + Text[ greek ] = "Õðåñóýíïëï Þ ßóï"; + Text[ korean ] = "À­Ã·ÀÚ ¶Ç´Â µ¿ÀÏ"; + Text[ turkish ] = "Üst kümesi ya da eþittir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_XNSUBSETY ; + HelpId = HID_SMA_XNSUBSETY ; + Text = "nicht Teilmenge" ; + Text [ ENGLISH ] = "not subset" ; + Text [ english_us ] = "Not Subset" ; + Text [ portuguese_brazilian ] = "nicht Teilmenge" ; + Text [ swedish ] = "ej delmängd" ; + Text [ danish ] = "ikke ægte delmængde" ; + Text [ italian ] = "Insieme non parziale" ; + Text [ spanish ] = "Conjunto no parcial" ; + Text [ french ] = "n'est pas sous-ensemble de" ; + Text [ dutch ] = "niet subset" ; + Text [ portuguese ] = "não é subconjunto" ; + Text[ chinese_simplified ] = "·Ç×Ó¼¯"; + Text[ russian ] = "íå ïîäìíîæåñòâî"; + Text[ polish ] = "nie podzbiór"; + Text[ japanese ] = "•”•ªW‡‚Å‚È‚¢"; + Text[ chinese_traditional ] = "«D¤l¶°"; + Text[ arabic ] = "áíÓ ãÌãæÚÉ ÌÒÆíÉ"; + Text[ greek ] = "ü÷é õðïóýíïëï"; + Text[ korean ] = "¾Æ·¡Ã·ÀÚ°¡ ¾Æ´Õ´Ï´Ù."; + Text[ turkish ] = "Alt kümesi deðil"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XNSUBSETEQY ; + HelpId = HID_SMA_XNSUBSETEQY ; + Text = "nicht Teilmenge oder gleich" ; + Text [ ENGLISH ] = "not subset or equal" ; + Text [ english_us ] = "Not Subset or Equal" ; + Text [ portuguese_brazilian ] = "nicht Teilmenge oder gleich" ; + Text [ swedish ] = "ej delmängd eller lika" ; + Text [ danish ] = "ikke delmængde" ; + Text [ italian ] = "Insieme non parziale o uguale" ; + Text [ spanish ] = "Conjunto no parcial o igual" ; + Text [ french ] = "n'est pas sous-ensemble de ni égal à" ; + Text [ dutch ] = "niet subset of gelijk aan" ; + Text [ portuguese ] = "não é subconjunto nem igual" ; + Text[ chinese_simplified ] = "·Ç×Ó¼¯»òµÈ¼¯"; + Text[ russian ] = "íå ïîäìíîæåñòâî èëè ðàâíî"; + Text[ polish ] = "nie podzbiór lub równy"; + Text[ japanese ] = "•”•ªW‡‚Å‚È‚¢¤‚ ‚é‚¢‚Í“™‚µ‚¢"; + Text[ chinese_traditional ] = "«D¤l¶°©Îµ¥¶°"; + Text[ arabic ] = "áíÓÊ ãÌãæÚÉ ÌÒÆíÉ Ãæ íÓÇæí"; + Text[ greek ] = "ü÷é õðïóýíïëï Þ ßóï"; + Text[ korean ] = "ºÎºÐÁýÇÕÀ̳ª µîÁýÇÕÀÌ ¾Æ´Ô"; + Text[ turkish ] = "Alt kümesi ya da eþit deðil"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XNSUPSETY ; + HelpId = HID_SMA_XNSUPSETY ; + Text = "nicht Obermenge" ; + Text [ ENGLISH ] = "not superset" ; + Text [ english_us ] = "Not Superset" ; + Text [ portuguese_brazilian ] = "nicht Obermenge" ; + Text [ swedish ] = "ej grundmängd" ; + Text [ danish ] = "indeholder ikke som ægte delmængde" ; + Text [ italian ] = "Insieme non superiore" ; + Text [ spanish ] = "Conjunto no superior" ; + Text [ french ] = "n'est pas sur-ensemble de" ; + Text [ dutch ] = "niet superset" ; + Text [ portuguese ] = "Conjunto não superior" ; + Text[ chinese_simplified ] = "²»ÊÇÈ«¼¯"; + Text[ russian ] = "íå íàäìíîæåñòâî"; + Text[ polish ] = "nie nadzbiór"; + Text[ japanese ] = "W‡‚Å‚È‚¢"; + Text[ chinese_traditional ] = "¤£¬O¥þ¶°"; + Text[ arabic ] = "áíÓÊ ãÌãæÚÉ ÚÇáíÉ"; + Text[ greek ] = "¼÷é õðåñóýíïëï"; + Text[ korean ] = "À­ ÷ÀÚ°¡ ¾Æ´Õ´Ï´Ù."; + Text[ turkish ] = "Üst kümesi deðil"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XNSUPSETEQY ; + HelpId = HID_SMA_XNSUPSETEQY ; + Text = "nicht Obermenge oder gleich" ; + Text [ ENGLISH ] = "not superset or equal" ; + Text [ english_us ] = "Not Superset or Equal" ; + Text [ portuguese_brazilian ] = "nicht Obermenge oder gleich" ; + Text [ swedish ] = "ej grundmängd eller lika" ; + Text [ danish ] = "indeholder ikke som delmængde" ; + Text [ italian ] = "Insieme non superiore o uguale" ; + Text [ spanish ] = "Conjunto no superior o igual" ; + Text [ french ] = "n'est pas sur-ensemble de ni égal à" ; + Text [ dutch ] = "niet superset of gelijk aan" ; + Text [ portuguese ] = "Conjunto não superior ou igual" ; + Text[ chinese_simplified ] = "²»ÊÇÈ«¼¯»òµÈ¼¯"; + Text[ russian ] = "íå íàäìíîæåñòâî èëè ðàâíî"; + Text[ polish ] = "nie nadzbiór lub równy"; + Text[ japanese ] = "W‡‚Å‚È‚¢¤‚ ‚é‚¢‚Í“™‚µ‚¢"; + Text[ chinese_traditional ] = "¤£¬O¥þ¶°©Îµ¥¶°"; + Text[ arabic ] = "áíÓÊ ãÌãæÚÉ ÚÇáíÉ Ãæ íÓÇæí"; + Text[ greek ] = "¼÷é õðåñóýíïëï Þ ßóï"; + Text[ korean ] = "»óÀ§ÁýÇÕ ¶Ç´Â µîÁýÇÕÀÌ ¾Æ´Ô"; + Text[ turkish ] = "Üst kümesi ya da eþit deðil"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_SETN ; + HelpId = HID_SMA_SETN ; + Text = "Menge der natürlichen Zahlen" ; + Text [ ENGLISH ] = "set of natural numbers" ; + TEXT[ italian ] = "Insieme dei numeri naturali"; + TEXT[ portuguese_brazilian ] = "Menge der natürlichen Zahlen"; + TEXT[ portuguese ] = "Conjunto de números naturais"; + TEXT[ danish ] = "mængden af naturlige tal"; + TEXT[ french ] = "Ensemble des nombres naturels"; + TEXT[ swedish ] = "Mängd naturliga tal"; + TEXT[ dutch ] = "Hoeveelheid natuurlijke getallen"; + TEXT[ spanish ] = "Conjunto de números naturales"; + TEXT[ english_us ] = "Natural Numbers Set"; + TEXT[ chinese_simplified ] = "×ÔÈ»Êý¼¯"; + TEXT[ russian ] = "Ìíîæåñòâî íàòóðàëüíûõ ÷èñåë"; + TEXT[ polish ] = "Zbiór liczb naturalnych"; + TEXT[ japanese ] = "Ž©‘R”‚ÌW‡"; + TEXT[ chinese_traditional ] = "¦ÛµM¼Æ¶°"; + TEXT[ arabic ] = "ãÌãæÚÉ ÃÑÞÇã ØÈíÚíÉ"; + TEXT[ greek ] = "Óýíïëï öõóéêþí áñéèìþí"; + TEXT[ korean ] = "ÀÏ¹Ý ¼ýÀÚ ¼³Á¤"; + TEXT[ turkish ] = "Doðal sayýlar kümesi"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SETZ ; + HelpId = HID_SMA_SETZ ; + Text = "Menge der ganzen Zahlen" ; + Text [ ENGLISH ] = "set of integer numbers" ; + TEXT[ italian ] = "Insieme dei numeri interi"; + TEXT[ portuguese_brazilian ] = "Menge der ganzen Zahlen"; + TEXT[ portuguese ] = "Conjunto de números inteiros"; + TEXT[ danish ] = "mængden af hele tal"; + TEXT[ french ] = "Ensemble des nombres entiers"; + TEXT[ swedish ] = "Heltalsmängd"; + TEXT[ dutch ] = "Hoeveelheid hele getallen"; + TEXT[ spanish ] = "Conjunto de números enteros"; + TEXT[ english_us ] = "Integers Set"; + TEXT[ chinese_simplified ] = "ÕûÊý¼¯ºÏ"; + TEXT[ russian ] = "Ìíîæåñòâî öåëûõ ÷èñåë"; + TEXT[ polish ] = "Zbiór liczb ca³kowitych"; + TEXT[ japanese ] = "®”‚ÌW‡"; + TEXT[ chinese_traditional ] = "¾ã¼Æ¶°¦X"; + TEXT[ arabic ] = "ãÌãæÚÉ ÇáÃÚÏÇÏ ÇáÕÍíÍÉ"; + TEXT[ greek ] = "Óýíïëï áêÝñáéùí áñéèìþí"; + TEXT[ korean ] = "Integer ¼³Á¤"; + TEXT[ turkish ] = "Tamsayýlar kümesi"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SETQ ; + HelpId = HID_SMA_SETQ ; + Text = "Menge der rationalen Zahlen" ; + Text [ ENGLISH ] = "set of rational numbers" ; + TEXT[ italian ] = "Insieme dei numeri razionali"; + TEXT[ portuguese_brazilian ] = "Menge der rationalen Zahlen"; + TEXT[ portuguese ] = "Conjunto de números racionais"; + TEXT[ danish ] = "mængden af rationale tal"; + TEXT[ french ] = "Ensemble des nombres rationnels"; + TEXT[ swedish ] = "Mängd rationella tal"; + TEXT[ dutch ] = "Hoeveelheid rationele getallen"; + TEXT[ spanish ] = "Conjunto de números racionales"; + TEXT[ english_us ] = "Relational Numbers Set"; + TEXT[ chinese_simplified ] = "ÓÐÀíÊý¼¯"; + TEXT[ russian ] = "Ìíîæåñòâî îòíîñèòåëüíûõ ÷èñåë"; + TEXT[ polish ] = "Zbiór liczb wymiernych"; + TEXT[ japanese ] = "—L—”‚ÌW‡"; + TEXT[ chinese_traditional ] = "¦³²z¼Æ¶°"; + TEXT[ arabic ] = "ãÌãæÚÉ ÇáÃÚÏÇÏ ÇáãõäúØóÞñÉ"; + TEXT[ greek ] = "Óýíïëï ñçôþí áñéèìþí"; + TEXT[ korean ] = "Áö¿ª ¼ýÀÚ ¼³Á¤"; + TEXT[ turkish ] = "Rasyonel sayýlar kümesi"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SETR ; + HelpId = HID_SMA_SETR ; + Text = "Menge der reellen Zahlen" ; + Text [ ENGLISH ] = "set of real numbers" ; + TEXT[ italian ] = "Insieme dei numeri reali"; + TEXT[ portuguese_brazilian ] = "Menge der reellen Zahlen"; + TEXT[ portuguese ] = "Conjunto de números reais"; + TEXT[ danish ] = "mængden af reelle tal"; + TEXT[ french ] = "Ensemble des nombres réels"; + TEXT[ swedish ] = "Mängd reella tal"; + TEXT[ dutch ] = "Hoeveelheid reële getallen"; + TEXT[ spanish ] = "Conjunto de números reales"; + TEXT[ english_us ] = "Real Numbers Set"; + TEXT[ chinese_simplified ] = "ʵÊý¼¯"; + TEXT[ russian ] = "Ìíîæåñòâî äåéñòâèòåëüíûõ ÷èñåë"; + TEXT[ polish ] = "Zbiór liczb rzeczywistych"; + TEXT[ japanese ] = "ŽÀ”‚ÌW‡"; + TEXT[ chinese_traditional ] = "¹ê¼Æ¶°"; + TEXT[ arabic ] = "ãÌãæÚÉ ÇáÃÚÏÇÏ ÇáÍÞíÞíÉ"; + TEXT[ greek ] = "Óýíïëï ðñáãìáôéêþí áñéèìþí"; + TEXT[ korean ] = "½ÇÁ¦ ¼ýÀÚ ¼³Á¤"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SETC ; + HelpId = HID_SMA_SETC ; + Text = "Menge der komplexen Zahlen" ; + Text [ ENGLISH ] = "set of complex numbers" ; + TEXT[ italian ] = "Insieme dei numeri complessi"; + TEXT[ portuguese_brazilian ] = "Menge der komplexen Zahlen"; + TEXT[ portuguese ] = "Conjunto dos números complexos"; + TEXT[ danish ] = "mængden af komplekse tal"; + TEXT[ french ] = "Ensemble des nombres complexes"; + TEXT[ swedish ] = "Mängd komplexa tal"; + TEXT[ dutch ] = "Set complexe getallen"; + TEXT[ spanish ] = "Conjunto de números complejos"; + TEXT[ english_us ] = "Complex Numbers Set"; + TEXT[ chinese_simplified ] = "¸´Êý¼¯"; + TEXT[ russian ] = "Ìíîæåñòâî êîìïëåêñíûõ ÷èñåë"; + TEXT[ polish ] = "Zbiór liczb zespolonych"; + TEXT[ japanese ] = "•¡‘f”‚ÌW‡"; + TEXT[ chinese_traditional ] = "½Æ¼Æ¶°"; + TEXT[ arabic ] = "ãÌãæÚÉ ÇáÃÚÏÇÏ ÇáãÑßÈÉ"; + TEXT[ greek ] = "Óýíïëï ìéãáäéêþí áñéèìþí"; + TEXT[ korean ] = "º¹ÀâÇÑ ¼ýÀÚ ¼³Á¤"; + TEXT[ turkish ] = "Karmaþýk sayýlar kümesi"; + TEXT[ language_user1 ] = " "; + }; + }; + }; + ToolBox 4 + { + // functions + HelpId = HID_SMA_FUNCTIONS_TBX ; + Pos = MAP_APPFONT ( 0 , 41 ) ; + Size = MAP_APPFONT ( 65 , 95 ) ; + SVLook = TRUE ; + Hide = TRUE ; + LineCount = 5 ; + ItemImageList = ImageList + { + ImageBitmap = Bitmap + { + FILE = "func.bmp" ; + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + RID_ABSX ; + RID_FACTX ; + RID_SQRTX ; + RID_NROOTXY ; + RID_EX ; + RID_LNX ; + RID_EXPX ; + RID_LOGX ; + RID_SINX ; + RID_COSX ; + RID_TANX ; + RID_COTX ; + RID_SINHX ; + RID_COSHX ; + RID_TANHX ; + RID_COTHX ; + RID_ARCSINX ; + RID_ARCCOSX ; + RID_ARCTANX ; + RID_ARCCOTX ; + RID_ARSINHX ; + RID_ARCOSHX ; + RID_ARTANHX ; + RID_ARCOTHX ; + RID_RSUPX ; + }; + IdCount = + { + 25 ; + }; + }; + ItemList = + { + ToolBoxItem + { + Identifier = RID_EX ; + HelpId = HID_SMA_EX ; + /* ### ACHTUNG: Neuer Text in Resource? Exponentialfunktion : natürliche Exponentialfunktion */ + Text = "Exponentialfunktion" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Exponential Function" ; + Text [ portuguese_brazilian ] = "natürliche Exponentialfunktion" ; + Text [ swedish ] = "exponentialfunktion" ; + Text [ danish ] = "eksponentialfunktion" ; + Text [ italian ] = "Funzione esponenziale" ; + Text [ spanish ] = "Función exponencial" ; + Text [ french ] = "Fonction exponentielle" ; + Text [ dutch ] = "Exponentiële functie" ; + Text [ portuguese ] = "Função exponencial" ; + Text[ chinese_simplified ] = "Ö¸Êýº¯Êý"; + Text[ russian ] = "Ýêñïîíåíöèàëüíàÿ ôóíêöèÿ"; + Text[ polish ] = "Funkcja wyk³adnicza"; + Text[ japanese ] = "Žw”ŠÖ”"; + Text[ chinese_traditional ] = "«ü¼Æ¨ç¼Æ"; + Text[ arabic ] = "ÏÇáÉ ÃÓíÉ"; + Text[ greek ] = "ÅêèåôéêÞ óõíÜñôçóç"; + Text[ korean ] = "Áö¼ö ÇÔ¼ö"; + Text[ turkish ] = "Üstel iþlev"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_LNX ; + HelpId = HID_SMA_LNX ; + Text = "natürlicher Logarithmus" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Natural Logarithm" ; + Text [ portuguese_brazilian ] = "natürlicher Logarithmus" ; + Text [ swedish ] = "naturliga logaritmen" ; + Text [ danish ] = "naturlig logaritme" ; + Text [ italian ] = "Logaritmo naturale" ; + Text [ spanish ] = "Logaritmo natural" ; + Text [ french ] = "Logarithme naturel" ; + Text [ dutch ] = "natuurlijk logarithme" ; + Text [ portuguese ] = "Logoritmo natural" ; + Text[ chinese_simplified ] = "×ÔÈ»¶ÔÊý"; + Text[ russian ] = "Íàòóðàëüíûé ëîãàðèôì"; + Text[ polish ] = "Naturalny logarytm"; + Text[ japanese ] = "Ž©‘R‘Δ"; + Text[ chinese_traditional ] = "¦ÛµM¹ï¼Æ"; + Text[ arabic ] = "áæÛÇÑíÊã ØÈíÚí"; + Text[ greek ] = "Öõóéêüò ëïãÜñéèìïò"; + Text[ korean ] = "ÀÏ¹Ý ·Î±×"; + Text[ turkish ] = "Doðal logaritma"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_EXPX ; + HelpId = HID_SMA_EXPX ; + Text = "Exponentialfunktion" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Exponential Function" ; + Text [ portuguese_brazilian ] = "Exponentialfunktion" ; + Text [ swedish ] = "Exponentialfunktion" ; + Text [ danish ] = "eksponentialfunktion" ; + Text [ italian ] = "Funzione esponenziale" ; + Text [ spanish ] = "Función exponencial" ; + Text [ french ] = "Fonction exponentielle" ; + Text [ dutch ] = "Exponentiële functie" ; + Text [ portuguese ] = "Função exponencial" ; + Text[ chinese_simplified ] = "Ö¸Êýº¯Êý"; + Text[ russian ] = "Ýêñïîíåíöèàëüíàÿ ôóíêöèÿ"; + Text[ polish ] = "Funkcja wyk³adnicza"; + Text[ japanese ] = "Žw”ŠÖ”"; + Text[ chinese_traditional ] = "«ü¼Æ¨ç¼Æ"; + Text[ arabic ] = "ÏÇáÉ ÃÓíÉ"; + Text[ greek ] = "ÅêèåôéêÞ óõíÜñôçóç"; + Text[ korean ] = "Áö¼ö ÇÔ¼ö"; + Text[ turkish ] = "Üstel iþlev"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_LOGX ; + HelpId = HID_SMA_LOGX ; + Text = "Logarithmus" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Logarithm" ; + Text [ portuguese_brazilian ] = "Logarithmus" ; + Text [ swedish ] = "Logaritm" ; + Text [ danish ] = "logaritme" ; + Text [ italian ] = "Logaritmo" ; + Text [ spanish ] = "Logaritmo" ; + Text [ french ] = "Logarithme" ; + Text [ dutch ] = "Logarithme" ; + Text [ portuguese ] = "Logoritmo" ; + Text[ chinese_simplified ] = "¶ÔÊý"; + Text[ russian ] = "Ëîãàðèôì"; + Text[ polish ] = "Logarytm"; + Text[ japanese ] = "‘Δ"; + Text[ chinese_traditional ] = "¹ï¼Æ"; + Text[ arabic ] = "áæÛÇÑíÊã"; + Text[ greek ] = "ËïãÜñéèìïò"; + Text[ korean ] = "·Î±×"; + Text[ turkish ] = "Logaritma"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_RSUPX ; + HelpId = HID_SMA_RSUPX ; + Text = "Potenz" ; + Text [ ENGLISH ] = "Power" ; + TEXT[ italian ] = "Potenza"; + TEXT[ portuguese_brazilian ] = "Potenz"; + TEXT[ portuguese ] = "Potência"; + TEXT[ danish ] = "potens"; + TEXT[ french ] = "Puissance"; + TEXT[ swedish ] = "Potens"; + TEXT[ dutch ] = "Potentie"; + TEXT[ spanish ] = "Potencia"; + TEXT[ english_us ] = "Power"; + TEXT[ chinese_simplified ] = "³ËÃÝ"; + TEXT[ russian ] = "Ñòåïåíü"; + TEXT[ polish ] = "Potêga"; + TEXT[ japanese ] = "—Ýæ"; + TEXT[ chinese_traditional ] = "­¼¾­"; + TEXT[ arabic ] = "ÇáÞæÉ"; + TEXT[ greek ] = "Äýíáìç"; + TEXT[ korean ] = "°ÅµìÁ¦°ö"; + TEXT[ turkish ] = "Üs"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_SINX ; + HelpId = HID_SMA_SINX ; + Text = "Sinus" ; + Text [ ENGLISH ] = "sinus" ; + Text [ english_us ] = "Sine" ; + Text [ portuguese_brazilian ] = "Sinus" ; + Text [ swedish ] = "sinus" ; + Text [ danish ] = "sinus" ; + Text [ italian ] = "Seno" ; + Text [ spanish ] = "Seno" ; + Text [ french ] = "Sinus" ; + Text [ dutch ] = "Sinus" ; + Text [ portuguese ] = "Seno" ; + Text[ chinese_simplified ] = "ÕýÏÒ"; + Text[ russian ] = "Ñèíóñ"; + Text[ polish ] = "Sinus"; + Text[ japanese ] = "»²Ý"; + Text[ chinese_traditional ] = "¥¿©¶"; + Text[ arabic ] = "ÌíÈ ÇáÒÇæíÉ"; + Text[ greek ] = "Çìßôïíï"; + Text[ korean ] = "»çÀÎ"; + Text[ turkish ] = "Sinüs"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_COSX ; + HelpId = HID_SMA_COSX ; + Text = "Cosinus" ; + Text [ ENGLISH ] = "cosinus" ; + Text [ english_us ] = "Cosine" ; + Text [ portuguese_brazilian ] = "Cosinus" ; + Text [ swedish ] = "cosinus" ; + Text [ danish ] = "cosinus" ; + Text [ italian ] = "Coseno" ; + Text [ spanish ] = "Coseno" ; + Text [ french ] = "Cosinus" ; + Text [ dutch ] = "Cosinus" ; + Text [ portuguese ] = "Coseno" ; + Text[ chinese_simplified ] = "ÓàÏÒ"; + Text[ russian ] = "Êîñèíóñ"; + Text[ polish ] = "Cosinus"; + Text[ japanese ] = "º»²Ý"; + Text[ chinese_traditional ] = "§E©¶"; + Text[ arabic ] = "ÌíÈ ÊãÇã"; + Text[ greek ] = "Óõíçìßôïíï"; + Text[ korean ] = "ÄÚ»çÀÎ ÇÔ¼ö"; + Text[ turkish ] = "Kosinüs"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_TANX ; + HelpId = HID_SMA_TANX ; + Text = "Tangens" ; + Text [ ENGLISH ] = "tangens" ; + Text [ english_us ] = "Tangent" ; + Text [ portuguese_brazilian ] = "Tangens" ; + Text [ swedish ] = "tangens" ; + Text [ danish ] = "tangens" ; + Text [ italian ] = "Tangente" ; + Text [ spanish ] = "Tangente" ; + Text [ french ] = "Tangente" ; + Text [ dutch ] = "Tangens" ; + Text [ portuguese ] = "Tangente" ; + Text[ chinese_simplified ] = "ÕýÇÐ"; + Text[ russian ] = "Òàíãåíñ"; + Text[ polish ] = "Tangens"; + Text[ japanese ] = "ÀݼުÝÄ"; + Text[ chinese_traditional ] = "¥¿¤Á"; + Text[ arabic ] = "Ùá"; + Text[ greek ] = "ÅöáðôïìÝíç"; + Text[ korean ] = "źÁ¨Æ® ÇÔ¼ö"; + Text[ turkish ] = "Tanjant"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_COTX ; + HelpId = HID_SMA_COTX ; + Text = "Cotangens" ; + Text [ ENGLISH ] = "cotangens" ; + Text [ english_us ] = "Cotangent" ; + Text [ portuguese_brazilian ] = "Cotangens" ; + Text [ swedish ] = "cotangens" ; + Text [ danish ] = "cotangens" ; + Text [ italian ] = "Cotangente" ; + Text [ spanish ] = "Cotangente" ; + Text [ french ] = "Cotangente" ; + Text [ dutch ] = "Cotangens" ; + Text [ portuguese ] = "Cotangente" ; + Text[ chinese_simplified ] = "ÓàÇÐ"; + Text[ russian ] = "Êîòàíãåíñ"; + Text[ polish ] = "Cotangens"; + Text[ japanese ] = "ºÀݼުÝÄ"; + Text[ chinese_traditional ] = "§E¤Á"; + Text[ arabic ] = "Ùá ÇáÊãÇã"; + Text[ greek ] = "ÓõíåöáðôïìÝíç"; + Text[ korean ] = "ÄÚźÁ¨Æ® ÇÔ¼ö"; + Text[ turkish ] = "Kotanjant"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SQRTX ; + HelpId = HID_SMA_SQRTX ; + Text = "Quadratwurzel" ; + Text [ ENGLISH ] = "square root" ; + Text [ english_us ] = "Square Root" ; + Text [ portuguese_brazilian ] = "Quadratwurzel" ; + Text [ swedish ] = "kvadratrot" ; + Text [ danish ] = "kvadratrod" ; + Text [ italian ] = "Radice quadrata" ; + Text [ spanish ] = "Raíz cuadrada" ; + Text [ french ] = "Racine carrée" ; + Text [ dutch ] = "Vierkantswortel" ; + Text [ portuguese ] = "Raíz quadrada" ; + Text[ chinese_simplified ] = "ƽ·½¸ù"; + Text[ russian ] = "Êîðåíü êâàäðàòíûé"; + Text[ polish ] = "Pierwiastek drugiego stopnia"; + Text[ japanese ] = "•½•ûª"; + Text[ chinese_traditional ] = "¥­¤è®Ú"; + Text[ arabic ] = "ÌÐÑ ÊÑÈíÚí"; + Text[ greek ] = "ÔåôñáãùíéêÞ ñßæá"; + Text[ korean ] = "Á¦°ö±Ù"; + Text[ turkish ] = "Karekök"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_ARCSINX ; + HelpId = HID_SMA_ARCSINX ; + Text = "Arcussinus" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Arcsine" ; + Text [ portuguese_brazilian ] = "Arcussinus" ; + Text [ swedish ] = "arcussinus" ; + Text [ danish ] = "arcus sinus" ; + Text [ italian ] = "Arcoseno" ; + Text [ spanish ] = "Seno de arco" ; + Text [ french ] = "Arc sinus" ; + Text [ dutch ] = "Boogsinus" ; + Text [ portuguese ] = "Arcoseno" ; + Text[ chinese_simplified ] = "·´ÕýÏÒ"; + Text[ russian ] = "Àðêñèíóñ"; + Text[ polish ] = "Arcus sinus"; + Text[ japanese ] = "±°¸»²Ý"; + Text[ chinese_traditional ] = "¤Ï¥¿©¶"; + Text[ arabic ] = "ãÞÇÈá ÇáÌíÈ"; + Text[ greek ] = "Ôüîï çìéôüíïõ"; + Text[ korean ] = "¾ÆÅ©»çÀÎ ÇÔ¼ö"; + Text[ turkish ] = "Arksinüs"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_ARCCOSX ; + HelpId = HID_SMA_ARCCOSX ; + Text = "Arcuscosinus" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Arccosine" ; + Text [ portuguese_brazilian ] = "Arcuscosinus" ; + Text [ swedish ] = "arcuscosinus" ; + Text [ danish ] = "arcus cosinus" ; + Text [ italian ] = "Arcocoseno" ; + Text [ spanish ] = "Coseno de arco" ; + Text [ french ] = "Arc cosinus" ; + Text [ dutch ] = "Boogcosinus" ; + Text [ portuguese ] = "Arco-coseno" ; + Text[ chinese_simplified ] = "·´ÓàÏÒ"; + Text[ russian ] = "Àðêêîñèíóñ"; + Text[ polish ] = "Arcus cosinus"; + Text[ japanese ] = "±°¸º»²Ý"; + Text[ chinese_traditional ] = "¤Ï§E©¶"; + Text[ arabic ] = "ãÞÇÈá ÌíÈ ÇáÊãÇã"; + Text[ greek ] = "Ôüîï óõíçìéôüíïõ"; + Text[ korean ] = "¾ÆÅ©ÄÚ»çÀÎ ÇÔ¼ö"; + Text[ turkish ] = "Arkkosinüs"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_ARCTANX ; + HelpId = HID_SMA_ARCTANX ; + Text = "Arcustangens" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Arctangent" ; + Text [ portuguese_brazilian ] = "Arcustangens" ; + Text [ swedish ] = "arcustangens" ; + Text [ danish ] = "arcus tangens" ; + Text [ italian ] = "Arcotangente" ; + Text [ spanish ] = "Tangente de arco" ; + Text [ french ] = "Arc tangente" ; + Text [ dutch ] = "Boogtangens" ; + Text [ portuguese ] = "Arcotangente" ; + Text[ chinese_simplified ] = "·´ÕýÇÐ"; + Text[ russian ] = "Àðêòàíãåíñ"; + Text[ polish ] = "Arcus tangens"; + Text[ japanese ] = "±°¸ÀݼުÝÄ"; + Text[ chinese_traditional ] = "¤Ï¥¿¤Á"; + Text[ arabic ] = "ãÞÇÈá ÇáÙá"; + Text[ greek ] = "Ôüîï åöáðôïìÝíçò"; + Text[ korean ] = "¾ÆũźÁ¨Æ® ÇÔ¼ö"; + Text[ turkish ] = "Arktanjant"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_ARCCOTX ; + HelpId = HID_SMA_ARCCOTX ; + Text = "Arcuscotangens" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Arccotangent" ; + Text [ portuguese_brazilian ] = "Arcuscotangens" ; + Text [ swedish ] = "arcuscotangens" ; + Text [ danish ] = "arcus cotangens" ; + Text [ italian ] = "Arcocotangente" ; + Text [ spanish ] = "Cotangente de arco" ; + Text [ french ] = "Arc cotangente" ; + Text [ dutch ] = "Boogcotangens" ; + Text [ portuguese ] = "Cotangente de arco" ; + Text[ chinese_simplified ] = "·´ÓàÇÐ"; + Text[ russian ] = "Àðêêîòàíãåíñ"; + Text[ polish ] = "Arcus cotangens"; + Text[ japanese ] = "±°¸ºÀݼުÝÄ"; + Text[ chinese_traditional ] = "¤Ï§E¤Á"; + Text[ arabic ] = "ÞæÓ Ùá ÇáÊãÇã"; + Text[ greek ] = "Ôüîï óõíåöáðôïìÝíçò"; + Text[ korean ] = "¾ÆÅ©ÄÚźÁ¨Æ®"; + Text[ turkish ] = "Arkkotanjant"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_NROOTXY ; + HelpId = HID_SMA_NROOTXY ; + Text = "n-te Wurzel" ; + Text [ ENGLISH ] = "n-th root" ; + Text [ english_us ] = "n-th Root" ; + Text [ portuguese_brazilian ] = "n-te Wurzel" ; + Text [ swedish ] = "n-de roten" ; + Text [ danish ] = "n'te rod" ; + Text [ italian ] = "Radice n" ; + Text [ spanish ] = "Raíz n" ; + Text [ french ] = "Racine n-ième" ; + Text [ dutch ] = "n-de wortel" ; + Text [ portuguese ] = "Raíz n" ; + Text[ chinese_simplified ] = "n ´Î¸ù"; + Text[ russian ] = "Êîðåíü ñòåïåíè"; + Text[ polish ] = "Pierwiastek stopnia"; + Text[ japanese ] = "‚Žæª"; + Text[ chinese_traditional ] = "n ¦¸®Ú"; + Text[ arabic ] = "ÌÐÑ ãÇ (n-th Root)"; + Text[ greek ] = "n-ïóôÞ ñßæá"; + Text[ korean ] = "n-¹ø° ±Ù"; + Text[ turkish ] = "Kök n"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_SINHX ; + HelpId = HID_SMA_SINHX ; + Text = "Hyperbelsinus" ; + Text [ ENGLISH ] = "sinus hyperbolicus" ; + Text [ english_us ] = "Hyperbolic Sine" ; + Text [ portuguese_brazilian ] = "Hyperbelsinus" ; + Text [ swedish ] = "sinus hyperbolicus" ; + Text [ danish ] = "hyperbolsk sinus" ; + Text [ italian ] = "Seno iperbolico" ; + Text [ spanish ] = "Seno hiperbólico" ; + Text [ french ] = "Sinus hyperbolique" ; + Text [ dutch ] = "Sinus hyperbolicus" ; + Text [ portuguese ] = "Seno hiperbólico" ; + Text[ chinese_simplified ] = "Ë«ÇúÕýÏÒ"; + Text[ russian ] = "Ãèïåðáîëè÷åñêèé ñèíóñ"; + Text[ polish ] = "Sinus hiperboliczny"; + Text[ japanese ] = "‘o‹Èü»²Ý"; + Text[ chinese_traditional ] = "Âù¦±¥¿©¶"; + Text[ arabic ] = "ÌíÈ ÞØÚ ÒÇÆÏ"; + Text[ greek ] = "Õðåñâïëéêü çìßôïíï"; + Text[ korean ] = "½Ö°î¼± »çÀÎ ÇÔ¼ö"; + Text[ turkish ] = "Hiperbolik sinüs"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_COSHX ; + HelpId = HID_SMA_COSHX ; + Text = "Hyperbelcosinus" ; + Text [ ENGLISH ] = "cosinus hyperbolicus" ; + Text [ english_us ] = "Hyperbolic Cosine" ; + Text [ portuguese_brazilian ] = "Hyperbelcosinus" ; + Text [ swedish ] = "cosinus hyperbolicus" ; + Text [ danish ] = "hyperbolsk cosinus" ; + Text [ italian ] = "Coseno iperbolico" ; + Text [ spanish ] = "Coseno hiperbólico" ; + Text [ french ] = "Cosinus hyperbolique" ; + Text [ dutch ] = "Cosinus hyperbolicus" ; + Text [ portuguese ] = "Coseno hiperbólico" ; + Text[ chinese_simplified ] = "ÓàÏÒË«ÇúÏß"; + Text[ russian ] = "Ãèïåðáîëè÷åñêèé êîñèíóñ"; + Text[ polish ] = "Cosinus hiperboliczny"; + Text[ japanese ] = "‘o‹Èüº»²Ý"; + Text[ chinese_traditional ] = "§E©¶Âù¦±½u"; + Text[ arabic ] = "ÌíÈ ÊãÇã ÞØÚ ÒÇÆÏ"; + Text[ greek ] = "Õðåñâïëéêü óõíçìßôïíï"; + Text[ korean ] = "½Ö°î¼± ÄÚ»çÀÎ ÇÔ¼ö"; + Text[ turkish ] = "Hiperbolik kosinüs"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_TANHX ; + HelpId = HID_SMA_TANHX ; + Text = "Hyperbeltangens" ; + Text [ ENGLISH ] = "tangens hyperbolicus" ; + Text [ english_us ] = "Hyperbolic Tangent" ; + Text [ portuguese_brazilian ] = "Hyperbeltangens" ; + Text [ swedish ] = "tangens hyperbolicus" ; + Text [ danish ] = "hyperbolsk tangens" ; + Text [ italian ] = "Tangente iperbolica" ; + Text [ spanish ] = "Tangente hiperbólica" ; + Text [ french ] = "Tangente hyperbolique" ; + Text [ dutch ] = "Tangens hyperbolicus" ; + Text [ portuguese ] = "Tangente hiperbólica" ; + Text[ chinese_simplified ] = "Ë«ÇúÕýÇÐ"; + Text[ russian ] = "Ãèïåðáîëè÷åñêèé òàíãåíñ"; + Text[ polish ] = "Tangens hiperboliczny"; + Text[ japanese ] = "‘o‹ÈüÀݼުÝÄ"; + Text[ chinese_traditional ] = "Âù¦±¥¿¤Á"; + Text[ arabic ] = "Ùá ÞØÚ ÒÇÆÏ"; + Text[ greek ] = "ÕðåñâïëéêÞ åöáðôïìÝíç"; + Text[ korean ] = "½Ö°î¼± źÁ¨Æ® ÇÔ¼ö"; + Text[ turkish ] = "Hiperbolik tanjant"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_COTHX ; + HelpId = HID_SMA_COTHX ; + Text = "Hyperbelcotangens" ; + Text [ ENGLISH ] = "cotangens hyperbolicus" ; + Text [ english_us ] = "Hyperbolic Cotangent" ; + Text [ portuguese_brazilian ] = "Hyperbelcotangens" ; + Text [ swedish ] = "cotangens hyperbolicus" ; + Text [ danish ] = "hyperbolsk cotangens" ; + Text [ italian ] = "Cotangente iperbolica" ; + Text [ spanish ] = "Cotangente hiperbólica" ; + Text [ french ] = "Cotangente hyperbolique" ; + Text [ dutch ] = "Cotangens hyperbolicus" ; + Text [ portuguese ] = "Cotangente hiperbólica" ; + Text[ chinese_simplified ] = "ÓàÇÐË«ÇúÏß"; + Text[ russian ] = "Ãèïåðáîëè÷åñêèé êîòàíãåíñ"; + Text[ polish ] = "Cotangens hiperboliczny"; + Text[ japanese ] = "‘o‹ÈüºÀݼުÝÄ"; + Text[ chinese_traditional ] = "§E¤ÁÂù¦±½u"; + Text[ arabic ] = "Ùá ÊãÇã ÇáÞØÚ ÇáÒÇÆÏ"; + Text[ greek ] = "ÕðåñâïëéêÞ óõíåöáðôïìÝíç"; + Text[ korean ] = "½Ö°î¼± ÄÚźÁ¨Æ® ÇÔ¼ö"; + Text[ turkish ] = "Hiperbolik kotanjant"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_ABSX ; + HelpId = HID_SMA_ABSX ; + Text = "Absolutwert" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Absolute Value" ; + Text [ portuguese_brazilian ] = "Absolutwert" ; + Text [ swedish ] = "Absolutvärde" ; + Text [ danish ] = "absolut værdi" ; + Text [ italian ] = "Valore assoluto" ; + Text [ spanish ] = "Valor absoluto" ; + Text [ french ] = "Valeur absolue" ; + Text [ dutch ] = "Absolute waarde" ; + Text [ portuguese ] = "Valor absoluto" ; + Text[ chinese_simplified ] = "¾ø¶ÔÖµ"; + Text[ russian ] = "Àáñîëþòíîå çíà÷åíèå"; + Text[ polish ] = "Wartoœæ bezwzglêdna"; + Text[ japanese ] = "â‘Î’l"; + Text[ chinese_traditional ] = "µ´¹ï­È"; + Text[ arabic ] = "ÇáÞíãÉ ÇáãØáÞÉ"; + Text[ greek ] = "Áðüëõôç ôéìÞ"; + Text[ korean ] = "Àý´ë °ª"; + Text[ turkish ] = "Mutlak deðer"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_ARSINHX ; + HelpId = HID_SMA_ARSINHX ; + Text = "Areahyperbelsinus" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Area Hyperbolic Sine" ; + Text [ portuguese_brazilian ] = "Areahyperbelsinus" ; + Text [ swedish ] = "area sinus hyperbolicus" ; + Text [ danish ] = "invers hyperbolsk sinus" ; + Text [ italian ] = "Inversa del seno iperbolico" ; + Text [ spanish ] = "Seno hiperbólico de área" ; + Text [ french ] = "Argument sinus hyperbolique" ; + Text [ dutch ] = "Area sinus hyperbolicus" ; + Text [ portuguese ] = "Seno hiperbólico de área" ; + Text[ chinese_simplified ] = "ÕýÏÒË«ÇúÃæ"; + Text[ russian ] = "Àðåà-ñèíóñ ãèïåðáîëè÷åñêèé"; + Text[ polish ] = "Arcus sinus hiperboliczny"; + Text[ japanese ] = "‘o‹Èü‹t»²Ý"; + Text[ chinese_traditional ] = "¥¿©¶Âù¦±­±"; + Text[ arabic ] = "ÌíÈ ÇáÒÇæíÉ áÞØÚ ÒÇÆÏ áãäØÞÉ"; + Text[ greek ] = "Áíôßóôñïöï õðåñâïëéêü çìßôïíï"; + Text[ korean ] = "½Ö°î¼± ¸éÀû »çÀÎ ÇÔ¼ö"; + Text[ turkish ] = "Alan hiperbolik sinüs"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_ARCOSHX ; + HelpId = HID_SMA_ARCOSHX ; + Text = "Areahyperbelcosinus" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Area Hyperbolic Cosine" ; + Text [ portuguese_brazilian ] = "Areahyperbelcosinus" ; + Text [ swedish ] = "area cosinus hyperbolicus" ; + Text [ danish ] = "invers hyperbolsk cosinus" ; + Text [ italian ] = "Inversa del coseno iperbolico" ; + Text [ spanish ] = "Coseno hiperbólico de área" ; + Text [ french ] = "Argument cosinus hyperbolique" ; + Text [ dutch ] = "Area cosinus hyperbolicus" ; + Text [ portuguese ] = "Coseno hiperbólico de área" ; + Text[ chinese_simplified ] = "ÓàÏÒË«ÇúÃæ"; + Text[ russian ] = "Àðåà-êîñèíóñ ãèïåðáîëè÷åñêèé"; + Text[ polish ] = "Arcus cosinus hiperboliczny"; + Text[ japanese ] = "‘o‹Èü‹tº»²Ý"; + Text[ chinese_traditional ] = "§E©¶Âù¦±­±"; + Text[ arabic ] = "ÌíÈ ÇáÊãÇã áÞØÚ ÒÇÆÏ áãäØÞÉ"; + Text[ greek ] = "Áíôßóôñïöï õðåñâïëéêü óõíçìßôïíï"; + Text[ korean ] = "½Ö°î¼± ¸éÀû ÄÚ»çÀÎ ÇÔ¼ö"; + Text[ turkish ] = "Alan hiperbolik kosinüs"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_ARTANHX ; + HelpId = HID_SMA_ARTANHX ; + Text = "Areahyperbeltangens" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Area Hyperbolic Tangent" ; + Text [ portuguese_brazilian ] = "Areahyperbeltangens" ; + Text [ swedish ] = "area tangens hyperbolicus" ; + Text [ danish ] = "invers hyperbolsk tangens" ; + Text [ italian ] = "Inversa della tangente iperbolica" ; + Text [ spanish ] = "Tangente hiperbólica de área" ; + Text [ french ] = "Argument tangente hyperbolique" ; + Text [ dutch ] = "Area tangens hyperbolicus" ; + Text [ portuguese ] = "Tangente hiperbólica de área" ; + Text[ chinese_simplified ] = "ÕýÇÐË«ÇúÃæ"; + Text[ russian ] = "Àðåà-òàíãåíñ ãèïåðáîëè÷åñêèé"; + Text[ polish ] = "Arcus tangens hiperboliczny"; + Text[ japanese ] = "‘o‹Èü‹tÀݼުÝÄ"; + Text[ chinese_traditional ] = "¥¿¤ÁÂù¦±­±"; + Text[ arabic ] = "Ùá ÇáÒÇæíÉ áÞØÚ ÒÇÆÏ áãäØÞÉ"; + Text[ greek ] = "Áíôßóôñïöç õðåñâïëéêÞ åöáðôïìÝíç"; + Text[ korean ] = "½Ö°î¼± ¸éÀû źÁ¨Æ® ÇÔ¼ö"; + Text[ turkish ] = "Alan hiperbolik tanjant"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_ARCOTHX ; + HelpId = HID_SMA_ARCOTHX ; + Text = "Areahyperbelcotangens" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Area Hyperbolic Cotangent" ; + Text [ portuguese_brazilian ] = "Areahyperbelcotangens" ; + Text [ swedish ] = "area cotangens hyperbolicus" ; + Text [ danish ] = "invers hyperbolsk cotangens" ; + Text [ italian ] = "Inversa della cotangente iperbolica" ; + Text [ spanish ] = "Cotangente hiperbólica de área" ; + Text [ french ] = "Argument cotangente hyperbolique" ; + Text [ dutch ] = "Area cotangens hyperbolicus" ; + Text [ portuguese ] = "Cotangente hiperbólica de área" ; + Text[ chinese_simplified ] = "ÓàÇÐË«ÇúÃæ"; + Text[ russian ] = "Àðåà-êîòàíãåíñ ãèïåðáîëè÷åñêèé"; + Text[ polish ] = "Arcus cotangens hiperboliczny"; + Text[ japanese ] = "‘o‹Èü‹tºÀݼުÝÄ"; + Text[ chinese_traditional ] = "§E¤ÁÂù¦±­±"; + Text[ arabic ] = "Ùá ÇáÊãÇã áÞØÚ ÒÇÆÏ áãäØÞÉ"; + Text[ greek ] = "Áíôßóôñïöç õðåñâïëéêÞ óõíåöáðôïìÝíç"; + Text[ korean ] = "½Ö°î¼± ¸éÀû ÄÚźÁ¨Æ® ÇÔ¼ö"; + Text[ turkish ] = "Alan hiperbolik kotanjant"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_FACTX ; + HelpId = HID_SMA_FACTX ; + Text = "Fakultät" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Factorial" ; + Text [ portuguese_brazilian ] = "Fakultät" ; + Text [ swedish ] = "Fakultet" ; + Text [ danish ] = "fakultet" ; + Text [ italian ] = "Fattoriale" ; + Text [ spanish ] = "Factorial" ; + Text [ french ] = "Factorielle" ; + Text [ dutch ] = "Faculteit" ; + Text [ portuguese ] = "Factorial" ; + Text[ chinese_simplified ] = "½×³Ë"; + Text[ russian ] = "Ôàêòîðèàë"; + Text[ polish ] = "Silnia"; + Text[ japanese ] = "ŠKæ"; + Text[ chinese_traditional ] = "¶¥­¼"; + Text[ arabic ] = "ãÖÑæÈ"; + Text[ greek ] = "Ðáñáãïíôéêü"; + Text[ korean ] = "°è½Â"; + Text[ turkish ] = "Çarpýným"; + Text[ language_user1 ] = " "; + }; + }; + }; + ToolBox 5 + { + // operators + HelpId = HID_SMA_OPERATORS_TBX ; + Pos = MAP_APPFONT ( 0 , 41 ) ; + Size = MAP_APPFONT ( 65 , 95 ) ; + SVLook = TRUE ; + Hide = TRUE ; + LineCount = 3 ; + ItemImageList = ImageList + { + ImageBitmap = Bitmap + { + FILE = "form.bmp" ; + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + RID_LIMX ; + RID_SUMX ; + RID_PRODX ; + RID_COPRODX ; + RID_INTX ; + RID_IINTX ; + RID_IIINTX ; + RID_LINTX ; + RID_LLINTX ; + RID_LLLINTX ; + RID_FROMXTOY ; + RID_FROMX ; + RID_TOX ; + }; + IdCount = + { + 13 ; + }; + }; + ItemList = + { + ToolBoxItem + { + Identifier = RID_LIMX ; + HelpId = HID_SMA_LIMX ; + Text = "Limes" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Limes" ; + Text [ portuguese_brazilian ] = "Limes" ; + Text [ swedish ] = "Limes" ; + Text [ danish ] = "grænseværdi" ; + Text [ italian ] = "Limite" ; + Text [ spanish ] = "Límites" ; + Text [ french ] = "Limes" ; + Text [ dutch ] = "Limes" ; + Text [ portuguese ] = "Limites" ; + Text[ chinese_simplified ] = "¼«ÏÞ"; + Text[ russian ] = "Ïðåäåë"; + Text[ polish ] = "Limes"; + Text[ japanese ] = "‹ÉŒÀ’l"; + Text[ chinese_traditional ] = "·¥­­"; + Text[ arabic ] = "ÇáÍÏ ÇáÃÞÕì"; + Text[ greek ] = "¼ñéá"; + Text[ korean ] = "¶óÀÓ"; + Text[ turkish ] = "Lim"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SUMX ; + HelpId = HID_SMA_SUMX ; + Text = "Summe" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Sum" ; + Text [ portuguese_brazilian ] = "Summe" ; + Text [ swedish ] = "Summa" ; + Text [ danish ] = "sum" ; + Text [ italian ] = "Somma" ; + Text [ spanish ] = "Suma" ; + Text [ french ] = "Somme" ; + Text [ dutch ] = "Som" ; + Text [ portuguese ] = "Soma" ; + Text[ chinese_simplified ] = "×ܼÆ"; + Text[ russian ] = "Ñóììà"; + Text[ polish ] = "Suma"; + Text[ japanese ] = "‘˜a"; + Text[ chinese_traditional ] = "Á`­p"; + Text[ arabic ] = "ÇáãÌãæÚ"; + Text[ greek ] = "¢èñïéóìá"; + Text[ korean ] = "ÇÕ°è"; + Text[ turkish ] = "Toplam"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_PRODX ; + HelpId = HID_SMA_PRODX ; + Text = "Produkt" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Product" ; + Text [ portuguese_brazilian ] = "Produkt" ; + Text [ swedish ] = "Produkt" ; + Text [ danish ] = "produkt" ; + Text [ italian ] = "Prodotto" ; + Text [ spanish ] = "Producto" ; + Text [ french ] = "Produit" ; + Text [ dutch ] = "Product" ; + Text [ portuguese ] = "Produto" ; + Text[ chinese_simplified ] = "³Ë»ý"; + Text[ russian ] = "Ïðîèçâåäåíèå"; + Text[ polish ] = "Iloczyn"; + Text[ japanese ] = "Ï"; + Text[ chinese_traditional ] = "­¼¿n"; + Text[ arabic ] = "ÖÑÈ"; + Text[ greek ] = "Ãéíüìåíï"; + Text[ korean ] = "°ö"; + Text[ turkish ] = "Çarpým"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_COPRODX ; + HelpId = HID_SMA_COPRODX ; + Text = "Coprodukt" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Coproduct" ; + Text [ portuguese_brazilian ] = "Coprodukt" ; + Text [ swedish ] = "Koprodukt" ; + Text [ danish ] = "coprodukt" ; + Text [ italian ] = "Coprodotto" ; + Text [ spanish ] = "Coproducto" ; + Text [ french ] = "Coproduit" ; + Text [ dutch ] = "Coproduct" ; + Text [ portuguese ] = "Coproduto" ; + Text[ chinese_simplified ] = "ºÏÊý"; + Text[ russian ] = "Êîïðîèçâåäåíèå"; + Text[ polish ] = "Suma"; + Text[ japanese ] = "’¼˜a"; + Text[ chinese_traditional ] = "¦X¼Æ"; + Text[ arabic ] = "ÖÑÈ ãÔÊÑß"; + Text[ greek ] = "Óõìðëçñùìáôéêü ãéíüìåíï"; + Text[ korean ] = "ÄÚÇÁ·Î´öÆ®"; + Text[ turkish ] = "Yan sonuç"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_FROMXTOY ; + HelpId = HID_SMA_FROMXTOY ; + Text = "untere und obere Grenze" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Upper and Lower Limit" ; + Text [ portuguese_brazilian ] = "untere und obere Grenze" ; + Text [ swedish ] = "nedre och övre gräns" ; + Text [ danish ] = "nedre og øvre grænse" ; + Text [ italian ] = "Limite inferiore e superiore" ; + Text [ spanish ] = "Límites superior e inferior" ; + Text [ french ] = "Limites inférieure et supérieure" ; + Text [ dutch ] = "onderste en bovenste grens" ; + Text [ portuguese ] = "Limites inferior e superior" ; + Text[ chinese_simplified ] = "ÉÏϽçÏÞ"; + Text[ russian ] = "Âåðõíèé è íèæíèé ïðåäåë"; + Text[ polish ] = "dolna i górna granica"; + Text[ japanese ] = "㉺‹ÉŒÀ’l"; + Text[ chinese_traditional ] = "¤W¤U¬É­­"; + Text[ arabic ] = "ÇáÍÏ ÇáÃÏäì æÇáÃÞÕì"; + Text[ greek ] = "¢íù êáé êÜôù üñéï"; + Text[ korean ] = "ÇÏÀ§ ¹× »óÀ§ ±ØÇÑ"; + Text[ turkish ] = "Alt ve üst limit"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_INTX ; + HelpId = HID_SMA_INTX ; + Text = "Integral" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Integral" ; + Text [ portuguese_brazilian ] = "Integral" ; + Text [ swedish ] = "Integral" ; + Text [ danish ] = "integral" ; + Text [ italian ] = "Integrale" ; + Text [ spanish ] = "Integral" ; + Text [ french ] = "Intégrale" ; + Text [ dutch ] = "Integraal" ; + Text [ portuguese ] = "Integral" ; + Text[ chinese_simplified ] = "»ý·Ö"; + Text[ russian ] = "Èíòåãðàë"; + Text[ polish ] = "Ca³ka"; + Text[ japanese ] = "Ï•ª"; + Text[ chinese_traditional ] = "¿n¤À"; + Text[ arabic ] = "ÊßÇãá"; + Text[ greek ] = "ÏëïêëÞñùìá"; + Text[ korean ] = "ÀûºÐ"; + Text[ turkish ] = "Ýntegral"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_IINTX ; + HelpId = HID_SMA_IINTX ; + Text = "doppeltes Integral" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Double Integral" ; + Text [ portuguese_brazilian ] = "doppeltes Integral" ; + Text [ swedish ] = "dubbel integral" ; + Text [ danish ] = "dobbelt integral" ; + Text [ italian ] = "Integrale doppio" ; + Text [ spanish ] = "Integral doble" ; + Text [ french ] = "Double intégrale" ; + Text [ dutch ] = "dubbele integraal" ; + Text [ portuguese ] = "Integral dupla" ; + Text[ chinese_simplified ] = "Ë«ÖØ»ý·Ö"; + Text[ russian ] = "Äâîéíîé èíòåãðàë"; + Text[ polish ] = "Ca³ka podwójna"; + Text[ japanese ] = "“ñdÏ•ª"; + Text[ chinese_traditional ] = "Âù­«¿n¤À"; + Text[ arabic ] = "ÊßÇãá ãÒÏæÌ"; + Text[ greek ] = "Äéðëü ïëïêëÞñùìá"; + Text[ korean ] = "2ÁßÀûºÐ"; + Text[ turkish ] = "Çift integral"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_IIINTX ; + HelpId = HID_SMA_IIINTX ; + Text = "dreifaches Integral" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Triple Integral" ; + Text [ portuguese_brazilian ] = "dreifaches Integral" ; + Text [ swedish ] = "trippelintegral" ; + Text [ danish ] = "tredobbelt integral" ; + Text [ italian ] = "Integrale triplo" ; + Text [ spanish ] = "Integral triple" ; + Text [ french ] = "Triple intégrale" ; + Text [ dutch ] = "drievoudige integraal" ; + Text [ portuguese ] = "Integral tripla" ; + Text[ chinese_simplified ] = "ÈýÖØ»ý·Ö"; + Text[ russian ] = "Òðîéíîé èíòåãðàë"; + Text[ polish ] = "Potrójna ca³ka"; + Text[ japanese ] = "ŽOdÏ•ª"; + Text[ chinese_traditional ] = "¤T­«¿n¤À"; + Text[ arabic ] = "ÊßÇãá ËáÇËí"; + Text[ greek ] = "Ôñéðëü ïëïêëÞñùìá"; + Text[ korean ] = "3ÁßÀûºÐ"; + Text[ turkish ] = "Üçlü integral"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Identifier = RID_FROMX ; + HelpId = HID_SMA_FROMX ; + Text = "untere Grenze" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Lower Limit" ; + Text [ portuguese_brazilian ] = "untere Grenze" ; + Text [ swedish ] = "nedre gräns" ; + Text [ danish ] = "nedre grænse" ; + Text [ italian ] = "Limite inferiore" ; + Text [ spanish ] = "Límite inferior" ; + Text [ french ] = "Limite inférieure" ; + Text [ dutch ] = "onderste grens" ; + Text [ portuguese ] = "Limite inferior" ; + Text[ chinese_simplified ] = "ÏÂÏÞ"; + Text[ russian ] = "Íèæíèé ïðåäåë"; + Text[ polish ] = "Dolna granica"; + Text[ japanese ] = "‰º‹ÉŒÀ’l"; + Text[ chinese_traditional ] = "¤U­­"; + Text[ arabic ] = "ÇáÍÏ ÇáÃÏäì"; + Text[ greek ] = "ÊÜôù üñéï"; + Text[ korean ] = "ÃÖ¼Ò ±ØÇÑ"; + Text[ turkish ] = "Alt limit"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_LINTX ; + HelpId = HID_SMA_LINTX ; + Text = "Kurvenintegral" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Curve Integral" ; + Text [ portuguese_brazilian ] = "Kurvenintegral" ; + Text [ swedish ] = "Kurvintegral" ; + Text [ danish ] = "kurveintegral" ; + Text [ italian ] = "Integrale curvilineo" ; + Text [ spanish ] = "Integral curvilínea" ; + Text [ french ] = "Intégrale de courbe" ; + Text [ dutch ] = "Boogintegraal" ; + Text [ portuguese ] = "Integral curvilínea" ; + Text[ chinese_simplified ] = "ÇúÏß»ý·Ö"; + Text[ russian ] = "Êðèâîëèíåéíûé èíòåãðàë"; + Text[ polish ] = "Ca³ka krzywoliniowa"; + Text[ japanese ] = "üÏ•ª"; + Text[ chinese_traditional ] = "¦±½u¿n¤À"; + Text[ arabic ] = "ÊßÇãá ãäÍäì"; + Text[ greek ] = "Åðéêáìðýëéï ïëïêëÞñùìá"; + Text[ korean ] = "¼±ÀûºÐ"; + Text[ turkish ] = "Eðri integrali"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_LLINTX ; + HelpId = HID_SMA_LLINTX ; + Text = "doppeltes Kurvenintegral" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Double Curve Integral" ; + Text [ portuguese_brazilian ] = "doppeltes Kurvenintegral" ; + Text [ swedish ] = "dubbel kurvintegral" ; + Text [ danish ] = "dobbelt kurveintegral" ; + Text [ italian ] = "Integrale curvilineo doppio" ; + Text [ spanish ] = "Doble integral curvilínea" ; + Text [ french ] = "Double intégrale de courbe" ; + Text [ dutch ] = "dubbele boogintegraal" ; + Text [ portuguese ] = "Dupla integral curvilínea" ; + Text[ chinese_simplified ] = "Ë«ÖØÇúÏß»ý·Ö"; + Text[ russian ] = "Äâîéíîé êðèâîëèíåéíûé èíòåãðàë"; + Text[ polish ] = "Podwójna ca³ka krzywoliniowa"; + Text[ japanese ] = "–ÊÏ•ª"; + Text[ chinese_traditional ] = "Âù­«¦±½u¿n¤À"; + Text[ arabic ] = "ÊßÇãá ãäÍäì ãÒÏæÌ"; + Text[ greek ] = "Äéðëü åðéêáìðýëéï ïëïêëÞñùìá"; + Text[ korean ] = "2Áß ¼±ÀûºÐ"; + Text[ turkish ] = "Çift eðri integrali"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_LLLINTX ; + HelpId = HID_SMA_LLLINTX ; + Text = "dreifaches Kurvenintegral" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Triple Curve Integral" ; + Text [ portuguese_brazilian ] = "dreifaches Kurvenintegral" ; + Text [ swedish ] = "trippel kurvintegral" ; + Text [ danish ] = "tredobbelt kurveintegral" ; + Text [ italian ] = "Integrale curvilineo triplo" ; + Text [ spanish ] = "Triple integral curvilínea" ; + Text [ french ] = "Triple intégrale de courbe" ; + Text [ dutch ] = "drievoudige boogintegraal" ; + Text [ portuguese ] = "Tripla integral curvilínea" ; + Text[ chinese_simplified ] = "ÈýÖØÇúÏß»ý·Ö"; + Text[ russian ] = "Òðîéíîé êðèâîëèíåéíûé èíòåãðàë"; + Text[ polish ] = "Potrójna ca³ka krzywoliniowa"; + Text[ japanese ] = "‘ÌÏ•ª"; + Text[ chinese_traditional ] = "¤T­«¦±½u¿n¤À"; + Text[ arabic ] = "ÊßÇãá ãäÍäì ËáÇËí"; + Text[ greek ] = "Ôñéðëü åðéêáìðýëéï ïëïêëÞñùìá"; + Text[ korean ] = "3Áß ¼±ÀûºÐ"; + Text[ turkish ] = "Üçlü eðri integrali"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Identifier = RID_TOX ; + HelpId = HID_SMA_TOX ; + Text = "obere Grenze" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Upper Limit" ; + Text [ portuguese_brazilian ] = "obere Grenze" ; + Text [ swedish ] = "övre gräns" ; + Text [ danish ] = "øvre grænse" ; + Text [ italian ] = "Limite superiore" ; + Text [ spanish ] = "Límite superior" ; + Text [ french ] = "Limite supérieure" ; + Text [ dutch ] = "bovenste grens" ; + Text [ portuguese ] = "Limite superior" ; + Text[ chinese_simplified ] = "ÉÏÏÞ"; + Text[ russian ] = "Âåðõíèé ïðåäåë"; + Text[ polish ] = "Górna granica"; + Text[ japanese ] = "ã‹ÉŒÀ’l"; + Text[ chinese_traditional ] = "¤W­­"; + Text[ arabic ] = "ÇáÍÏ ÇáÃÞÕì"; + Text[ greek ] = "¢íù üñéï"; + Text[ korean ] = "ÃÖ´ë ±ØÇÑ"; + Text[ turkish ] = "Üst limit"; + Text[ language_user1 ] = " "; + }; + }; + }; + ToolBox 6 + { + // attributs + HelpId = HID_SMA_ATTRIBUTES_TBX ; + Pos = MAP_APPFONT ( 0 , 41 ) ; + Size = MAP_APPFONT ( 65 , 95 ) ; + SVLook = TRUE ; + Hide = TRUE ; + LineCount = 5 ; + ItemImageList = ImageList + { + ImageBitmap = Bitmap + { + FILE = "attr.bmp" ; + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + RID_ACUTEX ; + RID_GRAVEX ; + RID_CHECKX ; + RID_BREVEX ; + RID_BARX ; + RID_VECX ; + RID_HATX ; + RID_TILDEX ; + RID_CIRCLEX ; + RID_DOTX ; + RID_DDOTX ; + RID_DDDOTX ; + RID_OVERLINEX ; + RID_UNDERLINEX ; + RID_OVERSTRIKEX ; + RID_PHANTOMX ; + RID_BOLDX ; + RID_ITALX ; + RID_SIZEXY ; + RID_FONTXY ; + RID_WIDEHATX ; + RID_WIDETILDEX ; + RID_WIDEVECX ; + }; + IdCount = + { + 23 ; + }; + }; + ItemList = + { + ToolBoxItem + { + Identifier = RID_ACUTEX ; + HelpId = HID_SMA_ACUTEX ; + Text = "Accent nach rechts" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Accent to the Right" ; + Text [ portuguese_brazilian ] = "Accent nach rechts" ; + Text [ swedish ] = "Accent till höger" ; + Text [ danish ] = "accent aigu" ; + Text [ italian ] = "Accento verso destra" ; + Text [ spanish ] = "Acento hacia la derecha" ; + Text [ french ] = "Accent aigu" ; + Text [ dutch ] = "Accent naar rechts" ; + Text [ portuguese ] = "Acento para a direita" ; + Text[ chinese_simplified ] = "ÓÒÏòÖØÒô×Öĸ"; + Text[ russian ] = "Àêöåíò âïðàâî"; + Text[ polish ] = "Akcent w prawo"; + Text[ japanese ] = "±¸¾ÝĉEã‚è"; + Text[ chinese_traditional ] = "¥k¦V­«­µ¦r¥À"; + Text[ arabic ] = "ÍÑßÉ ÇáÃÍÑÝ Åáì Çáíãíä"; + Text[ greek ] = "Ôüíïò ðñïò ôá äåîéÜ"; + Text[ korean ] = "¿À¸¥ÂÊÀ¸·Î ¾Ç¼¾Æ®"; + Text[ turkish ] = "Saða vurgu"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_GRAVEX ; + HelpId = HID_SMA_GRAVEX ; + Text = "Accent nach links" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Accent to the Left" ; + Text [ portuguese_brazilian ] = "Accent nach links" ; + Text [ swedish ] = "Accent till vänster" ; + Text [ danish ] = "accent grave" ; + Text [ italian ] = "Accento verso sinistra" ; + Text [ spanish ] = "Acento hacia la izquierda" ; + Text [ french ] = "Accent grave" ; + Text [ dutch ] = "Accent naar links" ; + Text [ portuguese ] = "Acento grave" ; + Text[ chinese_simplified ] = "×óÏòÖØÒô·ûºÅ"; + Text[ russian ] = "Àêöåíò âëåâî"; + Text[ polish ] = "Akcent w prawo"; + Text[ japanese ] = "±¸¾ÝĉE‰º‚ª‚è"; + Text[ chinese_traditional ] = "¥ª¦V­«­µ²Å¸¹"; + Text[ arabic ] = "ÇáÚáÇãÉ ÇáäØÞíÉ Åáì ÇáíÓÇÑ"; + Text[ greek ] = "Ôüíïò ðñïò ôá áñéóôåñÜ"; + Text[ korean ] = "¿ÞÂÊ °­Á¶"; + Text[ turkish ] = "Sola vurgu"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_CHECKX ; + HelpId = HID_SMA_CHECKX ; + Text = "umgekehrtes Dach" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Reverse Circumflex" ; + Text [ portuguese_brazilian ] = "umgekehrtes Dach" ; + Text [ swedish ] = "omvänd cirkumflex" ; + Text [ danish ] = "omvendt cirkumfleks" ; + Text [ italian ] = "Accento circonflesso rovesciato" ; + Text [ spanish ] = "circunflejo inverso" ; + Text [ french ] = "Accent circonflexe inversé" ; + Text [ dutch ] = "omgekeerd circumflex" ; + Text [ portuguese ] = "Circunflexo invertido" ; + Text[ chinese_simplified ] = "·´ÏòÒÖÑï·ûºÅ"; + Text[ russian ] = "Ïåðåâåðíóòûé öèðêóìôëåêñ"; + Text[ polish ] = "Odwrócony daszek"; + Text[ japanese ] = "‹tʯÄ"; + Text[ chinese_traditional ] = "¤Ï¦V§í´­²Å¸¹"; + Text[ arabic ] = "ÚáÇãÉ (^) ÚßÓíÉ"; + Text[ greek ] = "Áíôßóôñïöç ãáëëéêÞ ðåñéóðùìÝíç"; + Text[ korean ] = "°­Á¶±âÈ£¸¦ ¿ªÀ¸·Î"; + Text[ turkish ] = "Ters þapka"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_BREVEX ; + HelpId = HID_SMA_BREVEX ; + Text = "Breve" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Breve" ; + Text [ portuguese_brazilian ] = "Breve" ; + Text [ swedish ] = "Breve" ; + Text [ danish ] = "breve" ; + Text [ italian ] = "Breve" ; + Text [ spanish ] = "Breve" ; + Text [ french ] = "Breve" ; + Text [ dutch ] = "Breve" ; + Text [ portuguese ] = "Breve" ; + Text[ chinese_simplified ] = "¶ÌÒô·û"; + Text[ russian ] = "Äóãà íàä çíàêîì"; + Text[ polish ] = "Breve"; + Text[ japanese ] = "¶¯Ìß"; + Text[ chinese_traditional ] = "µu­µ²Å"; + Text[ arabic ] = "ÇáãõÞóÕøÑÉ (Breve)"; + Text[ greek ] = "Breve"; + Text[ korean ] = "¾àÇÏ°Ô Ç¥½Ã"; + Text[ turkish ] = "Kýsaltma iþareti"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_CIRCLEX ; + HelpId = HID_SMA_CIRCLEX ; + Text = "Kreis" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Circle" ; + Text [ portuguese_brazilian ] = "Kreis" ; + Text [ swedish ] = "Cirkel" ; + Text [ danish ] = "cirkel" ; + Text [ italian ] = "Cerchio" ; + Text [ spanish ] = "Círculo" ; + Text [ french ] = "Cercle" ; + Text [ dutch ] = "Cirkel" ; + Text [ portuguese ] = "Círculo" ; + Text[ chinese_simplified ] = "Ô²"; + Text[ russian ] = "Êðóæîê"; + Text[ polish ] = "Ko³o"; + Text[ japanese ] = "‰~"; + Text[ chinese_traditional ] = "¶ê"; + Text[ arabic ] = "ÏÇÆÑÉ"; + Text[ greek ] = "Êýêëïò"; + Text[ korean ] = "¿ø"; + Text[ turkish ] = "Daire"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_VECX ; + HelpId = HID_SMA_VECX ; + Text = "Vektorpfeil" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Vector Arrow" ; + Text [ portuguese_brazilian ] = "Vektorpfeil" ; + Text [ swedish ] = "Vektorpil" ; + Text [ danish ] = "vektorpil" ; + Text [ italian ] = "Freccia vettoriale" ; + Text [ spanish ] = "Flecha vectorial" ; + Text [ french ] = "Flèche vectorielle" ; + Text [ dutch ] = "Vectorpijl" ; + Text [ portuguese ] = "Seta vectorial" ; + Text[ chinese_simplified ] = "ʸÁ¿¼ýÍ·"; + Text[ russian ] = "Âåêòîðíàÿ ñòðåëêà"; + Text[ polish ] = "Strza³ka wektora"; + Text[ japanese ] = "ÍÞ¸ÄÙ–îˆó"; + Text[ chinese_traditional ] = "¥Ú¶q½bÀY"; + Text[ arabic ] = "Óåã ÇÊÌÇåí"; + Text[ greek ] = "ÂÝëïò äéáíýóìáôïò"; + Text[ korean ] = "º¤ÅÍ È­»ìÇ¥"; + Text[ turkish ] = "Vektör oku"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_TILDEX ; + HelpId = HID_SMA_TILDEX ; + Text = "Tilde" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Tilde" ; + Text [ portuguese_brazilian ] = "Tilde" ; + Text [ swedish ] = "Tilde" ; + Text [ danish ] = "tilde" ; + Text [ italian ] = "Tilde" ; + Text [ spanish ] = "Tilde" ; + Text [ french ] = "Tilde" ; + Text [ dutch ] = "Tilde" ; + Text [ portuguese ] = "Til" ; + Text[ chinese_simplified ] = "¼ÓÔÚÎ÷°àÑÀÓïn_×ÖÉϵķ¢Òô·ûºÅ"; + Text[ russian ] = "Òèëüäà"; + Text[ polish ] = "Tylda"; + Text[ japanese ] = "ÁÙÀÞ"; + Text[ chinese_traditional ] = "¥[¦b¦è¯Z¤ú»yn_¦r¤Wªºµo­µ²Å¸¹"; + Text[ arabic ] = "ÇáÊáÏÉ"; + Text[ greek ] = "ÐåñéóðùìÝíç"; + Text[ korean ] = "Æ¿µå"; + Text[ turkish ] = "Tilde"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_HATX ; + HelpId = HID_SMA_HATX ; + Text = "Dach" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Circumflex" ; + Text [ portuguese_brazilian ] = "Dach" ; + Text [ swedish ] = "Cirkumflex" ; + Text [ danish ] = "cirkumfleks" ; + Text [ italian ] = "Accento circonflesso" ; + Text [ spanish ] = "Circunflejo" ; + Text [ french ] = "Accent circonflexe" ; + Text [ dutch ] = "Circumflex" ; + Text [ portuguese ] = "Circunflexo" ; + Text[ chinese_simplified ] = "ÒÖÑï·ûºÅ"; + Text[ russian ] = "Öèðêóìôëåêñ"; + Text[ polish ] = "Daszek"; + Text[ japanese ] = "ʯÄ"; + Text[ chinese_traditional ] = "§í´­²Å¸¹"; + Text[ arabic ] = "Circumflex"; + Text[ greek ] = "ÃáëëéêÞ ðåñéóðùìÝíç"; + Text[ korean ] = "°­Á¶±âÈ£"; + Text[ turkish ] = "Þapka"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_BARX ; + HelpId = HID_SMA_BARX ; + Text = "Überstrich" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Line Above" ; + Text [ portuguese_brazilian ] = "Überstrich" ; + Text [ swedish ] = "Linje över" ; + Text [ danish ] = "overstreg" ; + Text [ italian ] = "Linea superiore" ; + Text [ spanish ] = "Línea superior" ; + Text [ french ] = "Surlignage" ; + Text [ dutch ] = "Streepje op" ; + Text [ portuguese ] = "Linha superior" ; + Text[ chinese_simplified ] = "ÉÏ»®Ïß"; + Text[ russian ] = "Ëèíèÿ ñâåðõó"; + Text[ polish ] = "Kreska górna"; + Text[ japanese ] = "ÊÞ°"; + Text[ chinese_traditional ] = "¤W¹º½u"; + Text[ arabic ] = "ÎØ ÝæÞ"; + Text[ greek ] = "ÃñáììÞ Üíù"; + Text[ korean ] = "»óÀ§ ¼±"; + Text[ turkish ] = "Üst çizgi"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_DOTX ; + HelpId = HID_SMA_DOTX ; + Text = "Punkt" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Dot" ; + Text [ portuguese_brazilian ] = "Punkt" ; + Text [ swedish ] = "Punkt" ; + Text [ danish ] = "punkt" ; + Text [ italian ] = "Punto" ; + Text [ spanish ] = "Punto" ; + Text [ french ] = "Point" ; + Text [ dutch ] = "Punt" ; + Text [ portuguese ] = "Ponto" ; + Text[ chinese_simplified ] = "µã"; + Text[ russian ] = "Òî÷êà"; + Text[ polish ] = "Punkt"; + Text[ japanese ] = "¼Ý¸ÞÙ ÄÞ¯Ä"; + Text[ chinese_traditional ] = "ÂI"; + Text[ arabic ] = "äÞØÉ"; + Text[ greek ] = "Êïõêêßäá"; + Text[ korean ] = "µµÆ®"; + Text[ turkish ] = "Nokta"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_WIDEVECX ; + HelpId = HID_SMA_WIDEVECX ; + Text = "breiter Vektorpfeil" ; + Text [ ENGLISH ] = "wide vector arrow" ; + TEXT[ italian ] = "Freccia vettoriale ampia"; + TEXT[ portuguese_brazilian ] = "breiter Vektorpfeil"; + TEXT[ portuguese ] = "Seta vectorial ampla"; + TEXT[ danish ] = "bred vektorpil"; + TEXT[ french ] = "Flèche vectorielle large"; + TEXT[ swedish ] = "bred vektorpil"; + TEXT[ dutch ] = "brede vektorpijl"; + TEXT[ spanish ] = "Flecha vectorial ancha"; + TEXT[ english_us ] = "Large Vector Arrow"; + TEXT[ chinese_simplified ] = "´óʸÁ¿¼ýÍ·"; + TEXT[ russian ] = "Äëèííàÿ âåêòîðíàÿ ñòåëêà"; + TEXT[ polish ] = "Szeroka strza³ka wektora"; + TEXT[ japanese ] = "’·‚¢ÍÞ¸ÄÙ–îˆó"; + TEXT[ chinese_traditional ] = "¤j¥Ú¶q½bÀY"; + TEXT[ arabic ] = "Óåã ÇÊÌÇåí ÚÑíÖ"; + TEXT[ greek ] = "Ðëáôý âÝëïò äéáíýóìáôïò"; + TEXT[ korean ] = "Å« º¤ÅÍ È­»ìÇ¥"; + TEXT[ turkish ] = "Geniþ vektör oku"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_WIDETILDEX ; + HelpId = HID_SMA_WIDETILDEX ; + Text = "breite Tilde" ; + Text [ ENGLISH ] = "wide tilde" ; + TEXT[ italian ] = "Tilde ampia"; + TEXT[ portuguese_brazilian ] = "breite Tilde"; + TEXT[ portuguese ] = "Til largo"; + TEXT[ danish ] = "bred tilde"; + TEXT[ french ] = "Tilde large"; + TEXT[ swedish ] = "bred tilde"; + TEXT[ dutch ] = "brede tilde"; + TEXT[ spanish ] = "Tilde ancha"; + TEXT[ english_us ] = "Large Tilde"; + TEXT[ chinese_simplified ] = "¿íµÄ¼ÓÔÚÎ÷°àÑÀÓïn_×ÖÉϵķ¢Òô·ûºÅ"; + TEXT[ russian ] = "Äëèííàÿ òèëüäà"; + TEXT[ polish ] = "Szeroka tylda"; + TEXT[ japanese ] = "’·‚¢ÁÙÀÞ"; + TEXT[ chinese_traditional ] = "¼eªº¥[¦b¦è¯Z¤ú»yn_¦r¤Wªºµo­µ²Å¸¹"; + TEXT[ arabic ] = "ÊáÏÉ ÚÑíÖÉ"; + TEXT[ greek ] = "ÌåãÜëç ðåñéóðùìÝíç"; + TEXT[ korean ] = "Å« Æ¿µå"; + TEXT[ turkish ] = "Geniþ tilde"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_WIDEHATX ; + HelpId = HID_SMA_WIDEHATX ; + Text = "breites Dach" ; + Text [ ENGLISH ] = "wide circumflex" ; + TEXT[ italian ] = "Accento circonflesso ampio"; + TEXT[ portuguese_brazilian ] = "breites Dach"; + TEXT[ portuguese ] = "Circunflexo largo"; + TEXT[ danish ] = "bred cirkumfleks"; + TEXT[ french ] = "Accent circonflexe large"; + TEXT[ swedish ] = "bred cirkumflex"; + TEXT[ dutch ] = "breed circumflex"; + TEXT[ spanish ] = "Circunflejo ancho"; + TEXT[ english_us ] = "Large Circumflex"; + TEXT[ chinese_simplified ] = "¿íµÄÒÖÑï·ûºÅ"; + TEXT[ russian ] = "Øèðîêèé öèðêóìôëåêñ"; + TEXT[ polish ] = "Szeroki daszek"; + TEXT[ japanese ] = "’·‚¢Ê¯Ä"; + TEXT[ chinese_traditional ] = "¼eªº§í´­²Å¸¹"; + TEXT[ arabic ] = "ÚáÇãÉ (^) ÚÑíÖÉ"; + TEXT[ greek ] = "ÌåãÜëç ãáëëéêÞ ðåñéóðùìÝíç"; + TEXT[ korean ] = "Å« °­Á¶ ±âÈ£"; + TEXT[ turkish ] = "Geniþ þapka"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Identifier = RID_DDOTX ; + HelpId = HID_SMA_DDOTX ; + Text = "doppelter Punkt" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Double Dot" ; + Text [ portuguese_brazilian ] = "doppelter Punkt" ; + Text [ swedish ] = "dubbel punkt" ; + Text [ danish ] = "dobbelte punkter" ; + Text [ italian ] = "Due punti" ; + Text [ spanish ] = "punto doble" ; + Text [ french ] = "Deux points" ; + Text [ dutch ] = "dubbele punt" ; + Text [ portuguese ] = "Ponto duplo" ; + Text[ chinese_simplified ] = "Ë«µã"; + Text[ russian ] = "Äâîåòî÷èå (ãîðèçîíòàëüíî)"; + Text[ polish ] = "Dwukropek"; + Text[ japanese ] = "ÀÞÌÞÙ ÄÞ¯Ä"; + Text[ chinese_traditional ] = "ÂùÂI"; + Text[ arabic ] = "äÞØÉ ãÒÏæÌÉ"; + Text[ greek ] = "ÄéðëÞ êïõêêßäá"; + Text[ korean ] = "ÀÌÁß Á¡"; + Text[ turkish ] = "Çift nokta"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_OVERLINEX ; + HelpId = HID_SMA_OVERLINEX ; + Text = "Linie über" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Line Over" ; + Text [ portuguese_brazilian ] = "Linie über" ; + Text [ swedish ] = "Linje över" ; + Text [ danish ] = "streg over" ; + Text [ italian ] = "Linea sopra" ; + Text [ spanish ] = "Línea sobre" ; + Text [ french ] = "Ligne au dessus" ; + Text [ dutch ] = "Streep boven" ; + Text [ portuguese ] = "Linha sobre" ; + Text[ chinese_simplified ] = "ÉÏ»®Ïß"; + Text[ russian ] = "Ëèíèÿ ñâåðõó"; + Text[ polish ] = "Linia nad"; + Text[ japanese ] = "ãü"; + Text[ chinese_traditional ] = "¤W¹º½u"; + Text[ arabic ] = "ÎØ ÝæÞ"; + Text[ greek ] = "ÃñáììÞ áðü ðÜíù"; + Text[ korean ] = "À­¼±"; + Text[ turkish ] = "Üzerinde çizgi"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_UNDERLINEX ; + HelpId = HID_SMA_UNDERLINEX ; + Text = "Linie unter" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Line Below" ; + Text [ portuguese_brazilian ] = "Linie unter" ; + Text [ swedish ] = "Linje under" ; + Text [ danish ] = "streg under" ; + Text [ italian ] = "Linea sotto" ; + Text [ spanish ] = "Línea debajo" ; + Text [ french ] = "Ligne au dessous" ; + Text [ dutch ] = "Streep onder" ; + Text [ portuguese ] = "Linha por baixo" ; + Text[ chinese_simplified ] = "Ï»®Ïß"; + Text[ russian ] = "Ëèíèÿ ñíèçó"; + Text[ polish ] = "Linia pod"; + Text[ japanese ] = "‰ºü"; + Text[ chinese_traditional ] = "¤U¹º½u"; + Text[ arabic ] = "ÎØ ÊÍÊ"; + Text[ greek ] = "ÃñáììÞ áðü êÜôù"; + Text[ korean ] = "¾Æ·¡ ¼±"; + Text[ turkish ] = "Altýnda çizgi"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_OVERSTRIKEX ; + HelpId = HID_SMA_OVERSTRIKEX ; + Text = "Linie durch" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Line Through" ; + Text [ portuguese_brazilian ] = "Linie durch" ; + Text [ swedish ] = "Linje genom" ; + Text [ danish ] = "streg gennem" ; + Text [ italian ] = "Linea attraverso" ; + Text [ spanish ] = "Línea a través" ; + Text [ french ] = "Ligne à travers" ; + Text [ dutch ] = "Streep door" ; + Text [ portuguese ] = "Linha através" ; + Text[ chinese_simplified ] = "»®Ïß"; + Text[ russian ] = "Ïåðå÷åðêèâàþùàÿ ëèíèÿ"; + Text[ polish ] = "Linia przez"; + Text[ japanese ] = "Žæ‚èÁ‚µü"; + Text[ chinese_traditional ] = "¹º½u"; + Text[ arabic ] = "ÎØ ÚÈÑ"; + Text[ greek ] = "ÃñáììÞ äéá ìÝóïõ"; + Text[ korean ] = "Åë°ú¼±"; + Text[ turkish ] = "Üstü çizili"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Identifier = RID_DDDOTX ; + HelpId = HID_SMA_DDDOTX ; + Text = "dreifacher Punkt" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Triple Dot" ; + Text [ portuguese_brazilian ] = "dreifacher Punkt" ; + Text [ swedish ] = "trippelpunkt" ; + Text [ danish ] = "tredobbelte punkter" ; + Text [ italian ] = "Punto triplo" ; + Text [ spanish ] = "Punto triple" ; + Text [ french ] = "Triple point" ; + Text [ dutch ] = "drievoudige punt" ; + Text [ portuguese ] = "Ponto triplo" ; + Text[ chinese_simplified ] = "Èýµã"; + Text[ russian ] = "Ìíîãîòî÷èå"; + Text[ polish ] = "potrójny punkt"; + Text[ japanese ] = "ÄØÌßÙ ÄÞ¯Ä"; + Text[ chinese_traditional ] = "¤TÂI"; + Text[ arabic ] = "äÞØÉ ËáÇËíÉ"; + Text[ greek ] = "ÔñéðëÞ êïõêêßäá"; + Text[ korean ] = "3Áß Á¡"; + Text[ turkish ] = "Üç nokta"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_PHANTOMX ; + HelpId = HID_SMA_PHANTOMX ; + Text = "transparent" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Transparent" ; + Text [ portuguese_brazilian ] = "transparent" ; + Text [ swedish ] = "transparent" ; + Text [ danish ] = "transparent" ; + Text [ italian ] = "Trasparente" ; + Text [ spanish ] = "transparente" ; + Text [ french ] = "transparent" ; + Text [ dutch ] = "transparant" ; + Text [ portuguese ] = "Transparente" ; + Text[ chinese_simplified ] = "͸Ã÷"; + Text[ russian ] = "Ïðîçðà÷íî"; + Text[ polish ] = "przezroczysty"; + Text[ japanese ] = "“§‰ß«"; + Text[ chinese_traditional ] = "³z©ú"; + Text[ arabic ] = "ÔÝÇÝ"; + Text[ greek ] = "äéáöáíÝò"; + Text[ korean ] = "Åõ¸í"; + Text[ turkish ] = "Saydam"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_BOLDX ; + HelpId = HID_SMA_BOLDX ; + Text = "Fettschrift" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Bold Font" ; + Text [ portuguese_brazilian ] = "Fettschrift" ; + Text [ swedish ] = "Fett teckensnitt" ; + Text [ danish ] = "fed skrift" ; + Text [ italian ] = "Grassetto" ; + Text [ spanish ] = "Negrita" ; + Text [ french ] = "Caractères gras" ; + Text [ dutch ] = "Vet" ; + Text [ portuguese ] = "Negrito" ; + Text[ chinese_simplified ] = "¼Ó´Ö×ÖÌå"; + Text[ russian ] = "Æèðíûé øðèôò"; + Text[ polish ] = "Czcionka pogrubiona"; + Text[ japanese ] = "‘¾Žš"; + Text[ chinese_traditional ] = "¥[²Ê¦r«¬"; + Text[ arabic ] = "ÎØ ÚÑíÖ"; + Text[ greek ] = "¸íôïíá ãñÜììáôá"; + Text[ korean ] = "±Û²Ã °­Á¶"; + Text[ turkish ] = "Kalýn yazýtipi"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_ITALX ; + HelpId = HID_SMA_ITALX ; + Text = "kursive Schrift" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Italic Font" ; + Text [ portuguese_brazilian ] = "kursive Schrift" ; + Text [ swedish ] = "kursiv skrift" ; + Text [ danish ] = "kursiv skrift" ; + Text [ italian ] = "Corsivo" ; + Text [ spanish ] = "Cursiva" ; + Text [ french ] = "Caractères italiques" ; + Text [ dutch ] = "cursief" ; + Text [ portuguese ] = "Letra itálica" ; + Text[ chinese_simplified ] = "б×ÖÌå"; + Text[ russian ] = "Íàêëîííûé øðèôò"; + Text[ polish ] = "Kursywa"; + Text[ japanese ] = "ŽÎ‘Ì"; + Text[ chinese_traditional ] = "±×¦r«¬"; + Text[ arabic ] = "ÎØ ãÇÆá"; + Text[ greek ] = "ÐëÜãéïé ÷áñáêôÞñåò"; + Text[ korean ] = "ÀÌÅŸ¯Ã¼"; + Text[ turkish ] = "Ýtalik yazýtipi"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SIZEXY ; + HelpId = HID_SMA_SIZEXY ; + Text = "Größe ändern" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Resize" ; + Text [ portuguese_brazilian ] = "Größe ändern" ; + Text [ swedish ] = "Ändra storlek" ; + Text [ danish ] = "modificer størrelse" ; + Text [ italian ] = "Cambia dimensione" ; + Text [ spanish ] = "Modificar tamaño" ; + Text [ french ] = "Modifier la taille" ; + Text [ dutch ] = "Grootte wijzigen" ; + Text [ portuguese ] = "Modificar tamanho" ; + Text[ chinese_simplified ] = "¸ü¸Ä´óС"; + Text[ russian ] = "Èçìåíèòü ðàçìåð"; + Text[ polish ] = "Zmieñ rozmiar"; + Text[ japanese ] = "•¶Žš»²½Þ•ÏX"; + Text[ chinese_traditional ] = "Åܧó¤j¤p"; + Text[ arabic ] = "ÊÛííÑ ÇáÍÌã"; + Text[ greek ] = "ÁëëáãÞ ìåãÝèïõò"; + Text[ korean ] = "Å©±â Á¶Á¤"; + Text[ turkish ] = "Boyutu deðiþtir"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_FONTXY ; + HelpId = HID_SMA_FONTXY ; + Text = "Font ändern" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Change Font" ; + Text [ portuguese_brazilian ] = "Font ändern" ; + Text [ swedish ] = "Ändra teckensnitt" ; + Text [ danish ] = "modificer skrifttype" ; + Text [ italian ] = "Cambia font" ; + Text [ spanish ] = "Cambiar fuente" ; + Text [ french ] = "Modifier la fonte" ; + Text [ dutch ] = "Lettertype veranderen" ; + Text [ portuguese ] = "Modificar tipo de letra" ; + Text[ chinese_simplified ] = "¸ü¸Ä×ÖÌå"; + Text[ russian ] = "Èçìåíèòü øðèôò"; + Text[ polish ] = "Zmieñ czcionkê"; + Text[ japanese ] = "Ì«ÝÄ•ÏŠ·"; + Text[ chinese_traditional ] = "Åܧó¦r«¬"; + Text[ arabic ] = "ÊÛííÑ ÇáÎØ"; + Text[ greek ] = "ÁëëáãÞ ãñáììáôïóåéñÜò"; + Text[ korean ] = "±Û²Ã º¯È¯"; + Text[ turkish ] = "Yazýtipini deðiþtir"; + Text[ language_user1 ] = " "; + }; + }; + }; + ToolBox 7 + { + // parentheses + HelpId = HID_SMA_BRACKETS_TBX ; + Pos = MAP_APPFONT ( 0 , 41 ) ; + Size = MAP_APPFONT ( 65 , 95 ) ; + SVLook = TRUE ; + Hide = TRUE ; + LineCount = 5 ; + ItemImageList = ImageList + { + ImageBitmap = Bitmap + { + FILE = "algn.bmp" ; + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + RID_LRPARENTX ; + RID_LRBRACKETX ; + RID_LRANGLEX ; + RID_LRBRACEX ; + RID_LRLINEX ; + RID_LRDLINEX ; + RID_LMRANGLEXY ; + RID_LRGROUPX ; + RID_SLRPARENTX ; + RID_SLRBRACKETX ; + RID_SLRANGLEX ; + RID_SLRBRACEX ; + RID_SLRLINEX ; + RID_SLRDLINEX ; + RID_SLMRANGLEXY ; + RID_LRDBRACKETX ; + RID_SLRDBRACKETX ; + RID_XOVERBRACEY ; + RID_XUNDERBRACEY ; + }; + IdCount = + { + 19 ; + }; + }; + ItemList = + { + ToolBoxItem + { + Identifier = RID_LRPARENTX ; + HelpId = HID_SMA_LRPARENTX ; + Text = "runde Klammern" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Round Brackets" ; + Text [ portuguese_brazilian ] = "runde Klammern" ; + Text [ swedish ] = "Parenteser" ; + Text [ danish ] = "almindelige parenteser" ; + Text [ italian ] = "Parentesi tonde" ; + Text [ spanish ] = "paréntesis" ; + Text [ french ] = "Parenthèses arrondies" ; + Text [ dutch ] = "ronde haken" ; + Text [ portuguese ] = "Parênteses curvos" ; + Text[ chinese_simplified ] = "Ô²À¨ºÅ"; + Text[ russian ] = "Êðóãëûå ñêîáêè"; + Text[ polish ] = "Nawiasy okr¹g³e"; + Text[ japanese ] = "¬‚©‚Á‚±"; + Text[ chinese_traditional ] = "¶ê¬A¸¹"; + Text[ arabic ] = "ÃÞæÇÓ ãÓÊÏíÑÉ"; + Text[ greek ] = "ÓôñïããõëÝò ðáñåíèÝóåéò"; + Text[ korean ] = "µÕ±Ù °ýÈ£"; + Text[ turkish ] = "Yuvarlak ayraç"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_LRBRACKETX ; + HelpId = HID_SMA_LRBRACKETX ; + Text = "eckige Klammern" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Square Brackets" ; + Text [ portuguese_brazilian ] = "eckige Klammern" ; + Text [ swedish ] = "hakparenteser" ; + Text [ danish ] = "kantede parenteser" ; + Text [ italian ] = "Parentesi quadre" ; + Text [ spanish ] = "Corchetes" ; + Text [ french ] = "Crochets" ; + Text [ dutch ] = "rechte haakjes" ; + Text [ portuguese ] = "Parênteses rectos" ; + Text[ chinese_simplified ] = "·½À¨ºÅ"; + Text[ russian ] = "Êâàäðàòíûå ñêîáêè"; + Text[ polish ] = "Nawiasy kwadratowe"; + Text[ japanese ] = "‘å‚©‚Á‚±"; + Text[ chinese_traditional ] = "¤è¬A¸¹"; + Text[ arabic ] = "ÃÞæÇÓ ÞÇÆãÉ ÇáÒÇæíÉ"; + Text[ greek ] = "áãêýëåò"; + Text[ korean ] = "´ë°ýÈ£"; + Text[ turkish ] = "Köþeli ayraç"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_LRDBRACKETX ; + HelpId = HID_SMA_LRDBRACKETX ; + Text = "doppelte eckige Klammern" ; + Text [ ENGLISH ] = "Double square brackets" ; + Text[ english_us ] = "Double square brackets"; + Text[ portuguese ] = "Parênteses rectos duplos"; + Text[ russian ] = "äâîéíûå êâàäðàòíûå ñêîáêè"; + Text[ greek ] = "äéðëÝò áãêýëåò"; + Text[ dutch ] = "dubbele rechthoekige haakjes"; + Text[ french ] = "Doubles crochets"; + Text[ spanish ] = "corchetes dobles"; + Text[ italian ] = "Parentesi quadre doppie"; + Text[ danish ] = "dobbelte kantede parenteser"; + Text[ swedish ] = "dubbla hakparenteser"; + Text[ polish ] = "podwójne nawiasy kwadratowe"; + Text[ portuguese_brazilian ] = "Double square brackets"; + Text[ japanese ] = "“ñd‚©‚¬‚©‚Á‚±"; + Text[ korean ] = "°¢Áø ÀÌÁß °ýÈ£"; + Text[ chinese_simplified ] = "Ë«ÖØ·½À¨ºÅ"; + Text[ chinese_traditional ] = "Âù¦y§Î¬A¸¹"; + Text[ arabic ] = "ÃÞæÇÓ ãÒÏæÌÉ ÞÇÆãÉ ÇáÒÇæíÉý"; + Text[ turkish ] = "Köþeli çift ayraç"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_LRLINEX ; + HelpId = HID_SMA_LRLINEX ; + Text = "einfache Linien" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Single Lines" ; + Text [ portuguese_brazilian ] = "einfache Linien" ; + Text [ swedish ] = "enkla linjer" ; + Text [ danish ] = "enkelte streger" ; + Text [ italian ] = "Linee semplici" ; + Text [ spanish ] = "Líneas simples" ; + Text [ french ] = "Lignes simples" ; + Text [ dutch ] = "enkele lijnen" ; + Text [ portuguese ] = "Linhas simples" ; + Text[ chinese_simplified ] = "µ¥Ïß"; + Text[ russian ] = "Îáû÷íûå ëèíèè"; + Text[ polish ] = "Pojedyncze linie"; + Text[ japanese ] = "cü"; + Text[ chinese_traditional ] = "³æ½u"; + Text[ arabic ] = "ÎØ ÈÓíØ"; + Text[ greek ] = "áðëÝò ãñáììÝò"; + Text[ korean ] = "ÇÑ ¼±"; + Text[ turkish ] = "Tek çizgiler"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_LRDLINEX ; + HelpId = HID_SMA_LRDLINEX ; + Text = "doppelte Linien" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Double Lines" ; + Text [ portuguese_brazilian ] = "doppelte Linien" ; + Text [ swedish ] = "dubbla linjer" ; + Text [ danish ] = "dobbelte streger" ; + Text [ italian ] = "Linee doppie" ; + Text [ spanish ] = "Líneas dobles" ; + Text [ french ] = "Lignes doubles" ; + Text [ dutch ] = "dubbele lijnen" ; + Text [ portuguese ] = "Linhas duplas" ; + Text[ chinese_simplified ] = "Ë«Ïß"; + Text[ russian ] = "Äâîéíûå ëèíèè"; + Text[ polish ] = "Podwójne linie"; + Text[ japanese ] = "“ñdcü"; + Text[ chinese_traditional ] = "Âù½u"; + Text[ arabic ] = "ÎØæØ ãÒÏæÌÉ"; + Text[ greek ] = "ÄéðëÝò ãñáììÝò"; + Text[ korean ] = "2Áß ¼±"; + Text[ turkish ] = "Çift çizgiler"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_LRBRACEX ; + HelpId = HID_SMA_LRBRACEX ; + Text = "geschweifte Klammern" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Braces" ; + Text [ portuguese_brazilian ] = "geschweifte Klammern" ; + Text [ swedish ] = "klammerparenteser" ; + Text [ danish ] = "klammeparenteser" ; + Text [ italian ] = "Parentesi graffe" ; + Text [ spanish ] = "Llaves" ; + Text [ french ] = "Accolades" ; + Text [ dutch ] = "Accolades" ; + Text [ portuguese ] = "Chavetas" ; + Text[ chinese_simplified ] = "»¨À¨ºÅ"; + Text[ russian ] = "Ôèãóðíûå ñêîáêè"; + Text[ polish ] = "Nawiasy klamrowe"; + Text[ japanese ] = "’†‚©‚Á‚±"; + Text[ chinese_traditional ] = "ªá¬A¸¹"; + Text[ arabic ] = "ÃÞæÇÓ ãÊãæÌÉ"; + Text[ greek ] = "¢ãêéóôñá"; + Text[ korean ] = "Áß°ýÈ£"; + Text[ turkish ] = "Kavisli ayraç"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_LRANGLEX ; + HelpId = HID_SMA_LRANGLEX ; + Text = "spitze Klammern" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Pointed Brackets" ; + Text [ portuguese_brazilian ] = "spitze Klammern" ; + Text [ swedish ] = "vinkelparenteser" ; + Text [ danish ] = "vinkelparenteser" ; + Text [ italian ] = "Parentesi uncinate" ; + Text [ spanish ] = "Paréntesis angulares" ; + Text [ french ] = "Parenthèses pointues" ; + Text [ dutch ] = "spitse haakjes" ; + Text [ portuguese ] = "Parênteses pontiagudos" ; + Text[ chinese_simplified ] = "½ÇÀ¨ºÅ"; + Text[ russian ] = "Óãëîâûå ñêîáêè"; + Text[ polish ] = "Ostre nawiasy"; + Text[ japanese ] = "ŽR‚©‚Á‚±"; + Text[ chinese_traditional ] = "¨¤¬A¸¹"; + Text[ arabic ] = "ÃÞæÇÓ ãÏÈÈÉ"; + Text[ greek ] = "ÌõôåñÝò ðáñåíèÝóåéò"; + Text[ korean ] = "»ÏÁ·ÇÑ °ýÈ£"; + Text[ turkish ] = "Sivri ayraç"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_LMRANGLEXY ; + HelpId = HID_SMA_LMRANGLEXY ; + Text = "Operator Klammern" ; + Text [ ENGLISH ] = "Operator Brackets" ; + Text[ english_us ] = "Operator Brackets"; + Text[ portuguese ] = "Parêntesis de operador"; + Text[ russian ] = "Ñêîáêè îïåðàòîðà"; + Text[ dutch ] = "Operator-haken"; + Text[ french ] = "Parenthèses d'opérateur"; + Text[ spanish ] = "Paréntesis de operador"; + Text[ italian ] = "Parentesi operatore"; + Text[ danish ] = "operatorparenteser"; + Text[ swedish ] = "Operatorparenteser"; + Text[ polish ] = "Nawiasy operatora"; + Text[ portuguese_brazilian ] = "Operator Brackets"; + Text[ japanese ] = "‰‰ŽZŽq‚©‚Á‚±"; + Text[ chinese_simplified ] = "ÔËËã·ûÀ¨ºÅ"; + Text[ chinese_traditional ] = "¹Bºâ²Å¬A¸¹"; + Text[ arabic ] = "ÃÞæÇÓ ÚÇãá ÇáÊÔÛíá"; + Text[ greek ] = "Áãêýëåò ôåëåóôÞ"; + Text[ korean ] = "¿¬»êÀÚ °ýÈ£"; + Text[ turkish ] = "Ýþleç ayraçlarý"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Identifier = RID_LRGROUPX ; + HelpId = HID_SMA_LRGROUPX ; + Text = "Gruppierungs Klammern" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Group Brackets" ; + Text [ portuguese_brazilian ] = "Gruppierungs Klammern" ; + Text [ swedish ] = "Grupperingsparenteser" ; + Text [ danish ] = "grupperingsparenteser" ; + Text [ italian ] = "Parentesi di raggruppamento" ; + Text [ spanish ] = "Paréntesis de agrupamiento" ; + Text [ french ] = "Parenthèses de groupement" ; + Text [ dutch ] = "Groeperingshaken" ; + Text [ portuguese ] = "Parênteses de agrupamento" ; + Text[ chinese_simplified ] = "С×éÀ¨ºÅ"; + Text[ russian ] = "Ãðóïïîâûå ôèãóðíûå ñêîáêè"; + Text[ polish ] = "Nawiasy grupuj¹ce"; + Text[ japanese ] = "’†‚©‚Á‚±"; + Text[ chinese_traditional ] = "¤p²Õ¬A¸¹"; + Text[ arabic ] = "ÃÞæÇÓ ÊÌãíÚ"; + Text[ greek ] = "ÐáñåíèÝóåéò ïìáäïðïßçóçò"; + Text[ korean ] = "±×·ì °ýÈ£"; + Text[ turkish ] = "Gruplama ayraçlarý"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_SLRPARENTX ; + HelpId = HID_SMA_SLRPARENTX ; + Text = "runde Klammern (skalierbar)" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Round Brackets (Scaleable)" ; + Text [ portuguese_brazilian ] = "runde Klammern (skalierbar)" ; + Text [ swedish ] = "parenteser (skalbara)" ; + Text [ danish ] = "almindelige parenteser (skalerbare)" ; + Text [ italian ] = "Parentesi tonde (in scala)" ; + Text [ spanish ] = "paréntesis (graduables)" ; + Text [ french ] = "Parenthèses arrondies (modifiables graduellement)" ; + Text [ dutch ] = "ronde haakjes (scaleerbaar)" ; + Text [ portuguese ] = "Parênteses redondos (graduáveis)" ; + Text[ chinese_simplified ] = "Ô²À¨ºÅ(¿É±ä)"; + Text[ russian ] = "Êðóãëûå ñêîáêè (èçìåíÿåìûå)"; + Text[ polish ] = "Nawiasy okr¹g³e (zmieniaj¹ce rozmiar)"; + Text[ japanese ] = "¬‚©‚Á‚±(½¹°Ù‰Â)"; + Text[ chinese_traditional ] = "¶ê¬A¸¹(¥iÅÜ)"; + Text[ arabic ] = "ÃÞæÇÓ ÏÇÆÑíÉ (ÇáÍÌã ÞÇÈá ááÊÛííÑ)"; + Text[ greek ] = "ÓôñïããõëÝò ðáñåíèÝóåéò (äõíáôüôçôá êëéìÜêùóçò)"; + Text[ korean ] = "µÕ±Ù °ýÈ£ (¹èÀ²Á¶Á¤ °¡´É)"; + Text[ turkish ] = "Yuvarlak ayraç (ölçeklendirilebilir)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SLRBRACKETX ; + HelpId = HID_SMA_SLRBRACKETX ; + Text = "eckige Klammern (skalierbar)" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Square Brackets (Scaleable)" ; + Text [ portuguese_brazilian ] = "eckige Klammern (skalierbar)" ; + Text [ swedish ] = "hakparenteser (skalbara)" ; + Text [ danish ] = "kantede parenteser (skalerbare)" ; + Text [ italian ] = "Parentesi quadre (in scala)" ; + Text [ spanish ] = "Corchetes (graduables)" ; + Text [ french ] = "Crochets (modifiables graduellement)" ; + Text [ dutch ] = "rechthoekige haakjes (scaleerbaar)" ; + Text [ portuguese ] = "Parênteses rectos (graduáveis)" ; + Text[ chinese_simplified ] = "·½À¨ºÅ(¿É±ä)"; + Text[ russian ] = "Êâàäðàòíûå ñêîáêè (èçìåíÿåìûå)"; + Text[ polish ] = "Nawiasy kwadratowe (zmieniaj¹ce rozmiar)"; + Text[ japanese ] = "‘å‚©‚Á‚±(½¹°Ù‰Â)"; + Text[ chinese_traditional ] = "¤è¬A¸¹(¥iÅÜ)"; + Text[ arabic ] = "ÃÞæÇÓ ÞÇÆãÉ ÇáÒÇæíÉ (ÇáÍÌã ÞÇÈá ááÊÛííÑ)"; + Text[ greek ] = "áãêýëåò (êëéìáêþìåíåò)"; + Text[ korean ] = "°¢Áø °ýÈ£(¹èÀ²Á¶Á¤ °¡´É)"; + Text[ turkish ] = "Köþeli ayraç (ölçeklendirilebilir)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SLRDBRACKETX ; + HelpId = HID_SMA_SLRDBRACKETX ; + Text = "eckige Klammern (skalierbar)" ; + Text [ ENGLISH ] = "Double square brackets (scaleable)" ; + Text[ english_us ] = "Square brackets (scalable)"; + Text[ portuguese ] = "Parênteses rectos (ajustáveis)"; + Text[ russian ] = "êâàäðàòíûå ñêîáêè (èçì.)"; + Text[ greek ] = "áãêýëåò (êëéìáêþìåíåò)"; + Text[ dutch ] = "Dubbele hoekige haakjes (uitbreidbaar)"; + Text[ french ] = "Crochets (modifiables graduellement)"; + Text[ spanish ] = "corchetes (ajustables)"; + Text[ italian ] = "Parentesi quadre (in scala)"; + Text[ danish ] = "kantede parenteser (skalerbare)"; + Text[ swedish ] = "dubbla hakparenteser (skalbara)"; + Text[ polish ] = "nawiasy kwadratowe (zmieniaj¹ce rozmiar)"; + Text[ portuguese_brazilian ] = "Double square brackets (scaleable)"; + Text[ japanese ] = "‚©‚¬‚©‚Á‚±(½¹°Ù‰Â)"; + Text[ korean ] = "°¢Áø °ýÈ£ (¹èÀ²Á¶Á¤ °¡´É)"; + Text[ chinese_simplified ] = "·½À¨ºÅ(¿É±ä)"; + Text[ chinese_traditional ] = "Âù¦y§Î¬A¸¹(¥i¦ùÁY)"; + Text[ arabic ] = "ÃÞæÇÓ ÞÇÆãÉ ÇáÒÇæíÉ (ÇáÍÌã ÞÇÈá ááÊÛííÑ)"; + Text[ turkish ] = "Köþeli ayraç (ölçeklendirilebilir)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SLRLINEX ; + HelpId = HID_SMA_SLRLINEX ; + Text = "einfache Linien (skalierbar)" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "single Lines (Scaleable)" ; + Text [ portuguese_brazilian ] = "einfache Linien (skalierbar)" ; + Text [ swedish ] = "enkla linjer (skalbara)" ; + Text [ danish ] = "enkelte streger (skalerbare)" ; + Text [ italian ] = "Linee semplici (in scala)" ; + Text [ spanish ] = "líneas simples (graduables)" ; + Text [ french ] = "Lignes simples (modifiables graduellement)" ; + Text [ dutch ] = "enkele lijnen (scaleerbaar)" ; + Text [ portuguese ] = "Linhas simples (graduáveis)" ; + Text[ chinese_simplified ] = "µ¥Ïß(¿É±ä)"; + Text[ russian ] = "Îáû÷íûå ëèíèè (èçìåíÿåìûå)"; + Text[ polish ] = "Pojedyncze linie (zmieniaj¹ce rozmiar)"; + Text[ japanese ] = "cü(½¹°Ù‰Â)"; + Text[ chinese_traditional ] = "³æ½u(¥iÅÜ)"; + Text[ arabic ] = "ÎØæØ ÈÓíØÉ (ÇáÍÌã ÞÇÈá ááÊÛííÑ)"; + Text[ greek ] = "áðëÝò ãñáììÝò (äõíáôüôçôá êëéìÜêùóçò)"; + Text[ korean ] = "´ÜÀϼ± (¹èÀ²Á¶Á¤ °¡´É)"; + Text[ turkish ] = "Tek çizgiler (ölçeklendirilebilir)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SLRDLINEX ; + HelpId = HID_SMA_SLRDLINEX ; + Text = "doppelte Linien (skalierbar)" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Double Lines (Scaleable)" ; + Text [ portuguese_brazilian ] = "doppelte Linien (skalierbar)" ; + Text [ swedish ] = "dubbla linjer (skalbara)" ; + Text [ danish ] = "dobbelte streger (skalerbare)" ; + Text [ italian ] = "Linee doppie (in scala)" ; + Text [ spanish ] = "líneas dobles (graduables)" ; + Text [ french ] = "Lignes doubles (modifiables graduellement)" ; + Text [ dutch ] = "dubbele lijnen (scaleerbaar)" ; + Text [ portuguese ] = "Linhas duplas (graduáveis)" ; + Text[ chinese_simplified ] = "Ë«Ïß(¿É±ä)"; + Text[ russian ] = "Äâîéíûå ëèíèè (èçìåíÿåìûå)"; + Text[ polish ] = "Podwójne linie (zmieniaj¹ce rozmiar)"; + Text[ japanese ] = "“ñdcü(½¹°Ù‰Â)"; + Text[ chinese_traditional ] = "Âù½u(¥iÅÜ)"; + Text[ arabic ] = "ÎØæØ ãÒÏæÌÉ (ÇáÍÌã ÞÇÈá ááÊÛííÑ)"; + Text[ greek ] = "ÄéðëÝò ãñáììÝò (êëéìáêþìåíåò)"; + Text[ korean ] = "ÀÌÁß¼± (¹èÀ²Á¶Á¤ °¡´É)"; + Text[ turkish ] = "Çift çizgiler (ölçeklendirilebilir)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_SLRBRACEX ; + HelpId = HID_SMA_SLRBRACEX ; + Text = "geschweifte Klammern (skalierbar)" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Braces (scalable)" ; + Text [ portuguese_brazilian ] = "geschweifte Klammern (skalierbar)" ; + Text [ swedish ] = "klammerparenteser (skalbara)" ; + Text [ danish ] = "klammeparenteser (skalerbare)" ; + Text [ italian ] = "Parentesi graffe (in scala)" ; + Text [ spanish ] = "Llaves (graduables)" ; + Text [ french ] = "Accolades (modifiables graduellement)" ; + Text [ dutch ] = "Accolades (scaleerbaar)" ; + Text [ portuguese ] = "Chavetas (graduáveis)" ; + Text[ chinese_simplified ] = "»¨À¨ºÅ(¿É±ä)"; + Text[ russian ] = "Ôèãóðíûå ñêîáêè (èçìåíÿåìûå)"; + Text[ polish ] = "Nawiasy klamrowe (zmieniaj¹ce rozmiar)"; + Text[ japanese ] = "’†‚©‚Á‚±(½¹°Ù‰Â)"; + Text[ chinese_traditional ] = "ªá¬A¸¹(¥iÅÜ)"; + Text[ arabic ] = "ÃÞæÇÓ ãÊãæÌÉ (ÇáÍÌã ÞÇÈá ááÊÛííÑ)"; + Text[ greek ] = "¢ãêéóôñá (êëéìáêþìåíá)"; + Text[ korean ] = "ÈÖ¾îÁø °ýÈ£ (¹èÀ²Á¶Á¤ °¡´É)"; + Text[ turkish ] = "Kavisli ayraç (ölçeklendirilebilir)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SLRANGLEX ; + HelpId = HID_SMA_SLRANGLEX ; + Text = "spitze Klammern (skalierbar)" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Pointed Brackets (Scaleable)" ; + Text [ portuguese_brazilian ] = "spitze Klammern (skalierbar)" ; + Text [ swedish ] = "vinkelparenteser (skalbara)" ; + Text [ danish ] = "vinkelparenteser (skalerbare)" ; + Text [ italian ] = "Parentesi uncinate (in scala)" ; + Text [ spanish ] = "Paréntesis angulares (graduables)" ; + Text [ french ] = "Parenthèses pointues (modifiables graduellement)" ; + Text [ dutch ] = "spitse haakjes (scaleerbaar)" ; + Text [ portuguese ] = "Parênteses pontiagudos (graduáveis)" ; + Text[ chinese_simplified ] = "½ÇÀ¨ºÅ(¿É±ä)"; + Text[ russian ] = "Óãëîâûå ñêîáêè (èçìåíÿåìûå)"; + Text[ polish ] = "Nawiasy k¹towe (zmieniaj¹ce rozmiar)"; + Text[ japanese ] = "ŽR‚©‚Á‚±(½¹°Ù‰Â)"; + Text[ chinese_traditional ] = "¨¤¬A¸¹(¥iÅÜ)"; + Text[ arabic ] = "ÃÞæÇÓ ãÏÈÈÉ (ÇáÍÌã ÞÇÈá ááÊÛííÑ)"; + Text[ greek ] = "ÌõôåñÝò ðáñåíèÝóåéò (äõíáôüôçôá êëéìÜêùóçò)"; + Text[ korean ] = "»ÏÁ·ÇÑ °ýÈ£ (¹èÀ²Á¶Á¤ °¡´É)"; + Text[ turkish ] = "Sivri ayraç (ölçeklendirilebilir)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SLMRANGLEXY ; + HelpId = HID_SMA_SLMRANGLEXY ; + Text = "Operator Klammern (skalierbar)" ; + Text [ ENGLISH ] = "Operator Brackets" ; + Text[ english_us ] = "Operator Brackets"; + Text[ portuguese ] = "Parêntesis de operador (escalonável)"; + Text[ russian ] = "Ñêîáêè îïåðàòîðà (èçìåíÿåìûå)"; + Text[ dutch ] = "Operator-haken"; + Text[ french ] = "Parenthèses d'opérateur (modifiables graduellement)"; + Text[ spanish ] = "Paréntesis de operador (ajustable)"; + Text[ italian ] = "Parentesi operatore (in scala)"; + Text[ danish ] = "operatorparenteser (skalerbare)"; + Text[ swedish ] = "Operatorparenteser (skalbara)"; + Text[ polish ] = "Nawiasy operatora"; + Text[ portuguese_brazilian ] = "Operator Brackets"; + Text[ japanese ] = "‰‰ŽZŽq‚©‚Á‚±(½¹°Ù‰Â)"; + Text[ chinese_simplified ] = "ÔËËã·ûÀ¨ºÅ"; + Text[ chinese_traditional ] = "¹Bºâ²Å¬A¸¹"; + Text[ arabic ] = "ÃÞæÇÓ ÚÇãá ÇáÊÔÛíá (ÇáÍÌã ÞÇÈá ááÊÛííÑ)"; + Text[ greek ] = "Áãêýëåò ôåëåóôÞ (äõíáôüôçôá êëéìÜêùóçò)"; + Text[ korean ] = "¿¬»êÀÚ °ýÈ£"; + Text[ turkish ] = "Ýþleç ayraçlarý (ölçeklendirilebilir)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_XOVERBRACEY ; + HelpId = HID_SMA_XOVERBRACEY ; + Text = "geschweifte Klammer oben (skalierbar)" ; + Text [ ENGLISH ] = "curly bracket above (scaleable)" ; + Text[ english_us ] = "Braces top (scalable)"; + Text[ portuguese ] = "chaveta em cima (ajustável)"; + Text[ russian ] = "ôèãóðíàÿ ñêîáêà ñâåðõó (èçì.)"; + Text[ greek ] = "¢ãêéóôñï Üíù (êëéìáêþìåíá)"; + Text[ dutch ] = "accolade boven (uitbreidbaar)"; + Text[ french ] = "Accolades en haut (modifiables graduellement)"; + Text[ spanish ] = "llaves arriba (ajustables)"; + Text[ italian ] = "Parentesi tonda in alto (in scala)"; + Text[ danish ] = "klammeparenteser foroven (skalerbare)"; + Text[ swedish ] = "klammerparenteser uppe (skalbara)"; + Text[ polish ] = "nawias klamrowy u góry (zmieniaj¹cy rozmiar)"; + Text[ portuguese_brazilian ] = "curly bracket above (scaleable)"; + Text[ japanese ] = "’†‚©‚Á‚±ã(½¹°Ù‰Â)"; + Text[ korean ] = "ÈÖ¾îÁø °ýÈ£¸¦ À§¿¡ (¹èÀ²Á¶Á¤ °¡´É)"; + Text[ chinese_simplified ] = "»¨À¨ºÅÉϲ¿(¿É±ä)"; + Text[ chinese_traditional ] = "¨÷¦±¦¡¬A¸¹¤W¤è(¥i¦ùÁY)"; + Text[ arabic ] = "ÃÞæÇÓ ãÊãæÌÉ ÈÇáÃÚáì (ÇáÍÌã ÞÇÈá ááÊÛííÑ)"; + Text[ turkish ] = "Üst kavisli ayraç (ölçeklendirilebilir)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_XUNDERBRACEY ; + HelpId = HID_SMA_XUNDERBRACEY ; + Text = "geschweifte Klammer unten (skalierbar)" ; + Text [ ENGLISH ] = "curly bracket below (scaleable)" ; + Text[ english_us ] = "Braces bottom (scalable)"; + Text[ portuguese ] = "chaveta em baixo (ajustável)"; + Text[ russian ] = "ôèãóðíàÿ ñêîáêà ñíèçó (èçì.)"; + Text[ greek ] = "¢ãêéóôñï êÜôù (êëéìáêþìåíá)"; + Text[ dutch ] = "accolade beneden (uitbreidbaar)"; + Text[ french ] = "Accolades en bas (modifiables graduellement)"; + Text[ spanish ] = "llaves abajo (ajustables)"; + Text[ italian ] = "Parentesi tonda in basso (in scala)"; + Text[ danish ] = "klammeparenteser forneden (skalerbare)"; + Text[ swedish ] = "klammerparenteser nere (skalbara)"; + Text[ polish ] = "nawias klamrowy u do³u (zmieniaj¹cy rozmiar)"; + Text[ portuguese_brazilian ] = "curly bracket below (scaleable)"; + Text[ japanese ] = "’†‚©‚Á‚±‰º(½¹°Ù‰Â)"; + Text[ korean ] = "ÈÖ¾îÁø °ýÈ£¸¦ ¾Æ·¡¿¡ (¹èÀ²Á¶Á¤ °¡´É)"; + Text[ chinese_simplified ] = "·½À¨ºÅϲ¿(¿É±ä)"; + Text[ chinese_traditional ] = "¨÷¦±¦¡¬A¸¹¤U¤è(¥i¦ùÁY)"; + Text[ arabic ] = "ÃÞæÇÓ ãÊãæÌÉ ÈÇáÃÓÝá (ÇáÍÌã ÞÇÈá ááÊÛííÑ)"; + Text[ turkish ] = "Alt kavisli ayraç (ölçeklendirilebilir)"; + Text[ language_user1 ] = " "; + }; + }; + }; + ToolBox 8 + { + // format + HelpId = HID_SMA_FORMAT_TBX ; + Pos = MAP_APPFONT ( 0 , 41 ) ; + Size = MAP_APPFONT ( 65 , 95 ) ; + SVLook = TRUE ; + Hide = TRUE ; + LineCount = 3 ; + ItemImageList = ImageList + { + ImageBitmap = Bitmap + { + FILE = "colr.bmp" ; + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + RID_NEWLINE ; + RID_SBLANK ; + RID_BLANK ; + RID_BINOMXY ; + RID_STACK ; + RID_MATRIX ; + RID_ALIGNLX ; + RID_ALIGNCX ; + RID_ALIGNRX ; + RID_RSUBX ; + RID_RSUPX ; + RID_LSUBX ; + RID_LSUPX ; + RID_CSUBX ; + RID_CSUPX ; + }; + IdCount = + { + 15 ; + }; + }; + ItemList = + { + ToolBoxItem + { + Identifier = RID_LSUPX ; + HelpId = HID_SMA_LSUPX ; + Text = "Superscript links" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Superscript Left" ; + Text [ portuguese_brazilian ] = "Superscript links" ; + Text [ swedish ] = "Exponent till vänster" ; + Text [ danish ] = "superscript til venstre" ; + Text [ italian ] = "Apice sinistro" ; + Text [ spanish ] = "Superíndice a la izquierda" ; + Text [ french ] = "Exposant à gauche" ; + Text [ dutch ] = "Superscript links" ; + Text [ portuguese ] = "Expoente à esquerda" ; + Text[ chinese_simplified ] = "×ó×Ö½ÇÎÄ×Ö"; + Text[ russian ] = "Âåðõíèé èíäåêñ ñëåâà"; + Text[ polish ] = "Indeks górny z lewej"; + Text[ japanese ] = "¶ã•t‚«"; + Text[ chinese_traditional ] = "¥ª¦r¨¤¤å¦r"; + Text[ arabic ] = "ãÑÊÝÚ ÃíÓÑ"; + Text[ greek ] = "ÅêèÝôçò áñéóôåñÜ"; + Text[ korean ] = "À§Ã·ÀÚ¸¦ ¿ÞÂÊ¿¡"; + Text[ turkish ] = "Üst simge (sol)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_CSUPX ; + HelpId = HID_SMA_CSUPX ; + Text = "Superscript oben" ; + Text [ ENGLISH ] = "Superscript top" ; + TEXT[ italian ] = "Apice"; + TEXT[ portuguese_brazilian ] = "Superscript oben"; + TEXT[ portuguese ] = "Expoente em cima"; + TEXT[ danish ] = "superscript ovenover"; + TEXT[ french ] = "Exposant en haut"; + TEXT[ swedish ] = "Exponent uppe"; + TEXT[ dutch ] = "Superscript boven"; + TEXT[ spanish ] = "Superíndice arriba"; + TEXT[ english_us ] = "Superscript Top"; + TEXT[ chinese_simplified ] = "Éϱê"; + TEXT[ russian ] = "Âåðõíèé èíäåêñ ñâåðõó"; + TEXT[ polish ] = "Indeks górny w górze"; + TEXT[ japanese ] = "ã•t‚«•¶Žš"; + TEXT[ chinese_traditional ] = "¤W¼Ð"; + TEXT[ arabic ] = "ãÑÊÝÚ ÃÚáì"; + TEXT[ greek ] = "ÅêèÝôçò ðÜíù"; + TEXT[ korean ] = "À§Ã·ÀÚ¸¦ À§¿¡"; + TEXT[ turkish ] = "Üst simge (üst)"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_RSUPX ; + HelpId = HID_SMA_RSUPX ; + Text = "Superscript rechts" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Superscript Right" ; + Text [ portuguese_brazilian ] = "Superscript rechts" ; + Text [ swedish ] = "Exponent till höger" ; + Text [ danish ] = "superscript til højre" ; + Text [ italian ] = "Apice destro" ; + Text [ spanish ] = "Superíndice derecha" ; + Text [ french ] = "Exposant à droite" ; + Text [ dutch ] = "Superscript rechts" ; + Text [ portuguese ] = "Expoente à direita" ; + Text[ chinese_simplified ] = "ÓÒÉϱê"; + Text[ russian ] = "Âåðõíèé èíäåêñ ñïðàâà"; + Text[ polish ] = "Indeks górny z prawej"; + Text[ japanese ] = "‰Eã•t‚«•¶Žš"; + Text[ chinese_traditional ] = "¥k¤W¼Ð"; + Text[ arabic ] = "ãÑÊÝÚ íãíä"; + Text[ greek ] = "ÅêèÝôçò äåîéÜ"; + Text[ korean ] = "À§Ã·ÀÚ¸¦ ¿À¸¥ÂÊ¿¡"; + Text[ turkish ] = "Üst simge (sað)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_BINOMXY ; + HelpId = HID_SMA_BINOMXY ; + Text = "vertikale Anordnung (2 Elemente)" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Vertical Stack (2 Elements)" ; + Text [ portuguese_brazilian ] = "vertikale Anordnung (2 Elemente)" ; + Text [ swedish ] = "vertikal ordning (2 element)" ; + Text [ danish ] = "lodret placering (2 elementer)" ; + Text [ italian ] = "Disposizione verticale (2 elementi)" ; + Text [ spanish ] = "disposición vertical (2 elementos)" ; + Text [ french ] = "Disposition verticale (deux éléments)" ; + Text [ dutch ] = "verticale gerangschikt (2 elementen)" ; + Text [ portuguese ] = "Disposição vertical (2 elementos)" ; + Text[ chinese_simplified ] = "´¹Ö±±àÅÅ(2¸öÔªËØ)"; + Text[ russian ] = "Âåðòèêàëüíîå ðàñïîëîæåíèå (2 ýëåìåíòà)"; + Text[ polish ] = "Rozmieszczenie pionowe (2 elementy)"; + Text[ japanese ] = "㉺”z—ñ(2—v‘f)"; + Text[ chinese_traditional ] = "««ª½½s±Æ(2­Ó¤¸¯À)"; + Text[ arabic ] = "ÊÑÊíÈ ÃÝÞí (ÚäÕÑÇä)"; + Text[ greek ] = "Êáôáêüñõöç äéÜôáîç (2 Óôïé÷åßá)"; + Text[ korean ] = "¼öÁ÷ ¹è¿­ (2 ¿ä¼Ò)"; + Text[ turkish ] = "Dikey sýralama (2 öðe)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_NEWLINE ; + HelpId = HID_SMA_NEWLINE ; + Text = "neue Zeile beginnen" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "New Line" ; + Text [ portuguese_brazilian ] = "neue Zeile beginnen" ; + Text [ swedish ] = "börja ny rad" ; + Text [ danish ] = "begynd på ny linje" ; + Text [ italian ] = "Inizia riga nuova" ; + Text [ spanish ] = "Empezar línea nueva" ; + Text [ french ] = "Aller à la ligne" ; + Text [ dutch ] = "met een nieuwe regel beginnen" ; + Text [ portuguese ] = "Começar nova linha" ; + Text[ chinese_simplified ] = "ÐÂÐпªÊ¼"; + Text[ russian ] = "Ñ íîâîé ñòðîêè"; + Text[ polish ] = "Rozpocznij now¹ liniê"; + Text[ japanese ] = "V‚µ‚¢sŠJŽn"; + Text[ chinese_traditional ] = "·s¦æ¶}©l"; + Text[ arabic ] = "ÓØÑ ÌÏíÏ"; + Text[ greek ] = "áñ÷Þ íÝáò ãñáììÞò"; + Text[ korean ] = "»õ·Î¿î ¼± ½ÃÀÛ"; + Text[ turkish ] = "Yeni satýr"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_LSUBX ; + HelpId = HID_SMA_LSUBX ; + Text = "Subscript links" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Subscript Left" ; + Text [ portuguese_brazilian ] = "Subscript links" ; + Text [ swedish ] = "Index till vänster" ; + Text [ danish ] = "subcript til venstre" ; + Text [ italian ] = "Pedice sinistro" ; + Text [ spanish ] = "Subíndice izquierda" ; + Text [ french ] = "Indice à gauche" ; + Text [ dutch ] = "Subscript links" ; + Text [ portuguese ] = "Inferior à linha, esquerda" ; + Text[ chinese_simplified ] = "×óϱê"; + Text[ russian ] = "Íèæíèé èíäåêñ ñëåâà"; + Text[ polish ] = "Indeks dolny z lewej"; + Text[ japanese ] = "¶‰º•t‚«•¶Žš"; + Text[ chinese_traditional ] = "¥ª¤U¼Ð"; + Text[ arabic ] = "ãäÎÝÖ íÓÇÑ"; + Text[ greek ] = "Äåßêôçò áñéóôåñÜ"; + Text[ korean ] = "¾Æ·¡Ã·ÀÚ¸¦ ¿ÞÂÊ¿¡"; + Text[ turkish ] = "Alt simge (sol)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_CSUBX ; + HelpId = HID_SMA_CSUBX ; + Text = "Subscript unten" ; + Text [ ENGLISH ] = "Subscript bottom" ; + TEXT[ italian ] = "pedice"; + TEXT[ portuguese_brazilian ] = "Subscript unten"; + TEXT[ portuguese ] = "Inferior à linha, em baixo"; + TEXT[ danish ] = "subcript nedenunder"; + TEXT[ french ] = "Indice en bas"; + TEXT[ swedish ] = "Index nere"; + TEXT[ dutch ] = "Subscript beneden"; + TEXT[ spanish ] = "Subíndice abajo"; + TEXT[ english_us ] = "Subscript Bottom"; + TEXT[ chinese_simplified ] = "µ×ϱê"; + TEXT[ russian ] = "Íèæíèé èíäåêñ ñíèçó"; + TEXT[ polish ] = "Indeks dolny w dole"; + TEXT[ japanese ] = "‰º•t‚«•¶Žš"; + TEXT[ chinese_traditional ] = "©³¤U¼Ð"; + TEXT[ arabic ] = "ãäÎÝÖ ÃÓÝá"; + TEXT[ greek ] = "Äåßêôçò êÜôù"; + TEXT[ korean ] = "¾Æ·¡Ã·ÀÚ¸¦ ¹Ø¿¡"; + TEXT[ turkish ] = "Alt simge (alt)"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_RSUBX ; + HelpId = HID_SMA_RSUBX ; + Text = "Subscript rechts" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Subscript Right" ; + Text [ portuguese_brazilian ] = "Subscript rechts" ; + Text [ swedish ] = "Index till höger" ; + Text [ danish ] = "subcript til højre" ; + Text [ italian ] = "Pedice destro" ; + Text [ spanish ] = "Subíndice derecha" ; + Text [ french ] = "Indice à droite" ; + Text [ dutch ] = "Subscript rechts" ; + Text [ portuguese ] = "Inferior à linha, direita" ; + Text[ chinese_simplified ] = "ÓÒϱê"; + Text[ russian ] = "Íèæíèé èíäåêñ ñïðàâà"; + Text[ polish ] = "Indeks dolny z prawej"; + Text[ japanese ] = "‰E‰º•t‚«•¶Žš"; + Text[ chinese_traditional ] = "¥k¤U¼Ð"; + Text[ arabic ] = "ãäÎÝÖ íãíä"; + Text[ greek ] = "Äåßêôçò äåîéÜ"; + Text[ korean ] = "¾Æ·¡Ã·ÀÚ¸¦ ¿À¸¥ÂÊ¿¡"; + Text[ turkish ] = "Alt simge (sað)"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_STACK ; + HelpId = HID_SMA_STACK ; + Text = "vertikale Anordnung" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Vertical Stack" ; + Text [ portuguese_brazilian ] = "vertikale Anordnung" ; + Text [ swedish ] = "vertikal ordning" ; + Text [ danish ] = "lodret placering" ; + Text [ italian ] = "Disposizione verticale" ; + Text [ spanish ] = "Disposición vertical" ; + Text [ french ] = "Disposition verticale" ; + Text [ dutch ] = "verticale gerangschikt" ; + Text [ portuguese ] = "Disposição vertical" ; + Text[ chinese_simplified ] = "´¹Ö±·½Ïò±àÅÅ"; + Text[ russian ] = "Âåðòèêàëüíîå ðàñïîëîæåíèå"; + Text[ polish ] = "Rozmieszczenie pionowe"; + Text[ japanese ] = "㉺‚É”z—ñ"; + Text[ chinese_traditional ] = "««ª½¤è¦V½s±Æ"; + Text[ arabic ] = "ÊÑÊíÈ ÃÝÞí"; + Text[ greek ] = "Êáôáêüñõöç äéÜôáîç"; + Text[ korean ] = "¼öÁ÷ ¹è¿­"; + Text[ turkish ] = "Dikey sýralama"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SBLANK ; + HelpId = HID_SMA_SBLANK ; + Text = "kleiner Zwischenraum" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Small Gap" ; + Text [ portuguese_brazilian ] = "kleiner Zwischenraum" ; + Text [ swedish ] = "Litet mellanrum" ; + Text [ danish ] = "lille mellemrum" ; + Text [ italian ] = "Spazio intermedio piccolo" ; + Text [ spanish ] = "Espacio pequeño" ; + Text [ french ] = "Petit espace" ; + Text [ dutch ] = "kleine spatie" ; + Text [ portuguese ] = "Intervalo pequeno" ; + Text[ chinese_simplified ] = "Small Gap"; + Text[ russian ] = "Êîðîòêèé ïðîáåë"; + Text[ polish ] = "Ma³y odstêp miêdzy ramkami"; + Text[ japanese ] = "½Íß°½¬"; + Text[ chinese_traditional ] = "¤p¶¡¹j"; + Text[ arabic ] = "ÊÈÇÚÏ ÕÛíÑ"; + Text[ greek ] = "ìéêñü äéÜêåíï"; + Text[ korean ] = "ÀÛÀº °£°Ý"; + Text[ turkish ] = "Küçük aralýk"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_ALIGNLX ; + HelpId = HID_SMA_ALIGNLX ; + Text = "linksbündig ausrichten" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Align Left" ; + Text [ portuguese_brazilian ] = "linksbündig ausrichten" ; + Text [ swedish ] = "justera mot vänsterkant" ; + Text [ danish ] = "venstrejusteret" ; + Text [ italian ] = "Allinea a sinistra" ; + Text [ spanish ] = "alinear a la izquierda" ; + Text [ french ] = "Aligner à gauche" ; + Text [ dutch ] = "links uitlijnen" ; + Text [ portuguese ] = "Alinhar à esquerda" ; + Text[ chinese_simplified ] = "×ó¶ÔÆë"; + Text[ russian ] = "Âûðîâíÿòü ïî ëåâîìó êðàþ"; + Text[ polish ] = "Wyrównaj do lewej"; + Text[ japanese ] = "¶‘µ‚¦"; + Text[ chinese_traditional ] = "¥ª¹ï»ô"; + Text[ arabic ] = "ãÍÇÐÇÉ Åáì ÇáíÓÇÑ"; + Text[ greek ] = "Óôïß÷éóç áñéóôåñÜ"; + Text[ korean ] = "¿ÞÂÊ¿¡ ¸ÂÃã"; + Text[ turkish ] = "Sola hizala"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_ALIGNCX ; + HelpId = HID_SMA_ALIGNCX ; + /* ### ACHTUNG: Neuer Text in Resource? zentriert ausrichten : zentriert (horizontal) ausrichten */ + Text = "zentriert ausrichten" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Align Center" ; + Text [ portuguese_brazilian ] = "zentriert (horizontal) ausrichten" ; + Text [ swedish ] = "justera centrerat (horisontellt)" ; + Text [ danish ] = "centreret" ; + Text [ italian ] = "Allinea al centro" ; + Text [ spanish ] = "alinear al centro" ; + Text [ french ] = "Centrer" ; + Text [ dutch ] = "gecentreerd uitlijnen" ; + Text [ portuguese ] = "Alinhar ao centro" ; + Text[ chinese_simplified ] = "¾ÓÖжÔÆë"; + Text[ russian ] = "Âûðîâíÿòü ïî öåíòðó"; + Text[ polish ] = "Wyrównaj do œrodka"; + Text[ japanese ] = "’†‰›‘µ‚¦"; + Text[ chinese_traditional ] = "¸m¤¤¹ï»ô"; + Text[ arabic ] = "ãÍÇÐÇÉ Åáì ÇáæÓØ"; + Text[ greek ] = "êåíôñáñéóìÝíç óôïß÷éóç"; + Text[ korean ] = "°¡¿îµ¥ ¸ÂÃã"; + Text[ turkish ] = "Ortala"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_ALIGNRX ; + HelpId = HID_SMA_ALIGNRX ; + Text = "rechtsbündig ausrichten" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Align Right" ; + Text [ portuguese_brazilian ] = "rechtsbündig ausrichten" ; + Text [ swedish ] = "justera mot högerkant" ; + Text [ danish ] = "højrejusteret" ; + Text [ italian ] = "Allinea a destra" ; + Text [ spanish ] = "alinear a la derecha" ; + Text [ french ] = "Aligner à droite" ; + Text [ dutch ] = "rechts uitlijnen" ; + Text [ portuguese ] = "Alinhar à direita" ; + Text[ chinese_simplified ] = "ÓÒ¶ÔÆë"; + Text[ russian ] = "Âûðîâíÿòü ïî ïðàâîìó êðàþ"; + Text[ polish ] = "Wyrównaj do prawej"; + Text[ japanese ] = "‰E‘µ‚¦"; + Text[ chinese_traditional ] = "¥k¹ï»ô"; + Text[ arabic ] = "ãÍÇÐÇÉ Åáì Çáíãíä"; + Text[ greek ] = "Óôïß÷éóç äåîéÜ"; + Text[ korean ] = "¿À¸¥ÂÊ¿¡ ¸ÂÃã"; + Text[ turkish ] = "Saða hizala"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_MATRIX ; + HelpId = HID_SMA_MATRIX ; + Text = "Matrix Anordnung" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Matrix Stack" ; + Text [ portuguese_brazilian ] = "Matrix Anordnung" ; + Text [ swedish ] = "Matris ordning" ; + Text [ danish ] = "matrixstablet" ; + Text [ italian ] = "Disposizione matrice" ; + Text [ spanish ] = "Disposición matriz" ; + Text [ french ] = "Disposition type matrice" ; + Text [ dutch ] = "Matrix rangschikking" ; + Text [ portuguese ] = "Dispor em forma de matriz" ; + Text[ chinese_simplified ] = "±àÅžØÕó"; + Text[ russian ] = "Ðàñïîëîæåíèå ìàòðèöû"; + Text[ polish ] = "Rozmieszczenie macierzy"; + Text[ japanese ] = "s—ñ‚Ì”z’u"; + Text[ chinese_traditional ] = "½s±Æ¯x°}"; + Text[ arabic ] = "ÊÑÊíÈ ãÕÝæÝÉ"; + Text[ greek ] = "ÄéÜôáîç ìÞôñáò"; + Text[ korean ] = "Çà·Ä ¹è¿­"; + Text[ turkish ] = "Matris sýralamasý"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_BLANK ; + HelpId = HID_SMA_BLANK ; + Text = "Zwischenraum" ; + Text [ ENGLISH ] = "???" ; + Text [ english_us ] = "Gap" ; + Text [ portuguese_brazilian ] = "Zwischenraum" ; + Text [ swedish ] = "mellanrum" ; + Text [ danish ] = "mellemrum" ; + Text [ italian ] = "Spazio intermedio" ; + Text [ spanish ] = "Espacio" ; + Text [ french ] = "Espace" ; + Text [ dutch ] = "Spatie" ; + Text [ portuguese ] = "Intervalo" ; + Text[ chinese_simplified ] = "Gap"; + Text[ russian ] = "Ïðîáåë"; + Text[ polish ] = "Odstêp ramek"; + Text[ japanese ] = "½Íß°½"; + Text[ chinese_traditional ] = "¶¡¹j"; + Text[ arabic ] = "ÊÈÇÚÏ"; + Text[ greek ] = "ÄéÜêåíï"; + Text[ korean ] = "°£°Ý"; + Text[ turkish ] = "Aralýk"; + Text[ language_user1 ] = " "; + }; + }; + }; + ToolBox 9 + { + // misc + HelpId = HID_SMA_FORMAT_TBX ; + Pos = MAP_APPFONT ( 0 , 41 ) ; + Size = MAP_APPFONT ( 65 , 95 ) ; + SVLook = TRUE ; + Hide = TRUE ; + LineCount = 4 ; + ItemImageList = ImageList + { + ImageBitmap = Bitmap + { + FILE = "misc.bmp" ; + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + RID_INFINITY ; + RID_PARTIAL ; + RID_NABLA ; + RID_EXISTS ; + RID_FORALL ; + RID_HBAR; + RID_LAMBDABAR ; + RID_RE ; + RID_IM ; + RID_WP ; + RID_LEFTARROW ; + RID_RIGHTARROW ; + RID_UPARROW ; + RID_DOWNARROW ; + RID_DOTSLOW ; + RID_DOTSAXIS ; + RID_DOTSVERT ; + RID_DOTSUP ; + RID_DOTSDOWN ; + }; + IdCount = + { + 19 ; + }; + }; + ItemList = + { + ToolBoxItem + { + Identifier = RID_INFINITY ; + HelpId = HID_SMA_INFINITY ; + Text = "unendlich" ; + Text [ ENGLISH ] = "infinity" ; + TEXT[ italian ] = "Infinito"; + TEXT[ portuguese_brazilian ] = "unendlich"; + TEXT[ portuguese ] = "infinito"; + TEXT[ danish ] = "uendelig"; + TEXT[ french ] = "infini"; + TEXT[ swedish ] = "oändlig"; + TEXT[ dutch ] = "oneindig"; + TEXT[ spanish ] = "infinito"; + TEXT[ english_us ] = "Infinit"; + TEXT[ chinese_simplified ] = "ÎÞÏÞ"; + TEXT[ russian ] = "Áåñêîíå÷íî"; + TEXT[ polish ] = "nieskoñczonoœæ"; + TEXT[ japanese ] = "–³ŒÀ‘å"; + TEXT[ chinese_traditional ] = "µL­­"; + TEXT[ arabic ] = "áÇäåÇÆí"; + TEXT[ greek ] = "¢ðåéñï"; + TEXT[ korean ] = "¹«ÇÑ´ë"; + TEXT[ turkish ] = "Sonsuz"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_PARTIAL ; + HelpId = HID_SMA_PARTIAL ; + Text = "partial" ; + Text [ ENGLISH ] = "partial" ; + TEXT[ italian ] = "Parziale"; + TEXT[ portuguese_brazilian ] = "partial"; + TEXT[ portuguese ] = "parcial"; + TEXT[ danish ] = "partiel"; + TEXT[ french ] = "partiel"; + TEXT[ swedish ] = "partial"; + TEXT[ dutch ] = "partieel"; + TEXT[ spanish ] = "parcial"; + TEXT[ english_us ] = "Partial"; + TEXT[ chinese_simplified ] = "²¿·Ö"; + TEXT[ russian ] = "×àñòíûé äèôôåðåíöèàë"; + TEXT[ polish ] = "czêœciowy"; + TEXT[ japanese ] = "•Î”÷•ª"; + TEXT[ chinese_traditional ] = "³¡¥÷"; + TEXT[ arabic ] = "ÌÒÆí"; + TEXT[ greek ] = "ôìÞìá"; + TEXT[ korean ] = "Æíµµ ÇÔ¼ö"; + TEXT[ turkish ] = "Kýsmi"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_NABLA ; + HelpId = HID_SMA_NABLA ; + Text = "Nabla" ; + Text [ ENGLISH ] = "Nabla" ; + TEXT[ italian ] = "Nabla"; + TEXT[ portuguese_brazilian ] = "Nabla"; + TEXT[ portuguese ] = "Nabla"; + TEXT[ danish ] = "nabla"; + TEXT[ french ] = "Nabla"; + TEXT[ swedish ] = "Nabla"; + TEXT[ dutch ] = "Nabla"; + TEXT[ spanish ] = "Nabla"; + TEXT[ english_us ] = "Nabla"; + TEXT[ chinese_simplified ] = "Nabla"; + TEXT[ russian ] = "Íàáëà"; + TEXT[ polish ] = "Nabla"; + TEXT[ japanese ] = "Œù”z"; + TEXT[ chinese_traditional ] = "Nabla"; + TEXT[ arabic ] = "Nabla"; + TEXT[ greek ] = "Nabla"; + TEXT[ korean ] = "Nabla"; + TEXT[ turkish ] = "Nabla vektörü"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_EXISTS ; + HelpId = HID_SMA_EXISTS ; + Text = "Es existiert" ; + Text [ ENGLISH ] = "exists" ; + TEXT[ italian ] = "Esiste"; + TEXT[ portuguese_brazilian ] = "Es existiert"; + TEXT[ portuguese ] = "Existe"; + TEXT[ danish ] = "der eksisterer"; + TEXT[ french ] = "Il existe"; + TEXT[ swedish ] = "Det finns"; + TEXT[ dutch ] = "Er bestaat"; + TEXT[ spanish ] = "Existe"; + TEXT[ english_us ] = "There Exists"; + TEXT[ chinese_simplified ] = "´æÔÚ"; + TEXT[ russian ] = "Ñóùåñòâóåò"; + TEXT[ polish ] = "Istnieje"; + TEXT[ japanese ] = "‘¶Ýì—p‘f"; + TEXT[ chinese_traditional ] = "¦s¦b"; + TEXT[ arabic ] = "ãæÌæÏ"; + TEXT[ greek ] = "ÕðÜñ÷åé"; + TEXT[ korean ] = "ÀÖ½À´Ï´Ù"; + TEXT[ turkish ] = "Mevcut"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_FORALL ; + HelpId = HID_SMA_FORALL ; + Text = "Für alle" ; + Text [ ENGLISH ] = "forall" ; + TEXT[ italian ] = "Per tutti"; + TEXT[ portuguese_brazilian ] = "Für alle"; + TEXT[ portuguese ] = "Para todos"; + TEXT[ danish ] = "for ethvert"; + TEXT[ french ] = "Pour tous"; + TEXT[ swedish ] = "För alla"; + TEXT[ dutch ] = "Voor alle"; + TEXT[ spanish ] = "Para todos"; + TEXT[ english_us ] = "For All"; + TEXT[ chinese_simplified ] = "ÓÃÓÚÈ«²¿"; + TEXT[ russian ] = "Äëÿ âñåõ"; + TEXT[ polish ] = "Dla wszystkich"; + TEXT[ japanese ] = "‘SÌì—p‘f"; + TEXT[ chinese_traditional ] = "Óì¥Î¥þ³¡"; + TEXT[ arabic ] = "ááßá"; + TEXT[ greek ] = "Ãéá üëá"; + TEXT[ korean ] = "Àüü¿¡"; + TEXT[ turkish ] = "Tümü için"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_HBAR ; + HelpId = HID_SMA_HBAR ; + Text = "h quer" ; + Text [ ENGLISH ] = "h bar" ; + TEXT[ italian ] = "h barra"; + TEXT[ portuguese_brazilian ] = "h quer"; + TEXT[ portuguese ] = "h tranversal"; + TEXT[ danish ] = "h-streg"; + TEXT[ french ] = "h horizontal"; + TEXT[ swedish ] = "strukna h"; + TEXT[ dutch ] = "h liggend"; + TEXT[ spanish ] = "h barra"; + TEXT[ english_us ] = "h Bar"; + TEXT[ chinese_simplified ] = "ºáÖÃµÄ h"; + TEXT[ russian ] = "h ñ ïîïåðå÷íîé ÷åðòîé"; + TEXT[ polish ] = "h kreœlone"; + TEXT[ japanese ] = "h ÊÞ°"; + TEXT[ chinese_traditional ] = "¾î¸mªº h"; + TEXT[ arabic ] = "h ÃÝÞí"; + TEXT[ greek ] = "ÐëÜãéï h"; + TEXT[ korean ] = "h °¡·Î"; + TEXT[ turkish ] = "h yatay"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_LAMBDABAR ; + HelpId = HID_SMA_LAMBDABAR ; + Text = "lambda quer" ; + Text [ ENGLISH ] = "lambda bar" ; + TEXT[ italian ] = "Lambda barra"; + TEXT[ portuguese_brazilian ] = "lambda quer"; + TEXT[ portuguese ] = "lambda transversal"; + TEXT[ danish ] = "lambda-streg"; + TEXT[ french ] = "Lambda transversal"; + TEXT[ swedish ] = "strukna lambda"; + TEXT[ dutch ] = "lambda liggend"; + TEXT[ spanish ] = "lambda barra"; + TEXT[ english_us ] = "Lambda Bar"; + TEXT[ chinese_simplified ] = "ºáÖõÄÀ¼²¼´ï (lambda)"; + TEXT[ russian ] = "Ëàìáäà ñ ïîïåðå÷íîé ÷åðòîé"; + TEXT[ polish ] = "lambda kreœlona"; + TEXT[ japanese ] = "×ÑÀÞ ÊÞ°"; + TEXT[ chinese_traditional ] = "¾î¸mªºÄõ§G¹F (lambda)"; + TEXT[ arabic ] = "Lambda ÃÝÞí"; + TEXT[ greek ] = "ÐëÜãéï ë"; + TEXT[ korean ] = "¶÷´Ù °¡·Î"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_RE ; + HelpId = HID_SMA_RE ; + Text = "Realteil" ; + Text [ ENGLISH ] = "real part" ; + TEXT[ italian ] = "Parte reale"; + TEXT[ portuguese_brazilian ] = "Realteil"; + TEXT[ portuguese ] = "Parte real"; + TEXT[ danish ] = "realdel"; + TEXT[ french ] = "Partie réelle"; + TEXT[ swedish ] = "Realdel"; + TEXT[ dutch ] = "Reëel gedeelte"; + TEXT[ spanish ] = "Parte real"; + TEXT[ english_us ] = "Real Part"; + TEXT[ chinese_simplified ] = "ʵÊý²¿·Ö"; + TEXT[ russian ] = "Âåùåñòâåííàÿ ÷àñòü"; + TEXT[ polish ] = "Czêœæ rzeczywista"; + TEXT[ japanese ] = "ŽÀ”•”"; + TEXT[ chinese_traditional ] = "¹ê¼Æ³¡¥÷"; + TEXT[ arabic ] = "ÌÒÁ ÍÞíÞí"; + TEXT[ greek ] = "Ðñáãìáôéêü ìÝñïò"; + TEXT[ korean ] = "½Ç¼ö"; + TEXT[ turkish ] = "Gerçek kýsým"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_IM ; + HelpId = HID_SMA_IM ; + Text = "Imaginärteil" ; + Text [ ENGLISH ] = "imaginary part" ; + TEXT[ italian ] = "Parte immaginaria"; + TEXT[ portuguese_brazilian ] = "Imaginärteil"; + TEXT[ portuguese ] = "Parte imaginária"; + TEXT[ danish ] = "imaginærdel"; + TEXT[ french ] = "Partie imaginaire"; + TEXT[ swedish ] = "Imaginär del"; + TEXT[ dutch ] = "Imaginair gedeelte"; + TEXT[ spanish ] = "Parte imaginaria"; + TEXT[ english_us ] = "Imaginary Part"; + TEXT[ chinese_simplified ] = "ÐéÊý²¿·Ö"; + TEXT[ russian ] = "Ìíèìàÿ ÷àñòü"; + TEXT[ polish ] = "Czêœæ urojona"; + TEXT[ japanese ] = "‹•”•”"; + TEXT[ chinese_traditional ] = "µê¼Æ³¡¥÷"; + TEXT[ arabic ] = "ÌÒÁ ÎíÇáí"; + TEXT[ greek ] = "Öáíôáóôéêü ìÝñïò"; + TEXT[ korean ] = "Çã¼ö"; + TEXT[ turkish ] = "Sanal kýsým"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_WP ; + HelpId = HID_SMA_WP ; + Text = "Weierstrass p" ; + Text [ ENGLISH ] = "Weierstrass p" ; + TEXT[ italian ] = "p di Weierstrass"; + TEXT[ portuguese_brazilian ] = "Weierstrass p"; + TEXT[ portuguese ] = "Weierstrass p"; + TEXT[ danish ] = "Weierstrass p"; + TEXT[ french ] = "Weierstrass p"; + TEXT[ swedish ] = "Weierstrass p"; + TEXT[ dutch ] = "Weierstrass p"; + TEXT[ spanish ] = "p de Weierstrass"; + TEXT[ english_us ] = "Weierstrass p"; + TEXT[ chinese_simplified ] = "Weierstrass p"; + TEXT[ russian ] = "Ýëëèïòè÷åñêèé ñèìâîë Âåéåðøòðàññà"; + TEXT[ polish ] = "p Weierstrassa"; + TEXT[ japanese ] = "ܲ´Ù¼­Ä×½‚̑ȉ~ŠÖ” p"; + TEXT[ chinese_traditional ] = "Weierstrass p"; + TEXT[ arabic ] = "Weierstrass p"; + TEXT[ greek ] = "Weierstrass p"; + TEXT[ korean ] = "Weierstrass p"; + TEXT[ turkish ] = "Weierstrass p"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_LEFTARROW ; + HelpId = HID_SMA_LEFTARROW ; + Text = "Pfeil nach links" ; + Text [ ENGLISH ] = "arrow left" ; + TEXT[ italian ] = "Freccia a sinistra"; + TEXT[ portuguese_brazilian ] = "Pfeil nach links"; + TEXT[ portuguese ] = "Seta para a esquerda"; + TEXT[ danish ] = "pil mod venstre"; + TEXT[ french ] = "Flèche vers la gauche"; + TEXT[ swedish ] = "Pil till vänster"; + TEXT[ dutch ] = "Pijl naar links"; + TEXT[ spanish ] = "Flecha hacia la izquierda"; + TEXT[ english_us ] = "Left Arrow"; + TEXT[ chinese_simplified ] = "×óÏò¼ýÍ·"; + TEXT[ russian ] = "Ñòðåëêà âëåâî"; + TEXT[ polish ] = "Strza³ka w lewo"; + TEXT[ japanese ] = "¶–îˆó"; + TEXT[ chinese_traditional ] = "¥ª¦V½bÀY"; + TEXT[ arabic ] = "Óåã Åáì ÇáíÓÇÑ"; + TEXT[ greek ] = "ÂÝëïò ðñïò ôá áñéóôåñÜ"; + TEXT[ korean ] = "¿ÞÂÊ È­»ìÇ¥"; + TEXT[ turkish ] = "Sola ok"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_RIGHTARROW ; + HelpId = HID_SMA_RIGHTARROW ; + Text = "Pfeil nach rechts" ; + Text [ ENGLISH ] = "arrow right" ; + TEXT[ italian ] = "Freccia a destra"; + TEXT[ portuguese_brazilian ] = "Pfeil nach rechts"; + TEXT[ portuguese ] = "Seta para a direita"; + TEXT[ danish ] = "pil mod højre"; + TEXT[ french ] = "Flèche vers la droite"; + TEXT[ swedish ] = "Pil till höger"; + TEXT[ dutch ] = "Pijl naar rechts"; + TEXT[ spanish ] = "Flecha hacia la derecha"; + TEXT[ english_us ] = "Right Arrow"; + TEXT[ chinese_simplified ] = "ÓÒÏò¼ýÍ·"; + TEXT[ russian ] = "Ñòðåëêà âïðàâî"; + TEXT[ polish ] = "Strza³ka w prawo"; + TEXT[ japanese ] = "‰E–îˆó"; + TEXT[ chinese_traditional ] = "¥k¦V½bÀY"; + TEXT[ arabic ] = "Óåã Åáì ÇáíÓÇÑ"; + TEXT[ greek ] = "ÂÝëïò ðñïò ôá äåîéÜ"; + TEXT[ korean ] = "¿À¸¥ÂÊ È­»ìÇ¥"; + TEXT[ turkish ] = "Saða ok"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_UPARROW ; + HelpId = HID_SMA_UPARROW ; + Text = "Pfeil nach oben" ; + Text [ ENGLISH ] = "arrow up" ; + TEXT[ italian ] = "Freccia in alto"; + TEXT[ portuguese_brazilian ] = "Pfeil nach oben"; + TEXT[ portuguese ] = "Seta para cima"; + TEXT[ danish ] = "pil opad"; + TEXT[ french ] = "Flèche vers le haut"; + TEXT[ swedish ] = "Pil uppåt"; + TEXT[ dutch ] = "Pijl naar boven"; + TEXT[ spanish ] = "Flecha hacia arriba"; + TEXT[ english_us ] = "Up Arrow"; + TEXT[ chinese_simplified ] = "¼ýÍ·ÏòÉÏ"; + TEXT[ russian ] = "Ñòðåëêà ââåðõ"; + TEXT[ polish ] = "Strza³ka w górê"; + TEXT[ japanese ] = "ã–îˆó"; + TEXT[ chinese_traditional ] = "½bÀY¦V¤W"; + TEXT[ arabic ] = "Óåã Åáì ÃÚáì"; + TEXT[ greek ] = "ÂÝëïò ðñïò ôá ðÜíù"; + TEXT[ korean ] = "À­ È­»ìÇ¥"; + TEXT[ turkish ] = "Yukarý ok"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_DOWNARROW ; + HelpId = HID_SMA_DOWNARROW ; + Text = "Pfeil nach unten" ; + Text [ ENGLISH ] = "arrow down" ; + TEXT[ italian ] = "Freccia in basso"; + TEXT[ portuguese_brazilian ] = "Pfeil nach unten"; + TEXT[ portuguese ] = "Seta para baixo"; + TEXT[ danish ] = "pil nedad"; + TEXT[ french ] = "Flèche vers le bas"; + TEXT[ swedish ] = "Pil nedåt"; + TEXT[ dutch ] = "Pijl naar beneden"; + TEXT[ spanish ] = "Flecha hacia abajo"; + TEXT[ english_us ] = "Down Arrow"; + TEXT[ chinese_simplified ] = "ÏÂÏò¼ýÍ·"; + TEXT[ russian ] = "Ñòðåëêà âíèç"; + TEXT[ polish ] = "Strza³ka w górê"; + TEXT[ japanese ] = "‰º–îˆó"; + TEXT[ chinese_traditional ] = "¤U¦V½bÀY"; + TEXT[ arabic ] = "Óåã Åáì ÃÓÝá"; + TEXT[ greek ] = "ÂÝëïò ðñïò ôá êÜôù"; + TEXT[ korean ] = "¾Æ·¡ È­»ìÇ¥"; + TEXT[ turkish ] = "Aþaðý ok"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_DOTSLOW ; + HelpId = HID_SMA_DOTSLOW ; + Text = "Punkte unten" ; + Text [ ENGLISH ] = "dots low" ; + TEXT[ italian ] = "Punti sotto"; + TEXT[ portuguese_brazilian ] = "Punkte unten"; + TEXT[ portuguese ] = "Pontos em baixo"; + TEXT[ danish ] = "prikker nederst"; + TEXT[ french ] = "Points en bas"; + TEXT[ swedish ] = "Punkter nere"; + TEXT[ dutch ] = "Punten beneden"; + TEXT[ spanish ] = "Puntos abajo"; + TEXT[ english_us ] = "Dots Bottom"; + TEXT[ chinese_simplified ] = "µãÏòÏÂ"; + TEXT[ russian ] = "Òî÷êè ñíèçó"; + TEXT[ polish ] = "Punkty na dole"; + TEXT[ japanese ] = "Äޯĉº"; + TEXT[ chinese_traditional ] = "ÂI¦V¤U"; + TEXT[ arabic ] = "äÞÇØ ÃÓÝá"; + TEXT[ greek ] = "Êïõêêßäåò êÜôù"; + TEXT[ korean ] = "Á¡ ¾Æ·¡"; + TEXT[ turkish ] = "Noktalar (alt)"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_DOTSAXIS ; + HelpId = HID_SMA_DOTSAXIS ; + Text = "Punkte mittig" ; + Text [ ENGLISH ] = "dots mid" ; + TEXT[ italian ] = "Punti al centro"; + TEXT[ portuguese_brazilian ] = "Punkte mittig"; + TEXT[ portuguese ] = "Pontos ao centro"; + TEXT[ danish ] = "prikker centreret"; + TEXT[ french ] = "Points au milieu"; + TEXT[ swedish ] = "Punkter i mitten"; + TEXT[ dutch ] = "Punten in de midden"; + TEXT[ spanish ] = "Puntos en el medio"; + TEXT[ english_us ] = "Center dots"; + TEXT[ chinese_simplified ] = "ÖÐÏòµã"; + TEXT[ russian ] = "Òî÷êè ïî öåíòðó"; + TEXT[ polish ] = "Punkty w œrodku"; + TEXT[ japanese ] = "ÄޯĒ†‰›"; + TEXT[ chinese_traditional ] = "¤¤¦VÂI"; + TEXT[ arabic ] = "äÞÇØ Ýí ÇáæÓØ"; + TEXT[ greek ] = "Êïõêêßäåò êåíôñáñéóìÝíá"; + TEXT[ korean ] = "°¡¿îµ¥ Á¡"; + TEXT[ turkish ] = "Noktalar (orta)"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_DOTSVERT ; + HelpId = HID_SMA_DOTSVERT ; + Text = "Punkte vertikal" ; + Text [ ENGLISH ] = "dots vertical" ; + TEXT[ italian ] = "Punti verticali"; + TEXT[ portuguese_brazilian ] = "Punkte vertikal"; + TEXT[ portuguese ] = "Pontos na vertical"; + TEXT[ danish ] = "prikker lodret"; + TEXT[ french ] = "Points verticalement"; + TEXT[ swedish ] = "Punkter vertikalt"; + TEXT[ dutch ] = "Punten verticaal"; + TEXT[ spanish ] = "Puntos verticalmente"; + TEXT[ english_us ] = "Dots Vertically"; + TEXT[ chinese_simplified ] = "´¹Ö±µãÏß"; + TEXT[ russian ] = "Òî÷êè âåðòèêàëüíî"; + TEXT[ polish ] = "Punkty w pionie"; + TEXT[ japanese ] = "ÄÞ¯Ä㉺"; + TEXT[ chinese_traditional ] = "««ª½ÂI½u"; + TEXT[ arabic ] = "äÞÇØ ÑÃÓíÉ"; + TEXT[ greek ] = "Êïõêêßäåò êáôáêüñõöá"; + TEXT[ korean ] = "Á¡À» ¼öÁ÷À¸·Î"; + TEXT[ turkish ] = "Noktalar (dikey)"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_DOTSUP ; + HelpId = HID_SMA_DOTSUP ; + Text = "Punkte nach oben" ; + Text [ ENGLISH ] = "dots up" ; + TEXT[ italian ] = "Punti in alto"; + TEXT[ portuguese_brazilian ] = "Punkte nach oben"; + TEXT[ portuguese ] = "Pontos para cima"; + TEXT[ danish ] = "prikker opad"; + TEXT[ french ] = "Points vers le haut"; + TEXT[ swedish ] = "Punkter uppåt"; + TEXT[ dutch ] = "Punten naar boven"; + TEXT[ spanish ] = "Puntos hacia arriba"; + TEXT[ english_us ] = "Dots to Top"; + TEXT[ chinese_simplified ] = "µãÏòÉÏ"; + TEXT[ russian ] = "Òî÷êè ââåðõ"; + TEXT[ polish ] = "Punkty w górê"; + TEXT[ japanese ] = "ÄޯĉEオ‚è"; + TEXT[ chinese_traditional ] = "ÂI¦V¤W"; + TEXT[ arabic ] = "äÞÇØ Åáì ÃÚáì"; + TEXT[ greek ] = "Êïõêêßäåò ðñïò ôá ðÜíù"; + TEXT[ korean ] = "Á¡À» À§·Î"; + TEXT[ turkish ] = "Noktalar (üst)"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_DOTSDOWN ; + HelpId = HID_SMA_DOTSDOWN ; + Text = "Punkte nach unten" ; + Text [ ENGLISH ] = "dots down" ; + TEXT[ italian ] = "Punti in basso"; + TEXT[ portuguese_brazilian ] = "Punkte nach unten"; + TEXT[ portuguese ] = "Pontos para baixo"; + TEXT[ danish ] = "prikker nedad"; + TEXT[ french ] = "Points vers le bas"; + TEXT[ swedish ] = "Punkter nedåt"; + TEXT[ dutch ] = "Punten naar beneden"; + TEXT[ spanish ] = "Puntos hacia abajo"; + TEXT[ english_us ] = "Align dots down"; + TEXT[ chinese_simplified ] = "µãÏòÏÂ"; + TEXT[ russian ] = "Òî÷êè âíèç"; + TEXT[ polish ] = "Punkty w dó³"; + TEXT[ japanese ] = "ÄޯĉE‰º‚ª‚è"; + TEXT[ chinese_traditional ] = "ÂI¦V¤U"; + TEXT[ arabic ] = "äÞÇØ Åáì ÃÓÝá"; + TEXT[ greek ] = "Êïõêêßäåò ðñïò ôá êÜôù"; + TEXT[ korean ] = "Á¡À» ¾Æ·¡·Î"; + TEXT[ turkish ] = "Noktalar (alt)"; + TEXT[ language_user1 ] = " "; + }; + }; + }; + ToolBox 10 + { + // main menu of selection-window + HelpId = HID_SMA_SELECTION_TBX ; + Pos = MAP_APPFONT ( 0 , 0 ) ; + Size = MAP_APPFONT ( 65 , 38 ) ; + SVLook = TRUE ; + LineCount = 2 ; + ItemImageList = ImageList + { + ImageBitmap = Bitmap + { + FILE = "img.bmp" ; // image-list bitmap + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + RID_UNBINOPS_CAT ; + RID_RELATIONS_CAT ; + RID_SETOPERATIONS_CAT ; + RID_FUNCTIONS_CAT ; + RID_OPERATORS_CAT ; + RID_ATTRIBUTES_CAT ; + RID_MISC_CAT ; + RID_BRACKETS_CAT ; + RID_FORMAT_CAT ; + }; + IdCount = + { + 9 ; + }; + }; + ItemList = + { + ToolBoxItem + { + Identifier = RID_UNBINOPS_CAT ; + HelpId = HID_SMA_UNBINOPS_CAT ; + Text = "Unäre/Binäre Operatoren" ; + Text [ ENGLISH ] = "unary/binary operators" ; + Text [ english_us ] = "Unary/Binary Operators" ; + Text [ portuguese_brazilian ] = "Unäre/Binäre Operatoren" ; + Text [ swedish ] = "Monära/Binära operatorer" ; + Text [ danish ] = "Monadiske/binære operatorer" ; + Text [ italian ] = "Operatori unari/binari" ; + Text [ spanish ] = "Operadores unarios/binarios" ; + Text [ french ] = "Opérateurs unaires/binaires" ; + Text [ dutch ] = "Unaire/Binaire operatoren" ; + Text [ portuguese ] = "Operadores unários/binários" ; + Text[ chinese_simplified ] = "Ò»Ôª/¶þÔªÔËËã·û"; + Text[ russian ] = "Óíàðíûå/Áèíàðíûå îïåðàòîðû"; + Text[ polish ] = "Unarne/Binarne Operatory"; + Text[ japanese ] = "¼Þ­°ÅØ/ÊÞ²Å؉‰ŽZŽq"; + Text[ chinese_traditional ] = "¤@¤¸/¤G¤¸¹Bºâ²Å"; + Text[ arabic ] = "ÚæÇãá ÊÔÛíá ËäÇÆíÉ/ÃÍÇÏíÉ"; + Text[ greek ] = "Åíáäéêïß/Äõáäéêïß ôåëåóôÝò"; + Text[ korean ] = "´ÜÇ×/2Áø ¿¬»êÀÚ"; + Text[ turkish ] = "Birli/ikili iþleçler"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_RELATIONS_CAT ; + HelpId = HID_SMA_RELATIONS_CAT ; + Text = "Relationen" ; + Text [ ENGLISH ] = "relations" ; + Text [ english_us ] = "Relations" ; + Text [ portuguese_brazilian ] = "Relationen" ; + Text [ swedish ] = "relationer" ; + Text [ danish ] = "Relationer" ; + Text [ italian ] = "Relazioni" ; + Text [ spanish ] = "Relaciones" ; + Text [ french ] = "Relations" ; + Text [ dutch ] = "Relaties" ; + Text [ portuguese ] = "Relações" ; + Text[ chinese_simplified ] = "¹Øϵ"; + Text[ russian ] = "Îòíîøåíèÿ"; + Text[ polish ] = "Relacje"; + Text[ japanese ] = "ŠÖŒW‰‰ŽZ‹L†"; + Text[ chinese_traditional ] = "Ãö«Y"; + Text[ arabic ] = "ÇáÚáÇÞÇÊ"; + Text[ greek ] = "Ó÷Ýóåéò"; + Text[ korean ] = "°ü°è"; + Text[ turkish ] = "Ýliþkiler"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_SETOPERATIONS_CAT ; + HelpId = HID_SMA_SETOPERATIONS_CAT ; + Text = "Mengenoperationen" ; + Text [ ENGLISH ] = "set operations" ; + Text [ english_us ] = "Set-Operations" ; + Text [ portuguese_brazilian ] = "Mengenoperationen" ; + Text [ swedish ] = "Mängdoperationer" ; + Text [ danish ] = "Mængdeoperationer" ; + Text [ italian ] = "Operazioni degli insiemi" ; + Text [ spanish ] = "Operaciones de conjuntos" ; + Text [ french ] = "Opérations quantitatives" ; + Text [ dutch ] = "Definities" ; + Text [ portuguese ] = "Operações de conjuntos" ; + Text[ chinese_simplified ] = "ÊýÁ¿ÔËËã"; + Text[ russian ] = "Îïåðàöèè ìíîæåñòâ"; + Text[ polish ] = "Operacje na zbiorach"; + Text[ japanese ] = "W‡‰‰ŽZ"; + Text[ chinese_traditional ] = "¼Æ¶q¹Bºâ"; + Text[ arabic ] = "ãÌãæÚÉ ÚãáíÇÊ"; + Text[ greek ] = "ÓõíáñôÞóåéò óõíüëùí"; + Text[ korean ] = "ÁýÇÕ ¿¬»ê"; + Text[ turkish ] = "Küme iþlemleri"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_FUNCTIONS_CAT ; + HelpId = HID_SMA_FUNCTIONS_CAT ; + Text = "Funktionen" ; + Text [ ENGLISH ] = "functions" ; + Text [ english_us ] = "Functions" ; + Text [ portuguese_brazilian ] = "Funktionen" ; + Text [ swedish ] = "Funktioner" ; + Text [ danish ] = "Funktioner" ; + Text [ italian ] = "Funzioni" ; + Text [ spanish ] = "Funciones" ; + Text [ french ] = "Fonctions" ; + Text [ dutch ] = "Functies" ; + Text [ portuguese ] = "Funções" ; + Text[ chinese_simplified ] = "º¯Êý"; + Text[ russian ] = "Ôóíêöèè"; + Text[ polish ] = "Funkcje"; + Text[ japanese ] = "ŠÖ”"; + Text[ chinese_traditional ] = "¨ç¼Æ"; + Text[ arabic ] = "ÏÇáÇÊ"; + Text[ greek ] = "ÓõíáñôÞóåéò"; + Text[ korean ] = "ÇÔ¼ö"; + Text[ turkish ] = "Ýþlevler"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_OPERATORS_CAT ; + HelpId = HID_SMA_OPERATORS_CAT ; + Text = "Operatoren" ; + Text [ ENGLISH ] = "operators" ; + Text [ english_us ] = "Operators" ; + Text [ portuguese_brazilian ] = "Operatoren" ; + Text [ swedish ] = "Operatorer" ; + Text [ danish ] = "Operatorer" ; + Text [ italian ] = "Operatori" ; + Text [ spanish ] = "Operadores" ; + Text [ french ] = "Opérateurs" ; + Text [ dutch ] = "Operatoren" ; + Text [ portuguese ] = "Operadores" ; + Text[ chinese_simplified ] = "ÔËËã·û"; + Text[ russian ] = "Îïåðàòîðû"; + Text[ polish ] = "Operatory"; + Text[ japanese ] = "‰‰ŽZŽq"; + Text[ chinese_traditional ] = "¹Bºâ²Å"; + Text[ arabic ] = "ÚæÇãá ÇáÊÔÛíá"; + Text[ greek ] = "ÔåëåóôÝò"; + Text[ korean ] = "¿¬»êÀÚ"; + Text[ turkish ] = "Ýþleçler"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_BREAK ; + }; + ToolBoxItem + { + Identifier = RID_ATTRIBUTES_CAT ; + HelpId = HID_SMA_ATTRIBUTES_CAT ; + Text = "Attribute" ; + Text [ ENGLISH ] = "attributs" ; + Text [ english_us ] = "Attributes" ; + Text [ portuguese_brazilian ] = "Attribute" ; + Text [ swedish ] = "Attribut" ; + Text [ danish ] = "Attributter" ; + Text [ italian ] = "Attributo" ; + Text [ spanish ] = "Atributos" ; + Text [ french ] = "Attributs" ; + Text [ dutch ] = "Attributen" ; + Text [ portuguese ] = "Atributos" ; + Text[ chinese_simplified ] = "ÊôÐÔ"; + Text[ russian ] = "Àòðèáóòû"; + Text[ polish ] = "Atrybuty"; + Text[ japanese ] = "‘®«"; + Text[ chinese_traditional ] = "ÄÝ©Ê"; + Text[ arabic ] = "ÓãÇÊ"; + Text[ greek ] = "Éäéüôçôåò"; + Text[ korean ] = "¼Ó¼º"; + Text[ turkish ] = "Öznitelikler"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_MISC_CAT ; + HelpId = HID_SMA_MISC_CAT ; + Text = "Sonstiges" ; + Text [ ENGLISH ] = "Misc" ; + TEXT[ italian ] = "Altro"; + TEXT[ portuguese_brazilian ] = "Sonstiges"; + TEXT[ portuguese ] = "Outros"; + TEXT[ danish ] = "Andet"; + TEXT[ french ] = "Autres"; + TEXT[ swedish ] = "Övrigt"; + TEXT[ dutch ] = "Diversen"; + TEXT[ spanish ] = "Otros"; + TEXT[ english_us ] = "Others"; + TEXT[ chinese_simplified ] = "ÆäËû"; + TEXT[ russian ] = "Ïðî÷åå"; + TEXT[ polish ] = "Inne"; + TEXT[ japanese ] = "‚»‚Ì‘¼"; + TEXT[ chinese_traditional ] = "¨ä¥L"; + TEXT[ arabic ] = "ÛíÑ Ðáß"; + TEXT[ greek ] = "¢ëëá"; + TEXT[ korean ] = "±âŸ"; + TEXT[ turkish ] = "Diðer"; + TEXT[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SPACE ; + }; + ToolBoxItem + { + Identifier = RID_BRACKETS_CAT ; + HelpId = HID_SMA_BRACKETS_CAT ; + Text = "Klammern" ; + Text [ ENGLISH ] = "parentheses" ; + Text [ english_us ] = "Brackets" ; + Text [ portuguese_brazilian ] = "Klammern" ; + Text [ swedish ] = "Parenteser" ; + Text [ danish ] = "Parenteser" ; + Text [ italian ] = "Parentesi" ; + Text [ spanish ] = "Paréntesis" ; + Text [ french ] = "Parenthèses" ; + Text [ dutch ] = "Haakjes" ; + Text [ portuguese ] = "Parênteses" ; + Text[ chinese_simplified ] = "À¨ºÅ"; + Text[ russian ] = "Ñêîáêè"; + Text[ polish ] = "Nawiasy"; + Text[ japanese ] = "Š‡ŒÊ"; + Text[ chinese_traditional ] = "¬A¸¹"; + Text[ arabic ] = "ÃÞæÇÓ"; + Text[ greek ] = "ÐáñåíèÝóåéò"; + Text[ korean ] = "°ýÈ£"; + Text[ turkish ] = "Ayraçlar"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = RID_FORMAT_CAT ; + HelpId = HID_SMA_FORMAT_CAT ; + Text = "Formatierungen" ; + Text [ ENGLISH ] = "format" ; + Text [ english_us ] = "Format" ; + Text [ portuguese_brazilian ] = "Formatierungen" ; + Text [ swedish ] = "Formateringar" ; + Text [ danish ] = "Formateringer" ; + Text [ italian ] = "Formattazioni" ; + Text [ spanish ] = "Formatos" ; + Text [ french ] = "Formatage" ; + Text [ dutch ] = "Opmaak" ; + Text [ portuguese ] = "Formatações" ; + Text[ chinese_simplified ] = "¸ñʽ"; + Text[ russian ] = "Ôîðìàò"; + Text[ polish ] = "Formatowania"; + Text[ japanese ] = "‘Ž®"; + Text[ chinese_traditional ] = "®æ¦¡"; + Text[ arabic ] = "ÊäÓíÞ"; + Text[ greek ] = "ÌïñöïðïéÞóåéò"; + Text[ korean ] = "¼­½Ä"; + Text[ turkish ] = "Format"; + Text[ language_user1 ] = " "; + }; + }; + }; + Text [ portuguese ] = "Selecção" ; + Text [ english_us ] = "Selection" ; + Text [ portuguese_brazilian ] = "Operands" ; + Text [ swedish ] = "Urval" ; + Text [ danish ] = "Udvalg" ; + Text [ italian ] = "Selezione" ; + Text [ spanish ] = "Selección" ; + Text [ french ] = "Sélection" ; + Text [ dutch ] = "Selectie" ; + Text[ chinese_simplified ] = "Ñ¡Ôñ"; + Text[ russian ] = "Âûáîð"; + Text[ polish ] = "Wybór"; + Text[ japanese ] = "‘I‘ð"; + Text[ chinese_traditional ] = "¿ï¾Ü"; + Text[ arabic ] = "ÊÍÏíÏ"; + Text[ language_user1 ] = " "; + Text[ greek ] = "ÅðéëïãÞ"; + Text[ korean ] = "¼±ÅÃ"; + Text[ turkish ] = "Seçim"; +}; + + +DockingWindow RID_CMDBOXWINDOW +{ + HelpId = HID_SMA_COMMAND_WIN ; + Moveable = TRUE ; + Closeable = FALSE ; + Sizeable = TRUE ; + OutputSize = TRUE ; + HideWhenDeactivate = FALSE ; + SVLook = TRUE ; + Size = MAP_APPFONT ( 292 , 94 ) ; + Dockable = TRUE ; + Text = "Kommandos" ; + Text [ ENGLISH ] = "Commands" ; + Text [ norwegian ] = "Kommandoer" ; + Text [ italian ] = "Comandi" ; + Text [ portuguese_brazilian ] = "Comandos" ; + Text [ portuguese ] = "Comandos" ; + Text [ finnish ] = "Komennot" ; + Text [ danish ] = "Kommandoer" ; + Text [ french ] = "Commandes" ; + Text [ swedish ] = "Kommandon" ; + Text [ dutch ] = "Commando´s" ; + Text [ spanish ] = "Comandos" ; + Text [ english_us ] = "Commands" ; + Text[ chinese_simplified ] = "ÃüÁî"; + Text[ russian ] = "Êîìàíäû"; + Text[ polish ] = "Polecenia"; + Text[ japanese ] = "ºÏÝÄÞ"; + Text[ chinese_traditional ] = "©R¥O"; + Text[ arabic ] = "ÃæÇãÑ"; + Text[ greek ] = "ÅíôïëÝò"; + Text[ korean ] = "¸í·É"; + Text[ turkish ] = "Komutlar"; + Text[ language_user1 ] = " "; +}; + +ImageList RID_DEFAULTIMAGELIST_LC +{ + ImageBitmap = Bitmap + { + File = "lc_out.bmp" ; + File [ ENGLISH ] = "lc_out01.bmp" ; + File [ DANISH ] = "lc_out45.bmp" ; + File [ ENGLISH_US ] = "lc_out01.bmp" ; + File [ SPANISH ] = "lc_out34.bmp" ; + File [ FRENCH ] = "lc_out33.bmp" ; + File [ ITALIAN ] = "lc_out39.bmp" ; + File [ DUTCH ] = "lc_out31.bmp" ; + File [ SWEDISH ] = "lc_out46.bmp" ; + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + SID_NEXTERR ; + SID_PREVERR ; + SID_VIEW050 ; + SID_VIEW100 ; + SID_VIEW200 ; + SID_ZOOMIN ; + SID_ZOOMOUT ; + SID_ADJUST ; + SID_DRAW ; + SID_TOOLBOX ; + SID_FONT ; + SID_FONTSIZE ; + SID_DISTANCE ; + SID_ALIGN ; + SID_FORMULACURSOR ; + SID_SYMBOLS_CATALOGUE ; + }; + IdCount = + { + 16; + }; +}; + +ImageList RID_DEFAULTIMAGELIST_SC +{ + ImageBitmap = Bitmap + { + File = "sc_out.bmp" ; + File [ ENGLISH ] = "sc_out01.bmp" ; + File [ DANISH ] = "sc_out45.bmp" ; + File [ ENGLISH_US ] = "sc_out01.bmp" ; + File [ SPANISH ] = "sc_out34.bmp" ; + File [ FRENCH ] = "sc_out33.bmp" ; + File [ ITALIAN ] = "sc_out39.bmp" ; + File [ DUTCH ] = "sc_out31.bmp" ; + File [ SWEDISH ] = "sc_out46.bmp" ; + }; + MaskColor = IMAGE_STDBTN_COLOR ; + IdList = + { + SID_NEXTERR ; + SID_PREVERR ; + SID_VIEW050 ; + SID_VIEW100 ; + SID_VIEW200 ; + SID_ZOOMIN ; + SID_ZOOMOUT ; + SID_ADJUST ; + SID_DRAW ; + SID_TOOLBOX ; + SID_FONT ; + SID_FONTSIZE ; + SID_DISTANCE ; + SID_ALIGN ; + SID_FORMULACURSOR ; + SID_SYMBOLS_CATALOGUE ; + }; + IdCount = + { + 16; + }; +}; + +String RID_DOCUMENTSTR +{ + Text = "Formel" ; + Text [ ENGLISH ] = "Formula" ; + Text [ english_us ] = "Formula" ; + Text [ dutch ] = "Formule" ; + Text [ swedish ] = "Formel" ; + Text [ danish ] = "Formel" ; + Text [ italian ] = "Formula" ; + Text [ spanish ] = "Fórmula" ; + Text [ french ] = "Formule" ; + Text [ portuguese ] = "Fórmula" ; + Text [ portuguese_brazilian ] = "Formel" ; + Text[ chinese_simplified ] = "¹«Ê½"; + Text[ russian ] = "Ôîðìóëà"; + Text[ polish ] = "Formu³a"; + Text[ japanese ] = "”Ž®"; + Text[ chinese_traditional ] = "¤½¦¡"; + Text[ arabic ] = "ÕíÛÉ"; + Text[ greek ] = "Ôýðïò"; + Text[ korean ] = "¼ö½Ä"; + Text[ turkish ] = "Formül"; + Text[ language_user1 ] = " "; +}; + +String STR_MATH_DOCUMENT_FULLTYPE_50 +{ + Text = "StarOffice 5.0 Formel" ; + Text [ ENGLISH ] = "StarOffice 5.0 Formula" ; + Text [ english_us ] = "StarOffice 5.0 Formula" ; + Text [ swedish ] = "StarOffice 5.0 Formel" ; + Text [ danish ] = "StarOffice 5.0 formel" ; + Text [ italian ] = "Formula StarOffice 5.0" ; + Text [ spanish ] = "Fórmula StarOffice 5.0" ; + Text [ french ] = "Formule StarOffice 5.0" ; + Text [ dutch ] = "StarOffice 5.0 Formule" ; + Text [ portuguese_brazilian ] = "StarOffice 5.0 Formel" ; + Text [ portuguese ] = "Fórmula StarOffice 5.0" ; + Text[ chinese_simplified ] = "StarOffice 5.0 ¹«Ê½"; + Text[ russian ] = "Ôîðìóëà StarOffice 5.0"; + Text[ polish ] = "Formu³a StarOffice 5.0"; + Text[ japanese ] = "StarOffice 5.0 ”Ž®"; + Text[ chinese_traditional ] = "StarOffice 5.0 ¤½¦¡"; + Text[ arabic ] = "StarOffice 5.0 ÕíÛÉ"; + Text[ greek ] = "Ôýðïò (StarOffice 5.0)"; + Text[ korean ] = "StarOffice 5.0 ¼ö½Ä"; + Text[ turkish ] = "StarOffice 5.0 - Formül"; + Text[ language_user1 ] = " "; +}; + +String STR_MATH_DOCUMENT_FULLTYPE_40 +{ + Text = "StarOffice 4.0 Formel" ; + Text [ ENGLISH ] = "StarOffice 4.0 Formula" ; + Text [ english_us ] = "StarOffice 4.0 Formula" ; + Text [ swedish ] = "StarOffice 4.0 Formel" ; + Text [ danish ] = "StarOffice 4.0 formel" ; + Text [ italian ] = "Formula StarOffice 4.0" ; + Text [ spanish ] = "Fórmula StarOffice 4.0" ; + Text [ french ] = "Formule StarOffice 4.0" ; + Text [ dutch ] = "StarOffice 4.0 Formule" ; + Text [ portuguese_brazilian ] = "StarOffice 4.0 Formel" ; + Text [ portuguese ] = "Fórmula StarOffice 4.0" ; + Text[ chinese_simplified ] = "StarOffice 4.0 ¹«Ê½"; + Text[ russian ] = "Ôîðìóëà StarOffice 4.0"; + Text[ polish ] = "Formu³a StarOffice 4.0"; + Text[ japanese ] = "StarOffice 4.0 ”Ž®"; + Text[ chinese_traditional ] = "StarOffice 4.0 ¤½¦¡"; + Text[ arabic ] = "StarOffice 4.0 ÕíÛÉ"; + Text[ greek ] = "Ôýðïò (StarOffice 4.0)"; + Text[ korean ] = "StarOffice 4.0 ¼ö½Ä"; + Text[ turkish ] = "StarOffice 4.0 - Formül"; + Text[ language_user1 ] = " "; +}; + +String STR_MATH_DOCUMENT_FULLTYPE_31 +{ + Text = "StarOffice 3.0 Formel" ; + Text [ ENGLISH ] = "StarOffice 3.0 Formula" ; + Text [ english_us ] = "StarOffice 3.0 Formula" ; + Text [ swedish ] = "StarOffice 3.0 Formel" ; + Text [ danish ] = "StarOffice 3.0 formel" ; + Text [ italian ] = "Formula StarOffice 3.0" ; + Text [ spanish ] = "Fórmula StarOffice 3.0" ; + Text [ french ] = "Formule StarOffice 3.0" ; + Text [ dutch ] = "StarOffice 3.0 Formule" ; + Text [ portuguese_brazilian ] = "StarOffice 3.0 Formel" ; + Text [ portuguese ] = "Fórmula StarOffice 3.0" ; + Text[ chinese_simplified ] = "StarOffice 3.0 ¹«Ê½"; + Text[ russian ] = "Ôîðìóëà StarOffice 3.0"; + Text[ polish ] = "Formu³a StarOffice 3.0"; + Text[ japanese ] = "StarOffice 3.0 ”Ž®"; + Text[ chinese_traditional ] = "StarOffice 3.0 ¤½¦¡"; + Text[ arabic ] = "StarOffice 3.0 ÕíÛÉ"; + Text[ greek ] = "StarOffice 3.0 - Ôýðïò"; + Text[ korean ] = "StarOffice 3.0 ¼ö½Ä"; + Text[ turkish ] = "StarOffice 3.0 - Formül"; + Text[ language_user1 ] = " "; +}; + +String RID_SYMBOLFILESSTR +{ + Text = "Symboldateien (*.sms)" ; + Text [ ENGLISH ] = "Symbolfiles (*.sms)" ; + Text [ english_us ] = "Symbol files (*.sms)" ; + Text [ swedish ] = "Symbolfiler (*.sms)" ; + Text [ danish ] = "Symbolfiler (*.sms)" ; + Text [ italian ] = "File simbolo (*.sms)" ; + Text [ spanish ] = "Archivos de símbolos (*.sms)" ; + Text [ french ] = "Fichiers de symboles (*.sms)" ; + Text [ dutch ] = "Symboolbestanden (*.sms)" ; + Text [ portuguese_brazilian ] = "Symboldateien (*.sms)" ; + Text [ portuguese ] = "Ficheiros de símbolos (*.sms)" ; + Text[ russian ] = "Ôàéëû ñèìâîëîâ (*.sms)"; + Text[ polish ] = "Pliki symboli (*.sms)"; + Text[ japanese ] = "¼ÝÎÞ٠̧²Ù(*.sms)"; + Text[ chinese_simplified ] = "ͼ±êÎļþ(*.sms)"; + Text[ chinese_traditional ] = "¹Ï¥ÜÀÉ®×(*.sms)"; + Text[ arabic ] = "(*.sms) ãáÝÇÊ ÇáÑãæÒ"; + Text[ greek ] = "Áñ÷åßá óõìâüëùí (*.sms)"; + Text[ korean ] = "±âÈ£ ÆÄÀÏ (*.sms)"; + Text[ turkish ] = "Simge dosyalarý (*.sms)"; +}; + +String RID_ALLFILESSTR +{ + Text = "Alle Dateien (*.*)" ; + Text [ ENGLISH ] = "All Files (*.*)" ; + Text [ dutch ] = "Alle bestanden (*.*)" ; + Text [ english_us ] = "All files (*.*)" ; + Text [ swedish ] = "Alla filer (*.*)" ; + Text [ danish ] = "Alle filer (*.*)" ; + Text [ italian ] = "Tutti i file (*.*)" ; + Text [ spanish ] = "Todos los archivos (*.*)" ; + Text [ french ] = "Tous les fichiers (*.*)" ; + Text [ portuguese ] = "Ficheiros todos (*.*)" ; + Text [ portuguese_brazilian ] = "Alle Dateien (*.*)" ; + Text[ russian ] = "Âñå ôàéëû (*.*)"; + Text[ polish ] = "Wszystkie pliki (*.*)"; + Text[ japanese ] = "‚·‚ׂĂÌ̧²Ù(*.*)"; + Text[ chinese_simplified ] = "È«²¿µÄÎļþ(*.*)"; + Text[ chinese_traditional ] = "¥þ³¡ªºÀÉ®×(*.*)"; + Text[ arabic ] = "(*.*) ßá ÇáãáÝÇÊ"; + Text[ greek ] = "¼ëá ôá áñ÷åßá (*.*)"; + Text[ korean ] = "¸ðµç ÆÄÀÏ (*.*)"; + Text[ turkish ] = "Tüm dosyalar (*.*)"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_IDENT +{ + Text = "FEHLER : " ; + Text [ ENGLISH ] = "ERROR : " ; + Text [ english_us ] = "ERROR : " ; + Text [ italian ] = "ERRORE: " ; + Text [ spanish ] = "ERROR : " ; + Text [ french ] = "ERREUR : " ; + Text [ dutch ] = "FOUT: " ; + Text [ swedish ] = "FEL : " ; + Text [ danish ] = "FEJL : " ; + Text [ portuguese_brazilian ] = "FEHLER : " ; + Text [ portuguese ] = "ERRO : " ; + Text[ chinese_simplified ] = "´íÎó£º "; + Text[ russian ] = "ÎØÈÁÊÀ : "; + Text[ polish ] = "B£¥D : "; + Text[ japanese ] = "ERROR: "; + Text[ chinese_traditional ] = "¿ù»~¡G "; + Text[ arabic ] = ": ÎØÃ"; + Text[ greek ] = "ÓÖÁËÌÁ : "; + Text[ korean ] = "ERROR : "; + Text[ turkish ] = "HATA : "; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_UNKOWN +{ + Text = "Ein unbekannter Fehler ist aufgetreten" ; + Text [ ENGLISH ] = "Unknown error occured" ; + Text [ english_us ] = "Unknown error occurred" ; + Text [ italian ] = "Si è avuto un errore sconosciuto" ; + Text [ spanish ] = "Se ha producido un error desconocido" ; + Text [ french ] = "Une erreur inconnue est survenue." ; + Text [ dutch ] = "Er is een onbekende fout opgetreden" ; + Text [ swedish ] = "Ett okänt fel har uppstått" ; + Text [ danish ] = "Der er optået en ukendt fejl" ; + Text [ portuguese_brazilian ] = "Ein unbekannter Fehler ist aufgetreten" ; + Text [ portuguese ] = "Surgiu um erro desconhecido." ; + Text[ chinese_simplified ] = "·¢ÉúÒ»¸ö²»Ã÷µÄ´íÎó¡£"; + Text[ russian ] = "Ïðîèçîøëà íåèçâåñòíàÿ îøèáêà"; + Text[ polish ] = "Wyst¹pi³ nieznany b³¹d"; + Text[ japanese ] = "•s–¾‚È´×°‚ª”­¶"; + Text[ chinese_traditional ] = "µo¥Í¤@­Ó¤£©úªº¿ù»~¡C"; + Text[ arabic ] = "ÍÏË ÎØà ÛíÑ ãÚÑæÝ"; + Text[ greek ] = "ÐáñïõóéÜóôçêå Üãíùóôï óöÜëìá"; + Text[ korean ] = "¾Ë·ÁÁöÁö ¾ÊÀº ¿À·ù ¹ß»ý"; + Text[ turkish ] = "Bilinmeyen bir hata oluþtu"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_UNEXPECTEDCHARACTER +{ + Text = "Unerwartetes Zeichen" ; + Text [ ENGLISH ] = "Unexpected character" ; + Text [ dutch ] = "Onverwacht teken" ; + Text [ english_us ] = "Unexpected character" ; + Text [ italian ] = "Carattere inatteso" ; + Text [ spanish ] = "Carácter no esperado" ; + Text [ french ] = "Caractère imprévu" ; + Text [ swedish ] = "Oväntat tecken" ; + Text [ danish ] = "Uventet tegn" ; + Text [ portuguese_brazilian ] = "Unerwartetes Zeichen" ; + Text [ portuguese ] = "Caracter não esperado" ; + Text[ chinese_simplified ] = "ÒâÍâµÄ×Ö·û"; + Text[ russian ] = "Íåîæèäàííûé çíàê"; + Text[ polish ] = "Nieoczekiwany znak"; + Text[ japanese ] = "•s“K“–‚È•¶Žš"; + Text[ chinese_traditional ] = "·N¥~ªº¦r¤¸"; + Text[ arabic ] = "ÍÑÝ ÛíÑ ãÊæÞÚ"; + Text[ greek ] = "Ìç áíáìåíüìåíïò ÷áñáêôÞñáò"; + Text[ korean ] = "¿¹»óÄ¡ ¾ÊÀº ¹®ÀÚ"; + Text[ turkish ] = "Beklenmeyen karakter"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_OVERFLOW +{ + Text = "Formeleingabe zu umfangreich" ; + Text [ ENGLISH ] = "Formula too big" ; + Text [ dutch ] = "Formule te omvangrijk" ; + Text [ english_us ] = "Formula entry too complex" ; + Text [ italian ] = "Formula digitata troppo complessa" ; + Text [ spanish ] = "La fórmula es muy compleja" ; + Text [ french ] = "Entrée de formules trop complexe" ; + Text [ swedish ] = "Formelinmatning alltför komplex" ; + Text [ danish ] = "Formelinput for omfangsrigt" ; + Text [ portuguese_brazilian ] = "Formeleingabe zu umfangreich" ; + Text [ portuguese ] = "Fórmula demasiado complexa" ; + Text[ chinese_simplified ] = "ÊäÈëµÄ¹«Ê½Ì«¸´ºÏ"; + Text[ russian ] = "Ââîä ôîðìóëû ñëèøêîì îáúåìíûé"; + Text[ polish ] = "Wprowadzenie formu³y zbyt kompleksowe"; + Text[ japanese ] = "”Ž®‚Ì“ü—Í‚ª‘½‚·‚¬‚Ü‚·"; + Text[ chinese_traditional ] = "¿é¤Jªº¤½¦¡¤Ó½Æ¦X"; + Text[ arabic ] = "ÅÏÎÇá ÇáÕíÛÉ ãÚÞÏ ááÛÇíÉ"; + Text[ greek ] = "Ï ôýðïò ðïõ Ý÷åôå åéóÜãåé åßíáé õðåñâïëéêÜ ðåñßðëïêïò"; + Text[ korean ] = "ÀÔ·ÂÇÑ ¼ö½ÄÀÌ ³Ê¹« ±¤¹üÀ§ÇÔ"; + Text[ turkish ] = "Formül giriþi çok karmaþýk"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_LGROUPEXPECTED +{ + Text = "'{' erwartet" ; + Text [ ENGLISH ] = "'{' expected" ; + Text [ dutch ] = "'{' verwacht" ; + Text [ english_us ] = "'{' expected" ; + Text [ italian ] = "Atteso '{'" ; + Text [ spanish ] = "Se requiere '{'" ; + Text [ french ] = "'{' requis" ; + Text [ swedish ] = "'{' förväntad" ; + Text [ danish ] = "'{' forventes" ; + Text [ portuguese_brazilian ] = "'{' erwartet" ; + Text [ portuguese ] = "Necessário '{'" ; + Text[ chinese_simplified ] = "ÆÚ´ý '{'"; + Text[ russian ] = "'{' îæèäàåòñÿ"; + Text[ polish ] = "'{' powinien wyst¹piæ"; + Text[ japanese ] = "'{'‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«Ý '{'"; + Text[ arabic ] = "ãØáæÈ '{'"; + Text[ greek ] = "'{' áíáìÝíåôáé"; + Text[ korean ] = "'{' ÇÊ¿äÇÔ"; + Text[ turkish ] = "'{' gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_RGROUPEXPECTED +{ + Text = "'}' erwartet" ; + Text [ ENGLISH ] = "'}' expected" ; + Text [ english_us ] = "'}' expected" ; + Text [ italian ] = "'}' atteso" ; + Text [ spanish ] = "Se requiere '}'" ; + Text [ french ] = "'}' requis" ; + Text [ dutch ] = "'}' verwacht" ; + Text [ swedish ] = "'}' förväntad" ; + Text [ danish ] = "'}' forventes" ; + Text [ portuguese_brazilian ] = "'}' erwartet" ; + Text [ portuguese ] = "'}' necessária" ; + Text[ russian ] = "'}' îæèäàåòñÿ"; + Text[ polish ] = "'}' oczekiwany"; + Text[ japanese ] = "'}'‚ð–]‚Þ"; + Text[ chinese_simplified ] = "ÆÚ´ý '}'"; + Text[ chinese_traditional ] = "´Á«Ý '}'"; + Text[ arabic ] = "ãÊæÞÚ '}'"; + Text[ greek ] = "'}' áíáìÝíåôáé"; + Text[ korean ] = "'}' °¡ ÇÊ¿äÇÔ"; + Text[ turkish ] = "'}' gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_LBRACEEXPECTED +{ + Text = "'(' erwartet" ; + Text [ ENGLISH ] = "'(' expected" ; + Text [ dutch ] = "'(' verwacht" ; + Text [ english_us ] = "'(' expected" ; + Text [ italian ] = "Atteso '('" ; + Text [ spanish ] = "Se requiere '(' " ; + Text [ french ] = "'(' requis" ; + Text [ swedish ] = "'(' förväntad" ; + Text [ danish ] = "'(' forventes" ; + Text [ portuguese_brazilian ] = "'(' erwartet" ; + Text [ portuguese ] = "Necessário '('" ; + Text[ chinese_simplified ] = "ÆÚ´ý '('"; + Text[ russian ] = "'(' îæèäàåòñÿ"; + Text[ polish ] = "'('powinien wyst¹piæ"; + Text[ japanese ] = "'('‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«Ý '('"; + Text[ arabic ] = "ãØáæÈ'('"; + Text[ greek ] = "'(' áíáìÝíåôáé"; + Text[ korean ] = "'(' ÇÊ¿äÇÔ"; + Text[ turkish ] = "'(' gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_RBRACEEXPECTED +{ + Text = "')' erwartet" ; + Text [ ENGLISH ] = "')' expected" ; + Text [ english_us ] = "')' expected" ; + Text [ italian ] = "Atteso ')'" ; + Text [ spanish ] = "Se requiere ')'" ; + Text [ french ] = "')' requis" ; + Text [ dutch ] = "')' verwacht" ; + Text [ swedish ] = "')' förväntad" ; + Text [ danish ] = "')' forventes" ; + Text [ portuguese_brazilian ] = "')' erwartet" ; + Text [ portuguese ] = "Necessário ')'" ; + Text[ chinese_simplified ] = "ÆÚ´ý ')'"; + Text[ russian ] = "')' îæèäàåòñÿ"; + Text[ polish ] = "')' powinien wyst¹piæ"; + Text[ japanese ] = "')'‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«Ý ')'"; + Text[ arabic ] = "ãØáæÈ ')'"; + Text[ greek ] = "')' áíáìÝíåôáé"; + Text[ korean ] = "')' ÇÊ¿äÇÔ"; + Text[ turkish ] = "')' gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_FUNCEXPECTED +{ + Text = "Funktion erwartet" ; + Text [ ENGLISH ] = "Function expected" ; + Text [ dutch ] = "Functie verwacht" ; + Text [ english_us ] = "Function expected" ; + Text [ italian ] = "Attesa funzione" ; + Text [ spanish ] = "Se requiere una función" ; + Text [ french ] = "Fonction requise" ; + Text [ swedish ] = "Funktion förväntad" ; + Text [ danish ] = "Funktion forventes" ; + Text [ portuguese_brazilian ] = "Funktion erwartet" ; + Text [ portuguese ] = "Necessário função" ; + Text[ chinese_simplified ] = "ÆÚ´ýº¯Êý"; + Text[ russian ] = "Îæèäàåòñÿ ôóíêöèÿ"; + Text[ polish ] = "Oczekiwana funkcja"; + Text[ japanese ] = "ŠÖ”‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«Ý¨ç¼Æ"; + Text[ arabic ] = "ãØáæÈ ÏÇáÉ"; + Text[ greek ] = "ÁíáìÝíåôáé óõíÜñôçóç"; + Text[ korean ] = "ÇÔ¼ö ÇÊ¿äÇÔ"; + Text[ turkish ] = "Ýþlev gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_UNOPEREXPECTED +{ + /* ### ACHTUNG: Neuer Text in Resource? Unärer Operator erwartet : Un§rer Operator erwartet */ + Text = "Unärer Operator erwartet" ; + Text [ ENGLISH ] = "Unary operator expected" ; + Text [ english_us ] = "Unary operator expected" ; + Text [ italian ] = "Atteso operatore unario" ; + Text [ spanish ] = "Se espera un operador unario" ; + Text [ french ] = "Opérateur unaire requis" ; + Text [ dutch ] = "Monade verwacht" ; + Text [ swedish ] = "Monär operator förväntad" ; + Text [ danish ] = "Monadisk operator forventes" ; + Text [ portuguese_brazilian ] = "Unõrer Operator erwartet" ; + Text [ portuguese ] = "Necessário operador unário" ; + Text[ chinese_simplified ] = "ÆÚ´ýÔËËã·û¡£"; + Text[ russian ] = "Îæèäàåòñÿ óíàðíûé îïåðàòîð"; + Text[ polish ] = "W tym miejscu powinien wyst¹piæ unarny operator"; + Text[ japanese ] = "¼Þ­°Å؉‰ŽZŽq‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«Ý¹Bºâ²Å¡C"; + Text[ arabic ] = "ãÊæÞÚ ÚÇãá ÊÔÛíá ÃÍÇÏí"; + Text[ greek ] = "ÁíáìÝíåôáé åíáäéêüò ôåëåóôÞò"; + Text[ korean ] = "´ÜÇ× ¿¬»êÀÚ ÇÊ¿äÇÔ"; + Text[ turkish ] = "Birli iþleç gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_BINOPEREXPECTED +{ + /* ### ACHTUNG: Neuer Text in Resource? Binärer Operator erwartet : Bin§rer Operator erwartet */ + Text = "Binärer Operator erwartet" ; + Text [ ENGLISH ] = "Binary operator expected" ; + Text [ dutch ] = "Binaire operator verwacht" ; + Text [ english_us ] = "Binary operator expected" ; + Text [ italian ] = "Operatore binario atteso" ; + Text [ spanish ] = "Se espera un operador binario" ; + Text [ french ] = "Opérateur binaire requis" ; + Text [ swedish ] = "Binär operator förväntad" ; + Text [ danish ] = "Binær operator forventes" ; + Text [ portuguese ] = "Necessário operador binário" ; + Text [ portuguese_brazilian ] = "Binõrer Operator erwartet" ; + Text[ chinese_simplified ] = "ÆÚ´ý¶þÔªÔËËã·û"; + Text[ russian ] = "Îæèäåòñÿ áèíàðíûé îïåðàòîð"; + Text[ polish ] = "Oczekiwany binarny operator"; + Text[ japanese ] = "ÊÞ²Å؉‰ŽZŽq‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«Ý¤G¤¸¹Bºâ²Å"; + Text[ arabic ] = "ãÊæÞÚ ÚÇãá ÊÔÛíá ËäÇÆí"; + Text[ greek ] = "ÁíáìÝíåôáé äõáäéêüò ôåëåóôÞò"; + Text[ korean ] = "2Áø ¿¬»êÀÚ ÇÊ¿äÇÔ"; + Text[ turkish ] = "Ýkili iþleç gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_SYMBOLEXPECTED +{ + Text = "Symbol erwartet" ; + Text [ ENGLISH ] = "Symbol expected" ; + Text [ english_us ] = "Symbol expected" ; + Text [ italian ] = "Atteso simbolo" ; + Text [ spanish ] = "Se necesita un símbolo" ; + Text [ french ] = "Symbole requis" ; + Text [ dutch ] = "Symbool verwacht" ; + Text [ swedish ] = "Symbol förväntad" ; + Text [ danish ] = "Symbol forventes" ; + Text [ portuguese_brazilian ] = "Symbol erwartet" ; + Text [ portuguese ] = "Necessário símbolo" ; + Text[ chinese_simplified ] = "ÆÚ´ýͼ±ê"; + Text[ russian ] = "Îæèäàåòñÿ ñèìâîë"; + Text[ polish ] = "Oczekiwany symbol"; + Text[ japanese ] = "¼ÝÎÞÙ‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«Ý¹Ï¥Ü"; + Text[ arabic ] = "ãØáæÈ ÑãÒ"; + Text[ greek ] = "ÁíáìÝíåôáé óýìâïëï"; + Text[ korean ] = "±âÈ£ ÇÊ¿äÇÔ"; + Text[ turkish ] = "Simge gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_IDENTEXPECTED +{ + Text = "Identifier erwartet" ; + Text [ ENGLISH ] = "Identifier expected" ; + Text [ dutch ] = "Identifier verwacht" ; + Text [ english_us ] = "Identifier expected" ; + Text [ italian ] = "Atteso identifier" ; + Text [ spanish ] = "Se requiere un identificador" ; + Text [ french ] = "Identificateur requis" ; + Text [ swedish ] = "Identifier förväntad" ; + Text [ danish ] = "Identifikator forventes" ; + Text [ portuguese_brazilian ] = "Identifier erwartet" ; + Text [ portuguese ] = "Necessário identificador" ; + Text[ chinese_simplified ] = "ÆÚ´ýʶ±ð·û"; + Text[ russian ] = "Îæèàåòñÿ èäåíòèôèêàòîð"; + Text[ polish ] = "W tym miejscu powinien wyst¹piæ identyfikator"; + Text[ japanese ] = "Ž¯•ÊŽq‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«ÝÃѧO²Å"; + Text[ arabic ] = "ãØáæÈ ãÚÑøÝ"; + Text[ greek ] = "ÁíáìÝíåôáé áíáãíùñéóôéêü"; + Text[ korean ] = "È®ÀÎÀÚ ÇÊ¿äÇÔ"; + Text[ turkish ] = "Tanýtýcý bekleniyor"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_POUNDEXPECTED +{ + Text = "'#' erwartet" ; + Text [ ENGLISH ] = "'#' expected" ; + Text [ english_us ] = "'#' expected" ; + Text [ italian ] = "Atteso '#'" ; + Text [ spanish ] = "Se requiere '#'" ; + Text [ french ] = "'#' requis" ; + Text [ dutch ] = "'#' verwacht" ; + Text [ swedish ] = "'#' förväntad" ; + Text [ danish ] = "'#' forventes" ; + Text [ portuguese_brazilian ] = "'#' erwartet" ; + Text [ portuguese ] = "Necessário '#'" ; + Text[ chinese_simplified ] = "ÆÚ´ý '#'"; + Text[ russian ] = "'#' îæèäàåòñÿ"; + Text[ polish ] = "'#' powinien wyst¹piæ"; + Text[ japanese ] = "'#'‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«Ý '#'"; + Text[ arabic ] = "ãØáæÈ '#'"; + Text[ greek ] = "'#' áíáìÝíåôáé"; + Text[ korean ] = "'#' ÇÊ¿äÇÔ"; + Text[ turkish ] = "'#' gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_COLOREXPECTED +{ + Text = "Farbe erwartet" ; + Text [ ENGLISH ] = "Color expected" ; + Text [ dutch ] = "Kleur verwacht" ; + Text [ english_us ] = "Color required" ; + Text [ italian ] = "Atteso colore" ; + Text [ spanish ] = "Se requiere un color" ; + Text [ french ] = "Couleur requise" ; + Text [ swedish ] = "Färg förväntad" ; + Text [ danish ] = "Farve forventes" ; + Text [ portuguese_brazilian ] = "Farbe erwartet" ; + Text [ portuguese ] = "Necessário cor" ; + Text[ chinese_simplified ] = "ÆÚ´ýÑÕÉ«"; + Text[ russian ] = "Îæèäàåòñÿ öâåò"; + Text[ polish ] = "Oczekiwany kolor"; + Text[ japanese ] = "F‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«ÝÃC¦â"; + Text[ arabic ] = "ãØáæÈ áæä"; + Text[ greek ] = "Áðáéôåßôáé ÷ñþìá"; + Text[ korean ] = "»ö ÇÊ¿äÇÔ"; + Text[ turkish ] = "Renk gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_LPARENTEXPECTED +{ + Text = "Linke Begrenzung erwartet" ; + Text [ ENGLISH ] = "Left delimiter expected" ; + Text [ english_us ] = "Left limit expected" ; + Text [ italian ] = "Atteso limite sinisto" ; + Text [ spanish ] = "Se requiere el límite izquierdo" ; + Text [ french ] = "Limite gauche requise" ; + Text [ dutch ] = "Linker begrenzing verwacht" ; + Text [ swedish ] = "Vänsterparentes förväntad" ; + Text [ danish ] = "Venstre begrænsning forventes" ; + Text [ portuguese_brazilian ] = "Linke Begrenzung erwartet" ; + Text [ portuguese ] = "Necessário limite esquerdo" ; + Text[ chinese_simplified ] = "ÆÚ´ý×ó·Ö½ç"; + Text[ russian ] = "Îæèäàåòñÿ ëåâîå îãðàíè÷åíèå"; + Text[ polish ] = "Oczekiwana lewa krawêdŸ"; + Text[ japanese ] = "¶‘¤‚Ì‹«ŠEü‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«Ý¥ª¤À¬É"; + Text[ arabic ] = "ãØáæÈ ÍÏ ÃíÓÑ"; + Text[ greek ] = "ÁíáìÝíåôáé áñéóôåñü üñéï"; + Text[ korean ] = "¿ÞÂÊ °æ°è ÇÊ¿äÇÔ"; + Text[ turkish ] = "Sol sýnýrlayýcý gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_RPARENTEXPECTED +{ + Text = "Rechte Begrenzung erwartet" ; + Text [ ENGLISH ] = "Right delimiter expected" ; + Text [ english_us ] = "Right limit expected" ; + Text [ italian ] = "Atteso limite destro" ; + Text [ spanish ] = "Se requiere el límite derecho" ; + Text [ french ] = "Limite droite requise" ; + Text [ dutch ] = "Rechter begrenzing verwacht" ; + Text [ swedish ] = "Högerparentes förväntad" ; + Text [ danish ] = "Højre begrænsning forventes" ; + Text [ portuguese_brazilian ] = "Rechte Begrenzung erwartet" ; + Text [ portuguese ] = "Necessário limite direito" ; + Text[ chinese_simplified ] = "ÆÚ´ýÓÒ·Ö½ç"; + Text[ russian ] = "Îæèäàåòñÿ ïðàâîå îãðàíè÷åíèå"; + Text[ polish ] = "Oczekiwana prawa krawêdŸ"; + Text[ japanese ] = "‰E‘¤‚É‹«ŠEü‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«Ý¥k¤À¬É"; + Text[ arabic ] = "ãØáæÈ ÍÏ Ãíãä"; + Text[ greek ] = "ÁíáìÝíåôáé äåîéü üñéï"; + Text[ korean ] = "¿À¸¥ÂÊ °æ°è ÇÊ¿äÇÔ"; + Text[ turkish ] = "Sað sýnýrlama gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_ERR_RIGHTEXPECTED +{ + Text = "'RIGHT' erwartet" ; + Text [ ENGLISH ] = "'RIGHT' expected" ; + Text [ dutch ] = "'RIGHT' verwacht" ; + Text [ english_us ] = "'RIGHT' expected" ; + Text [ italian ] = "Atteso 'RIGHT'" ; + Text [ spanish ] = "Se requiere 'RIGHT'" ; + Text [ french ] = "'RIGHT' requis" ; + Text [ swedish ] = "'RIGHT' förväntat" ; + Text [ danish ] = "'RIGHT' forventes" ; + Text [ portuguese_brazilian ] = "'RIGHT' erwartet" ; + Text [ portuguese ] = "Necessário 'RIGHT'" ; + Text[ chinese_simplified ] = "ÆÚ´ý 'RIGHT'"; + Text[ russian ] = "Îæèäàåòñÿ 'RIGHT'"; + Text[ polish ] = "Powinien wyst¹piæ 'RIGHT'"; + Text[ japanese ] = "'RIGHT'‚ª•K—v‚Å‚·"; + Text[ chinese_traditional ] = "´Á«Ý 'RIGHT'"; + Text[ arabic ] = "'RIGHT' ãØáæÈ"; + Text[ greek ] = "ÁíáìÝíåôáé 'RIGHT'"; + Text[ korean ] = "'RIGHT' ÇÊ¿äÇÔ"; + Text[ turkish ] = "'RIGHT' gerekli"; + Text[ language_user1 ] = " "; +}; + +String RID_PLUGINTOOLBOX +{ + Text = "PlugInleiste" ; + Text [ ENGLISH ] = "Plugin toolbox" ; + Text [ english_us ] = "Plug-In Bar" ; + Text [ italian ] = "Barra degli oggetti per i PlugIn" ; + Text [ spanish ] = "Barra de Plug-ins" ; + Text [ french ] = "Barre de Plug-Ins" ; + Text [ dutch ] = "PlugIn-balk" ; + Text [ swedish ] = "Funktionslist för PlugIns" ; + Text [ danish ] = "PlugInlinje" ; + Text [ portuguese_brazilian ] = "PlugInleiste" ; + Text [ portuguese ] = "Barra de Plugins" ; + Text[ chinese_simplified ] = "Plug-In À¸"; + Text[ russian ] = "Ïàíåëü Plug-In"; + Text[ polish ] = "Pasek dodatków PlugIn"; + Text[ japanese ] = "Ìß×¸Þ²Ý ÊÞ°"; + Text[ chinese_traditional ] = "Plug-In ¦C"; + Text[ arabic ] = "ÔÑíØ Plug-In"; + Text[ greek ] = "ÃñáììÞ Plug-In"; + Text[ korean ] = "Ç÷¯±×ÀÎ ¸ðÀ½"; + Text[ turkish ] = "Plug-in çubuðu"; + Text[ language_user1 ] = " "; +}; + +#include "menu.src" + +ToolBox RID_MATH_TOOLBOX +{ + HelpId = RID_MATH_TOOLBOX ; + Customize = TRUE ; + LineSpacing = TRUE ; + Dockable = TRUE ; + Moveable = TRUE ; + Sizeable = TRUE ; + Closeable = TRUE ; + Zoomable = TRUE ; + Scroll = TRUE ; + HideWhenDeactivate = TRUE ; + Border = TRUE ; + SVLook = TRUE ; + Align = BOXALIGN_LEFT ; + Size = MAP_APPFONT ( 0 , 0 ) ; + MenuStrings = TRUE ; + ItemList = + { + ToolBoxItem + { + Identifier = SID_ZOOMIN ; + HelpID = SID_ZOOMIN ; + /* ### ACHTUNG: Neuer Text in Resource? Größer : Größer */ + Text = "Größer" ; + Text [ ENGLISH ] = "Zoom in" ; + Text [ english_us ] = "Zoom In" ; + Text [ dutch ] = "Groter" ; + Text [ swedish ] = "Större" ; + Text [ danish ] = "Større" ; + Text [ italian ] = "Ingrandisci" ; + Text [ spanish ] = "Aumentar" ; + Text [ french ] = "Agrandir" ; + Text [ portuguese ] = "Aproximar" ; + Text [ portuguese_brazilian ] = "Größer" ; + /* ### ACHTUNG: Neuer Text in Resource? Stellt den Ausschnitt vergrößert dar : Stellt den Ausschnitt vergrößert dar */ + Text[ chinese_simplified ] = "·Å´ó"; + Text[ russian ] = "Óâåëè÷èòü"; + Text[ polish ] = "Powiêksz"; + Text[ japanese ] = "Šg‘å"; + Text[ chinese_traditional ] = "©ñ¤j"; + Text[ arabic ] = "ÊßÈíÑ"; + Text[ greek ] = "ÌåãÝèõíóç"; + Text[ korean ] = "È®´ë"; + Text[ turkish ] = "Büyüt"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = SID_ZOOMOUT ; + HelpID = SID_ZOOMOUT ; + Text = "Kleiner" ; + Text [ ENGLISH ] = "Zoom out" ; + Text [ english_us ] = "Zoom Out" ; + Text [ dutch ] = "Uitzoomen" ; + Text [ swedish ] = "Mindre" ; + Text [ danish ] = "Mindre" ; + Text [ italian ] = "Riduci" ; + Text [ spanish ] = "Reducir" ; + Text [ french ] = "Réduire" ; + Text [ portuguese ] = "Afastar" ; + Text [ portuguese_brazilian ] = "Kleiner" ; + Text[ chinese_simplified ] = "ËõС"; + Text[ russian ] = "Óìåíüøèòü"; + Text[ polish ] = "Mniejszy"; + Text[ japanese ] = "k¬"; + Text[ chinese_traditional ] = "ÁY¤p"; + Text[ arabic ] = "ÊÕÛíÑ"; + Text[ greek ] = "Óìßêñõíóç"; + Text[ korean ] = "Ãà¼Ò"; + Text[ turkish ] = "Küçült"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = SID_VIEW100 ; + HelpID = SID_VIEW100 ; + Text = "Zoom 100%" ; + Text [ ENGLISH ] = "Zooms on 100%" ; + Text [ english_us ] = "Zoom 100%" ; + Text [ dutch ] = "Zoom 100%" ; + Text [ swedish ] = "Zoom 100%" ; + Text [ danish ] = "Zoom 100%" ; + Text [ italian ] = "Zoom 100%" ; + Text [ spanish ] = "Escala 100%" ; + Text [ french ] = "Zoom 100 %" ; + Text [ portuguese ] = "Zoom 100%" ; + Text [ portuguese_brazilian ] = "Zoom 100%" ; + /* ### ACHTUNG: Neuer Text in Resource? Stellt den Ausschnitt in tatsächlicher Größe dar : Stellt den Ausschnitt in tatsächlicher GröÃe dar */ + Text[ chinese_simplified ] = "ÏÔʾ±ÈÀý 100%"; + Text[ russian ] = "100%"; + Text[ polish ] = "Powiêkszenie 100%"; + Text[ japanese ] = "½Þ°Ñ 100%"; + Text[ chinese_traditional ] = "Åã¥Ü¤ñ¨Ò 100%"; + Text[ arabic ] = "%Òæã 100"; + Text[ greek ] = "ÌåãÝíèõóç 100%"; + Text[ korean ] = "È®´ë/Ãà¼Ò100%"; + Text[ turkish ] = "%100 yakýnlaþtýr"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = SID_ADJUST ; + HelpID = SID_ADJUST ; + Text = "Ganze Formel" ; + Text [ ENGLISH ] = "Shows all" ; + Text [ english_us ] = "Entire Formula" ; + Text [ dutch ] = "Hele formule" ; + Text [ swedish ] = "Hela formeln" ; + Text [ danish ] = "Hele formlen" ; + Text [ italian ] = "Formula intera" ; + Text [ spanish ] = "Fórmula completa" ; + Text [ french ] = "Formule complète" ; + Text [ portuguese ] = "Fórmula inteira" ; + Text [ portuguese_brazilian ] = "Ganze Formel" ; + Text[ chinese_simplified ] = "Õû¸ö¹«Ê½"; + Text[ russian ] = "Âñÿ ôîðìóëà"; + Text[ polish ] = "Ca³a formu³a"; + Text[ japanese ] = "”Ž®‘S‘Ì"; + Text[ chinese_traditional ] = "¾ã­Ó¤½¦¡"; + Text[ arabic ] = "ÕíÛÉ ßÇãáÉ"; + Text[ greek ] = "Ïëüêëçñïò ôýðïò"; + Text[ korean ] = "Àüü ¼ö½Ä"; + Text[ turkish ] = "Tüm formül"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SEPARATOR ; + }; + ToolBoxItem + { + Identifier = SID_DRAW ; + HelpID = SID_DRAW ; + Text = "Aktualisieren" ; + Text [ ENGLISH ] = "Draw" ; + Text [ norwegian ] = "Draw" ; + Text [ italian ] = "Aggiorna" ; + Text [ portuguese_brazilian ] = "Desenhar" ; + Text [ portuguese ] = "Actualizar" ; + Text [ finnish ] = "Piirrä" ; + Text [ danish ] = "Opdater" ; + Text [ french ] = "Actualiser" ; + Text [ swedish ] = "Uppdatera" ; + Text [ dutch ] = "Actualiseren" ; + Text [ spanish ] = "Actualizar" ; + Text [ english_us ] = "Refresh" ; + Text[ chinese_simplified ] = "¸üÐÂ"; + Text[ russian ] = "Îáíîâèòü"; + Text[ polish ] = "Aktualizuj"; + Text[ japanese ] = "XV"; + Text[ chinese_traditional ] = "§ó·s"; + Text[ arabic ] = "ÊÍÏíË"; + Text[ greek ] = "ÅíçìÝñùóç"; + Text[ korean ] = "»õ·Î °íħ"; + Text[ turkish ] = "Güncelle"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = SID_FORMULACURSOR ; + HelpID = SID_FORMULACURSOR ; + Text = "Formel Cursor" ; + Text [ ENGLISH ] = "Formula cursor" ; + Text[ italian ] = "Cursore-formula"; + Text[ portuguese_brazilian ] = "Formula cursor"; + Text[ portuguese ] = "Fórmula cursor"; + Text[ danish ] = "Formelmarkør"; + Text[ french ] = "Curseur de formule"; + Text[ swedish ] = "Formelmarkör"; + Text[ dutch ] = "Formule-cursor"; + Text[ spanish ] = "Cursor de fórmula"; + Text[ english_us ] = "Formula Cursor"; + Text[ chinese_simplified ] = "¹«Ê½¹â±ê"; + Text[ russian ] = "Êóðñîð ôîðìóëû"; + Text[ polish ] = "Kursor formu³y"; + Text[ japanese ] = "”Ž®¶°¿Ù"; + Text[ chinese_traditional ] = "¤½¦¡¥ú¼Ð"; + Text[ arabic ] = "ãÄÔÑ ÇáÕíÛÉ"; + Text[ greek ] = "ÄñïìÝáò ôýðïõ"; + Text[ korean ] = "¼ö½Ä Ä¿¼­"; + Text[ turkish ] = "Formül imleci"; + Text[ language_user1 ] = " "; + }; + ToolBoxItem + { + Identifier = SID_SYMBOLS_CATALOGUE ; + HelpID = SID_SYMBOLS_CATALOGUE ; + Text = "Symbole" ; + Text [ ENGLISH ] = "Symbols" ; + Text [ norwegian ] = "Symboler" ; + Text [ italian ] = "Simboli" ; + Text [ portuguese_brazilian ] = "Símbolos" ; + Text [ portuguese ] = "Símbolos" ; + Text [ finnish ] = "Symbolit" ; + Text [ danish ] = "Symboler" ; + Text [ french ] = "Symboles" ; + Text [ swedish ] = "Symboler" ; + Text [ dutch ] = "Symbolen" ; + Text [ spanish ] = "Símbolos" ; + Text [ english_us ] = "Symbols" ; + /* ### ACHTUNG: Neuer Text in Resource? Symbole einfügen und bearbeiten : Symbole einf³gen und bearbeiten */ + Text[ chinese_simplified ] = "ͼ±ê"; + Text[ russian ] = "Ñèìâîëû"; + Text[ polish ] = "Symbole"; + Text[ japanese ] = "¼ÝÎÞÙ"; + Text[ chinese_traditional ] = "¹Ï¥Ü"; + Text[ arabic ] = "ÑãæÒ"; + Text[ greek ] = "Óýìâïëá"; + Text[ korean ] = "±âÈ£"; + Text[ turkish ] = "Simgeler"; + Text[ language_user1 ] = " "; + }; + }; +}; + +String RID_MATH_TOOLBOX +{ + Text = "Werkzeugleiste" ; + Text [ ENGLISH ] = "Toolbar" ; + Text [ english_us ] = "Main Toolbar" ; + Text [ dutch ] = "Werktuigbalk" ; + Text [ swedish ] = "Verktygslist" ; + Text [ danish ] = "Værktøjslinje" ; + Text [ italian ] = "Barra degli strumenti" ; + Text [ spanish ] = "Barra de herramientas" ; + Text [ french ] = "Barre d'instruments" ; + Text [ portuguese ] = "Barra de ferramentas" ; + Text [ portuguese_brazilian ] = "Werkzeugleiste" ; + Text[ chinese_simplified ] = "Ö÷¹¤¾ßÀ¸"; + Text[ russian ] = "Ïàíåëü èíñòðóìåíòîâ"; + Text[ polish ] = "Pasek narzêdziowy"; + Text[ japanese ] = "•W€Â°ÙÊÞ°"; + Text[ chinese_traditional ] = "¥D¤u¨ã¦C"; + Text[ arabic ] = "ÔÑíØ ÇáÃÏæÇÊ"; + Text[ greek ] = "ÃñáììÞ åñãáëåßùí"; + Text[ korean ] = "ÁÖ µµ±¸¸ðÀ½"; + Text[ turkish ] = "Ana araç çubuðu"; + Text[ language_user1 ] = " "; +}; + + diff --git a/starmath/source/symbol.cxx b/starmath/source/symbol.cxx new file mode 100644 index 000000000000..15aecab7c153 --- /dev/null +++ b/starmath/source/symbol.cxx @@ -0,0 +1,657 @@ +/************************************************************************* + * + * $RCSfile: symbol.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:27 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef _UCBHELPER_CONTENT_HXX +#include +#endif +#ifndef _SV_MSGBOX_HXX //autogen +#include +#endif +#ifndef _SFXDISPATCH_HXX //autogen +#include +#endif +#ifndef _SFX_INIMGR_HXX //autogen +#include +#endif + +#include "symbol.hxx" +#include "view.hxx" +#include "utility.hxx" +#include "dialog.hxx" +#include "config.hxx" +#include "smmod.hxx" +#include "starmath.hrc" + + +using namespace ::com::sun::star; +using namespace ::com::sun::star::ucb; +using namespace ::com::sun::star::uno; +using namespace ::rtl; + +// Das hier muss auch mal alles "uberarbeitet werden. Insbesondere die nicht +// funktionierende und bei l"oschen/"andern von Symbolen nicht gepflegte +// Hash Tabelle!!! Diese aktualisert sich erst im Wertzuweisungsoperator +// beim Verlassen des 'SmSymDefineDialog's! + +/**************************************************************************/ +/* +** +** MACRO DEFINTION +** +**/ + +#define SF_SM20IDENT 0x03031963L +#define SF_IDENT 0x30334D53L + + +/**************************************************************************/ +/* +** +** DATA DEFINITION +** +**/ + +long SF_Ident = SF_IDENT; + + +/**************************************************************************/ +/* +** +** CLASS IMPLEMENTATION +** +**/ + +SmSym::SmSym() : + Name(C2S("unknown")), + Character('\0'), + pHashNext(0), + pSymSetManager(0) +{ + Face.SetTransparent(TRUE); +} + +SmSym::SmSym(const SmSym& rSymbol) +{ + Name = rSymbol.Name; + Face = rSymbol.Face; + Character = rSymbol.Character; + + pHashNext = 0; + pSymSetManager = 0; +} + +SmSym::SmSym(const String& rName, const Font& rFont, sal_Unicode aChar) +{ + Name = rName; + Face = rFont; + Character = aChar; + + pHashNext = 0; + pSymSetManager = 0; +} + + +SmSym& SmSym::operator = (const SmSym& rSymbol) +{ + Name = rSymbol.Name; + Face = rSymbol.Face; + Character = rSymbol.Character; + + pHashNext = 0; + + if (pSymSetManager) + pSymSetManager->SetModified(TRUE); + + return *this; +} + +void SmSym::SetSymbolName(const String& rName) +{ + Name = rName; + + if (pSymSetManager) + pSymSetManager->SetModified(TRUE); +} + +SvStream& operator << (SvStream& rStream, const SmSym& rSymbol) +{ + rStream.WriteByteString(ExportString(rSymbol.Name)); + rStream << rSymbol.Face; + + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + rStream << ByteString::ConvertFromUnicode( rSymbol.Character, eEnc ); + + return rStream; +} + +SvStream& operator >> (SvStream& rStream, SmSym& rSymbol) +{ + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + rStream.ReadByteString(rSymbol.Name, eEnc); + if (SF_Ident == SF_SM20IDENT) + ReadSM20Font(rStream, rSymbol.Face); + else + rStream >> rSymbol.Face; + sal_Char cTemp; + rStream >> cTemp; + rSymbol.Character = ByteString::ConvertToUnicode( cTemp, eEnc ); + + return rStream; +} + +/**************************************************************************/ + +SmSymSet::SmSymSet() : + Name(C2S("unknown")), + pSymSetManager(0) +{ + SymbolList.Clear(); +} + +SmSymSet::SmSymSet(const SmSymSet& rSymbolSet) +{ + Name = rSymbolSet.Name; + SymbolList.Clear(); + + pSymSetManager = 0; + + for (int i = 0; i < rSymbolSet.GetCount(); i++) + AddSymbol(new SmSym(rSymbolSet.GetSymbol(i))); +} + +SmSymSet::SmSymSet(const String& rName) +{ + Name = rName; + SymbolList.Clear(); + + pSymSetManager = 0; +} + +SmSymSet::~SmSymSet() +{ + for (int i = 0; i < GetCount(); i++) + delete SymbolList.GetObject(i); +} + +SmSymSet& SmSymSet::operator = (const SmSymSet& rSymbolSet) +{ + int i; + for (i = 0; i < GetCount(); i++) + delete SymbolList.GetObject(i); + + Name = rSymbolSet.Name; + SymbolList.Clear(); + + for (i = 0; i < rSymbolSet.GetCount(); i++) + AddSymbol(new SmSym(rSymbolSet.GetSymbol(i))); + + if (pSymSetManager) + pSymSetManager->SetModified(TRUE); + + return *this; +} + +void SmSymSet::SetName(String& rName) +{ + Name = rName; + + if (pSymSetManager) + pSymSetManager->SetModified(TRUE); +} + +USHORT SmSymSet::AddSymbol(SmSym* pSymbol) +{ + DBG_ASSERT(pSymbol, "Kein Symbol"); + + SymbolList.Insert(pSymbol, LIST_APPEND); + DBG_ASSERT(SymbolList.GetPos(pSymbol) == SymbolList.Count() - 1, + "Sm : ... ergibt falschen return Wert"); + + if (pSymSetManager) + pSymSetManager->SetModified(TRUE); + + return (USHORT) SymbolList.Count() - 1; +} + +void SmSymSet::DeleteSymbol(USHORT SymbolNo) +{ + delete RemoveSymbol(SymbolNo); +} + +SmSym * SmSymSet::RemoveSymbol(USHORT SymbolNo) +{ + DBG_ASSERT(SymbolList.GetObject(SymbolNo), "Symbol nicht vorhanden"); + + SmSym *pSym = SymbolList.GetObject(SymbolNo); + SymbolList.Remove(SymbolNo); + + if (pSymSetManager) + pSymSetManager->SetModified(TRUE); + + return pSym; +} + + +void SmSymSet::RenameSymbol(USHORT SymbolNo, String& rName) +{ + DBG_ASSERT(SymbolList.GetObject(SymbolNo), "Symbol nicht vorhanden"); + + SymbolList.GetObject(SymbolNo)->SetSymbolName(rName); + + if (pSymSetManager) + pSymSetManager->SetModified(TRUE); +} + +void SmSymSet::ReplaceSymbol(USHORT SymbolNo, SmSym& rSymbol) +{ + DBG_ASSERT(SymbolList.GetObject(SymbolNo), "Symbol nicht vorhanden"); + + *SymbolList.GetObject(SymbolNo) = rSymbol; + + if (pSymSetManager) + pSymSetManager->SetModified(TRUE); +} + +USHORT SmSymSet::GetSymbolPos(const String& rName) +{ + for (USHORT i = 0; i < GetCount(); i++) + if (SymbolList.GetObject(i)->GetName() == rName) + return (i); + + return SYMBOL_NONE; +} + +SvStream& operator << (SvStream& rStream, const SmSymSet& rSymbolSet) +{ + rStream.WriteByteString(ExportString(rSymbolSet.Name)); + rStream << rSymbolSet.GetCount(); + + for (int i = 0; i < rSymbolSet.GetCount(); i++) + rStream << rSymbolSet.GetSymbol(i); + + return rStream; +} + + +SvStream& operator >> (SvStream& rStream, SmSymSet& rSymbolSet) +{ + USHORT n; + SmSym *pSymbol; + + rStream.ReadByteString(rSymbolSet.Name, gsl_getSystemTextEncoding()); + rStream >> n; + + for (int i = 0; i < n; i++) + { + if ((pSymbol = new SmSym) == 0) + break; + + rStream >> *pSymbol; + rSymbolSet.AddSymbol(pSymbol); + } + + return rStream; +} + +/**************************************************************************/ + +void SmSymSetManager::SFX_NOTIFY(SfxBroadcaster& rBC, const TypeId& rBCType, + const SfxHint& rHint, const TypeId& rHintType) +{ + if (((SfxSimpleHint&)rHint).GetId() == HINT_CONFIGCHANGED) + { + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + { + SfxDispatcher &rDis = *pViewSh->GetViewFrame()->GetDispatcher(); + rDis.Execute(SID_SAVESYMBOLS); + rDis.Execute(SID_LOADSYMBOLS); + } + } +} + +UINT32 SmSymSetManager::GetHashIndex(const String& rSymbolName) +{ + UINT32 x = 0; + for (xub_StrLen i = 0; i < rSymbolName.Len(); i++) + x += x * rSymbolName.GetChar(i); + + return x % NoHashEntries; +} + +void SmSymSetManager::EnterHashTable(SmSymSet& rSymbolSet) +{ + for (int i = 0; i < rSymbolSet.GetCount(); i++) + { + int j = GetHashIndex(rSymbolSet.GetSymbol(i).GetName()); + if (HashEntries[j] == 0) + HashEntries[j] = rSymbolSet.SymbolList.GetObject(i); + else + { + SmSym *p = HashEntries[j]; + while (p->pHashNext) + p = p->pHashNext; + p->pHashNext = rSymbolSet.SymbolList.GetObject(i); + } + rSymbolSet.SymbolList.GetObject(i)->pHashNext = 0; + } +} + +void SmSymSetManager::FillHashTable() +{ + if (HashEntries) + { + memset(HashEntries, 0, NoHashEntries * sizeof(SmSym *)); + + for (int i = 0; i < NoSymbolSets; i++) + EnterHashTable(*GetSymbolSet(i)); + } +} + +void SmSymSetManager::Init() +{ + SfxModule *p = SM_MOD1(); + SmModule *pp = (SmModule *) p; + StartListening(*pp->GetConfig()); +} + +void SmSymSetManager::Exit() +{ + SfxModule *p = SM_MOD1(); + SmModule *pp = (SmModule *) p; + EndListening(*pp->GetConfig()); +} + +SmSymSetManager::SmSymSetManager(UINT32 HashTableSize) +{ + SymbolSets.Clear(); + NoSymbolSets = 0; + NoHashEntries = HashTableSize; + HashEntries = new SmSym *[NoHashEntries]; + memset(HashEntries, 0, sizeof(SmSym *) * NoHashEntries); + Modified = FALSE; +} + +SmSymSetManager::SmSymSetManager(const SmSymSetManager& rSymbolSetManager) +{ + SymbolSets.Clear(); + NoSymbolSets = 0; + NoHashEntries = rSymbolSetManager.NoHashEntries; + HashEntries = new SmSym *[NoHashEntries]; + memset(HashEntries, 0, sizeof(SmSym *) * NoHashEntries); + + for (int i = 0; i < rSymbolSetManager.GetCount(); i++) + AddSymbolSet(new SmSymSet(*rSymbolSetManager.GetSymbolSet(i))); + + Modified = rSymbolSetManager.Modified; +} + +SmSymSetManager::~SmSymSetManager() +{ + for (int i = 0; i< NoSymbolSets; i++) + delete SymbolSets.Get(i); + + delete HashEntries; +} + +SmSymSetManager& SmSymSetManager::operator = (const SmSymSetManager& rSymbolSetManager) +{ + int i; + for (i = 0; i< NoSymbolSets; i++) + delete SymbolSets.Get(i); + + SymbolSets.Clear(); + NoSymbolSets = 0; + + for (i = 0; i < rSymbolSetManager.GetCount(); i++) + AddSymbolSet(new SmSymSet(*rSymbolSetManager.GetSymbolSet(i))); + + Modified = rSymbolSetManager.Modified; + + return *this; +} + +USHORT SmSymSetManager::AddSymbolSet(SmSymSet* pSymbolSet) +{ + if (NoSymbolSets >= SymbolSets.GetSize()) + SymbolSets.SetSize(NoSymbolSets + 1); + + SymbolSets.Put(NoSymbolSets++, pSymbolSet); + + pSymbolSet->pSymSetManager = this; + + for (int i = 0; i < pSymbolSet->GetCount(); i++) + pSymbolSet->SymbolList.GetObject(i)->pSymSetManager = this; + + FillHashTable(); + Modified = TRUE; + + return NoSymbolSets - 1; +} + +void SmSymSetManager::ChangeSymbolSet(SmSymSet* pSymbolSet) +{ + if (pSymbolSet) + { + FillHashTable(); + Modified = TRUE; + } +} + +void SmSymSetManager::DeleteSymbolSet(USHORT SymbolSetNo) +{ + delete SymbolSets.Get(SymbolSetNo); + NoSymbolSets--; + + for (int i = SymbolSetNo; i < NoSymbolSets; i++) + SymbolSets.Put(i, SymbolSets.Get(i + 1)); + + FillHashTable(); + + Modified = TRUE; +} + + +USHORT SmSymSetManager::GetSymbolSetPos(const String& rSymbolSetName) const +{ + for (USHORT i = 0; i < NoSymbolSets; i++) + if (SymbolSets.Get(i)->GetName() == rSymbolSetName) + return (i); + + return SYMBOLSET_NONE; +} + + +SmSym *SmSymSetManager::GetSymbol(const String& rSymbolName) +{ + SmSym *p = HashEntries[GetHashIndex(rSymbolName)]; + while (p) + { + if (p->Name == rSymbolName) + break; + p = p->pHashNext; + } + return p; +} + +void SmSymSetManager::Load(const String &rURL) +{ + if (aStreamName != rURL) + { + for (int i = 0; i< NoSymbolSets; i++) + delete SymbolSets.Get(i); + + SymbolSets.Clear(); + NoSymbolSets = 0; + + aStreamName = rURL; + + BOOL bExist = FALSE; + try + { + bExist = ::ucb::Content( aStreamName, uno::Reference< XCommandEnvironment >()).isDocument(); + } + catch(...){} + if (bExist) + { + SvFileStream aStream(aStreamName, STREAM_READ); + + if (aStream.IsOpen()) + { + aStream >> *this; + Modified = FALSE; + return; + } + } + + SfxModule *p = SM_MOD1(); + SmModule *pp = (SmModule *) p; + + if ( pp->GetConfig()->IsWarnNoSymbols() ) + { + ErrorBox aErrorBox( NULL, SmResId( RID_READSYMBOLERROR ) ); + String aString( aErrorBox.GetMessText() ); + String aIniFile = SFX_INIMANAGER()->SubstPathVars( aStreamName ); + aString.SearchAndReplaceAscii( "%FILE%", aIniFile ); + aErrorBox.SetMessText( aString ); + aErrorBox.Execute(); + + Modified = FALSE; + pp->GetConfig()->SetWarnNoSymbols(FALSE); + } + } +} + +void SmSymSetManager::Save() +{ + if (Modified) + { + SvFileStream aStream(aStreamName, STREAM_WRITE); + + if (aStream.IsOpen()) + { + aStream << *this; + Modified = FALSE; + } + else + { + ErrorBox aErrorBox( NULL, SmResId(RID_WRITESYMBOLERROR)); + String aString (aErrorBox.GetMessText()); + USHORT nPos = aString.SearchAscii("%FILE%"); + + aString.Erase(nPos, 6); + aString.Insert(aStreamName, nPos); + aErrorBox.SetMessText(aString); + aErrorBox.Execute(); + } + } +} + + +SvStream& operator << (SvStream& rStream, SmSymSetManager& rSymbolSetManager) +{ + rStream << (long)SF_IDENT << (USHORT) rSymbolSetManager.NoSymbolSets; + + for (int i = 0; i < rSymbolSetManager.NoSymbolSets; i++) + rStream << *rSymbolSetManager.GetSymbolSet(i); + + return rStream; +} + +SvStream& operator >> (SvStream& rStream, SmSymSetManager& rSymbolSetManager) +{ + rStream >> SF_Ident; + if (SF_Ident == SF_IDENT || SF_Ident == SF_SM20IDENT) + { + USHORT n; + rStream >> n; + + if (rSymbolSetManager.HashEntries) + memset(rSymbolSetManager.HashEntries, 0, + rSymbolSetManager.NoHashEntries * sizeof(SmSym *)); + + for (int i = 0; i < n; i++) + { + SmSymSet *pSymbolSet; + + if ((pSymbolSet = new SmSymSet) == 0) + break; + + rStream >> *pSymbolSet; + rSymbolSetManager.AddSymbolSet(pSymbolSet); + } + } + + SF_Ident = SF_IDENT; + + return rStream; +} + +void ReadSM20SymSet(SvStream *pStream, SmSymSet *pSymbolSet) +{ + SF_Ident = SF_SM20IDENT; + *pStream >> *pSymbolSet; + SF_Ident = SF_IDENT; +} + + diff --git a/starmath/source/toolbox.cxx b/starmath/source/toolbox.cxx new file mode 100644 index 000000000000..b215e8bd4717 --- /dev/null +++ b/starmath/source/toolbox.cxx @@ -0,0 +1,274 @@ +/************************************************************************* + * + * $RCSfile: toolbox.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:27 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef _SFXENUMITEM_HXX //autogen +#include +#endif +#ifndef _SFXAPP_HXX //autogen +#include +#endif +#ifndef _SFXINTITEM_HXX //autogen +#include +#endif +#ifndef _SFXDISPATCH_HXX //autogen +#include +#endif +#ifndef _SFXIMGMGR_HXX //autogen +#include +#endif + +#ifndef TOOLBOX_HXX +#include "toolbox.hxx" +#endif +#ifndef _STARMATH_HRC +#include "starmath.hrc" +#endif +#include "view.hxx" +#ifndef _SV_WRKWIN_HXX //autogen +#include +#endif + + + +SmToolBoxWindow::SmToolBoxWindow(SfxBindings *pBindings, + SfxChildWindow *pChildWindow, + Window *pParent) : + SfxFloatingWindow(pBindings, pChildWindow, pParent, SmResId(RID_TOOLBOXWINDOW)), + aToolBoxCat(this, ResId(NUM_TBX_CATEGORIES + 1)) +{ + nActiveCategory = -1; + + SfxImageManager *pImgMan = SFX_APP()->GetImageManager(); + + aToolBoxCat.SetClickHdl(LINK(this, SmToolBoxWindow, CategoryClickHdl)); + pImgMan->RegisterToolBox( &aToolBoxCat ); + + for (int i = 0; i < NUM_TBX_CATEGORIES; i++) + { + ToolBox *pBox = new ToolBox(this, ResId (i+1)); + pImgMan->RegisterToolBox( pBox ); + vToolBoxCategories[i] = pBox; + pBox->SetSelectHdl(LINK(this, SmToolBoxWindow, CmdSelectHdl)); + } + pToolBoxCmd = vToolBoxCategories [0]; + + FreeResource(); +} + +SmToolBoxWindow::~SmToolBoxWindow() +{ + SfxImageManager *pImgMan = SFX_APP()->GetImageManager(); + pImgMan->ReleaseToolBox( &aToolBoxCat ); + + for (int i = 0; i < NUM_TBX_CATEGORIES; i++) + { + ToolBox *pBox = vToolBoxCategories[i]; + pImgMan->ReleaseToolBox( pBox ); + delete pBox; + } +} + + +void SmToolBoxWindow::StateChanged( StateChangedType nStateChange ) +{ + if (STATE_CHANGE_INITSHOW == nStateChange) + AdjustPosition( Point() ); + else + SfxFloatingWindow::StateChanged( nStateChange ); +} + + +void SmToolBoxWindow::AdjustPosition(const Point &rPoint) +{ + Size CatSize (31 * 5, 31 * 2); + Size CmdSize (31 * 5, 31 * 5); + Size WndSize (31 * 5, CatSize.Height() + 10 + CmdSize.Height()); + Point aPoint; + + aToolBoxCat.SetPosSizePixel(aPoint, CatSize); + + aPoint.Y() = 66; + for (int i = 0; i < NUM_TBX_CATEGORIES; i++) + vToolBoxCategories [i]->SetPosSizePixel(aPoint, CmdSize); + + SetOutputSizePixel(WndSize); + SetPosPixel( rPoint ); + + Point aPt; + const Rectangle aRect( aPt, GetParent()->GetOutputSizePixel() ); + const Rectangle aSelf( rPoint, WndSize ); + if ( !rPoint.X() || !rPoint.Y() || !aRect.IsInside( aSelf ) ) + { + Point aTopLeft( Point( aRect.Right() - WndSize.Width(), aRect.Top() ) ); + Point aPos( GetParent()->OutputToScreenPixel( aTopLeft ) ); + if (aPos.X() < 0) + aPos.X() = 0; + if (aPos.Y() < 0) + aPos.Y() = 0; + SetPosPixel( aPos ); + } + + SetCategory(RID_UNBINOPS_CAT); +} + + +BOOL SmToolBoxWindow::Close() +{ + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetDispatcher()->Execute( + SID_TOOLBOX, SFX_CALLMODE_STANDARD, + new SfxBoolItem(SID_TOOLBOX, FALSE), 0L); + return TRUE; +} + + +void SmToolBoxWindow::SetCategory(USHORT nCategory) +{ + if (nCategory != nActiveCategory) + { + USHORT nLines, + nWhatBox; + + // check for valid resource id + switch (nCategory) + { + case RID_UNBINOPS_CAT : nWhatBox = 0; nLines = 4; break; + case RID_RELATIONS_CAT: nWhatBox = 1; nLines = 5; break; + case RID_SETOPERATIONS_CAT: nWhatBox = 2; nLines = 5; break; + case RID_FUNCTIONS_CAT: nWhatBox = 3; nLines = 5; break; + case RID_OPERATORS_CAT: nWhatBox = 4; nLines = 3; break; + case RID_ATTRIBUTES_CAT: nWhatBox = 5; nLines = 5; break; + case RID_MISC_CAT: nWhatBox = 8; nLines = 4; break; + case RID_BRACKETS_CAT: nWhatBox = 6; nLines = 5; break; + case RID_FORMAT_CAT: nWhatBox = 7; nLines = 3; break; + default: + // nothing to be done + return; + } + + pToolBoxCmd->Hide(); + + pToolBoxCmd = vToolBoxCategories [nWhatBox]; + + Size CatSize (31 * 5, 31 * 2); + Size CmdSize (31 * 5, 31 * nLines); + Size WndSize (31 * 5, CatSize.Height() + 10 + CmdSize.Height()); + + aToolBoxCat.SetPosSizePixel(Point(0, 3), CatSize); + vToolBoxCategories [nWhatBox]->SetPosSizePixel(Point(0, 70), CmdSize); + SetOutputSizePixel(WndSize); + + if (nActiveCategory) + aToolBoxCat.CheckItem(nActiveCategory, FALSE); + nActiveCategory = nCategory; + aToolBoxCat.CheckItem(nActiveCategory, TRUE); + + pToolBoxCmd->Show(); + } +} + + +IMPL_LINK_INLINE_START( SmToolBoxWindow, CategoryClickHdl, ToolBox*, pToolBox) +{ + SetCategory(pToolBox->GetCurItemId()); + return 0; +} +IMPL_LINK_INLINE_END( SmToolBoxWindow, CategoryClickHdl, ToolBox*, pToolBox) + + +IMPL_LINK_INLINE_START( SmToolBoxWindow, CmdSelectHdl, ToolBox*, pToolBox) +{ + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetDispatcher()->Execute( + SID_INSERTCOMMAND, SFX_CALLMODE_STANDARD, + new SfxInt16Item(SID_INSERTCOMMAND, pToolBox->GetCurItemId()), 0L); + return 0; +} +IMPL_LINK_INLINE_END( SmToolBoxWindow, CmdSelectHdl, ToolBox*, pToolBox) + + +void SmToolBoxWindow::ShowWindows() +{ + if ( SM_MOD1()->GetConfig()->IsToolBoxVisible() ) + Show(); +} + +/**************************************************************************/ + +SFX_IMPL_FLOATINGWINDOW(SmToolBoxWrapper, SID_TOOLBOXWINDOW); + +SmToolBoxWrapper::SmToolBoxWrapper(Window *pParentWindow, + USHORT nId, SfxBindings* pBindings, + SfxChildWinInfo *pInfo) : + SfxChildWindow(pParentWindow, nId) +{ + eChildAlignment = SFX_ALIGN_NOALIGNMENT; + pWindow = new SmToolBoxWindow(pBindings, this, pParentWindow); + + ((SmToolBoxWindow *)pWindow)->ShowWindows(); + +} + + diff --git a/starmath/source/typemap.cxx b/starmath/source/typemap.cxx new file mode 100644 index 000000000000..acfcd447816d --- /dev/null +++ b/starmath/source/typemap.cxx @@ -0,0 +1,190 @@ +/************************************************************************* + * + * $RCSfile: typemap.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:27 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#define ITEMID_PTR 0 +#define ITEMID_SHADOW 0 +#define ITEMID_PAGE 0 +#define ITEMID_SETITEM 0 +#define ITEMID_HORJUSTIFY 0 +#define ITEMID_VERJUSTIFY 0 +#define ITEMID_ORIENTATION 0 +#define ITEMID_MARGIN 0 +#define ITEMID_AUTHOR 0 +#define ITEMID_DATE 0 +#define ITEMID_TEXT 0 +#define ITEMID_SPELLCHECK 0 +#define ITEMID_HYPHENREGION 0 +#define ITEMID_FONT 0 +#define ITEMID_FONTHEIGHT 0 +#define ITEMID_COLOR 0 +#define ITEMID_BRUSH 0 +#define ITEMID_BRUSH 0 +#define ITEMID_BOX 0 +#define ITEMID_LINE 0 +#define ITEMID_BRUSH 0 +#define ITEMID_SPELLCHECK 0 +#define ITEMID_HYPHENREGION 0 +#define ITEMID_LINESPACING 0 +#define ITEMID_ADJUST 0 +#define ITEMID_WIDOWS 0 +#define ITEMID_ORPHANS 0 +#define ITEMID_HYPHENZONE 0 +#define ITEMID_TABSTOP 0 +#define ITEMID_FMTSPLIT 0 +#define ITEMID_PAGEMODEL 0 +#define ITEMID_FONTLIST 0 +#define ITEMID_FONT 0 +#define ITEMID_POSTURE 0 +#define ITEMID_WEIGHT 0 +#define ITEMID_FONTHEIGHT 0 +#define ITEMID_FONTWIDTH 0 +#define ITEMID_UNDERLINE 0 +#define ITEMID_CROSSEDOUT 0 +#define ITEMID_SHADOWED 0 +#define ITEMID_AUTOKERN 0 +#define ITEMID_WORDLINEMODE 0 +#define ITEMID_CONTOUR 0 +#define ITEMID_PROPSIZE 0 +#define ITEMID_COLOR 0 +#define ITEMID_CHARSETCOLOR 0 +#define ITEMID_KERNING 0 +#define ITEMID_CASEMAP 0 +#define ITEMID_ESCAPEMENT 0 +#define ITEMID_LANGUAGE 0 +#define ITEMID_NOLINEBREAK 0 +#define ITEMID_NOHYPHENHERE 0 +#define ITEMID_COLOR 0 +#define ITEMID_FONT 0 +#define ITEMID_FONTHEIGHT 0 +#define ITEMID_SEARCH 0 +#define ITEMID_COLOR_TABLE 0 +#define ITEMID_GRADIENT_LIST 0 +#define ITEMID_HATCH_LIST 0 +#define ITEMID_BITMAP_LIST 0 +#define ITEMID_DASH_LIST 0 +#define ITEMID_LINEEND_LIST 0 +#define ITEMID_NUMBERINFO 0 +#define ITEMID_CHARTSTYLE 0 +#define ITEMID_CHARTDATADESCR 0 +#define ITEMID_CHARTLEGENDPOS 0 +#define ITEMID_CHARTTEXTORDER 0 +#define ITEMID_CHARTTEXTORIENT 0 +#define ITEMID_DOUBLE 0 +#define ITEMID_TABSTOP 0 +#define ITEMID_PAPERBIN 0 +#define ITEMID_SIZE 0 +#define ITEMID_LRSPACE 0 +#define ITEMID_ULSPACE 0 +#define ITEMID_PRINT 0 +#define ITEMID_OPAQUE 0 +#define ITEMID_PROTECT 0 +#define ITEMID_MACRO 0 +#define ITEMID_BOX 0 +#define ITEMID_BOXINFO 0 +#define ITEMID_FMTBREAK 0 +#define ITEMID_FMTKEEP 0 +#define ITEMID_LINE 0 +#define ITEMID_BRUSH 0 + +#define CharSetItem SfxVoidItem +#define FontFamilyItem SfxVoidItem +#define FontPitchItem SfxVoidItem +#define FontAlignItem SfxVoidItem +#define FontWeightItem SfxVoidItem +#define FontUnderlineItem SfxVoidItem +#define FontStrikeoutItem SfxVoidItem +#define FontItalicItem SfxVoidItem +#define SvxDbTypeItem SfxVoidItem +#define SvxLineSpaceItem SfxVoidItem +#define SvxInterLineSpaceItem SfxVoidItem +#define SvxBreakItem SfxVoidItem +#define BrushStyleItem SfxVoidItem +#define SvxNumTypeItem SfxVoidItem +#define SvxShadowLocationItem SfxVoidItem +#define SvxLanguage SfxVoidItem +#define SvxChooseControlEnumItem SfxVoidItem +#define SvxDrawToolEnumItem SfxVoidItem +#define SvxChooseControlItem SfxVoidItem +#define SvxDrawToolItem SfxVoidItem +#define SvxCellHorJustifyEnumItem SfxVoidItem +#define SvxCellVerJustifyEnumItem SfxVoidItem +#define SvxCellOrientationEnumItem SfxVoidItem + +#ifndef _SFXMSG_HXX //autogen +#include +#endif +#ifndef _SFXSTRITEM_HXX //autogen +#include +#endif +#ifndef _SFXENUMITEM_HXX //autogen +#include +#endif +#ifndef _SVX_ZOOMITEM_HXX //autogen +#include +#endif + +#define SFX_TYPEMAP +#include "smslots.hxx" + + + diff --git a/starmath/source/unomodel.cxx b/starmath/source/unomodel.cxx new file mode 100644 index 000000000000..cead1651c647 --- /dev/null +++ b/starmath/source/unomodel.cxx @@ -0,0 +1,782 @@ +/************************************************************************* + * + * $RCSfile: unomodel.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:27 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef _VOS_MUTEX_HXX_ +#include +#endif +#ifndef _OSL_MUTEX_HXX_ +#include +#endif +#ifndef _SFX_PRINTER_HXX +#include +#endif +#ifndef _SV_SVAPP_HXX +#include +#endif +#ifndef _CTRLTOOL_HXX +#include +#endif +#ifndef _SFX_ITEMPROP_HXX +#include +#endif +#ifndef UNOMODEL_HXX +#include "unomodel.hxx" +#endif +#ifndef DOCUMENT_HXX +#include "document.hxx" +#endif + +using namespace vos; +using namespace rtl; +using namespace ::com::sun::star; + +#define TWIP_TO_MM100(TWIP) ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L)) +#define MM100_TO_TWIP(MM100) ((MM100) >= 0 ? (((MM100)*72L+63L)/127L) : (((MM100)*72L-63L)/127L)) + +#define C2U(cChar) rtl::OUString::createFromAscii(cChar) + +//////////////////////////////////////// +// +// class SmModel +// +#define PROPERTY_NONE 0 + +#define FID_FORMULA 0 +#define FID_FONT_NAME_VARIABLES 1 +#define FID_FONT_NAME_FUNCTIONS 2 +#define FID_FONT_NAME_NUMBERS 3 +#define FID_FONT_NAME_TEXT 4 +#define FID_CUSTOM_FONT_NAME_SERIF 5 +#define FID_CUSTOM_FONT_NAME_SANS 6 +#define FID_CUSTOM_FONT_NAME_FIXED 7 +#define FID_CUSTOM_FONT_FIXED_POSTURE 8 +#define FID_CUSTOM_FONT_FIXED_WEIGHT 9 +#define FID_CUSTOM_FONT_SANS_POSTURE 10 +#define FID_CUSTOM_FONT_SANS_WEIGHT 11 +#define FID_CUSTOM_FONT_SERIF_POSTURE 12 +#define FID_CUSTOM_FONT_SERIF_WEIGHT 13 +#define FID_FONT_VARIABLES_POSTURE 14 +#define FID_FONT_VARIABLES_WEIGHT 15 +#define FID_FONT_FUNCTIONS_POSTURE 16 +#define FID_FONT_FUNCTIONS_WEIGHT 17 +#define FID_FONT_NUMBERS_POSTURE 18 +#define FID_FONT_NUMBERS_WEIGHT 19 +#define FID_FONT_TEXT_POSTURE 20 +#define FID_FONT_TEXT_WEIGHT 21 +#define FID_BASE_FONT_HEIGHT 22 +#define FID_RELATIVE_FONT_HEIGHT_TEXT 23 +#define FID_RELATIVE_FONT_HEIGHT_INDICES 24 +#define FID_RELATIVE_FONT_HEIGHT_FUNCTIONS 25 +#define FID_RELATIVE_FONT_HEIGHT_OPERATORS 26 +#define FID_RELATIVE_FONT_HEIGHT_LIMITS 27 +#define FID_IS_TEXT_MODE 28 +#define FID_ALIGNMENT 29 +#define FID_RELATIVE_SPACING 30 +#define FID_RELATIVE_LINE_SPACING 31 +#define FID_RELATIVE_ROOT_SPACING 32 +#define FID_RELATIVE_INDEX_SUPERSCRIPT 33 +#define FID_RELATIVE_INDEX_SUBSCRIPT 34 +#define FID_RELATIVE_FRACTION_NUMERATOR_HEIGHT 35 +#define FID_RELATIVE_FRACTION_DENOMINATOR_DEPTH 36 +#define FID_RELATIVE_FRACTION_BAR_EXCESS_LENGTH 37 +#define FID_RELATIVE_FRACTION_BAR_LINE_WEIGHT 38 +#define FID_RELATIVE_UPPER_LIMIT_DISTANCE 39 +#define FID_RELATIVE_LOWER_LIMIT_DISTANCE 40 +#define FID_RELATIVE_BRACKET_EXCESS_SIZE 41 +#define FID_RELATIVE_BRACKET_DISTANCE 42 +#define FID_IS_SCALE_ALL_BRACKETS 43 +#define FID_RELATIVE_SCALE_BRACKET_EXCESS_SIZE 44 +#define FID_RELATIVE_MATRIX_LINE_SPACING 45 +#define FID_RELATIVE_MATRIX_COLUMN_SPACING 46 +#define FID_RELATIVE_SYMBOL_PRIMARY_HEIGHT 47 +#define FID_RELATIVE_SYMBOL_MINIMUM_HEIGHT 48 +#define FID_RELATIVE_OPERATOR_EXCESS_SIZE 49 +#define FID_RELATIVE_OPERATOR_SPACING 50 +#define FID_LEFT_MARGIN 51 +#define FID_RIGHT_MARGIN 52 +#define FID_TOP_MARGIN 53 +#define FID_BOTTOM_MARGIN 54 + +#define UNO_NAME_FORMULA "Formula" +#define UNO_NAME_FONT_NAME_VARIABLES "FontNameVariables" +#define UNO_NAME_CUSTOM_FONT_VARIABLES_IS_ITALIC "FontVariablesIsItalic" +#define UNO_NAME_CUSTOM_FONT_VARIABLES_IS_BOLD "FontVariablesIsBold" +#define UNO_NAME_FONT_NAME_FUNCTIONS "FontNameFunctions" +#define UNO_NAME_CUSTOM_FONT_FUNCTIONS_IS_ITALIC "FontFunctionsIsItalic" +#define UNO_NAME_CUSTOM_FONT_FUNCTIONS_IS_BOLD "FontFunctionsIsBold" +#define UNO_NAME_FONT_NAME_NUMBERS "FontNameNumbers" +#define UNO_NAME_CUSTOM_FONT_NUMBERS_IS_ITALIC "FontNumbersIsItalic" +#define UNO_NAME_CUSTOM_FONT_NUMBERS_IS_BOLD "FontNumbersIsBold" +#define UNO_NAME_FONT_NAME_TEXT "FontNameText" +#define UNO_NAME_CUSTOM_FONT_TEXT_IS_ITALIC "FontTextIsItalic" +#define UNO_NAME_CUSTOM_FONT_TEXT_IS_BOLD "FontTextIsBold" +#define UNO_NAME_CUSTOM_FONT_NAME_SERIF "CustomFontNameSerif" +#define UNO_NAME_CUSTOM_FONT_SERIF_IS_ITALIC "FontSerifIsItalic" +#define UNO_NAME_CUSTOM_FONT_SERIF_IS_BOLD "FontSerifIsBold" +#define UNO_NAME_CUSTOM_FONT_NAME_SANS "CustomFontNameSans" +#define UNO_NAME_CUSTOM_FONT_SANS_IS_ITALIC "FontSansIsItalic" +#define UNO_NAME_CUSTOM_FONT_SANS_IS_BOLD "FontSansIsBold" +#define UNO_NAME_CUSTOM_FONT_NAME_FIXED "CustomFontNameFixed" +#define UNO_NAME_CUSTOM_FONT_FIXED_IS_ITALIC "FontFixedIsItalic" +#define UNO_NAME_CUSTOM_FONT_FIXED_IS_BOLD "FontFixedIsBold" +#define UNO_NAME_BASE_FONT_HEIGHT "BaseFontHeight" +#define UNO_NAME_RELATIVE_FONT_HEIGHT_TEXT "RelativeFontHeightText" +#define UNO_NAME_RELATIVE_FONT_HEIGHT_INDICES "RelativeFontHeightIndices" +#define UNO_NAME_RELATIVE_FONT_HEIGHT_FUNCTIONS "RelativeFontHeightFunctions" +#define UNO_NAME_RELATIVE_FONT_HEIGHT_OPERATORS "RelativeFontHeightOperators" +#define UNO_NAME_RELATIVE_FONT_HEIGHT_LIMITS "RelativeFontHeightLimits" +#define UNO_NAME_IS_TEXT_MODE "IsTextMode" +#define UNO_NAME_ALIGNMENT "Alignment" +#define UNO_NAME_RELATIVE_SPACING "RelativeSpacing" +#define UNO_NAME_RELATIVE_LINE_SPACING "RelativeLineSpacing" +#define UNO_NAME_RELATIVE_ROOT_SPACING "RelativeRootSpacing" +#define UNO_NAME_RELATIVE_INDEX_SUPERSCRIPT "RelativeIndexSuperscript" +#define UNO_NAME_RELATIVE_INDEX_SUBSCRIPT "RelativeIndexSubscript" +#define UNO_NAME_RELATIVE_FRACTION_NUMERATOR_HEIGHT "RelativeFractionNumeratorHeight" +#define UNO_NAME_RELATIVE_FRACTION_DENOMINATOR_DEPTH "RelativeFractionDenominatorDepth" +#define UNO_NAME_RELATIVE_FRACTION_BAR_EXCESS_LENGTH "RelativeFractionBarExcessLength" +#define UNO_NAME_RELATIVE_FRACTION_BAR_LINE_WEIGHT "RelativeFractionBarLineWeight" +#define UNO_NAME_RELATIVE_UPPER_LIMIT_DISTANCE "RelativeUpperLimitDistance" +#define UNO_NAME_RELATIVE_LOWER_LIMIT_DISTANCE "RelativeLowerLimitDistance" +#define UNO_NAME_RELATIVE_BRACKET_EXCESS_SIZE "RelativeBracketExcessSize" +#define UNO_NAME_RELATIVE_BRACKET_DISTANCE "RelativeBracketDistance" +#define UNO_NAME_IS_SCALE_ALL_BRACKETS "IsScaleAllBrackets" +#define UNO_NAME_RELATIVE_SCALE_BRACKET_EXCESS_SIZE "RelativeScaleBracketExcessSize" +#define UNO_NAME_RELATIVE_MATRIX_LINE_SPACING "RelativeMatrixLineSpacing" +#define UNO_NAME_RELATIVE_MATRIX_COLUMN_SPACING "RelativeMatrixColumnSpacing" +#define UNO_NAME_RELATIVE_SYMBOL_PRIMARY_HEIGHT "RelativeSymbolPrimaryHeight" +#define UNO_NAME_RELATIVE_SYMBOL_MINIMUM_HEIGHT "RelativeSymbolMinimumHeight" +#define UNO_NAME_RELATIVE_OPERATOR_EXCESS_SIZE "RelativeOperatorExcessSize" +#define UNO_NAME_RELATIVE_OPERATOR_SPACING "RelativeOperatorSpacing" +#define UNO_NAME_LEFT_MARGIN "LeftMargin" +#define UNO_NAME_RIGHT_MARGIN "RightMargin" +#define UNO_NAME_TOP_MARGIN "TopMargin" +#define UNO_NAME_BOTTOM_MARGIN "BottomMargin" + + +//must be sorted by names! +SfxItemPropertyMap aMathModelMap_Impl[] = +{ + { MAP_CHAR_LEN(UNO_NAME_ALIGNMENT ), FID_ALIGNMENT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, 0}, + { MAP_CHAR_LEN(UNO_NAME_BASE_FONT_HEIGHT ), FID_BASE_FONT_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, 0}, + { MAP_CHAR_LEN(UNO_NAME_BOTTOM_MARGIN ), FID_BOTTOM_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_BOTTOMSPACE }, + + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_NAME_FIXED ), FID_CUSTOM_FONT_NAME_FIXED , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_FIXED }, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_FIXED_IS_ITALIC), FID_CUSTOM_FONT_FIXED_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FIXED}, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_FIXED_IS_BOLD), FID_CUSTOM_FONT_FIXED_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FIXED}, + + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_NAME_SANS ), FID_CUSTOM_FONT_NAME_SANS , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_SANS }, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_SANS_IS_ITALIC), FID_CUSTOM_FONT_SANS_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SANS}, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_SANS_IS_BOLD), FID_CUSTOM_FONT_SANS_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SANS}, + + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_NAME_SERIF ), FID_CUSTOM_FONT_NAME_SERIF , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_SERIF }, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_SERIF_IS_ITALIC), FID_CUSTOM_FONT_SERIF_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SERIF}, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_SERIF_IS_BOLD), FID_CUSTOM_FONT_SERIF_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SERIF}, + + { MAP_CHAR_LEN(UNO_NAME_FONT_NAME_FUNCTIONS ), FID_FONT_NAME_FUNCTIONS , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_FUNCTION }, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_FUNCTIONS_IS_ITALIC), FID_FONT_FUNCTIONS_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FUNCTION}, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_FUNCTIONS_IS_BOLD), FID_FONT_FUNCTIONS_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FUNCTION}, + + { MAP_CHAR_LEN(UNO_NAME_FONT_NAME_NUMBERS ), FID_FONT_NAME_NUMBERS , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_NUMBER }, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_NUMBERS_IS_ITALIC), FID_FONT_NUMBERS_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_NUMBER}, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_NUMBERS_IS_BOLD), FID_FONT_NUMBERS_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_NUMBER}, + + { MAP_CHAR_LEN(UNO_NAME_FONT_NAME_TEXT ), FID_FONT_NAME_TEXT , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_TEXT }, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_TEXT_IS_ITALIC), FID_FONT_TEXT_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, }, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_TEXT_IS_BOLD), FID_FONT_TEXT_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, }, + + { MAP_CHAR_LEN(UNO_NAME_FONT_NAME_VARIABLES ), FID_FONT_NAME_VARIABLES , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_VARIABLE }, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_VARIABLES_IS_ITALIC), FID_FONT_VARIABLES_POSTURE, &::getBooleanCppuType(), PROPERTY_NONE, }, + { MAP_CHAR_LEN(UNO_NAME_CUSTOM_FONT_VARIABLES_IS_BOLD), FID_FONT_VARIABLES_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, }, + + { MAP_CHAR_LEN(UNO_NAME_FORMULA ), FID_FORMULA , &::getCppuType((const OUString*)0), PROPERTY_NONE, 0}, + { MAP_CHAR_LEN(UNO_NAME_IS_SCALE_ALL_BRACKETS ), FID_IS_SCALE_ALL_BRACKETS , &::getBooleanCppuType(), PROPERTY_NONE, 0}, + { MAP_CHAR_LEN(UNO_NAME_IS_TEXT_MODE ), FID_IS_TEXT_MODE , &::getBooleanCppuType(), PROPERTY_NONE, 0}, + { MAP_CHAR_LEN(UNO_NAME_LEFT_MARGIN ), FID_LEFT_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_LEFTSPACE }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_BRACKET_DISTANCE ), FID_RELATIVE_BRACKET_DISTANCE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_BRACKETSPACE }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_BRACKET_EXCESS_SIZE ), FID_RELATIVE_BRACKET_EXCESS_SIZE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_BRACKETSIZE }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_FONT_HEIGHT_FUNCTIONS ), FID_RELATIVE_FONT_HEIGHT_FUNCTIONS , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_FUNCTION}, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_FONT_HEIGHT_INDICES ), FID_RELATIVE_FONT_HEIGHT_INDICES , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_INDEX }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_FONT_HEIGHT_LIMITS ), FID_RELATIVE_FONT_HEIGHT_LIMITS , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_LIMITS }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_FONT_HEIGHT_OPERATORS ), FID_RELATIVE_FONT_HEIGHT_OPERATORS , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_OPERATOR}, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_FONT_HEIGHT_TEXT ), FID_RELATIVE_FONT_HEIGHT_TEXT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_TEXT }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_FRACTION_BAR_EXCESS_LENGTH), FID_RELATIVE_FRACTION_BAR_EXCESS_LENGTH, &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_FRACTION }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_FRACTION_BAR_LINE_WEIGHT ), FID_RELATIVE_FRACTION_BAR_LINE_WEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_STROKEWIDTH }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_FRACTION_DENOMINATOR_DEPTH), FID_RELATIVE_FRACTION_DENOMINATOR_DEPTH, &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_DENOMINATOR }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_FRACTION_NUMERATOR_HEIGHT ), FID_RELATIVE_FRACTION_NUMERATOR_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_NUMERATOR }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_INDEX_SUBSCRIPT ), FID_RELATIVE_INDEX_SUBSCRIPT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_SUBSCRIPT }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_INDEX_SUPERSCRIPT ), FID_RELATIVE_INDEX_SUPERSCRIPT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_SUPERSCRIPT }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_LINE_SPACING ), FID_RELATIVE_LINE_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_VERTICAL }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_LOWER_LIMIT_DISTANCE ), FID_RELATIVE_LOWER_LIMIT_DISTANCE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_LOWERLIMIT }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_MATRIX_COLUMN_SPACING ), FID_RELATIVE_MATRIX_COLUMN_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_MATRIXCOL}, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_MATRIX_LINE_SPACING ), FID_RELATIVE_MATRIX_LINE_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_MATRIXROW}, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_OPERATOR_EXCESS_SIZE ), FID_RELATIVE_OPERATOR_EXCESS_SIZE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_OPERATORSIZE }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_OPERATOR_SPACING ), FID_RELATIVE_OPERATOR_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_OPERATORSPACE}, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_ROOT_SPACING ), FID_RELATIVE_ROOT_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_ROOT }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_SCALE_BRACKET_EXCESS_SIZE ), FID_RELATIVE_SCALE_BRACKET_EXCESS_SIZE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_NORMALBRACKETSIZE}, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_SPACING ), FID_RELATIVE_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_HORIZONTAL }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_SYMBOL_MINIMUM_HEIGHT ), FID_RELATIVE_SYMBOL_MINIMUM_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_ORNAMENTSPACE }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_SYMBOL_PRIMARY_HEIGHT ), FID_RELATIVE_SYMBOL_PRIMARY_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_ORNAMENTSIZE }, + { MAP_CHAR_LEN(UNO_NAME_RELATIVE_UPPER_LIMIT_DISTANCE ), FID_RELATIVE_UPPER_LIMIT_DISTANCE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_UPPERLIMIT }, + { MAP_CHAR_LEN(UNO_NAME_RIGHT_MARGIN ), FID_RIGHT_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_RIGHTSPACE }, + { MAP_CHAR_LEN(UNO_NAME_TOP_MARGIN ), FID_TOP_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_TOPSPACE }, + {0,0,0,0} +}; +//----------------------------------------------------------------------- +SmModel::SmModel( SfxObjectShell *pObjSh ) : + SfxBaseModel(pObjSh), + _pMap(aMathModelMap_Impl) +{ +} +//----------------------------------------------------------------------- +SmModel::~SmModel() +{ +} +/*-- 28.03.00 14:18:17--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Any SAL_CALL SmModel::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException) +{ + uno::Any aRet = SmModelBaseClass::queryInterface(rType); + if(!aRet.hasValue()) + { + aRet = SfxBaseModel::queryInterface(rType); + } + return aRet; +} +/*-- 28.03.00 14:18:18--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SAL_CALL SmModel::acquire() throw(uno::RuntimeException) +{ + ::vos::OGuard aGuard(Application::GetSolarMutex()); + SmModelBaseClass::acquire(); +} +/*-- 28.03.00 14:18:18--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SAL_CALL SmModel::release() throw(uno::RuntimeException) +{ + ::vos::OGuard aGuard(Application::GetSolarMutex()); + SmModelBaseClass::release(); +} +/*-- 28.03.00 14:18:19--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Sequence< uno::Type > SAL_CALL SmModel::getTypes( ) throw(uno::RuntimeException) +{ + ::vos::OGuard aGuard(Application::GetSolarMutex()); + + uno::Sequence< uno::Type > aBaseTypes = SmModelBaseClass::getTypes(); + uno::Sequence< uno::Type > aSfxTypes = SfxBaseModel::getTypes(); + long nIndex = aBaseTypes.getLength(); + aBaseTypes.realloc(aBaseTypes.getLength() + aSfxTypes.getLength()); + uno::Type* pBaseTypes = aBaseTypes.getArray(); + const uno::Type* pSfxTypes = aSfxTypes.getConstArray(); + for(long nSfx = 0; nSfx < aSfxTypes.getLength(); nSfx++) + pBaseTypes[nIndex++] = pSfxTypes[nSfx]; + return aBaseTypes; +} +/* -----------------------------28.03.00 14:23-------------------------------- + + ---------------------------------------------------------------------------*/ +const uno::Sequence< sal_Int8 > & SmModel::getUnoTunnelId() +{ + static osl::Mutex aCreateMutex; + osl::Guard aGuard( aCreateMutex ); + + static uno::Sequence< sal_Int8 > aSeq; + if(!aSeq.getLength()) + { + aSeq.realloc( 16 ); + rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True ); + } + return aSeq; +} +/* -----------------------------28.03.00 14:23-------------------------------- + + ---------------------------------------------------------------------------*/ +sal_Int64 SAL_CALL SmModel::getSomething( const uno::Sequence< sal_Int8 >& rId ) + throw(uno::RuntimeException) +{ + if( rId.getLength() == 16 + && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(), + rId.getConstArray(), 16 ) ) + { + return (sal_Int64)this; + } + return 0; +} + +/*-- 07.01.00 16:32:59--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Reference< beans::XPropertySetInfo > SAL_CALL SmModel::getPropertySetInfo(void) throw( uno::RuntimeException ) +{ + ::vos::OGuard aGuard(Application::GetSolarMutex()); + + static uno::Reference< beans::XPropertySetInfo > xRet = new SfxItemPropertySetInfo( _pMap ); + return xRet; +} +/*-- 07.01.00 16:33:00--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Int16 lcl_AnyToINT16(const uno::Any& rAny) +{ + uno::TypeClass eType = rAny.getValueType().getTypeClass(); + + sal_Int16 nRet = 0; + if( eType == uno::TypeClass_DOUBLE ) + nRet = (sal_Int16)*(double*)rAny.getValue(); + else if( eType == uno::TypeClass_FLOAT ) + nRet = (sal_Int16)*(float*)rAny.getValue(); + else + rAny >>= nRet; + return nRet; +} +//----------------------------------------------------------------------------- +void SmModel::setPropertyValue(const OUString& rPropertyName, const uno::Any& aValue) + throw( beans::UnknownPropertyException, beans::PropertyVetoException, + lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException) +{ + ::vos::OGuard aGuard(Application::GetSolarMutex()); + + SfxObjectShell* pObjShell = GetObjectShell(); + if(!pObjShell) + throw uno::RuntimeException(); + const SfxItemPropertyMap* pMap = SfxItemPropertyMap::GetByName( + _pMap, rPropertyName); + if(pMap) + { + SmFormat& aFormat = ((SmDocShell*)pObjShell)->GetFormat(); + switch(pMap->nWID) + { + case FID_FORMULA: + { + OUString aText; + aValue >>= aText; + ((SmDocShell*)pObjShell)->SetText(aText); + } + break; + case FID_FONT_NAME_VARIABLES : + case FID_FONT_NAME_FUNCTIONS : + case FID_FONT_NAME_NUMBERS : + case FID_FONT_NAME_TEXT : + case FID_CUSTOM_FONT_NAME_SERIF : + case FID_CUSTOM_FONT_NAME_SANS : + case FID_CUSTOM_FONT_NAME_FIXED : + { + OUString aText; + aValue >>= aText; + String sFontName = aText; + if(!sFontName.Len()) + throw lang::IllegalArgumentException(); + if(aFormat.GetFont(pMap->nMemberId).GetName() != sFontName) + { + OutputDevice *pDev = ((SmDocShell*)pObjShell)->GetPrinter(); + if (!pDev || pDev->GetDevFontCount() == 0) + pDev = (OutputDevice *) GetpApp()->GetDefaultDevice(); + + FontList aFontList(pDev); + + sal_uInt16 nCount = aFontList.GetFontNameCount(); + sal_Bool bSet = sal_False; + for (sal_uInt16 i = 0; i < nCount; i++) + { + const FontInfo& rInfo = aFontList.GetFontName( i ); + if(rInfo.GetName() == sFontName) + { + SmFace aSet(rInfo); + const SmFace rOld = aFormat.GetFont(pMap->nMemberId); + aSet.SetBorderWidth(rOld.GetBorderWidth()); + aSet.SetSize(rOld.GetSize()); + aSet.SetAlign(ALIGN_BASELINE); + aFormat.SetFont(pMap->nMemberId, aSet); + bSet = sal_True; + break; + } + } + if(!bSet) + throw lang::IllegalArgumentException(); + } + } + break; + case FID_CUSTOM_FONT_FIXED_POSTURE: + case FID_CUSTOM_FONT_SANS_POSTURE : + case FID_CUSTOM_FONT_SERIF_POSTURE: + case FID_FONT_VARIABLES_POSTURE : + case FID_FONT_FUNCTIONS_POSTURE : + case FID_FONT_NUMBERS_POSTURE : + case FID_FONT_TEXT_POSTURE : + { + if(aValue.getValueType() != ::getBooleanCppuType()) + throw lang::IllegalArgumentException(); + BOOL bVal = *(sal_Bool*)aValue.getValue(); + Font aNewFont(aFormat.GetFont(pMap->nMemberId)); + aNewFont.SetItalic((bVal) ? ITALIC_NORMAL : ITALIC_NONE); + aFormat.SetFont(pMap->nMemberId, aNewFont); + } + break; + case FID_CUSTOM_FONT_FIXED_WEIGHT : + case FID_CUSTOM_FONT_SANS_WEIGHT : + case FID_CUSTOM_FONT_SERIF_WEIGHT : + case FID_FONT_VARIABLES_WEIGHT : + case FID_FONT_FUNCTIONS_WEIGHT : + case FID_FONT_NUMBERS_WEIGHT : + case FID_FONT_TEXT_WEIGHT : + { + if(aValue.getValueType() != ::getBooleanCppuType()) + throw lang::IllegalArgumentException(); + BOOL bVal = *(sal_Bool*)aValue.getValue(); + Font aNewFont(aFormat.GetFont(pMap->nMemberId)); + aNewFont.SetWeight((bVal) ? WEIGHT_BOLD : WEIGHT_NORMAL); + aFormat.SetFont(pMap->nMemberId, aNewFont); + } + break; + case FID_BASE_FONT_HEIGHT : + { + // Point! + sal_Int16 nVal = lcl_AnyToINT16(aValue); + if(nVal < 1) + throw lang::IllegalArgumentException(); + Size aSize = aFormat.GetBaseSize(); + nVal *= 20; + nVal = TWIP_TO_MM100(nVal); + aSize.Height() = nVal; + aFormat.SetBaseSize(aSize); + } + break; + case FID_RELATIVE_FONT_HEIGHT_TEXT : + case FID_RELATIVE_FONT_HEIGHT_INDICES : + case FID_RELATIVE_FONT_HEIGHT_FUNCTIONS : + case FID_RELATIVE_FONT_HEIGHT_OPERATORS : + case FID_RELATIVE_FONT_HEIGHT_LIMITS : + { + sal_Int16 nVal; + aValue >>= nVal; + if(nVal < 1) + throw lang::IllegalArgumentException(); + aFormat.SetRelSize(pMap->nMemberId, nVal); + } + break; + + case FID_IS_TEXT_MODE : + { + aFormat.SetTextmode(*(sal_Bool*)aValue.getValue()); + } + break; + + case FID_ALIGNMENT : + { + // SmHorAlign uses the same values as HorizontalAlignment + sal_Int16 nVal; + aValue >>= nVal; + if(nVal < 0 || nVal > 2) + throw lang::IllegalArgumentException(); + aFormat.SetHorAlign((SmHorAlign)nVal); + } + break; + + case FID_RELATIVE_SPACING : + case FID_RELATIVE_LINE_SPACING : + case FID_RELATIVE_ROOT_SPACING : + case FID_RELATIVE_INDEX_SUPERSCRIPT : + case FID_RELATIVE_INDEX_SUBSCRIPT : + case FID_RELATIVE_FRACTION_NUMERATOR_HEIGHT : + case FID_RELATIVE_FRACTION_DENOMINATOR_DEPTH: + case FID_RELATIVE_FRACTION_BAR_EXCESS_LENGTH: + case FID_RELATIVE_FRACTION_BAR_LINE_WEIGHT : + case FID_RELATIVE_UPPER_LIMIT_DISTANCE : + case FID_RELATIVE_LOWER_LIMIT_DISTANCE : + case FID_RELATIVE_BRACKET_EXCESS_SIZE : + case FID_RELATIVE_BRACKET_DISTANCE : + case FID_RELATIVE_SCALE_BRACKET_EXCESS_SIZE : + case FID_RELATIVE_MATRIX_LINE_SPACING : + case FID_RELATIVE_MATRIX_COLUMN_SPACING : + case FID_RELATIVE_SYMBOL_PRIMARY_HEIGHT : + case FID_RELATIVE_SYMBOL_MINIMUM_HEIGHT : + case FID_RELATIVE_OPERATOR_EXCESS_SIZE : + case FID_RELATIVE_OPERATOR_SPACING : + case FID_LEFT_MARGIN : + case FID_RIGHT_MARGIN : + case FID_TOP_MARGIN : + case FID_BOTTOM_MARGIN : + { + sal_Int16 nVal; + aValue >>= nVal; + if(nVal < 0) + throw lang::IllegalArgumentException(); + aFormat.SetDistance(pMap->nMemberId, nVal); + } + break; + case FID_IS_SCALE_ALL_BRACKETS : + aFormat.SetScaleNormalBrackets(*(sal_Bool*)aValue.getValue()); + break; + } + if(pMap->nWID) + { + ((SmDocShell*)pObjShell)->SetFormat(aFormat); + aFormat.RequestApplyChanges(); + } + } + else + throw beans::UnknownPropertyException(); +} +/*-- 07.01.00 16:33:00--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Any SmModel::getPropertyValue(const OUString& rPropertyName) + throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +{ + ::vos::OGuard aGuard(Application::GetSolarMutex()); + + uno::Any aRet; + SfxObjectShell* pObjShell = GetObjectShell(); + if(!pObjShell) + throw uno::RuntimeException(); + const SfxItemPropertyMap* pMap = SfxItemPropertyMap::GetByName( + _pMap, rPropertyName); + if(pMap) + { + const SmFormat& rFormat = ((SmDocShell*)pObjShell)->GetFormat(); + switch(pMap->nWID) + { + case FID_FORMULA: + aRet <<= OUString(((SmDocShell*)pObjShell)->GetText()); + break; + case FID_FONT_NAME_VARIABLES : + case FID_FONT_NAME_FUNCTIONS : + case FID_FONT_NAME_NUMBERS : + case FID_FONT_NAME_TEXT : + case FID_CUSTOM_FONT_NAME_SERIF : + case FID_CUSTOM_FONT_NAME_SANS : + case FID_CUSTOM_FONT_NAME_FIXED : + { + const SmFace & rFace = rFormat.GetFont(pMap->nMemberId); + aRet <<= OUString(rFace.GetName()); + } + break; + case FID_CUSTOM_FONT_FIXED_POSTURE: + case FID_CUSTOM_FONT_SANS_POSTURE : + case FID_CUSTOM_FONT_SERIF_POSTURE: + case FID_FONT_VARIABLES_POSTURE : + case FID_FONT_FUNCTIONS_POSTURE : + case FID_FONT_NUMBERS_POSTURE : + case FID_FONT_TEXT_POSTURE : + { + const SmFace & rFace = rFormat.GetFont(pMap->nMemberId); + BOOL bVal = (rFace.GetItalic() != ITALIC_NONE); + aRet.setValue(&bVal, *pMap->pType); + } + break; + case FID_CUSTOM_FONT_FIXED_WEIGHT : + case FID_CUSTOM_FONT_SANS_WEIGHT : + case FID_CUSTOM_FONT_SERIF_WEIGHT : + case FID_FONT_VARIABLES_WEIGHT : + case FID_FONT_FUNCTIONS_WEIGHT : + case FID_FONT_NUMBERS_WEIGHT : + case FID_FONT_TEXT_WEIGHT : + { + const SmFace & rFace = rFormat.GetFont(pMap->nMemberId); + BOOL bVal = (rFace.GetWeight() == WEIGHT_BOLD); + aRet.setValue(&bVal, *pMap->pType); + } + break; + case FID_BASE_FONT_HEIGHT : + { + // Point! + sal_Int16 nVal = rFormat.GetBaseSize().Height(); + nVal = MM100_TO_TWIP(nVal); + nVal = (nVal + 10) / 20; + aRet <<= nVal; + } + break; + case FID_RELATIVE_FONT_HEIGHT_TEXT : + case FID_RELATIVE_FONT_HEIGHT_INDICES : + case FID_RELATIVE_FONT_HEIGHT_FUNCTIONS : + case FID_RELATIVE_FONT_HEIGHT_OPERATORS : + case FID_RELATIVE_FONT_HEIGHT_LIMITS : + aRet <<= (sal_Int16) rFormat.GetRelSize(pMap->nMemberId); + break; + + case FID_IS_TEXT_MODE : + { + sal_Bool bVal = rFormat.IsTextmode(); + aRet.setValue(&bVal, ::getBooleanCppuType()); + } + break; + + case FID_ALIGNMENT : + // SmHorAlign uses the same values as HorizontalAlignment + aRet <<= (sal_Int16)rFormat.GetHorAlign(); + break; + + case FID_RELATIVE_SPACING : + case FID_RELATIVE_LINE_SPACING : + case FID_RELATIVE_ROOT_SPACING : + case FID_RELATIVE_INDEX_SUPERSCRIPT : + case FID_RELATIVE_INDEX_SUBSCRIPT : + case FID_RELATIVE_FRACTION_NUMERATOR_HEIGHT : + case FID_RELATIVE_FRACTION_DENOMINATOR_DEPTH: + case FID_RELATIVE_FRACTION_BAR_EXCESS_LENGTH: + case FID_RELATIVE_FRACTION_BAR_LINE_WEIGHT : + case FID_RELATIVE_UPPER_LIMIT_DISTANCE : + case FID_RELATIVE_LOWER_LIMIT_DISTANCE : + case FID_RELATIVE_BRACKET_EXCESS_SIZE : + case FID_RELATIVE_BRACKET_DISTANCE : + case FID_RELATIVE_SCALE_BRACKET_EXCESS_SIZE : + case FID_RELATIVE_MATRIX_LINE_SPACING : + case FID_RELATIVE_MATRIX_COLUMN_SPACING : + case FID_RELATIVE_SYMBOL_PRIMARY_HEIGHT : + case FID_RELATIVE_SYMBOL_MINIMUM_HEIGHT : + case FID_RELATIVE_OPERATOR_EXCESS_SIZE : + case FID_RELATIVE_OPERATOR_SPACING : + case FID_LEFT_MARGIN : + case FID_RIGHT_MARGIN : + case FID_TOP_MARGIN : + case FID_BOTTOM_MARGIN : + aRet <<= (sal_Int16)rFormat.GetDistance(pMap->nMemberId); + break; + case FID_IS_SCALE_ALL_BRACKETS : + sal_Bool bVal = rFormat.IsScaleNormalBrackets(); + aRet.setValue(&bVal, ::getBooleanCppuType()); + break; + } + } + else + throw beans::UnknownPropertyException(); + return aRet; +} +/*-- 07.01.00 16:33:00--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SmModel::addPropertyChangeListener(const OUString& PropertyName, + const uno::Reference< beans::XPropertyChangeListener > & aListener) + throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +{ +} +/*-- 07.01.00 16:33:01--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SmModel::removePropertyChangeListener(const OUString& PropertyName, + const uno::Reference< beans::XPropertyChangeListener > & aListener) + throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +{ +} +/*-- 07.01.00 16:33:01--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SmModel::addVetoableChangeListener(const OUString& PropertyName, + const uno::Reference< beans::XVetoableChangeListener > & aListener) + throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +{ +} +/*-- 07.01.00 16:33:01--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void SmModel::removeVetoableChangeListener(const OUString& PropertyName, + const uno::Reference< beans::XVetoableChangeListener > & aListener) + throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException ) +{ +} +/*-- 07.02.00 13:24:08--------------------------------------------------- + + -----------------------------------------------------------------------*/ +OUString SmModel::getImplementationName(void) throw( uno::RuntimeException ) +{ + return C2U("SmModel"); +} +/*-- 07.02.00 13:24:09--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool SmModel::supportsService(const OUString& rServiceName) throw( uno::RuntimeException ) +{ + return rServiceName == C2U("com.sun.star.formula.FormulaProperties"); +} +/*-- 07.02.00 13:24:09--------------------------------------------------- + + -----------------------------------------------------------------------*/ +uno::Sequence< OUString > SmModel::getSupportedServiceNames(void) throw( uno::RuntimeException ) +{ + ::vos::OGuard aGuard(Application::GetSolarMutex()); + + uno::Sequence< OUString > aRet(1); + OUString* pArray = aRet.getArray(); + pArray[0] = C2U("com.sun.star.formula.FormulaProperties"); + return aRet; +} +/* -----------------------------20.06.00 10:47-------------------------------- + + ---------------------------------------------------------------------------*/ +void * SAL_CALL SmModel::operator new( size_t t ) throw() +{ + return SmModelBaseClass::operator new( t ); +} +/* -----------------------------20.06.00 10:47-------------------------------- + + ---------------------------------------------------------------------------*/ +void SAL_CALL SmModel::operator delete( void * p ) throw() +{ + SmModelBaseClass::operator delete( p ); +} + diff --git a/starmath/source/utility.cxx b/starmath/source/utility.cxx new file mode 100644 index 000000000000..920602ce3a4d --- /dev/null +++ b/starmath/source/utility.cxx @@ -0,0 +1,651 @@ +/************************************************************************* + * + * $RCSfile: utility.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:27 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef _SFXAPP_HXX //autogen +#include +#endif +#ifndef _SV_VIRDEV_HXX //autogen +#include +#endif +#ifndef NOOLDSV //autogen +#include +#endif + +#include "starmath.hrc" + +#include "utility.hxx" +#include "dialog.hxx" +#include "view.hxx" +#include "smdll.hxx" + + +SmViewShell * SmGetActiveView() + // return pointer to active SmViewShell, if this is not possible + // return 0 instead. +{ + SfxViewShell *pView = SfxViewShell::Current(); + return PTR_CAST(SmViewShell, pView); +} + + +//////////////////////////////////////// + + +SvStream& operator << (SvStream& rStream, const SmFace& rFont) +{ + rStream.WriteByteString(ExportString(rFont.GetName())); + rStream << (ULONG)rFont.GetFamily(); + rStream << (ULONG)rFont.GetCharSet(); + rStream << (ULONG)rFont.GetWeight(); + rStream << (ULONG)rFont.GetItalic(); + + return rStream; +} + +SvStream& operator >> (SvStream& rStream, SmFace& rFont) +{ + ULONG nData; + String aString; + + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + rStream.ReadByteString(aString); + rFont.SetName(aString); + rStream >> nData; + rFont.SetFamily((FontFamily)nData); + rStream >> nData; + rFont.SetCharSet((CharSet)nData); + rStream >> nData; + rFont.SetWeight((FontWeight)nData); + rStream >> nData; + rFont.SetItalic((FontItalic)nData); + + return rStream; +} + +void ReadSM20Font(SvStream& rStream, Font& rFont) +{ + BOOL bData; + ULONG nData; + String aString; + + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + rStream.ReadByteString(aString); + rFont.SetName(aString); + rStream >> nData; + rFont.SetFamily((FontFamily)nData); + rStream >> nData; + rFont.SetCharSet((CharSet)nData); + rStream >> nData; + rFont.SetWeight((FontWeight)nData); + rStream >> bData; + if (bData) + rFont.SetItalic(ITALIC_NORMAL); + else + rFont.SetItalic(ITALIC_NONE); +} + + +//////////////////////////////////////////////////////////// +// +// SmRectCache +// + + +SmRectCache::Key::Key(const XubString &rText, const Font &rFont) +{ +} + + +BOOL SmRectCache::Key::operator < (const Key &rKey) const +{ +#ifdef never + BOOL bRes = FALSE; + + if (aText < rKey.aText) + bRes = TRUE; + else if () + + return aText < rKey.aText + || aText == rKey.aText && aFontName < rKey.aFontName + || aFontName == rKey.aFontname && aFontSize < rKey.aFontSize + || aFontSize == rKey.aFontSize && eFontWeight < rKey.eFontWeight + || eFontWeight == rKey.eFontWeight && eFontItalic < rKey.eFontItalic; +#endif + return FALSE; +} + + +BOOL SmRectCache::Key::operator == (const Key &rKey) const +{ + return aText == rKey.aText + && aFontName == rKey.aFontName + && aFontSize == rKey.aFontSize + && eFontWeight == rKey.eFontWeight + && eFontItalic == rKey.eFontItalic; +} + + +SmRectCache::SmRectCache() +{ + pVirDev = 0; +} + + +SmRectCache::~SmRectCache() +{ + delete pVirDev; +} + + +const SmRect * SmRectCache::Search(const Key &rKey) const +{ + return 0; +} + + +const SmRect * SmRectCache::Add(const Key &rKey, const SmRect &rRect) +{ + return (const SmRect *)-1; +} + + +VirtualDevice * SmRectCache::GetVirDev() +{ + if (!pVirDev) + { + SmViewShell *pView = SmGetActiveView(); + if (pView) + pVirDev = new VirtualDevice( pView->GetGraphicWindow() ); + else + pVirDev = new VirtualDevice; + pVirDev->SetMapMode( MapMode(MAP_100TH_MM) ); + } + DBG_ASSERT(pVirDev->GetMapMode().GetMapUnit() == MAP_100TH_MM, + "Sm : falscher MapMode"); + + return pVirDev; +} + + +void SmRectCache::Reset() +{ +} + + +//////////////////////////////////////////////////////////// + +ByteString ConvertUnknownCharacter(sal_Unicode ch) +{ + ByteString aString(""; + + return aString; +} + +const ByteString ExportString(const String& rString) +{ + ByteString aString; + + rtl_TextEncoding eEnc = gsl_getSystemTextEncoding(); + + for (xub_StrLen i = 0; i < rString.Len(); i++) + { + sal_Unicode ch = rString.GetChar(i); + + sal_Char cChar = ByteString::ConvertFromUnicode( ch, eEnc ); + if ((ch != '\r') && (ch != '\n') && (ch != '\t')) + { +// ch = String::Convert(rString[i], eSet, CHARSET_ANSI); + + if (ch == 0) + aString += ConvertUnknownCharacter(ch); + else + aString += cChar; + } + else + aString += ch; + } + + aString.ConvertLineEnd(LINEEND_CRLF); + + return (aString); +} + +//////////////////////////////////////////////////////////// + + +/**************************************************************************/ + +SmPickList::SmPickList(USHORT nInitSize, USHORT nMaxSize) : + SfxPtrArr((BYTE) nInitSize, 1) +{ + nSize = nMaxSize; +} + + +SmPickList::~SmPickList() +{ + Clear(); +} + + +SmPickList& SmPickList::operator=(const SmPickList& rList) +{ + USHORT nPos; + + Clear(); + nSize = rList.nSize; + for (nPos = 0; nPos < rList.Count(); nPos++) + InsertPtr(nPos, CreateItem(rList.Get(nPos))); + + return *this; +} + + +void SmPickList::Insert(const void *pItem) +{ + Remove(pItem); + InsertPtr(0, CreateItem(pItem)); + + if (Count() > nSize) + { + DestroyItem(GetPtr(nSize)); + RemovePtr(nSize, 1); + } +} + + +void SmPickList::Update(const void *pItem, const void *pNewItem) +{ + USHORT nPos; + + for (nPos = 0; nPos < Count(); nPos++) + if (CompareItem(GetPtr(nPos), pItem)) + { + DestroyItem(GetPtr(nPos)); + GetPtr(nPos) = CreateItem(pNewItem); + break; + } +} + +void SmPickList::Remove(const void *pItem) +{ + USHORT nPos; + + for (nPos = 0; nPos < Count(); nPos++) + if (CompareItem(GetPtr(nPos), pItem)) + { + DestroyItem(GetPtr(nPos)); + RemovePtr(nPos, 1); + break; + } +} + +void SmPickList::SetSize(USHORT nNewSize) +{ + nSize = nNewSize; + + while (Count() > nSize) + { + DestroyItem(GetPtr(Count() - 1)); + RemovePtr(Count() - 1, 1); + } +} + + +BOOL SmPickList::Contains(const void *pItem) const +{ + USHORT nPos; + + for (nPos = 0; nPos < Count(); nPos++) + if (CompareItem(GetPtr(nPos), pItem)) + return TRUE; + + return FALSE; +} + + +void SmPickList::Clear() +{ + USHORT nPos; + + for (nPos = 0; nPos < Count(); nPos++) + DestroyItem(GetPtr(nPos)); + + RemovePtr(0, Count()); +} + + +SvStream& operator << (SvStream& rStream, const SmPickList& rPickList) +{ + USHORT nPos; + + rStream << 'p'; + rStream << rPickList.nSize; + rStream << rPickList.Count(); + + for (nPos = 0; nPos < rPickList.Count(); nPos++) + rPickList.SaveItem(rStream, rPickList.GetObject(nPos)); + + return rStream; +} + +SvStream& operator >> (SvStream& rStream, SmPickList& rPickList) +{ + char cTag; + USHORT nCount, nPos; + void *pItem; + + rPickList.Clear(); + + rStream >> cTag; + if (cTag == 'p') + { + rStream >> rPickList.nSize; + rStream >> nCount; + + for (nPos = 0; nPos < nCount; nPos++) + { + pItem = rPickList.CreateItem(String()); + rPickList.LoadItem(rStream, pItem); + rPickList.InsertPtr(nPos, pItem); + } + } + + return rStream; +} + + +/**************************************************************************/ +/**************************************************************************/ + +void * SmFontPickList::CreateItem(const String& rString) +{ + return new Font(); +} + +void * SmFontPickList::CreateItem(const void *pItem) +{ + return new Font(*((Font *) pItem)); +} + +void SmFontPickList::DestroyItem(void *pItem) +{ + delete (Font *)pItem; +} + +BOOL SmFontPickList::CompareItem(const void *pFirstItem, const void *pSecondItem) const +{ + Font *pFirstFont, *pSecondFont; + + pFirstFont = (Font *)pFirstItem; + pSecondFont = (Font *)pSecondItem; + + if (pFirstFont->GetName() == pSecondFont->GetName()) + if ((pFirstFont->GetFamily() == pSecondFont->GetFamily()) && + (pFirstFont->GetCharSet() == pSecondFont->GetCharSet()) && + (pFirstFont->GetWeight() == pSecondFont->GetWeight()) && + (pFirstFont->GetItalic() == pSecondFont->GetItalic())) + return (TRUE); + + return FALSE; +} + +String SmFontPickList::GetStringItem(void *pItem) +{ + Font *pFont; + String aString; + + pFont = (Font *)pItem; + + aString = pFont->GetName(); + + if (pFont->GetItalic() != ITALIC_NONE) + aString += String(SmResId(RID_FONTITALIC)); + if (pFont->GetWeight() == WEIGHT_BOLD) + aString += String(SmResId(RID_FONTBOLD)); + + return (aString); +} + +void SmFontPickList::LoadItem(SvStream& rStream, void *pItem) +{ + rStream >> *((Font *)pItem); +} + +void SmFontPickList::SaveItem(SvStream& rStream, const void *pItem) const +{ + rStream << *(const Font *) pItem; +} + +void SmFontPickList::Insert(const Font &rFont) +{ + SmPickList::Insert((void *)&rFont); +} + +void SmFontPickList::Update(const Font &rFont, const Font &rNewFont) +{ + SmPickList::Update((void *)&rFont, (void *)&rNewFont); +} + +void SmFontPickList::Remove(const Font &rFont) +{ + SmPickList::Remove((void *)&rFont); +} + + +void SmFontPickList::ReadFrom(const SmFontDialog& rDialog) +{ + Insert(rDialog.GetFont()); +} + +void SmFontPickList::WriteTo(SmFontDialog& rDialog) const +{ + rDialog.SetFont(Get()); +} + + +/**************************************************************************/ + + +/**************************************************************************/ + +IMPL_LINK( SmFontPickListBox, SelectHdl, ListBox *, pListBox ) +{ + USHORT nPos; + String aString; + + nPos = GetSelectEntryPos(); + + if (nPos != 0) + { + SmFontPickList::Insert(Get(nPos)); + aString = GetEntry(nPos); + RemoveEntry(nPos); + InsertEntry(aString, 0); + } + + SelectEntryPos(0); + + return 0; +} + + +SmFontPickListBox::SmFontPickListBox(Window* pParent, WinBits nWinStyle, USHORT nMax) : + SmFontPickList(nMax, nMax), + ListBox(pParent, nWinStyle) +{ + SetSelectHdl(LINK(this, SmFontPickListBox, SelectHdl)); +} + + +SmFontPickListBox::SmFontPickListBox(Window* pParent, const ResId& rResId, USHORT nMax) : + SmFontPickList(nMax, nMax), + ListBox(pParent, rResId) +{ + SetSelectHdl(LINK(this, SmFontPickListBox, SelectHdl)); +} + + +SmFontPickListBox& SmFontPickListBox::operator=(const SmFontPickList& rList) +{ + USHORT nPos; + + *(SmFontPickList *)this = rList; + + for (nPos = 0; nPos < Count(); nPos++) + InsertEntry(GetStringItem(GetPtr(nPos)), nPos); + + if (Count() > 0) + SelectEntry(GetStringItem(GetPtr(0))); + + return *this; +} + +void SmFontPickListBox::Insert(const Font &rFont) +{ + SmFontPickList::Insert(rFont); + + RemoveEntry(GetStringItem(GetPtr(0))); + InsertEntry(GetStringItem(GetPtr(0)), 0); + SelectEntry(GetStringItem(GetPtr(0))); + + while (GetEntryCount() > nSize) + RemoveEntry(GetEntryCount() - 1); + + return; +} + + +void SmFontPickListBox::Update(const Font &rFont, const Font &rNewFont) +{ + SmFontPickList::Update(rFont, rNewFont); + + // ********************** hier fehlt noch was + + return; +} + + +void SmFontPickListBox::Remove(const Font &rFont) +{ + SmFontPickList::Remove(rFont); + + // ********************** hier fehlt noch was + + return; +} + +//////////////////////////////////////// + + +void SmFace::SetSize(const Size& rSize) +{ + Size aSize (rSize); + + // check the requested size against minimum value + static int __READONLY_DATA nMinVal = SmPtsTo100th_mm(2); + + if (aSize.Height() < nMinVal) + aSize.Height() = nMinVal; + + //! we don't force a maximum value here because this may prevent eg the + //! parentheses in "left ( ... right )" from matching up with large + //! bodies (eg stack{...} with many entries). + //! Of course this is holds only if characters are used and not polygons. + + Font::SetSize(aSize); +} + + +long SmFace::GetBorderWidth() const +{ + if (nBorderWidth < 0) + return GetDefaultBorderWidth(); + else + return nBorderWidth; +} + +SmFace & SmFace::operator = (const SmFace &rFace) +{ + Font::operator = (rFace); + nBorderWidth = -1; + return *this; +} + + +SmFace & operator *= (SmFace &rFace, const Fraction &rFrac) + // scales the width and height of 'rFace' by 'rFrac' and returns a + // reference to 'rFace'. + // It's main use is to make scaling fonts look easier. +{ const Size &rFaceSize = rFace.GetSize(); + + rFace.SetSize(Size(Fraction(rFaceSize.Width()) *= rFrac, + Fraction(rFaceSize.Height()) *= rFrac)); + return rFace; +} + + + diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx new file mode 100644 index 000000000000..81ada46c8bb3 --- /dev/null +++ b/starmath/source/view.cxx @@ -0,0 +1,1559 @@ +/************************************************************************* + * + * $RCSfile: view.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:57:27 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + + +#ifndef _SV_MENU_HXX //autogen +#include +#endif +#ifndef _SV_DECOVIEW_HXX //autogen +#include +#endif +#ifndef _SV_CLIP_HXX //autogen +#include +#endif +#ifndef _SV_MSGBOX_HXX //autogen +#include +#endif + +#ifndef _SFX_WHITER_HXX //autogen +#include +#endif +#ifndef _UNDO_HXX //autogen +#include +#endif +#ifndef _SFXINTITEM_HXX //autogen +#include +#endif +#ifndef _SFXPTITEM_HXX //autogen +#include +#endif +#ifndef _SFXSTRITEM_HXX //autogen +#include +#endif +#ifndef _SFXENUMITEM_HXX //autogen +#include +#endif +#ifndef _SFXITEMSET_HXX //autogen +#include +#endif +#ifndef _SFXPOOLITEM_HXX //autogen +#include +#endif + +#ifndef _SFXMSG_HXX //autogen +#include +#endif +#ifndef _SFXDISPATCH_HXX //autogen +#include +#endif +#ifndef _SFXAPP_HXX //autogen +#include +#endif +#ifndef _SFX_PRINTER_HXX //autogen +#include +#endif +#ifndef _SFXREQUEST_HXX //autogen +#include +#endif + +#ifndef _SVX_ZOOMITEM_HXX //autogen +#include +#endif +#ifndef _SVX_ZOOM_HXX //autogen +#include +#endif +#ifndef _SV_WRKWIN_HXX //autogen +#include +#endif + + +#ifndef VIEW_HXX +#include "view.hxx" +#endif +#ifndef DOCUMENT_HXX +#include "document.hxx" +#endif +#ifndef CONFIG_HXX +#include "config.hxx" +#endif +#ifndef TOOLBOX_HXX +#include "toolbox.hxx" +#endif +#ifndef DIALOG_HXX +#include "dialog.hxx" +#endif +#ifndef _STARMATH_HRC +#include "starmath.hrc" +#endif + + +#define MINWIDTH 200 +#define MINHEIGHT 200 +#define MINSPLIT 40 +#define SPLITTERWIDTH 2 + +#define MINZOOM 25 +#define MAXZOOM 800 + +#define SmViewShell +#include "smslots.hxx" + + +SmGraphicWindow::SmGraphicWindow(SmViewShell* pShell): + ScrollableWindow(&pShell->GetViewFrame()->GetWindow(), 0), + pViewShell(pShell), + nZoom(100), + bIsCursorVisible(FALSE) +{ + Hide(); + const Fraction aFraction (1,1); + SetMapMode( MapMode(MAP_100TH_MM, Point(), aFraction, aFraction)); + SetBackground( GetSettings().GetStyleSettings().GetWindowColor() ); + SetTotalSize(); + + SetHelpId(HID_SMA_WIN_DOCUMENT); + SetUniqueId(HID_SMA_WIN_DOCUMENT); +} + + +void SmGraphicWindow::StateChanged( StateChangedType eType ) +{ + if ( eType == STATE_CHANGE_INITSHOW ) + Show(); + ScrollableWindow::StateChanged( eType ); +} + + +void SmGraphicWindow::DataChanged( const DataChangedEvent& rEvt ) +{ + SetBackground( GetSettings().GetStyleSettings().GetWindowColor() ); + ScrollableWindow::DataChanged( rEvt ); +} + + +void SmGraphicWindow::MouseButtonDown(const MouseEvent& rMEvt) +{ +// GrabFocus(); + + ScrollableWindow::MouseButtonDown(rMEvt); + + // + // set formula-cursor and selection of edit window according to the + // position clicked at + // + DBG_ASSERT(rMEvt.GetClicks() > 0, "Sm : 0 clicks"); + if ( rMEvt.IsLeft() && pViewShell->GetEditWindow() ) + { + const SmNode *pTree = pViewShell->GetDoc()->GetFormulaTree(); + //! kann NULL sein! ZB wenn bereits beim laden des Dokuments (bevor der + //! Parser angeworfen wurde) ins Fenster geklickt wird. + if (!pTree) + return; + + // get click position relativ to formula + Point aPos (PixelToLogic(rMEvt.GetPosPixel()) + - GetFormulaDrawPos()); + + // if it was clicked inside the formula then get the appropriate node + const SmNode *pNode = 0; + if (pTree->OrientedDist(aPos) <= 0) + pNode = pTree->FindRectClosestTo(aPos); + + if (pNode) + { SmEditWindow *pEdit = pViewShell->GetEditWindow(); + const SmToken aToken (pNode->GetToken()); + +#ifdef notnow + // include introducing symbols of special char and text + // (ie '%' and '"') + USHORT nExtra = (aToken.eType == TSPECIAL || aToken.eType == TTEXT) ? 1 : 0; + + // set selection to the beginning of the token + ESelection aSel (aToken.nRow - 1, aToken.nCol - 1 - nExtra); + + if (rMEvt.GetClicks() != 1) + { // select whole token + // for text include terminating symbol (ie '"') + aSel.nEndPos += aToken.aText.Len() + nExtra + + (aToken.eType == TTEXT ? 1 : 0); + } +#endif + // set selection to the beginning of the token + ESelection aSel (aToken.nRow - 1, aToken.nCol - 1); + + if (rMEvt.GetClicks() != 1) + aSel.nEndPos += aToken.aText.Len(); + + pEdit->SetSelection(aSel); + SetCursor(pNode); + + // allow for immediate editing and + //! implicitly synchronize the cursor position mark in this window + pEdit->GrabFocus(); + } + } +} + + +void SmGraphicWindow::ShowCursor(BOOL bShow) + // shows or hides the formula-cursor depending on 'bShow' is TRUE or not +{ + BOOL bInvert = bShow != IsCursorVisible(); + + if (bInvert) + InvertTracking(aCursorRect, SHOWTRACK_SMALL | SHOWTRACK_WINDOW); + + SetIsCursorVisible(bShow); +} + + +void SmGraphicWindow::SetCursor(const SmNode *pNode) +{ + const SmNode *pTree = pViewShell->GetDoc()->GetFormulaTree(); + + // get appropriate rectangle + Point aOffset (pNode->GetTopLeft() - pTree->GetTopLeft()), + aTLPos (GetFormulaDrawPos() + aOffset); + aTLPos.X() -= pNode->GetItalicLeftSpace(); + Size aSize (pNode->GetItalicSize()); + Point aBRPos (aTLPos.X() + aSize.Width(), aTLPos.Y() + aSize.Height()); + + SetCursor(Rectangle(aTLPos, aSize)); +} + +void SmGraphicWindow::SetCursor(const Rectangle &rRect) + // sets cursor to new position (rectangle) 'rRect'. + // The old cursor will be removed, and the new one will be shown if + // that is activated in the ConfigItem +{ + SmModule *pp = SM_MOD1(); + + if (IsCursorVisible()) + ShowCursor(FALSE); // clean up remainings of old cursor + aCursorRect = rRect; + if (pp->GetConfig()->IsShowFormulaCursor()) + ShowCursor(TRUE); // draw new cursor +} + +const SmNode * SmGraphicWindow::SetCursorPos(USHORT nRow, USHORT nCol) + // looks for a VISIBLE node in the formula tree with it's token at + // (or around) the position 'nRow', 'nCol' in the edit window + // (row and column numbering starts with 1 there!). + // If there is such a node the formula-cursor is set to cover that nodes + // rectangle. If not the formula-cursor will be hidden. + // In any case the search result is being returned. +{ + // find visible node with token at nRow, nCol + const SmNode *pTree = pViewShell->GetDoc()->GetFormulaTree(), + *pNode = 0; + if (pTree) + pNode = pTree->FindTokenAt(nRow, nCol); + + if (pNode) + SetCursor(pNode); + else + ShowCursor(FALSE); + + return pNode; +} + + +void SmGraphicWindow::Paint(const Rectangle&) +{ + DBG_ASSERT(pViewShell, "Sm : NULL pointer"); + + SmDocShell &rDoc = *pViewShell->GetDoc(); + Point aPoint; + + rDoc.Draw(*this, aPoint); //! modifies aPoint to be the topleft + //! corner of the formula + SetFormulaDrawPos(aPoint); + + SetIsCursorVisible(FALSE); // (old) cursor must be drawn again + + const SmEditWindow *pEdit = pViewShell->GetEditWindow(); + if (pEdit) + { // get new position for formula-cursor (for possible altered formula) + USHORT nRow, nCol; + SmGetLeftSelectionPart(pEdit->GetSelection(), nRow, nCol); + nRow++; + nCol++; + const SmNode *pFound = SetCursorPos(nRow, nCol); + + SmModule *pp = SM_MOD1(); + if (pFound && pp->GetConfig()->IsShowFormulaCursor()) + ShowCursor(TRUE); + } +} + + +void SmGraphicWindow::SetTotalSize () +{ + SmDocShell &rDoc = *pViewShell->GetDoc(); + const Size aTmp( PixelToLogic( LogicToPixel( rDoc.GetSize() ))); + if ( aTmp != ScrollableWindow::GetTotalSize() ) + ScrollableWindow::SetTotalSize( aTmp ); +} + + +void SmGraphicWindow::KeyInput(const KeyEvent& rKEvt) +{ + if (! (SfxViewShell::Current() && + SfxViewShell::Current()->KeyInput(rKEvt))) + ScrollableWindow::KeyInput(rKEvt); +} + + +void SmGraphicWindow::Command(const CommandEvent& rCEvt) +{ + BOOL bCallBase = TRUE; + if ( !pViewShell->GetDoc()->GetProtocol().IsInPlaceActive() ) + { + switch ( rCEvt.GetCommand() ) + { + case COMMAND_CONTEXTMENU: + { + GetParent()->ToTop(); + PopupMenu* pPopupMenu = new PopupMenu(SmResId(RID_VIEWMENU)); + pPopupMenu->SetSelectHdl(LINK(this, SmGraphicWindow, MenuSelectHdl)); + pPopupMenu->Execute( this, + OutputToScreenPixel(rCEvt.GetMousePosPixel()) ); + delete pPopupMenu; + bCallBase = FALSE; + } + break; + + case COMMAND_WHEEL: + { + const CommandWheelData* pWData = rCEvt.GetWheelData(); + if ( pWData && COMMAND_WHEEL_ZOOM == pWData->GetMode() ) + { + USHORT nZoom = GetZoom(); + if( 0L > pWData->GetDelta() ) + nZoom -= 10; + else + nZoom += 10; + SetZoom( nZoom ); + bCallBase = FALSE; + } + } + break; + } + } + if ( bCallBase ) + ScrollableWindow::Command (rCEvt); +} + + +IMPL_LINK_INLINE_START( SmGraphicWindow, MenuSelectHdl, Menu *, pMenu ) +{ + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetDispatcher()->Execute( pMenu->GetCurItemId() ); + return 0; +} +IMPL_LINK_INLINE_END( SmGraphicWindow, MenuSelectHdl, Menu *, pMenu ) + + +void SmGraphicWindow::SetZoom(USHORT Factor) +{ + nZoom = Min(Max((USHORT) Factor, (USHORT) MINZOOM), (USHORT) MAXZOOM); + Fraction aFraction (nZoom, 100); + SetMapMode( MapMode(MAP_100TH_MM, Point(), aFraction, aFraction) ); + SetTotalSize(); + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetBindings().Invalidate(SID_ATTR_ZOOM); + Invalidate(); +} + + +void SmGraphicWindow::ZoomToFitInWindow() +{ + SmDocShell &rDoc = *pViewShell->GetDoc(); + + // set defined mapmode before calling 'LogicToPixel' below + SetMapMode(MapMode(MAP_100TH_MM)); + + Size aSize (LogicToPixel(rDoc.GetSize())); + Size aWindowSize (GetSizePixel()); + + if (aSize.Width() > 0 && aSize.Height() > 0) + SetZoom (Min ((85 * aWindowSize.Width()) / aSize.Width(), + (85 * aWindowSize.Height()) / aSize.Height())); +} + + +/**************************************************************************/ + + +SmGraphicController::SmGraphicController(SmGraphicWindow &rSmGraphic, + USHORT nId, + SfxBindings &rBindings) : + rGraphic(rSmGraphic), + SfxControllerItem(nId, rBindings) +{ +} + + +void SmGraphicController::StateChanged(USHORT nSID, SfxItemState eState, const SfxPoolItem* pState) +{ + rGraphic.SetTotalSize(); + rGraphic.Invalidate(); + SfxControllerItem::StateChanged (nSID, eState, pState); +} + + +/**************************************************************************/ + + +SmEditController::SmEditController(SmEditWindow &rSmEdit, + USHORT nId, + SfxBindings &rBindings) : + rEdit(rSmEdit), + SfxControllerItem(nId, rBindings) +{ +} + + +void SmEditController::StateChanged(USHORT nSID, SfxItemState eState, const SfxPoolItem* pState) +{ + const SfxStringItem *pItem = PTR_CAST(SfxStringItem, pState); + + if ((pItem != NULL) && (rEdit.GetText() != pItem->GetValue())) + rEdit.SetText(pItem->GetValue()); + SfxControllerItem::StateChanged (nSID, eState, pState); +} + + +/**************************************************************************/ + + +SmCmdBoxWindow::~SmCmdBoxWindow () +{ + aGrabTimer.Stop (); +} + + +void SmCmdBoxWindow::Resize() +{ + Rectangle aRect = Rectangle(Point(0, 0), GetOutputSizePixel()); + + if (! IsFloatingMode()) + { + switch (GetAlignment()) + { + case SFX_ALIGN_TOP: aRect.Bottom()--; break; + case SFX_ALIGN_BOTTOM: aRect.Top()++; break; + case SFX_ALIGN_LEFT: aRect.Right()--; break; + case SFX_ALIGN_RIGHT: aRect.Left()++; break; + } + } + + DecorationView aView(this); + aRect.Left() += 8; aRect.Top() += 8; + aRect.Right()-= 8; aRect.Bottom()-= 8; + aRect = aView.DrawFrame( aRect, FRAME_DRAW_DOUBLEIN ); + + aEdit.SetPosSizePixel(aRect.TopLeft(), aRect.GetSize()); + SfxDockingWindow::Resize(); + Invalidate(); +} + + +void SmCmdBoxWindow::Paint(const Rectangle& rRect) +{ + Rectangle aRect = Rectangle(Point(0, 0), GetOutputSizePixel()); + DecorationView aView(this); + + if (! IsFloatingMode()) + { + Point aFrom, aTo; + switch (GetAlignment()) + { + case SFX_ALIGN_TOP: + aFrom = aRect.BottomLeft(); aTo = aRect.BottomRight(); + aRect.Bottom()--; + break; + + case SFX_ALIGN_BOTTOM: + aFrom = aRect.TopLeft(); aTo = aRect.TopRight(); + aRect.Top()++; + break; + + case SFX_ALIGN_LEFT: + aFrom = aRect.TopRight(); aTo = aRect.BottomRight(); + aRect.Right()--; + break; + + case SFX_ALIGN_RIGHT: + aFrom = aRect.TopLeft(); aTo = aRect.BottomLeft(); + aRect.Left()++; + break; + } + DrawLine( aFrom, aTo ); + aView.DrawFrame(aRect, FRAME_DRAW_OUT); + } + aRect.Left() += 8; aRect.Top() += 8; + aRect.Right()-= 8; aRect.Bottom()-= 8; + aRect = aView.DrawFrame( aRect, FRAME_DRAW_DOUBLEIN ); +} + + +Size SmCmdBoxWindow::CalcDockingSize(SfxChildAlignment eAlign) +{ + switch (eAlign) + { + case SFX_ALIGN_LEFT: + case SFX_ALIGN_RIGHT: + return Size(); +/* + case SFX_ALIGN_TOP: + case SFX_ALIGN_BOTTOM: +*/ + } + return SfxDockingWindow::CalcDockingSize(eAlign); +} + + +IMPL_LINK(SmCmdBoxWindow, UpdateTimeoutHdl, Timer *, pTimer) +{ + aGrabTimer.Stop (); + Grab(); + return 0; +} + + +void SmCmdBoxWindow::Grab () +{ + GrabFocus (); + aEdit.GrabFocus (); +} + + +SmCmdBoxWindow::SmCmdBoxWindow(SfxBindings *pBindings, SfxChildWindow *pChildWindow, + Window *pParent) : + SfxDockingWindow(pBindings, pChildWindow, pParent, SmResId(RID_CMDBOXWINDOW)), + aEdit(this), + aController(aEdit, SID_TEXT, *pBindings) +{ + Hide (); + aGrabTimer.SetTimeout (1000); + aGrabTimer.SetTimeoutHdl (LINK (this, SmCmdBoxWindow, UpdateTimeoutHdl)); + aGrabTimer.Start (); +} + + +SfxChildAlignment SmCmdBoxWindow::CheckAlignment(SfxChildAlignment eActual, + SfxChildAlignment eWish) +{ + switch (eWish) + { + case SFX_ALIGN_TOP: + case SFX_ALIGN_BOTTOM: + case SFX_ALIGN_NOALIGNMENT: + return eWish; + } + + return eActual; +} + + +void SmCmdBoxWindow::StateChanged( StateChangedType nStateChange ) +{ + if (STATE_CHANGE_INITSHOW == nStateChange) + AdjustPosition(); + else + SfxDockingWindow::StateChanged( nStateChange ); +} + + +void SmCmdBoxWindow::AdjustPosition() +{ + Point aPt; + const Rectangle aRect( aPt, GetParent()->GetOutputSizePixel() ); + Point aTopLeft( Point( aRect.Left(), + aRect.Bottom() - GetSizePixel().Height() ) ); + Point aPos( GetParent()->OutputToScreenPixel( aTopLeft ) ); + if (aPos.X() < 0) + aPos.X() = 0; + if (aPos.Y() < 0) + aPos.Y() = 0; + SetPosPixel( aPos ); +} + + +void SmCmdBoxWindow::ShowWindows () +{ + Show (); + Resize(); + aEdit.Show (); +} + + +void SmCmdBoxWindow::ToggleFloatingMode() +{ + SfxDockingWindow::ToggleFloatingMode(); + + if (GetFloatingWindow()) + GetFloatingWindow()->SetMinOutputSizePixel(Size (200, 50)); +} + + +/**************************************************************************/ + + +SFX_IMPL_DOCKINGWINDOW(SmCmdBoxWrapper, SID_CMDBOXWINDOW); + +SmCmdBoxWrapper::SmCmdBoxWrapper(Window *pParentWindow, USHORT nId, + SfxBindings *pBindings, + SfxChildWinInfo *pInfo) : + SfxChildWindow(pParentWindow, nId) +{ + pWindow = new SmCmdBoxWindow(pBindings, this, pParentWindow); + + if ( !pInfo->aPos.X() || !pInfo->aPos.Y() ) + { + ((SfxDockingWindow *)pWindow)->Initialize(pInfo); + ((SmCmdBoxWindow *)pWindow)->AdjustPosition(); + } + else + { + pWindow->SetPosPixel(pInfo->aPos); + ((SfxDockingWindow *)pWindow)->Initialize(pInfo); + } + + ((SmCmdBoxWindow *)pWindow)->ShowWindows (); +} + + +void SmCmdBoxWrapper::Grab () +{ + ((SmCmdBoxWindow *)pWindow)->Grab (); +} + + +/**************************************************************************/ + + +TYPEINIT1( SmViewShell, SfxViewShell ); + +SFX_IMPL_INTERFACE(SmViewShell, SfxViewShell, SmResId(0)) +{ + SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_TOOLS | SFX_VISIBILITY_STANDARD | + SFX_VISIBILITY_FULLSCREEN | SFX_VISIBILITY_SERVER, + SmResId(RID_MATH_TOOLBOX )); + //Dummy-Objectbar, damit es bei aktivieren nicht staendig zuppelt. +// Wegen #58705# entfernt (RID wurde nirgends verwendet) +// SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_OBJECT | SFX_VISIBILITY_SERVER, +// SmResId(RID_DRAW_OBJECTBAR) ); + + SFX_CHILDWINDOW_REGISTRATION(SmToolBoxWrapper::GetChildWindowId()); + SFX_CHILDWINDOW_REGISTRATION(SmCmdBoxWrapper::GetChildWindowId()); +} + + +SFX_IMPL_VIEWFACTORY(SmViewShell, SmResId(RID_VIEWNAME)) +{ + SFX_VIEW_REGISTRATION(SmDocShell); +} + + +Size SmViewShell::GetOptimalSizePixel() const +{ + return aGraphic.LogicToPixel( ((SmViewShell*)this)->GetDoc()->GetSize() ); +} + + +void SmViewShell::AdjustPosSizePixel(const Point &rPos, const Size &rSize) +{ + aGraphic.SetPosSizePixel(rPos, rSize); +} + + +void SmViewShell::InnerResizePixel(const Point &rOfs, const Size &rSize) +{ + //Ein bischen muessen wir schon raten was die Basisklasse tun wird. + //Die Scrollbars muessen einkalkuliert werden damit sie Aussen sitzen, + //denn genau dafuer steht ja das InnerResize + const Size aDocSz = aGraphic.LogicToPixel( GetDoc()->GetSize() ); + Size aSize( rSize ); + + SvBorder aBorder; + + + if ( aSize.Width() < aDocSz.Width() ) + { + if ( 1 == (aDocSz.Width() - aSize.Width()) ) + { + //Einen Pixel daneben, kann ja mal passieren. + aSize.Width() += 1; + } + else + { + aBorder.Bottom() = Application::GetSettings().GetStyleSettings().GetScrollBarSize(); + aSize.Height() += aBorder.Bottom(); + } + } + if ( aSize.Height() < aDocSz.Height() ) + { + if ( 1 == (aDocSz.Height() - aSize.Height()) ) + { + aSize.Height() += 1; + } + else + { + aBorder.Right() = Application::GetSettings().GetStyleSettings().GetScrollBarSize(); + aSize.Width() += aBorder.Right(); + } + } + SetBorderPixel( aBorder ); + GetGraphicWindow().SetPosSizePixel(rOfs, aSize); + GetGraphicWindow().SetTotalSize(); +} + + +void SmViewShell::OuterResizePixel(const Point &rOfs, const Size &rSize) +{ + GetGraphicWindow().SetPosSizePixel(rOfs, rSize); + GetGraphicWindow().Update(); +} + + +void SmViewShell::QueryObjAreaPixel( Rectangle& rRect ) const +{ + rRect.SetSize( GetGraphicWindow().GetSizePixel() ); +} + + +void SmViewShell::SetZoomFactor( const Fraction &rX, const Fraction &rY ) +{ + const Fraction &rFrac = rX < rY ? rX : rY; + GetGraphicWindow().SetZoom( (USHORT) long(rFrac * Fraction( 100, 1 )) ); + + //Um Rundungsfehler zu minimieren lassen wir von der Basisklasse ggf. + //auch die krummen Werte einstellen + SfxViewShell::SetZoomFactor( rX, rY ); +} + + +Size SmViewShell::GetTextLineSize(OutputDevice& rDevice, const String& rLine) +{ + String aText; + Size aSize(rDevice.GetTextWidth(rLine), rDevice.GetTextHeight()); + USHORT nTabs = rLine.GetTokenCount('\t'); + + if (nTabs > 0) + { + long TabPos = rDevice.GetTextWidth('n') * 8; + + aSize.Width() = 0; + + for (USHORT i = 0; i < nTabs; i++) + { + if (i > 0) + aSize.Width() = ((aSize.Width() / TabPos) + 1) * TabPos; + + aText = rLine.GetToken(i, '\t'); + aText.EraseLeadingChars('\t'); + aText.EraseTrailingChars('\t'); + aSize.Width() += rDevice.GetTextWidth(aText); + } + } + + return aSize; +} + + +Size SmViewShell::GetTextSize(OutputDevice& rDevice, const String& rText, long MaxWidth) +{ + Size aSize; + String aLine; + Size TextSize; + String aText; + USHORT nLines = rText.GetTokenCount('\n'); + + for (USHORT i = 0; i < nLines; i++) + { + aLine = rText.GetToken(i, '\n'); + aLine.EraseAllChars('\r'); + aLine.EraseLeadingChars('\n'); + aLine.EraseTrailingChars('\n'); + + aSize = GetTextLineSize(rDevice, aLine); + + if (aSize.Width() > MaxWidth) + { + do + { + xub_StrLen m = aLine.Len(); + xub_StrLen nLen = m; + + for (xub_StrLen n = 0; n < nLen; n++) + { + sal_Unicode cLineChar = aLine.GetChar(n); + if ((cLineChar == ' ') || (cLineChar == '\t')) + { + aText = aLine.Copy(0, n); + if (GetTextLineSize(rDevice, aText).Width() < MaxWidth) + m = n; + else + break; + } + } + + aText = aLine.Copy(0, m); + aLine.Erase(0, m); + aSize = GetTextLineSize(rDevice, aText); + TextSize.Height() += aSize.Height(); + TextSize.Width() = Max(TextSize.Width(), Min(aSize.Width(), MaxWidth)); + + aLine.EraseLeadingChars(' '); + aLine.EraseLeadingChars('\t'); + aLine.EraseLeadingChars(' '); + } + while (aLine.Len() > 0); + } + else + { + TextSize.Height() += aSize.Height(); + TextSize.Width() = Max(TextSize.Width(), aSize.Width()); + } + } + + return TextSize; +} + + +void SmViewShell::DrawTextLine(OutputDevice& rDevice, const Point& rPosition, const String& rLine) +{ + String aText; + Point aPoint (rPosition); + USHORT nTabs = rLine.GetTokenCount('\t'); + + if (nTabs > 0) + { + long TabPos = rDevice.GetTextWidth('n') * 8; + + for (USHORT i = 0; i < nTabs; i++) + { + if (i > 0) + aPoint.X() = ((aPoint.X() / TabPos) + 1) * TabPos; + + aText = rLine.GetToken(i, '\t'); + aText.EraseLeadingChars('\t'); + aText.EraseTrailingChars('\t'); + rDevice.DrawText(aPoint, aText); + aPoint.X() += rDevice.GetTextWidth(aText); + } + } + else + rDevice.DrawText(aPoint, rLine); +} + + +void SmViewShell::DrawText(OutputDevice& rDevice, const Point& rPosition, const String& rText, USHORT MaxWidth) +{ + USHORT nLines = rText.GetTokenCount('\n'); + Point aPoint (rPosition); + Size aSize; + String aLine; + String aText; + + for (USHORT i = 0; i < nLines; i++) + { + aLine = rText.GetToken(i, '\n'); + aLine.EraseAllChars('\r'); + aLine.EraseLeadingChars('\n'); + aLine.EraseTrailingChars('\n'); + aSize = GetTextLineSize(rDevice, aLine); + if (aSize.Width() > MaxWidth) + { + do + { + xub_StrLen m = aLine.Len(); + xub_StrLen nLen = m; + + for (xub_StrLen n = 0; n < nLen; n++) + { + sal_Unicode cLineChar = aLine.GetChar(n); + if ((cLineChar == ' ') || (cLineChar == '\t')) + { + aText = aLine.Copy(0, n); + if (GetTextLineSize(rDevice, aText).Width() < MaxWidth) + m = n; + else + break; + } + } + aText = aLine.Copy(0, m); + aLine.Erase(0, m); + + DrawTextLine(rDevice, aPoint, aText); + aPoint.Y() += aSize.Height(); + + aLine.EraseLeadingChars(' '); + aLine.EraseLeadingChars('\t'); + aLine.EraseLeadingChars(' '); + } + while (GetTextLineSize(rDevice, aLine).Width() > MaxWidth); + + // print the remaining text + if (aLine.Len() > 0) + { + DrawTextLine(rDevice, aPoint, aLine); + aPoint.Y() += aSize.Height(); + } + } + else + { + DrawTextLine(rDevice, aPoint, aLine); + aPoint.Y() += aSize.Height(); + } + } +} + + +USHORT SmViewShell::Print(SfxProgress &rProgress, PrintDialog *pPrintDialog) +{ + MapMode OutputMapMode; + SmPrinterAccess aPrinterAccess( *GetDoc() ); + Printer *pPrinter = aPrinterAccess.GetPrinter(); + pPrinter->Push(); + + Point aZeroPoint; + + SfxViewShell::Print (rProgress, pPrintDialog); + + pPrinter->StartPage(); + pPrinter->SetLineColor( Color(COL_BLACK) ); + + Rectangle OutputRect (aZeroPoint, pPrinter->GetOutputSize()); + + // set minimum top and bottom border + if (pPrinter->GetPageOffset().Y() < 2000) + OutputRect.Top() += 2000 - pPrinter->GetPageOffset().Y(); + if ((pPrinter->GetPaperSize().Height() - (pPrinter->GetPageOffset().Y() + OutputRect.Bottom())) < 2000) + OutputRect.Bottom() -= 2000 - (pPrinter->GetPaperSize().Height() - + (pPrinter->GetPageOffset().Y() + OutputRect.Bottom())); + + // set minimum left and right border + if (pPrinter->GetPageOffset().X() < 2500) + OutputRect.Left() += 2500 - pPrinter->GetPageOffset().X(); + if ((pPrinter->GetPaperSize().Width() - (pPrinter->GetPageOffset().X() + OutputRect.Right())) < 1500) + OutputRect.Right() -= 1500 - (pPrinter->GetPaperSize().Width() - + (pPrinter->GetPageOffset().X() + OutputRect.Right())); + + // output text on top + SmModule *pp = SM_MOD1(); + + if (pp->GetConfig()->IsPrintTitle()) + { + Size aSize600 (0, 600); + Size aSize650 (0, 650); + Font aFont(FAMILY_DONTKNOW, aSize600); + + aFont.SetAlign(ALIGN_TOP); + aFont.SetWeight(WEIGHT_BOLD); + aFont.SetSize(aSize650); + pPrinter->SetFont(aFont); + + Size aTitleSize (GetTextSize(*pPrinter, GetDoc()->GetTitle(), OutputRect.GetWidth() - 200)); + + aFont.SetWeight(WEIGHT_NORMAL); + aFont.SetSize(aSize600); + pPrinter->SetFont(aFont); + + Size aDescSize (GetTextSize(*pPrinter, GetDoc()->GetComment(), OutputRect.GetWidth() - 200)); + + // output rectangle + SmModule *pp = SM_MOD1(); + + if (pp->GetConfig()->IsPrintFrame()) + pPrinter->DrawRect(Rectangle(OutputRect.TopLeft(), + Size(OutputRect.GetWidth(), 100 + aTitleSize.Height() + 200 + aDescSize.Height() + 100))); + OutputRect.Top() += 200; + + // output title + aFont.SetWeight(WEIGHT_BOLD); + aFont.SetSize(aSize650); + pPrinter->SetFont(aFont); + DrawText(*pPrinter, Point (OutputRect.Left() + (OutputRect.GetWidth() - aTitleSize.Width()) / 2, + OutputRect.Top()), GetDoc()->GetTitle(), OutputRect.GetWidth() - 200); + OutputRect.Top() += aTitleSize.Height() + 200; + + // output description + aFont.SetWeight(WEIGHT_NORMAL); + aFont.SetSize(aSize600); + pPrinter->SetFont(aFont); + DrawText(*pPrinter, Point (OutputRect.Left() + (OutputRect.GetWidth() - aDescSize.Width()) / 2, + OutputRect.Top()), GetDoc()->GetComment(), OutputRect.GetWidth() - 200); + OutputRect.Top() += aDescSize.Height() + 300; + } + + // output text on bottom + if (pp->GetConfig()->IsPrintText()) + { +// Font aFont(FAMILY_DONTKNOW, Size(0, 600)); + Font aFont; + + aFont.SetAlign(ALIGN_TOP); + + // get size + pPrinter->SetFont(aFont); + + Size aSize (GetTextSize(*pPrinter, GetDoc()->GetText(), OutputRect.GetWidth() - 200)); + + OutputRect.Bottom() -= aSize.Height() + 600; + + // output rectangle + SmModule *pp = SM_MOD1(); + + if (pp->GetConfig()->IsPrintFrame()) + pPrinter->DrawRect(Rectangle(OutputRect.BottomLeft(), + Size(OutputRect.GetWidth(), 200 + aSize.Height() + 200))); + + DrawText(*pPrinter, Point (OutputRect.Left() + (OutputRect.GetWidth() - aSize.Width()) / 2, + OutputRect.Bottom() + 300), GetDoc()->GetText(), OutputRect.GetWidth() - 200); + OutputRect.Bottom() -= 200; + } + + if (pp->GetConfig()->IsPrintFrame()) + pPrinter->DrawRect(OutputRect); + + OutputRect.Top() += 100; + OutputRect.Left() += 100; + OutputRect.Bottom() -= 100; + OutputRect.Right() -= 100; + + Size aSize (GetDoc()->GetSize()); + + switch (pp->GetConfig()->GetPrintSize()) + { + case PRINT_SIZE_NORMAL: + OutputMapMode = MapMode(MAP_100TH_MM); + break; + + case PRINT_SIZE_SCALED: + if ((aSize.Width() > 0) && (aSize.Height() > 0)) + { + Size OutputSize (pPrinter->LogicToPixel(Size(OutputRect.GetWidth(), + OutputRect.GetHeight()), MapMode(MAP_100TH_MM))); + Size GraphicSize (pPrinter->LogicToPixel(aSize, MapMode(MAP_100TH_MM))); + USHORT nZ = (USHORT) Min((long)Fraction(OutputSize.Width() * 100L, GraphicSize.Width()), + (long)Fraction(OutputSize.Height() * 100L, GraphicSize.Height())); + Fraction aFraction ((USHORT) Max ((USHORT) MINZOOM, Min((USHORT) MAXZOOM, (USHORT) (nZ - 10))), (USHORT) 100); + + OutputMapMode = MapMode(MAP_100TH_MM, aZeroPoint, aFraction, aFraction); + } + else + OutputMapMode = MapMode(MAP_100TH_MM); + break; + + case PRINT_SIZE_ZOOMED: + { + SmModule *pp = SM_MOD1(); + Fraction aFraction (pp->GetConfig()->GetPrintZoom(), 100); + + OutputMapMode = MapMode(MAP_100TH_MM, aZeroPoint, aFraction, aFraction); + break; + } + } + + aSize = pPrinter->PixelToLogic(pPrinter->LogicToPixel(aSize, OutputMapMode), + MapMode(MAP_100TH_MM)); + + Point Position (OutputRect.Left() + (OutputRect.GetWidth() - aSize.Width()) / 2, + OutputRect.Top() + (OutputRect.GetHeight() - aSize.Height()) / 2); + + Position = pPrinter->PixelToLogic(pPrinter->LogicToPixel(Position, MapMode(MAP_100TH_MM)), + OutputMapMode); + OutputRect = pPrinter->PixelToLogic(pPrinter->LogicToPixel(OutputRect, MapMode(MAP_100TH_MM)), + OutputMapMode); + + pPrinter->SetMapMode(OutputMapMode); + pPrinter->SetClipRegion(Region(OutputRect)); + GetDoc()->Draw(*pPrinter, Position); + pPrinter->SetClipRegion(); + pPrinter->EndPage(); + pPrinter->Pop(); + + return 0; +} + + +SfxPrinter* SmViewShell::GetPrinter(BOOL bCreate) +{ + SmDocShell *pDoc = GetDoc(); + if ( pDoc->HasPrinter() || bCreate ) + return pDoc->GetPrinter(); + return 0; +} + + +USHORT SmViewShell::SetPrinter(SfxPrinter *pNewPrinter, USHORT nDiffFlags) +{ + if ((nDiffFlags & SFX_PRINTER_PRINTER) == SFX_PRINTER_PRINTER) + GetDoc()->SetPrinter( pNewPrinter ); + + if ((nDiffFlags & SFX_PRINTER_OPTIONS) == SFX_PRINTER_OPTIONS) + { + SmModule *pp = SM_MOD1(); + pp->GetConfig()->ItemSetToConfig(pNewPrinter->GetOptions()); + } + return 0; +} + + +SfxTabPage* SmViewShell::CreatePrintOptionsPage(Window *pParent, + const SfxItemSet &rOptions) +{ + return SmPrintOptionsTabPage::Create(pParent, rOptions); +} + + +SmEditWindow *SmViewShell::GetEditWindow() +{ + SmCmdBoxWrapper *pWrapper = (SmCmdBoxWrapper *) GetViewFrame()-> + GetChildWindow( SmCmdBoxWrapper::GetChildWindowId() ); + + if (pWrapper != NULL) + { + DBG_ASSERT(pWrapper->GetWindow() != NULL, "pSmEditWindow == NULL"); + + return pWrapper->GetEditWindow(); + } + + return NULL; +} + + +void SmViewShell::SetStatusText(const String& Text) +{ + StatusText = Text; + GetViewFrame()->GetBindings().Invalidate(SID_TEXTSTATUS); +} + + +void SmViewShell::ShowError( const SmErrorDesc *pErrorDesc ) +{ + DBG_ASSERT(GetDoc(), "Sm : Document missing"); + if (pErrorDesc || 0 != (pErrorDesc = GetDoc()->GetParser().GetError(0)) ) + { + SetStatusText( pErrorDesc->Text ); + GetEditWindow()->MarkError( Point( pErrorDesc->pNode->GetColumn(), + pErrorDesc->pNode->GetRow())); + } +} + + +void SmViewShell::NextError() +{ + DBG_ASSERT(GetDoc(), "Sm : Document missing"); + const SmErrorDesc *pErrorDesc = GetDoc()->GetParser().NextError(); + + if (pErrorDesc) + ShowError( pErrorDesc ); +} + + +void SmViewShell::PrevError() +{ + DBG_ASSERT(GetDoc(), "Sm : Document missing"); + const SmErrorDesc *pErrorDesc = GetDoc()->GetParser().PrevError(); + + if (pErrorDesc) + ShowError( pErrorDesc ); +} + + +void SmViewShell::Execute(SfxRequest& rReq) +{ + SmEditWindow *pWin = GetEditWindow(); + + switch (rReq.GetSlot()) + { + case SID_FORMULACURSOR: + { + SmModule *pp = SM_MOD1(); + + const SfxItemSet *pArgs = rReq.GetArgs(); + const SfxPoolItem *pItem; + + BOOL bVal; + if ( pArgs && + SFX_ITEM_SET == pArgs->GetItemState( SID_FORMULACURSOR, FALSE, &pItem)) + bVal = ((SfxBoolItem *) pItem)->GetValue(); + else + bVal = !pp->GetConfig()->IsShowFormulaCursor(); + + pp->GetConfig()->SetShowFormulaCursor(bVal); + GetGraphicWindow().ShowCursor(bVal); + break; + } + case SID_DRAW: + if (pWin) + { + GetDoc()->SetText( pWin->GetText() ); + SetStatusText(String()); + ShowError( 0 ); + GetDoc()->Resize(); + } + break; + + case SID_ADJUST: + case SID_FITINWINDOW: + aGraphic.ZoomToFitInWindow(); + break; + + case SID_VIEW050: + aGraphic.SetZoom(50); + break; + + case SID_VIEW100: + aGraphic.SetZoom(100); + break; + + case SID_VIEW200: + aGraphic.SetZoom(200); + break; + + case SID_ZOOMIN: + aGraphic.SetZoom(aGraphic.GetZoom() + 25); + break; + + case SID_ZOOMOUT: + DBG_ASSERT(aGraphic.GetZoom() >= 25, "Sm: falsches USHORT Argument"); + aGraphic.SetZoom(aGraphic.GetZoom() - 25); + break; + + case SID_CUT: + if (pWin) + pWin->Cut(); + break; + + case SID_COPY: + if (pWin) + { + if (pWin->IsAllSelected()) + { + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetDispatcher()->Execute( + SID_COPYOBJECT, SFX_CALLMODE_STANDARD, + new SfxVoidItem(SID_COPYOBJECT), 0L); + } + else + pWin->Copy(); + } + break; + + case SID_PASTE: + if (pWin && Clipboard::HasFormat(FORMAT_STRING)) + pWin->Paste(); + else + { + SmViewShell *pViewSh = SmGetActiveView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetDispatcher()->Execute( + SID_PASTEOBJECT, SFX_CALLMODE_STANDARD, + new SfxVoidItem(SID_PASTEOBJECT), 0L); + } + break; + + case SID_DELETE: + if (pWin) + pWin->Delete(); + break; + + case SID_SELECT: + if (pWin) + pWin->SelectAll(); + break; + + case SID_INSERTCOMMAND: + { + const SfxInt16Item& rItem = + (const SfxInt16Item&)rReq.GetArgs()->Get(SID_INSERTCOMMAND); + + if (pWin) + pWin->InsertCommand(rItem.GetValue()); + break; + } + + case SID_INSERTTEXT: + { + const SfxStringItem& rItem = + (const SfxStringItem&)rReq.GetArgs()->Get(SID_INSERTTEXT); + + if (pWin) + pWin->InsertText(rItem.GetValue()); + break; + } + + case SID_NEXTERR: + NextError(); + if (pWin) + pWin->GrabFocus(); + break; + + case SID_PREVERR: + PrevError(); + if (pWin) + pWin->GrabFocus(); + break; + + case SID_NEXTMARK: + if (pWin) + { + pWin->SelNextMark(); + pWin->GrabFocus(); + } + break; + + case SID_PREVMARK: + if (pWin) + { + pWin->SelPrevMark(); + pWin->GrabFocus(); + } + break; + + case SID_TEXTSTATUS: + { + if (rReq.GetArgs() != NULL) + { + const SfxStringItem& rItem = + (const SfxStringItem&)rReq.GetArgs()->Get(SID_TEXTSTATUS); + + SetStatusText(rItem.GetValue()); + } + + break; + } + + case SID_GETEDITTEXT: + if (pWin) + if (pWin->GetText ().Len ()) GetDoc()->SetText( pWin->GetText() ); + break; + + case SID_ATTR_ZOOM: + { + if ( !GetDoc()->GetProtocol().IsInPlaceActive() ) + { + SvxZoomDialog *pDlg = 0; + const SfxItemSet *pSet = rReq.GetArgs(); + if ( !pSet ) + { + SfxItemSet aSet( GetDoc()->GetPool(), SID_ATTR_ZOOM, SID_ATTR_ZOOM); + aSet.Put( SvxZoomItem( SVX_ZOOM_PERCENT, aGraphic.GetZoom())); + pDlg = new SvxZoomDialog( &GetViewFrame()->GetWindow(), aSet); + pDlg->SetLimits( MINZOOM, MAXZOOM ); + if( pDlg->Execute() != RET_CANCEL ) + pSet = pDlg->GetOutputItemSet(); + } + if ( pSet ) + { + const SvxZoomItem &rZoom = (const SvxZoomItem &)pSet->Get(SID_ATTR_ZOOM); + switch( rZoom.GetType() ) + { + case SVX_ZOOM_PERCENT: + aGraphic.SetZoom((long)rZoom.GetValue ()); + break; + + case SVX_ZOOM_OPTIMAL: + aGraphic.ZoomToFitInWindow(); + break; + + case SVX_ZOOM_PAGEWIDTH: + case SVX_ZOOM_WHOLEPAGE: + { + const MapMode aMap( MAP_100TH_MM ); + SfxPrinter *pPrinter = GetPrinter( TRUE ); + Point aPoint; + Rectangle OutputRect(aPoint, pPrinter->GetOutputSize()); + Size OutputSize(pPrinter->LogicToPixel(Size(OutputRect.GetWidth(), + OutputRect.GetHeight()), aMap)); + Size GraphicSize(pPrinter->LogicToPixel(GetDoc()->GetSize(), aMap)); + USHORT nZ = (USHORT) Min((long)Fraction(OutputSize.Width() * 100L, GraphicSize.Width()), + (long)Fraction(OutputSize.Height() * 100L, GraphicSize.Height())); + aGraphic.SetZoom (nZ); + break; + } + } + } + delete pDlg; + } + } + break; + } + rReq.Done(); +} + + +void SmViewShell::GetState(SfxItemSet &rSet) +{ + SfxWhichIter aIter(rSet); + + for (USHORT nWh = aIter.FirstWhich(); nWh != 0; nWh = aIter.NextWhich()) + { + switch (nWh) + { + case SID_CUT: + case SID_COPY: + case SID_DELETE: + if (! GetEditWindow() || ! GetEditWindow()->IsSelected()) + rSet.DisableItem(nWh); + break; + + case SID_PASTE: + if (Clipboard::GetFormatCount() == 0) + rSet.DisableItem( nWh ); + break; + + case SID_ATTR_ZOOM: + rSet.Put(SvxZoomItem( SVX_ZOOM_PERCENT, aGraphic.GetZoom())); + /* no break here */ + case SID_VIEW050: + case SID_VIEW100: + case SID_VIEW200: + case SID_ADJUST: + case SID_ZOOMIN: + case SID_ZOOMOUT: + case SID_FITINWINDOW: + if ( GetDoc()->GetProtocol().IsInPlaceActive() ) + rSet.DisableItem( nWh ); + break; + + case SID_NEXTERR: + case SID_PREVERR: + case SID_NEXTMARK: + case SID_PREVMARK: + case SID_DRAW: + case SID_SELECT: + if (! GetEditWindow() || GetEditWindow()->IsEmpty()) + rSet.DisableItem(nWh); + break; + + case SID_TEXTSTATUS: + { + rSet.Put(SfxStringItem(nWh, StatusText)); + break; + } + + case SID_FORMULACURSOR: + { + SmModule *pp = SM_MOD1(); + rSet.Put(SfxBoolItem(nWh, pp->GetConfig()->IsShowFormulaCursor())); + break; + } + } + } +} + + +SmViewShell::SmViewShell(SfxViewFrame *pFrame, SfxViewShell *): + SfxViewShell(pFrame, SFX_VIEW_DISABLE_ACCELS | SFX_VIEW_MAXIMIZE_FIRST | SFX_VIEW_HAS_PRINTOPTIONS | SFX_VIEW_CAN_PRINT), + aGraphic(this), + aGraphicController(aGraphic, SID_GRAPHIC, pFrame->GetBindings()) +{ + pViewFrame = &pFrame->GetWindow(); + + SetStatusText(String()); + SetWindow(&aGraphic); + SfxShell::SetName(C2S("SmView")); + SfxShell::SetUndoManager (GetDoc()->GetUndoManager()); + SetHelpId( HID_SMA_VIEWSHELL_DOCUMENT ); +} + + +SmViewShell::~SmViewShell() +{ +} + +void SmViewShell::Deactivate( BOOL bIsMDIActivate ) +{ + SmEditWindow *pEdit = GetEditWindow(); + if ( pEdit ) + pEdit->Flush(); + SfxViewShell::Deactivate( bIsMDIActivate ); +} + + +void SmViewShell::Activate( BOOL bIsMDIActivate ) +{ + SfxViewShell::Activate( bIsMDIActivate ); + SmEditWindow *pEdit = GetEditWindow(); + if ( pEdit ) + { + //! Hier beim (synchronen) Aufruf zum Taskwechsel werden beim SmEditWindow + //! auch implizit dessen Timer neu gestartet. + //! siehe auch Kommentar zu SmEditWindow::CursorMoveTimerHdl + pEdit->SetText( GetDoc()->GetText() ); + + if ( bIsMDIActivate ) + pEdit->GrabFocus(); + } +} + + -- cgit v1.2.3