diff options
author | Oliver Bolte <obo@openoffice.org> | 2006-07-14 07:23:39 +0000 |
---|---|---|
committer | Oliver Bolte <obo@openoffice.org> | 2006-07-14 07:23:39 +0000 |
commit | 46591ddec1769cab8dae9854d43890a261f7d8b8 (patch) | |
tree | cc2f8cc259ee96c9772f21d62a3e025bd9edaa2b /starmath/source/types.cxx | |
parent | INTEGRATION: CWS tl21 (1.37.74); FILE MERGED (diff) | |
download | core-46591ddec1769cab8dae9854d43890a261f7d8b8.tar.gz core-46591ddec1769cab8dae9854d43890a261f7d8b8.zip |
INTEGRATION: CWS tl21 (1.1.2); FILE ADDED
2006/05/08 15:00:07 tl 1.1.2.2: #i59434# converting private-use-are codepoints to regular unicode code-points when exporting to MathML
2006/05/08 14:40:54 tl 1.1.2.1: #i59434# converting private-use-are codepoints to regular unicode code-points when exporting to MathML
Diffstat (limited to 'starmath/source/types.cxx')
-rw-r--r-- | starmath/source/types.cxx | 261 |
1 files changed, 261 insertions, 0 deletions
diff --git a/starmath/source/types.cxx b/starmath/source/types.cxx new file mode 100644 index 000000000000..a37f97585118 --- /dev/null +++ b/starmath/source/types.cxx @@ -0,0 +1,261 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: types.cxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: obo $ $Date: 2006-07-14 08:23:39 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 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 + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef TYPES_HXX +#include <types.hxx> +#endif + + +//!! no official unicode code point for these in non-private-area +//!! (even MathMl uses the code points listed on the right which are +//!! from the private-use-area as well) +// MS_UNDERBRACE = (xub_Unicode) 0xE081, 0xF613 ? +// MS_OVERBRACE = (xub_Unicode) 0xE082, 0xF612 ? + +struct MathConversionEntry +{ + sal_Unicode cMath; // code point of the character from the + // StarSymbol/OpenSymbol private-use-area + sal_Unicode cUnicode; // 'official' Unicode code point the above + // character should be matched to and vice versa. + // See http://www.w3.org/TR/2000/WD-MathML2-20000211/bycodes.html + // for most of them. +// const sal_Unicode *pFontName; + sal_Unicode cMathType; // 0 if the same value of cUnicode is to be used +}; + +static MathConversionEntry aMathConvTbl[] = +{ +// MS_UNDERBRACE, 0xF613, // only Math-ML code-point available ! +// MS_OVERBRACE, 0xF612, // only Math-ML code-point available ! + MS_PLUS, 0x002B, 0, + MS_LT, 0x003C, 0, + MS_GT, 0x003E, 0, + MS_LESLANT, 0x2264, 0, + MS_GESLANT, 0x2265, 0, + MS_DOTSLOW, 0x2026, 0, + MS_RIGHTARROW, 0x2192, 0, + MS_SQRT, 0x221A, 0, + MS_HAT, 0x02C6, 0, + MS_CHECK, 0x02C7, 0, + MS_BREVE, 0x02D8, 0, + MS_ACUTE, 0x00B4, 0, + MS_GRAVE, 0x0060, 0, + MS_TILDE, 0x02DC, 0, + MS_BAR, 0x02C9, 0, + MS_VEC, 0x2192, 0, + MS_DDDOT, 0x22EF, 0, + MS_LPARENT, 0x0028, 0, + MS_RPARENT, 0x0029, 0, + MS_PLACE, 0x25A1, 0, + MS_LEFTARROW, 0x2190, 0, + MS_UPARROW, 0x2191, 0, + MS_DOWNARROW, 0x2193, 0, + + // predefined-user-defined symbols + // (code-points on the left as defined in 'officecfg' for SO8, + // non-private-use-area characters uncommented): + +// 0x0041, 0x0391, 0, // %ALPHA +// 0x0042, 0x0392, 0, // %BETA + 0xE0AC, 0x0393, 0, // %GAMMA + 0xE0AD, 0x0394, 0, // %DELTA +// 0x0045, 0x0395, 0, // %EPSILON +// 0x005A, 0x0396, 0, // %ZETA +// 0x0048, 0x0397, 0, // %ETA + 0xE0AE, 0x0398, 0, // %THETA +// 0x0049, 0x0399, 0, // %IOTA +// 0x004B, 0x039A, 0, // %KAPPA + 0xE0AF, 0x039B, 0, // %LAMBDA +// 0x004D, 0x039C, 0, // %MU +// 0x004E, 0x039D, 0, // %NU + 0xE0B0, 0x039E, 0, // %XI +// 0x004F, 0x039F, 0, // %OMICRON + 0xE0B1, 0x03A0, 0, // %PI +// 0x0050, 0x03A1, 0, // %RHO + 0xE0B2, 0x03A3, 0, // %SIGMA +// 0x0054, 0x03A4, 0, // %TAU + 0xE0B3, 0x03A5, 0, // %UPSILON + 0xE0B4, 0x03A6, 0, // %PHI +// 0x0058, 0x03A7, 0, // %CHI + 0xE0B5, 0x03A8, 0, // %PSI + 0xE0B6, 0x03A9, 0, // %OMEGA + + 0xE0B7, 0x03B1, 0, // %alpha + 0xE0B8, 0x03B2, 0, // %beta + 0xE0B9, 0x03B3, 0, // %gamma + 0xE0BA, 0x03B4, 0, // %delta + 0xE0BB, 0x03B5, 0, // %epsilon + 0xE0BC, 0x03B6, 0, // %zeta + 0xE0BD, 0x03B7, 0, // %eta + 0xE0BE, 0x03B8, 0, // %theta + 0xE0BF, 0x03B9, 0, // %iota + 0xE0C0, 0x03BA, 0, // %kappa + 0xE0C1, 0x03BB, 0, // %lambda + 0xE0C2, 0x03BC, 0, // %mu + 0xE0C3, 0x03BD, 0, // %nu + 0xE0C4, 0x03BE, 0, // %xi + 0xE0C5, 0x03BF, 0, // %omicron + 0xE0C6, 0x03C0, 0, // %pi + 0xE0C7, 0x03C1, 0, // %rho + 0xE0C8, 0x03C3, 0, // %sigma + 0xE0C9, 0x03C4, 0, // %tau + 0xE0CA, 0x03C5, 0, // %upsilon + 0xE0CB, 0x03C6, 0, // %phi + 0xE0CC, 0x03C7, 0, // %chi + 0xE0CD, 0x03C8, 0, // %psi + 0xE0CE, 0x03C9, 0, // %omega + + 0xE0CF, 0x025B, 0/*x03B5*/, // %varepsilon + 0xE0D0, 0x03D1, 0, // %vartheta + 0xE0D4, 0x03D5, 0, // %varphi + 0xE0D1, 0x03D6, 0, // %varpi +// 0x03F1, 0x03F1, 0/*x03C1*/, // %varrho + 0xE0D3, 0x03C2, 0, // %varsigma + +// 0x2227, 0x2227, 0, // %and +// 0x2228, 0x2228, 0, // %or +// 0x2208, 0x2208, 0, // %element +// 0x2209, 0x2209, 0, // %noelement +// 0x226B, 0x226B, 0, // %strictlygreaterthan +// 0x226A, 0x226A, 0, // %strictlylessthan +// 0x2261, 0x2261, 0, // %identical +// 0x221E, 0x221E, 0, // %infinite +// 0x2260, 0x2260, 0, // %notequal + 0xE080, 0x2030, 0, // %perthousand +// 0x2222, 0x2222, 0, // %angle + 0xE08C, 0x2192, 0 // %tendto +}; + + +static int nMathToUnicodeLen = sizeof(aMathConvTbl) / sizeof(aMathConvTbl[0]); + +sal_Unicode ConvertMathPrivateUseAreaToUnicode( sal_Unicode cChar ) +{ + sal_Unicode cRes = 0; + if (IsInPrivateUseArea( cChar )) + { + for (int i = 0; i < nMathToUnicodeLen && cRes == 0; ++i) + { + if (aMathConvTbl[i].cMath == cChar) + cRes = aMathConvTbl[i].cUnicode; + } + } + return cRes; +} + +sal_Unicode ConvertUnicodeToMathPrivateUseArea( sal_Unicode cChar ) +{ + sal_Unicode cRes = 0; + for (int i = 0; i < nMathToUnicodeLen && cRes == 0; ++i) + { + if (aMathConvTbl[i].cUnicode == cChar) + cRes = aMathConvTbl[i].cMath; + } + return cRes; +} + + +sal_Unicode ConvertMathToMathType( sal_Unicode cChar ) +{ + sal_Unicode cRes = 0; + for (int i = 0; i < nMathToUnicodeLen && cRes == 0; ++i) + { + const MathConversionEntry &rEntry = aMathConvTbl[i]; + if (rEntry.cMath == cChar) + { + cRes = rEntry.cMathType; + if (cRes == 0) + cRes = rEntry.cUnicode; + } + } + return cRes; +} + +sal_Unicode ConvertMathTypeToMath( sal_Unicode cChar ) +{ + sal_Unicode cRes = 0; + for (int i = 0; i < nMathToUnicodeLen && cRes == 0; ++i) + { + const MathConversionEntry &rEntry = aMathConvTbl[i]; + sal_Unicode cTmp = rEntry.cMathType; + if (cTmp == 0) + cTmp = rEntry.cUnicode; + if (cTmp == cChar) + cRes = rEntry.cMath; + } + return cRes; +} + +sal_Unicode ConvertMathToMathML( sal_Unicode cChar ) +{ + sal_Unicode cRes = 0; + if (cChar == MS_OVERBRACE) + cRes = 0xF612; // Math-ML code-point (there is no official unicode-point) + else if (cChar == MS_UNDERBRACE) + cRes = 0xF613; // Math-ML code-point (there is no official unicode-point) + else + cRes = ConvertMathPrivateUseAreaToUnicode( cChar ); + return cRes; +} + +sal_Unicode ConvertMathMLToMath( sal_Unicode cChar ) +{ + sal_Unicode cRes = 0; + if (cChar == 0xF612) + cRes = MS_OVERBRACE; // Math-ML code-point (there is no official unicode-point) + else if (cChar == 0xF613) + cRes = MS_UNDERBRACE; // Math-ML code-point (there is no official unicode-point) + else + cRes = ConvertUnicodeToMathPrivateUseArea( cChar ); + return cRes; +} + + +sal_Unicode GetTokenChar( sal_Unicode cChar, sal_Bool bConvertForExport ) +{ + sal_Unicode cRes = cChar; + if (bConvertForExport) + { + sal_Unicode cTmp = ConvertMathPrivateUseAreaToUnicode( cChar ); + if (cTmp != 0) + cRes = cTmp; + } + return cRes; +} + + |