#ifndef M_MATHMODULE_H_
#define M_MATHMODULE_H_
//---------------------------------------------------


/*
           **************************
           *     2                  *
        ** *    x  + 2 Pi
          **  *************  +  R
           *     Sin(wt)
           *

                   Math-Module
                 **************

      Miranda Plugin by Stephan Kassemeyer


   MathModule API  -  (c) Stephan Kassemeyer
                  8 May, 2004

*/


// ---------

/*
   Miranda Service-functions defined by MathModule
   call with the
   int (*CallService)(const char * servicename,WPARAM,LPARAM)
   that you get from miranda when Miranda calls the
   Load(PLUGINLINK * link)
   of your PlugIn-dll
   the CallService function then is:
   link->CallServiceSync(Servicename,wparam,lparam)
*/

// ---------

#define MATH_RTF_REPLACE_FORMULAE "Math/RtfReplaceFormulae"
// replace all formulas in a RichEdit with bitmaps.
// wParam = 0
// lParam = *TMathRichedit Info
// return: TRUE if replacement succeeded, FALSE if not (disable by user?).
typedef struct
{
    HWND hwndRichEditControl;  // handle of richedit.
    CHARRANGE* sel;    // NULL: replace all.
    int disableredraw;
}    TMathRicheditInfo;
// WARNING:   !!!
// Strange things happen if you use this function twice on the same CHARRANGE:
// if Math-startDelimiter == Math-endDelimiter, there is the following problem:
// it might be that someone forgot an endDelimiter, this results in a lonesome startdelimiter.
// if you try to MATH_REPLACE_FORMULAE the second time, startDelimiters and endDelimiters are mixed up.
// The same problem occours if we have empty formulae, because two succeding delimiters are
// replaced with a single delimiter.


#define MTH_GETBITMAP "Math/GetBitmap"
//returns Bitmap that represents the formula given in lparam (string-pointer)
//this formula has NO Delimiters.
//wparam=0
//lparam=(*char)Formula
//result=(HBITMAP) bitmap
//!!! the bitmap must be deleted with DeleteObject(hobject)
//example:
//HBITMAP Bmp=(HBITMAP)CallService(MTH_GETBITMAP,0, (LPARAM)formula);

#define MTH_GET_GIF "Math/GetGif"
// this renders a formula given in lparam and produces a gif-image in a temporary-folder
// and returns the filename (full path). Be sure to copy the file if you want to preserve it,
// because the files are managed as a ring-buffer, if 99 files already exist, this
// function overwrites the first one.
// wparam=0
// lparam=*char text  // formula WITHOUT delimiters
// result=(*char)path
// !!! the result-buffer must be deleted with MTH_FREE_GIFPATH
#define MTH_GET_GIF_UNICODE "Math/GetGifUnicode"
// wparam=0
// lparam=*wchar_t text
// result=*char path
// !!! the result-buffer must be deleted with MTH_FREE_GIFPATH
#define MTH_FREE_GIFPATH "Math/FreeRTFBitmapText"

#define MTH_GET_RTF_BITMAPTEXT "Math/GetRTFBitmapText"
// returns rich-text stream that includes bitmaps from text given in lparam
// text included between MATH_GET_STARTDELIMITER and MATH_GETENDDELIMITER
// hereby is replaced with a rtf-bitmap-stream that represents the corresponding formula
// wparam=0
// lparam=*char text
// result=*char rtfstream
// !!! the result-buffer must be deleted with MTH_FREE_RTF_BITMAPTEXT
#define MTH_FREE_RTF_BITMAPTEXT "Math/FreeRTFBitmapText"
// deletes the buffer that MTH_GET_RTF_BITMAPTEXT has created.
// wparam=0
// lparam=(*char) buffer
// result=0

#define MTH_GET_HTML_SOURCE "Math/GetHTMLSource"
// this is similar to MTH_GET_RTF_BITMAPTEXT, but
// as we cannot include embedded images, the bitmaps are saved in a
// temporary directory (relative to Miranda-dir) and the images are linked into
// the html-source
// wparam=0
// lparam=*char text  // this has to be html-source already. this function only adds formula-links.
// result=*char htmlsource
// !!! the result-buffer must be deleted with MTH_FREE_HTML_BUFFER
#define MTH_GET_HTML_SOURCE_UNICODE "Math/GetHTMLSourceUnicode"
// wparam=0
// lparam=*wchar_t text
// result=*wchar_t htmlsource
#define MTH_FREE_HTML_BUFFER "Math/FreeRTFBitmapText"
// deletes string-buffers that MathModule has created.
// wparam=(bool) unicode  // 0 if no unicode-buffer; 1 if unicode-buffer !!!
// lparam=(*char) buffer
// result=0


// **********parameter functions:
                       
#define MATH_SET_PARAMS "Math/SetParams"
//--------------------------------------
// sets a parameter (only integer values) specified in  wparam
// wparam=paramcode
// lparam=parametervalue
// paramcodes:
    #define MATH_PARAM_BKGCOLOR 0   // (COLORREF) std-rgb-color or TRANSPARENT_Color
                                    // you can make the BKGCOLOR Transparent (default) by using this color:
                                    #define TRANSPARENT_Color 0xffffffff -1  // this is default
    #define MATH_PARAM_FONTCOLOR 1   // (COLORREF) std-rgb-color
    #define MATH_PARAM_RESIZE_HWND 2            // (HWND) preview window resizes RESIZE_HWND when it is being resized.
    #define MATH_PARAM_ToolboxEdit_HWND 3       // (HWND) If this hwnd (of an edit-box) is set, MathModule can insert Formula-elements from the Math-Toolbox.

#define MATH_GET_PARAMS "Math/GetParams"
//---------------------------------------
// get a parameter (only integer values) specified in wparam
// wparam=paramcode
// lparam=lparamOfPARAM // see below
// paramcodes and returnvalues:
    #define MATH_PARAM_STARTDELIMITER 4 // retval: *char delimiter // the delimiter that marks the beginning of a formula
                                      // !!! the result-buffer must be deleted with MTH_FREE_MATH_BUFFER
                                      // lparam=0
    #define MATH_PARAM_ENDDELIMITER 5 // retval: *char delimiter // the delimiter that marks the end of a formula
                                      // !!! the result-buffer must be deleted with MTH_FREE_MATH_BUFFER
                                      // lparam=0
// ************end parameter functions.

#define MTH_FREE_MATH_BUFFER "Math/FreeRTFBitmapText"
// deletes string-buffers that MathModule has created. (at the moment only the *DELIMITER-services create such strings)
// wparam=0
// lparam=(*char) buffer
// result=0



// ********* preview-window functions

#define MTH_SHOW "Math/Show"
// shows the preview-window
// wparam=0
// lparam=0
// result=0

#define MTH_HIDE "Math/Hide"
// hides the preview-window
// wparam=0
// lparam=0
// result=0

#define MTH_RESIZE "Math/Resize"
// sets the size of the preview-window
// wparam=0
// lparam=(*TMathWindowInfo)
// result=0
typedef struct
{
    int top;
	int left;
	int right;
	int bottom;
}	TMathWindowInfo;

#define MTH_SETFORMULA "Math/SetFormula"
// sets the text that the preview-window should parse to display formulas found inside
// wparam=0
// lparam=(*char) text
// result=0

#define MTH_GET_PREVIEW_HEIGHT "Math/getPreviewHeight"
// returns the height of the whole preview-window (including system-menu-bar)
// consider this when maximizing a window to that preview-window is hooked on top or bottom
// it returns the height no matter whether preview-window is visible or not
// wparam=0
// lparam=0
// result=(int) height

#define MTH_GET_PREVIEW_SHOWN "Math/getPreviewShown"
// returns 1 if preview window is visible
// returns 0 if preview window is invisible
// result=(int) shown

//---------------end preview functions


#define MTH_SUBSTITUTE_DELIMITER "Math/SubstituteDelimiter"
// replaces Substitute in an edit-box given in lparam-structure with internal Math-Delimiter.
// MathSrmm uses this for the shortcut-functionality
// I do not recommend to use this, it's not Unicode-safe
// wparam=0
// lparam=(TMathSubstInfo) substInfo
// result=0
typedef struct
{
	HWND EditHandle;
	char* Substitute;
}	TMathSubstInfo;





//
// ---- here are some obsolete services. I plan to remove them soon. Use MATH_SET_PARAMS or MATH_GET_PARAMS instead !!
//

#define MATH_SETBKGCOLOR "Math/SetBackGroundColor"
// changes the background color of the next formula to be rendered.
// wparam=0
// lparam=(COLORREF) color
// result=0

#define MTH_Set_ToolboxEditHwnd "Math/SetTBhwnd"
// If this hwnd (of an edit-box) is set, MathModule can insert Formula-elements from the Math-Toolbox.
// wparam=0
// lparam=handle

#define MTH_Set_Resize_HWND "Math/SetResizeHWND" //�bergibt fenster-Handle des aktuellen Message-Dialogs
// If MathModule knows the handle of a SRMM-based window, following features exist:
// - preview window resizes Math-Srmm when it is being resized.
// wparam=0
// lparam=handle
// result=0

#define MATH_GET_STARTDELIMITER "Math/GetStartDelimiter"
// returns the delimiter that marks the beginning of a formula
// wparam=0
// lparam=0
// result=*char Delimiter
// !!! the result-buffer must be deleted with MTH_FREE_MATH_BUFFER

#define MATH_GETENDDELIMITER "Math/GetEndDelimiter"
// returns the delimiter that marks the end of a formula
// wparam=0
// lparam=0
// result=*char Delimiter
// !!! the result-buffer must be deleted with MTH_FREE_MATH_BUFFER

//---------------------------------------------------
#endif
//#ifndef M_MATHMODULE_H_