private string ConvertEquationImpl(byte[] equationRawBytes)
        {
            MTAPI_DIMS dims = new MTAPI_DIMS();
            var        resultStringBuilder = new StringBuilder(INITIAL_RESULT_BUFFER_SIZE);
            var        success             = false;

            while (!success)
            {
                if (resultStringBuilder.Capacity > MAX_RESULT_BUFFER_SIZE)
                {
                    throw new Exception("Could not convert due high memory usage");
                }

                int result;
                try
                {
                    result = Api.MTXFormEqnMgn(
                        MTXFormEqn.mtxfmLOCAL,
                        MTXFormEqn.mtxfmMTEF,
                        equationRawBytes,
                        equationRawBytes.Length,
                        MTXFormEqn.mtxfmLOCAL,
                        MTXFormEqn.mtxfmTEXT,
                        resultStringBuilder,
                        resultStringBuilder.Capacity,
                        string.Empty,
                        ref dims
                        );
                }
                catch (AccessViolationException e)
                {
                    throw new Exception("Access violation exception while FormEqn." + e.ToString());
                }

                success = MathTypeReturnValue.mtOK == result;
                if (MathTypeReturnValue.mtMEMORY == result)
                {
                    resultStringBuilder.Clear();
                    resultStringBuilder.Capacity *= 2; // retry with increased buffer
                }
                else if (MathTypeReturnValue.mtTRANSLATOR_ERROR == result)
                {
                    throw new Exception("mtTRANSLATOR_ERROR. Result eq: " + resultStringBuilder.ToString());
                }
                else if (!success)
                {
                    throw new Exception("MathType returned: " + result);
                }
            }
            return(resultStringBuilder.ToString());
        }
        protected bool ConvertToOutput()
        {
            bool bResult = false;

            //try
            //{
            if (!m_sdk.Init())
            {
                return(false);
            }

            if (MathTypeSDK.Instance.MTXFormResetMgn() == MathTypeReturnValue.mtOK &&
                SetTranslator())
            {
                Int32         stat          = 0;
                Int32         iBufferLength = 5000;
                StringBuilder strDest       = new StringBuilder(iBufferLength);
                MTAPI_DIMS    dims          = new MTAPI_DIMS();

                // convert
                stat = MathTypeSDK.Instance.MTXFormEqnMgn(
                    m_ei.iType,
                    m_ei.iFormat,
                    m_ei.bMTEF,
                    m_ei.iMTEF_Length,
                    m_eo.iType,
                    m_eo.iFormat,
                    strDest,
                    iBufferLength,
                    m_eo.strFileName,
                    ref dims);

                // save equation
                if (stat == MathTypeReturnValue.mtOK)
                {
                    m_eo.strEquation = strDest.ToString();
                    bResult          = true;
                }
            }

            m_sdk.DeInit();
            // }
            // catch (Exception e)
            // {
            //     Console.WriteLine(e.Message);
            //     return false;
            // }

            return(bResult);
        }
Beispiel #3
0
        /// <summary>
        /// Transforms an equation (uses options specified via MTXFormAddVarSub,
        /// MTXFormSetTranslator, and MTXFormSetPrefs).
        /// </summary>
        /// <param name="sender">Parameter not used</param>
        /// <param name="e">Parameter not used</param>
        private void FormEqn_Click(object sender, EventArgs e)
        {
            long   retVal = 0;
            string error;

            if (_isMTAPIConnected == false)
            {
                InternalStartAPI(true);
            }

            if (_isMTAPIConnected == true)
            {
                string        srcString = "MathType!MTEF!2!1!+-feaaguart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rqqrFfpeea0xe9Lq-Jc9vqaqpepm0xbba9pwe9Q8fs0-yqaqpepae9pg0FirpepeKkFr0xfr-xfr-xb9adbaqaaeGaciGaaiaabeqaamaabaabaaGcbaGaaG4naiabgUcaRiaadIhaaaa!3892!";
                string        srcPath   = @"";
                const int     iDstLen   = 10000;
                StringBuilder strDest   = new StringBuilder(iDstLen);
                MTAPI_DIMS    dims      = new MTAPI_DIMS();

/*				IntPtr ptr =  Marshal.AllocHGlobal(1024);
 *              int length = srcString.Length;
 *              length = 2 * (length + 1);
 *              IntPtr srcData = Marshal.AllocHGlobal(length);
 *              Marshal.Copy(srcString.ToCharArray(), 0, srcData, srcString.Length);*/

                byte[] srcData = System.Text.Encoding.ASCII.GetBytes(srcString);

                retVal = _MTSDK.MTXFormEqnMgn(mtxFormEqn.mtxfmLOCAL,
                                              mtxFormEqn.mtxfmMTEF,
                                              srcData,
                                              srcString.Length,
                                              mtxFormEqn.mtxfmLOCAL,
                                              mtxFormEqn.mtxfmTEXT,
                                              strDest,
                                              iDstLen,
                                              srcPath,
                                              ref dims);


                if (retVal == mtReturnValues.mtOK)
                {
                    error = "Equation transformation was successful";
                    _appHelper.ShowOKDialog(error);
                }
                else if (retVal == mtReturnValues.mtNOT_EQUATION)
                {
                    error = "Error: Source data does not contain MTEF";
                    _appHelper.ShowErrorDialog(error);
                }
                else if (retVal == mtReturnValues.mtSUBSTITUTION_ERROR)
                {
                    error = "Error: Could not perform one or more rules";
                    _appHelper.ShowErrorDialog(error);
                }
                else if (retVal == mtReturnValues.mtTRANSLATOR_ERROR)
                {
                    error = "Error: Errors occured during translation (translation not done)";
                    _appHelper.ShowErrorDialog(error);
                }
                else if (retVal == mtReturnValues.mtPREFERENCE_ERROR)
                {
                    error = "Error: Could not set preferences";
                    _appHelper.ShowErrorDialog(error);
                }
                else if (retVal == mtReturnValues.mtMEMORY)
                {
                    error = "Error: Not enough space in dstData";
                    _appHelper.ShowErrorDialog(error);
                }
                else
                {
                    error = "Error: Some other error occurred";
                    _appHelper.ShowErrorDialog(error);
                }

                // Free memory allocated from hglobal allocation
                // Marshal.FreeHGlobal(srcData);
            }
        }