24#include <osl/diagnose.h>
87 const char *pC =
nullptr;
119 rRet.append(OUStringChar(nChar));
126 rRet.append(OUStringChar(nChar));
132 rRet.append(OUStringChar(nChar));
138 rRet.append(OUStringChar(nChar));
144 rRet.append(OUStringChar(nChar));
150 rRet.append(OUStringChar(nChar));
156 rRet.append(OUStringChar(nChar));
162 rRet.append(OUStringChar(nChar));
168 rRet.append(OUStringChar(nChar));
176 rRet.append(OUStringChar(nChar));
185 rRet.append(OUStringChar(nChar));
194 rRet.append(OUStringChar(nChar));
203 rRet.append(OUStringChar(nChar));
319 pC =
" backepsilon ";
323 rRet.append(
" func " + OUStringChar(nChar) +
" ");
326 rRet.append(
u" func \u220b ");
362 pC =
" intersection ";
411 pC =
" preccurlyeq ";
414 pC =
" succcurlyeq ";
439 rRet.append(
" func " + OUStringChar(nChar) +
" ");
510 rRet.append(OUStringChar(nChar));
515 rRet.appendAscii(pC);
521 const char *pC =
nullptr;
538 rRet += OUString::createFromAscii( pC );
546 aFont.
nStyle = aItr->nStyle;
554 StreamMode::STD_READ);
592 if ((rTextStart < rRet.getLength()) &&
593 (rRet[rTextStart] ==
'=') &&
594 ((rTextStart == 0) || (rRet[ rTextStart-1 ] ==
'{'))
597 rRet.insert(rTextStart,
" {}");
605 for(
int nI=rRet.getLength()-1;nI >= 0; nI--)
607 sal_Int32 nIdx = sal::static_int_cast< sal_Int32 >(nI);
611 if (rRet[nIdx] !=
'{')
625 if (nXNudge == 128 && nYNudge == 128)
627 sal_uInt16 nXLongNudge(0);
628 sal_uInt16 nYLongNudge(0);
637 sal_uInt8 nVariation,
int nMatrixRows,
int nMatrixCols)
645 sal_uInt16 nTabOffset;
649 OUString sPush,sMainTerm;
650 int nSetSize=0,nSetAlign=0;
651 int nCurRow=0,nCurCol=0;
652 bool bOpenString=
false;
653 sal_Int32 nTextStart = 0;
654 sal_Int32 nSubSupStartPos = 0;
655 sal_Int32 nLastTemplateBracket=-1;
674 if ((nRecord ==
CHAR) && (!bOpenString))
677 nTextStart =
rRet.getLength();
679 else if ((nRecord !=
CHAR) && bOpenString)
682 if ((
rRet.getLength() - nTextStart) > 1)
686 rRet.insert(nTextStart,
aStr +
"\"");
689 else if (nRecord ==
END && !
rRet.isEmpty())
692 sal_Int32 nI =
rRet.getLength()-1;
700 if ((cChar ==
'=') || (cChar ==
'+') || (cChar ==
'-'))
713 rRet.append(
"\nnewline\n");
720 rRet.append(
" langle ");
721 else if (nVariation==1)
722 rRet.append(
" \\langle ");
726 rRet.append(
" left (");
727 else if (nVariation==1)
731 if ((nVariation==0) || (nVariation==1))
732 rRet.append(
" left lbrace ");
734 rRet.append(
" left none ");
738 rRet.append(
" left [");
739 else if (nVariation==1)
748 rRet.append(
" lline ");
749 else if (nVariation==1)
750 rRet.append(
" \\lline ");
754 rRet.append(
" ldline ");
755 else if (nVariation==1)
756 rRet.append(
" \\ldline ");
759 if (nVariation == 0 || nVariation & 0x01)
760 rRet.append(
" left lfloor ");
762 rRet.append(
" left none ");
766 rRet.append(
" lceil ");
767 else if (nVariation==1)
768 rRet.append(
" \\lceil ");
781 rRet.append(
" sqrt");
784 rRet.append(
" nroot");
785 sPush =
rRet.makeStringAndClear();
796 rRet.append(
" over ");
800 nSubSupStartPos =
rRet.getLength();
801 if ((nVariation == 0) ||
802 ((nVariation == 2) && (nPart==1)))
805 rRet.append(
" rSup");
807 else if ((nVariation == 1) ||
808 ((nVariation == 2) && (nPart==0)))
811 rRet.append(
" rSub");
817 rRet.append(
" {underline ");
818 else if (nVariation == 1)
819 rRet.append(
" {underline underline ");
824 rRet.append(
" {overline ");
825 else if (nVariation == 1)
826 rRet.append(
" {overline overline ");
833 rRet.append(
" widevec ");
834 else if (nVariation == 1)
835 rRet.append(
" widevec ");
843 rRet.append(
" widevec ");
844 else if (nVariation == 1)
845 rRet.append(
" widevec ");
853 rRet.append(
" widevec ");
854 else if (nVariation == 1)
855 rRet.append(
" widevec ");
862 if ((nVariation == 3) || (nVariation == 4))
863 rRet.append(
" lInt");
866 if ( (nVariation != 0) && (nVariation != 3))
868 sPush =
rRet.makeStringAndClear();
871 if (((nVariation == 1) ||
872 (nVariation == 4)) && (nPart==1))
873 rRet.append(
" rSub");
874 else if ((nVariation == 2) && (nPart==2))
875 rRet.append(
" rSup");
876 else if ((nVariation == 2) && (nPart==1))
877 rRet.append(
" rSub");
883 if ((nVariation == 2) || (nVariation == 3))
884 rRet.append(
" llInt");
886 rRet.append(
" iInt");
887 if ( (nVariation != 0) && (nVariation != 2))
889 sPush =
rRet.makeStringAndClear();
892 if (((nVariation == 1) ||
893 (nVariation == 3)) && (nPart==1))
894 rRet.append(
" rSub");
900 if ((nVariation == 2) || (nVariation == 3))
901 rRet.append(
" lllInt");
903 rRet.append(
" iiInt");
904 if ( (nVariation != 0) && (nVariation != 2))
906 sPush =
rRet.makeStringAndClear();
909 if (((nVariation == 1) ||
910 (nVariation == 3)) && (nPart==1))
911 rRet.append(
" rSub");
918 rRet.append(
" lInt");
921 sPush =
rRet.makeStringAndClear();
923 if (((nVariation == 1) ||
924 (nVariation == 2)) && (nPart==1))
925 rRet.append(
" cSub");
926 else if ((nVariation == 0) && (nPart==2))
927 rRet.append(
" cSup");
928 else if ((nVariation == 0) && (nPart==1))
929 rRet.append(
" cSub");
936 rRet.append(
" llInt");
938 rRet.append(
" iInt");
939 sPush =
rRet.makeStringAndClear();
942 rRet.append(
" cSub");
949 rRet.append(
" lllInt");
951 rRet.append(
" iiInt");
952 sPush =
rRet.makeStringAndClear();
955 rRet.append(
" cSub");
968 sPush =
rRet.makeStringAndClear();
971 if ((nVariation == 0) && (nPart==1))
972 rRet.append(
" cSub");
973 else if ((nVariation == 1) && (nPart==2))
974 rRet.append(
" cSup");
975 else if ((nVariation == 1) && (nPart==1))
976 rRet.append(
" cSub");
983 sPush =
rRet.makeStringAndClear();
985 if ((nVariation == 0) && (nPart==1))
986 rRet.append(
" rSub");
987 else if ((nVariation == 1) && (nPart==2))
988 rRet.append(
" rSup");
989 else if ((nVariation == 1) && (nPart==1))
990 rRet.append(
" rSub");
996 rRet.append(
" Prod");
999 sPush =
rRet.makeStringAndClear();
1002 if ((nVariation == 0) && (nPart==1))
1003 rRet.append(
" cSub");
1004 else if ((nVariation == 1) && (nPart==2))
1005 rRet.append(
" cSup");
1006 else if ((nVariation == 1) && (nPart==1))
1007 rRet.append(
" cSub");
1013 rRet.append(
" Prod");
1014 sPush =
rRet.makeStringAndClear();
1016 if ((nVariation == 0) && (nPart==1))
1017 rRet.append(
" rSub");
1018 else if ((nVariation == 1) && (nPart==2))
1019 rRet.append(
" rSup");
1020 else if ((nVariation == 1) && (nPart==1))
1021 rRet.append(
" rSub");
1027 rRet.append(
" coProd");
1028 if (nVariation != 2)
1030 sPush =
rRet.makeStringAndClear();
1033 if ((nVariation == 0) && (nPart==1))
1034 rRet.append(
" cSub");
1035 else if ((nVariation == 1) && (nPart==2))
1036 rRet.append(
" cSup");
1037 else if ((nVariation == 1) && (nPart==1))
1038 rRet.append(
" cSub");
1044 rRet.append(
" coProd");
1045 sPush =
rRet.makeStringAndClear();
1047 if ((nVariation == 0) && (nPart==1))
1048 rRet.append(
" rSub");
1049 else if ((nVariation == 1) && (nPart==2))
1050 rRet.append(
" rSup");
1051 else if ((nVariation == 1) && (nPart==1))
1052 rRet.append(
" rSub");
1058 rRet.append(
" union");
1059 if (nVariation != 2)
1061 sPush =
rRet.makeStringAndClear();
1064 if ((nVariation == 0) && (nPart==1))
1065 rRet.append(
" cSub");
1066 else if ((nVariation == 1) && (nPart==2))
1067 rRet.append(
" cSup");
1068 else if ((nVariation == 1) && (nPart==1))
1069 rRet.append(
" cSub");
1075 rRet.append(
" union");
1076 sPush =
rRet.makeStringAndClear();
1078 if ((nVariation == 0) && (nPart==1))
1079 rRet.append(
" rSub");
1080 else if ((nVariation == 1) && (nPart==2))
1081 rRet.append(
" rSup");
1082 else if ((nVariation == 1) && (nPart==1))
1083 rRet.append(
" rSub");
1089 rRet.append(
" intersect");
1090 if (nVariation != 2)
1092 sPush =
rRet.makeStringAndClear();
1095 if ((nVariation == 0) && (nPart==1))
1096 rRet.append(
" cSub");
1097 else if ((nVariation == 1) && (nPart==2))
1098 rRet.append(
" cSup");
1099 else if ((nVariation == 1) && (nPart==1))
1100 rRet.append(
" cSub");
1106 rRet.append(
" intersect");
1107 sPush =
rRet.makeStringAndClear();
1109 if ((nVariation == 0) && (nPart==1))
1110 rRet.append(
" rSub");
1111 else if ((nVariation == 1) && (nPart==2))
1112 rRet.append(
" rSup");
1113 else if ((nVariation == 1) && (nPart==1))
1114 rRet.append(
" rSub");
1118 if ((nVariation == 0) && (nPart==1))
1119 rRet.append(
" cSup");
1120 else if ((nVariation == 1) && (nPart==1))
1121 rRet.append(
" cSub");
1122 else if ((nVariation == 2) && (nPart==1))
1123 rRet.append(
" cSub");
1124 else if ((nVariation == 2) && (nPart==2))
1125 rRet.append(
" cSup");
1129 if (nVariation == 0)
1133 sPush =
rRet.makeStringAndClear();
1137 if (nVariation == 0)
1140 rRet.append(
"alignr ");
1143 rRet.append(
"\\lline ");
1144 if (nVariation == 1)
1145 rRet.append(
"overline ");
1153 sPush =
rRet.makeStringAndClear();
1155 if ((nVariation == 0) && (nPart==0))
1156 rRet.append(
" rSup");
1157 else if ((nVariation == 2) && (nPart==1))
1158 rRet.append(
" rSup");
1159 else if ((nVariation == 1) && (nPart==0))
1160 rRet.append(
" rSub");
1161 else if ((nVariation == 2) && (nPart==0))
1162 rRet.append(
" rSub");
1168 sPush =
rRet.makeStringAndClear();
1170 if ((nVariation == 0) && (nPart==0))
1171 rRet.append(
" cSup");
1172 else if ((nVariation == 2) && (nPart==1))
1173 rRet.append(
" cSup");
1174 else if ((nVariation == 1) && (nPart==0))
1175 rRet.append(
" cSub");
1176 else if ((nVariation == 2) && (nPart==0))
1177 rRet.append(
" cSub");
1182 rRet.append(
"\"\"");
1183 if ((nVariation == 0)
1184 || ((nVariation == 2) && (nPart==1)))
1185 rRet.append(
" lSup");
1186 else if ((nVariation == 1)
1187 || ((nVariation == 2) && (nPart==0)))
1188 rRet.append(
" lSub");
1195 rRet.append(
" langle ");
1197 else if (nVariation==1)
1199 rRet.append(
" \\langle ");
1202 else if (nVariation==2)
1204 rRet.append(
" \\lline ");
1209 if (nVariation == 0)
1210 rRet.append(
" widevec ");
1211 else if (nVariation == 1)
1212 rRet.append(
" widevec ");
1213 else if (nVariation == 2)
1214 rRet.append(
" widevec ");
1218 if (nVariation == 0)
1219 rRet.append(
" widevec ");
1220 else if (nVariation == 1)
1221 rRet.append(
" widevec ");
1222 else if (nVariation == 2)
1223 rRet.append(
" widevec ");
1230 sal_Int32 nSizeStartPos =
rRet.getLength();
1236 sal_Int32 nI =
rRet.lastIndexOf(
'{');
1239 for(nI=nI+1;nI<
rRet.getLength();nI++)
1240 if (
rRet[nI] !=
' ')
1251 else if (
rRet.getLength() > nSizeStartPos)
1252 rRet =
rRet.truncate(nSizeStartPos);
1265 rRet.append(
" rangle ");
1266 else if (nVariation==2)
1267 rRet.append(
" \\rangle ");
1271 rRet.append(
" right )");
1272 else if (nVariation==2)
1276 if ((nVariation==0) || (nVariation==2))
1277 rRet.append(
" right rbrace ");
1279 rRet.append(
" right none ");
1283 rRet.append(
" right ]");
1284 else if (nVariation==2)
1289 rRet.append(
" rline ");
1290 else if (nVariation==2)
1291 rRet.append(
" \\rline ");
1295 rRet.append(
" rdline ");
1296 else if (nVariation==2)
1297 rRet.append(
" \\rdline ");
1300 if (nVariation == 0 || nVariation & 0x02)
1301 rRet.append(
" right rfloor ");
1303 rRet.append(
" right none ");
1307 rRet.append(
" rceil ");
1308 else if (nVariation==2)
1309 rRet.append(
" \\rceil ");
1321 if (nVariation == 1)
1326 sMainTerm =
rRet.makeStringAndClear();
1328 else if (nPart == 1)
1330 rRet.insert(0, sPush);
1331 rRet.append(sMainTerm);
1357 ((nVariation == 2) || (nVariation == 1)))
1361 sal_Int32 nI =
rRet.lastIndexOf(
'{');
1364 for(nI=nI+1;nI<
rRet.getLength();nI++)
1365 if (
rRet[nI] !=
' ')
1376 else if (
rRet.getLength() > nSubSupStartPos)
1377 rRet =
rRet.truncate(nSubSupStartPos);
1383 ((nVariation == 2) || (nVariation == 1)))
1411 rRet.append(
"overbrace");
1420 rRet.append(
"underbrace");
1427 else if ((nPart==1) &&
1428 ((nVariation == 2) || (nVariation == 1)))
1435 if (nVariation == 0)
1439 sMainTerm =
rRet.makeStringAndClear();
1441 else if (nPart == 1)
1443 rRet.insert(0, sPush);
1444 rRet.append(
" over " + sMainTerm);
1461 rRet.append(
"slash");
1464 rRet.append(
"wideslash");
1483 if (nVariation != 2)
1485 sMainTerm =
rRet.makeStringAndClear();
1489 else if ((nPart == 1) && (nVariation == 0))
1491 rRet.insert(0, sPush);
1492 rRet.append(sMainTerm);
1497 else if ((nPart == 1) && (nVariation == 1))
1499 else if ((nPart == 2) && (nVariation == 1))
1501 rRet.insert(0, sPush);
1502 rRet.append(sMainTerm);
1513 if ((nVariation != 0) && (nVariation != 3))
1515 sMainTerm =
rRet.makeStringAndClear();
1519 else if ((nPart == 1) &&
1520 ((nVariation == 1) || (nVariation==4)))
1522 rRet.insert(0, sPush);
1523 rRet.append(sMainTerm);
1528 else if ((nPart == 1) && (nVariation == 2))
1530 else if ((nPart == 2) && (nVariation == 2))
1532 rRet.insert(0, sPush);
1533 rRet.append(sMainTerm);
1545 if ((nVariation != 0) && (nVariation != 2))
1547 sMainTerm =
rRet.makeStringAndClear();
1551 else if ((nPart == 1) &&
1552 ((nVariation == 1) || (nVariation==3)))
1554 rRet.insert(0, sPush);
1555 rRet.append(sMainTerm);
1566 sMainTerm =
rRet.makeStringAndClear();
1569 else if ((nPart == 1) &&
1570 ((nVariation == 1) || (nVariation==2)))
1572 rRet.insert(0, sPush);
1573 rRet.append(sMainTerm);
1578 else if ((nPart == 1) && (nVariation == 0))
1580 else if ((nPart == 2) && (nVariation == 0))
1582 rRet.insert(0, sPush);
1583 rRet.append(sMainTerm);
1595 sMainTerm =
rRet.makeStringAndClear();
1598 else if (nPart == 1)
1600 rRet.insert(0, sPush);
1601 rRet.append(sMainTerm);
1613 ((nVariation == 0) || (nVariation == 1)))
1615 sMainTerm =
rRet.makeStringAndClear();
1618 else if ((nPart == 0) && (nVariation == 2))
1620 else if ((nPart == 1) && (nVariation == 2))
1622 sMainTerm =
rRet.makeStringAndClear();
1625 else if ((nPart == 2) || ((nPart == 1) &&
1626 (nVariation == 0 || nVariation == 1)))
1628 rRet.insert(0, sPush);
1629 rRet.append(sMainTerm);
1641 rRet.append(
" mline ");
1644 rRet.append(
" rangle ");
1646 else if (nVariation==1)
1647 rRet.append(
" \\lline ");
1648 else if (nVariation==2)
1649 rRet.append(
" \\rangle ");
1669 bRet =
HandleChar( nTextStart, nSetSize, nLevel, nTag, nSelector, nVariation, bSilent );
1674 bRet =
HandleTemplate( nLevel, nSelector, nVariation, nLastTemplateBracket );
1679 bRet =
HandlePile( nSetAlign, nLevel, nSelector, nVariation );
1697 for (
i=0;
i<nTabStops;
i++)
1702 SAL_WARN(
"starmath",
"Not seen in the wild Equation Ruler Field");
1742 while (nRecord !=
END && !
pS->
eof());
1759 int &rCurCol,
int &rCurRow)
1764 if (rCurCol == nMatrixCols-1)
1766 if (rCurRow != nMatrixRows-1)
1767 rRet.append(
" {} ##\n");
1768 if (nMatrixRows!=-1)
1776 rRet.append(
" {} # ");
1777 if (nMatrixRows!=-1)
1792 rRet.append(
"alignl {");
1795 rRet.append(
"alignc {");
1798 rRet.append(
"alignr {");
1811 const sal_Int16 nDefaultSize = 12;
1812 if ((-nLstSize/32 != nDefaultSize) && (-nLstSize/32 !=
nCurSize))
1823 rRet.append(
" size ");
1824 rRet.append(
static_cast<sal_Int32
>(-nLstSize/32));
1840 nLstSize = nLstSize + nDefSize;
1852 rRet.append(
" size ");
1853 rRet.append(
static_cast<sal_Int32
>(nLstSize));
1875 pStor->SetClass( aGName, SotClipboardFormatId::NONE,
"Microsoft Equation 3.0");
1878 0x01, 0x00, 0xFE, 0xFF, 0x03, 0x0A, 0x00, 0x00,
1879 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0xCE, 0x02, 0x00,
1880 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00,
1881 0x00, 0x00, 0x00, 0x46, 0x17, 0x00, 0x00, 0x00,
1882 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66,
1883 0x74, 0x20, 0x45, 0x71, 0x75, 0x61, 0x74, 0x69,
1884 0x6F, 0x6E, 0x20, 0x33, 0x2E, 0x30, 0x00, 0x0C,
1885 0x00, 0x00, 0x00, 0x44, 0x53, 0x20, 0x45, 0x71,
1886 0x75, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x0B,
1887 0x00, 0x00, 0x00, 0x45, 0x71, 0x75, 0x61, 0x74,
1888 0x69, 0x6F, 0x6E, 0x2E, 0x33, 0x00, 0xF4, 0x39,
1889 0xB2, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1890 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1893 xStor->WriteBytes(aCompObj,
sizeof(aCompObj));
1896 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
1897 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1898 0x00, 0x00, 0x00, 0x00
1901 xStor2->WriteBytes(aOle,
sizeof(aOle));
1918 sal_uInt32 nSize =
pS->
Tell();
1924 nSize =
pS->
Tell()-nSize;
1991 for (
size_t i = 0;
i < nSize; ++
i)
2014 for (
size_t i = 0;
i < nSize; ++
i)
2061 for (
int j = 0; j < nBytes; j++)
2066 for (
int k = 0; k < nBytes; k++)
2069 for (
size_t i = 0;
i < nSize; ++
i)
2096 if ( nLevel || (nSize >1))
2103 for (
size_t i = 0;
i < nSize; ++
i)
2112 if (nLevel || (nSize>1))
2128 if (
nullptr != (pTemp = pNode->
GetSubNode(2)))
2135 if (
nullptr != (pTemp = pNode->
GetSubNode(0)))
2149 sal_uInt64 *pPos,
bool bTest)
2162 if (nVariation2!=0xff)
2223 if (nVariation!=0xff)
2254 if (
nullptr != (pTemp = pNode->
GetSubNode(0)))
2259 if (nVariation2 != 0xff)
2271 if (nVariation!=0xff)
2314 if (
nullptr != (pTemp = pNode->
GetSubNode(0)))
2320 if (
nullptr != (pTemp = pNode->
GetSubNode(2)))
2384 if (
nullptr != (pTemp = pNode->
GetSubNode(1)))
2422 if (
nullptr != (pTemp = pNode->
GetSubNode(0)))
2429 if (
nullptr != (pTemp = pNode->
GetSubNode(2)))
2466 if (nVariation != 0xff)
2470 if (nVariation == 2)
2475 else if (nVariation == 0)
2477 else if (nVariation == 1)
2490 if (nOldVariation != 0xff)
2497 if (nOldVariation != 0xff)
2509 if (nOldVariation != 0xff)
2521 if (nOldVariation != 0xff)
2533 if (nOldVariation != 0xff)
2545 if (nOldVariation != 0xff)
2635 rRet.append(
" stack {\n");
2636 bool bRet =
HandleRecords( nLevel+1, nSelector, nVariation, -1, -1 );
2637 int nRemoveFrom =
rRet.getLength() >= 3 ?
rRet.getLength() - 3 : 0;
2638 rRet.remove(nRemoveFrom, 2);
2651 sal_uInt8 nH_just,nV_just,nRows,nCols,nVAlign;
2659 int nBytes = ((nRows+1)*2)/8;
2660 if (((nRows+1)*2)%8)
2663 nBytes = ((nCols+1)*2)/8;
2664 if (((nCols+1)*2)%8)
2667 rRet.append(
" matrix {\n");
2668 bool bRet =
HandleRecords( nLevel+1, nSelector, nVariation, nRows, nCols );
2670 sal_Int32 nI =
rRet.lastIndexOf(
'#');
2672 if (
rRet[nI-1] !=
'#')
2675 rRet.append(
"\n} ");
2680 sal_uInt8 &rVariation, sal_Int32 &rLastTemplateBracket)
2686 OSL_ENSURE(rSelector < 48,
"Selector out of range");
2687 if ((rSelector >= 21) && (rSelector <=26))
2689 OSL_ENSURE(nOption < 2,
"Option out of range");
2691 else if (rSelector <= 12)
2693 OSL_ENSURE(nOption < 3,
"Option out of range");
2700 if ( (rSelector == 0xf) && (rLastTemplateBracket != -1) )
2703 for (sal_Int32 nI = rLastTemplateBracket+1; nI <
rRet.getLength(); nI++ )
2704 if (
rRet[nI] !=
' ')
2712 bool bRet =
HandleRecords( nLevel+1, rSelector, rVariation );
2716 if (rLastTemplateBracket <
rRet.getLength())
2717 rRet.remove(rLastTemplateBracket, 1);
2719 rLastTemplateBracket = -1;
2721 if (rSelector == 0xf)
2722 rLastTemplateBracket =
rRet.lastIndexOf(
'}');
2724 rLastTemplateBracket = -1;
2726 rSelector = sal::static_int_cast< sal_uInt8 >(-1);
2741 rRet.append(
" dot ");
2744 rRet.append(
" ddot ");
2747 rRet.append(
" dddot ");
2752 sPost.append(
" sup {}");
2761 sPost.append(
" sup {}");
2770 sPost.append(
" lsup {}");
2777 rRet.append(
" tilde ");
2780 rRet.append(
" hat ");
2783 rRet.append(
" vec ");
2786 rRet.append(
" overstrike ");
2789 rRet.append(
" bar ");
2794 sPost.append(
" sup {}");
2801 rRet.append(
" breve ");
2804 OSL_ENSURE(nEmbel < 21,
"Embel out of range");
2877 int nOriglen=
rRet.getLength()-rTextStart;
2879 if ((!bSilent) && (nOriglen > 1))
2888 rRet.insert(std::min(rTextStart,
rRet.getLength()),
aStr +
"\"");
2896 rTextStart =
rRet.getLength();
2902 sal_Int32 nOldLen =
rRet.getLength();
2908 if ((nOldLen - rTextStart) > 1)
2910 rRet.insert(nOldLen,
"\"");
2913 rRet.insert(rTextStart,
aStr +
"\"");
2915 rTextStart =
rRet.getLength();
2917 nOldLen =
rRet.getLength();
2920 if (nOldLen - rTextStart > 1)
2922 rRet.insert(nOldLen,
"\"");
2925 rRet.insert(rTextStart,
aStr +
"\"");
2927 rTextStart =
rRet.getLength();
2932 if ((
xfEMBELL(nTag)) && (!bSilent))
2935 rTextStart =
rRet.getLength();
3004 if (nVariation2 != 0xff)
3032 for (
size_t i = 0;
i < nSize; ++
i)
3050 for(sal_Int32
i=0;
i<pTemp->
GetText().getLength();
i++)
3053 if ((nArse == 0x2224) || (nArse == 0x2288) || (nArse == 0x2285) ||
3059 (
i == ((pTemp->
GetText().getLength()+1)/2)-1))
3070 if ( (nArse == 0x2213) || (nArse == 0x2218) ||
3071 (nArse == 0x210F) || (
3072 (nArse >= 0x22EE) && (nArse <= 0x22FF)
3077 else if ((nArse == 0x2F) || (nArse == 0x2225))
3079 else if ((nArse > 0x2000) || (nArse == 0x00D7))
3081 else if (nArse == 0x3d1)
3083 else if ((nArse > 0xFF) && ((nArse < 0x393) || (nArse > 0x3c9)))
3090 if (nArse == 0x2224)
3098 else if (nArse == 0x2225)
3100 else if (nArse == 0xE421)
3102 else if (nArse == 0x230A)
3104 else if (nArse == 0x230B)
3106 else if (nArse == 0xE425)
3108 else if (nArse == 0x226A)
3118 else if (nArse == 0x2288)
3126 else if (nArse == 0x2289)
3134 else if (nArse == 0x2285)
3150 int nOldPending = 0;
3154 if (
nullptr != (pTemp = pNode->
GetSubNode(0)))
3183 pIsText->
GetText().getLength() > 1)
3206 pIsText->
GetText().getLength() > 1)
3255 pIsText->
GetText().getLength() == 1))
3282 for(sal_Int32
i=0;
i<pTemp->
GetText().getLength();
i++)
3285 (
i == ((pTemp->
GetText().getLength()+1)/2)-1))
3299 sal_uInt16 nChar = pTemp->
GetText()[
i];
3315 (
i == ((pTemp->
GetText().getLength()+1)/2)-1))
3334 OUStringBuffer sText;
3339 bRet = aEquation.
Parse(&rStream);
3341 catch (
const std::out_of_range&)
void AppendStyleToText(OUString &rS)
void HandleText(SmNode *pNode)
void HandleNodes(SmNode *pNode, int nLevel)
static int xfAUTO(sal_uInt8 nTest)
void HandleAttributes(SmNode *pNode, int nLevel)
void HandleOperator(SmNode *pNode, int nLevel)
bool HandleChar(sal_Int32 &rTextStart, int &rSetSize, int nLevel, sal_uInt8 nTag, sal_uInt8 nSelector, sal_uInt8 nVariation, bool bSilent)
bool HandleMatrix(int nLevel, sal_uInt8 nSelector, sal_uInt8 nVariarion)
void HandleEmblishments()
MathTypeFontSet aUserStyles
void HandleAlign(sal_uInt8 nHAlign, int &rSetAlign)
void HandleMAlign(SmNode *pNode, int nLevel)
bool HandleTemplate(int nLevel, sal_uInt8 &rSelector, sal_uInt8 &rVariation, sal_Int32 &rLastTemplateBracket)
void HandleRoot(SmNode *pNode, int nLevel)
void HandleSmMatrix(SmMatrixNode *pMatrix, int nLevel)
bool HandleLim(SmNode *pNode, int nLevel)
int StartTemplate(sal_uInt16 nSelector, sal_uInt16 nVariation=0)
bool HandleSize(sal_Int16 nLSize, sal_Int16 nDSize, int &rSetSize)
bool HandleRecords(int nLevel, sal_uInt8 nSelector=0xFF, sal_uInt8 nVariation=0xFF, int nRows=0, int nCols=0)
void HandleSubSupScript(SmNode *pNode, int nLevel)
bool HandlePile(int &rSetAlign, int nLevel, sal_uInt8 nSelector, sal_uInt8 nVariation)
void EndTemplate(int nOldPendingAttributes)
void HandleVerticalBrace(SmNode *pNode, int nLevel)
void HandleMath(SmNode *pNode)
void HandleTable(SmNode *pNode, int nLevel)
void HandleBrace(SmNode *pNode, int nLevel)
static int xfEMBELL(sal_uInt8 nTest)
void TypeFaceToString(OUString &rRet, sal_uInt8 nFace)
void HandleFractions(SmNode *pNode, int nLevel)
sal_uInt8 HandleCScript(SmNode *pNode, SmNode *pContent, int nLevel, sal_uInt64 *pPos=nullptr, bool bTest=true)
bool Parse(SotStorage *pStor)
static int xfLMOVE(sal_uInt8 nTest)
static bool LookupChar(sal_Unicode nChar, OUStringBuffer &rRet, sal_uInt8 nVersion, sal_uInt8 nTypeFace=0)
static int xfNULL(sal_uInt8 nTest)
bool ConvertFromStarMath(SfxMedium &rMedium)
void HandleMatrixSeparator(int nMatrixRows, int nMatrixCols, int &rCurCol, int &rCurRow)
SvStream * GetOutStream()
sal_uInt16 GetNumRows() const
Gets the number of rows of the matrix.
sal_uInt16 GetNumCols() const
Gets the number of columns of the matrix.
virtual size_t GetNumSubNodes() const =0
Gets the number of subnodes.
const SmToken & GetToken() const
Gets the token.
virtual SmNode * GetSubNode(size_t nIndex)=0
Gets the subnode of index nIndex.
SmNodeType GetType() const
Gets the node type.
const SmFace & GetFont() const
Gets the font.
virtual size_t GetNumSubNodes() const override
Gets the number of subnodes.
virtual SmNode * GetSubNode(size_t nIndex) override
Gets the subnode of index nIndex.
static sal_Unicode ConvertSymbolToUnicode(sal_Unicode nIn)
Converts the character from StarMath's private area symbols to a matching Unicode character,...
const OUString & GetText() const
Gets the node text.
tools::SvRef< SotStorageStream > OpenSotStream(const OUString &rEleName, StreamMode=StreamMode::STD_READWRITE)
void SetEndian(SvStreamEndian SvStreamEndian)
SvStream & ReadInt16(sal_Int16 &rInt16)
SvStream & WriteUChar(unsigned char nChar)
SvStream & WriteUInt16(sal_uInt16 nUInt16)
SvStream & ReadUtf16(sal_Unicode &rUtf16)
SvStream & ReadChar(char &rChar)
sal_uInt64 Seek(sal_uInt64 nPos)
sal_uInt64 SeekRel(sal_Int64 nPos)
SvStream & ReadUInt16(sal_uInt16 &rUInt16)
SvStream & ReadUChar(unsigned char &rChar)
#define MSO_EQUATION3_CLASSID
void reserve(size_type amount)
const_iterator find(const Value &x) const
const_iterator end() const
std::pair< const_iterator, bool > insert(Value &&x)
#define EQNOLEFILEHDR_SIZE
#define SAL_WARN(area, stream)
constexpr std::array< sal_Int16, 7 > aSizeTable
static void lcl_AppendDummyTerm(OUStringBuffer &rRet)
SAL_DLLPUBLIC_EXPORT bool TestImportMathType(SvStream &rStream)
static void lcl_PrependDummyTerm(OUStringBuffer &rRet, sal_Int32 &rTextStart)
sal_Unicode const MS_LANGLE
sal_Unicode const MS_RMATHANGLE
sal_Unicode const MS_RANGLE
sal_Unicode const MS_LMATHANGLE