Milán Major

netscape-revival

1 branch
Code

include/edttypes.h

/*
 *  File defines external editor types.
 *
 * These types are remapped internally to the editor.
*/

#ifndef _edt_types_h_
#define _edt_types_h_

#ifndef EDITOR_TYPES
#define ED_Element void
#define ED_Buffer void
#define ED_TagCursor void
#define ED_BitArray void
#endif

/*
 * Handle to Internal structure used for maintaining links.
*/
typedef struct ED_Link* ED_LinkId;
#define ED_LINK_ID_NONE     0

/* this id is passed to FE_GetImageData.. when it returns, we know to pass
 *  the call to EDT_SetImageData
*/
#define ED_IMAGE_LOAD_HACK_ID -10

typedef enum {
    ED_ELEMENT_SELECTION,       /* a selection instead of a single element */
    ED_ELEMENT_TEXT,
    ED_ELEMENT_IMAGE,
    ED_ELEMENT_HRULE,
    ED_ELEMENT_UNKNOWN_TAG,
    ED_ELEMENT_TARGET
} ED_ElementType;

typedef enum {
    ED_CARET_BEFORE = 0,
    ED_CARET_AFTER  = 1
} ED_CaretObjectPosition;

typedef enum {
    TF_NONE         = 0,
    TF_BOLD         = 1,
    TF_ITALIC       = 2,
    TF_FIXED        = 4,
    TF_SUPER        = 8,
    TF_SUB          = 0x10,
    TF_STRIKEOUT    = 0x20,
    TF_BLINK        = 0x40,
    TF_FONT_COLOR   = 0x80,     /* set if font has color */
    TF_FONT_SIZE    = 0x100,    /* set if font has size */
    TF_HREF         = 0x200,
    TF_SERVER       = 0x400,
    TF_SCRIPT       = 0x800,
    TF_UNDERLINE    = 0x1000,
    TF_FONT_FACE    = 0x2000
} ED_ETextFormat;

typedef int16 ED_TextFormat;

/*
 * The names here are confusing, and have a historical basis that is
 * lost in the mists of time. The trouble is that the "ED_ALIGN_CENTER"
 * tag is really "abscenter", while the ED_ALIGN_ABSCENTER tag is
 * really "center". (and the same for the TOP and BOTTOM tags.)
 *
 * Someday, if we have a lot of spare time we could switch the names. 
 */

/* CLM: Swapped bottom and center tags -- should match latest extensions now?
 *      Note: BASELINE is not written out (this is default display mode)
*/
typedef enum {
    ED_ALIGN_DEFAULT        = -1,
    ED_ALIGN_CENTER         = 0,    /* abscenter    */
    ED_ALIGN_LEFT           = 1,    /* left         */
    ED_ALIGN_RIGHT          = 2,    /* right        */
    ED_ALIGN_TOP            = 3,    /* texttop      */
    ED_ALIGN_BOTTOM         = 4,    /* absbottom    */
    ED_ALIGN_BASELINE       = 5,    /* baseline     */
    ED_ALIGN_ABSCENTER      = 6,    /* center       */
    ED_ALIGN_ABSBOTTOM      = 7,    /* bottom       */
    ED_ALIGN_ABSTOP         = 8     /* top          */
} ED_Alignment;

#if 0
typedef enum {
    ED_ALIGN_DEFAULT        = -1,
    ED_ALIGN_ABSCENTER      = 0,  */  /* abscenter     SHOULD BE THIS   */
    ED_ALIGN_LEFT           = 1,    /* left         */
    ED_ALIGN_RIGHT          = 2,    /* right        */
    ED_ALIGN_TOP            = 3,    /* texttop      */
    ED_ALIGN_ABSBOTTOM      = 4, */   /* absbottom      SHOULD BE THIS  */
    ED_ALIGN_BASELINE       = 5,    /* baseline     */
    ED_ALIGN_CENTER         = 6, */   /* center  (NCSA) SHOULD BE THIS*/
    ED_ALIGN_BOTTOM         = 7, */   /* bottom  (NCSA)   SHOULD BE THIS*/
    ED_ALIGN_ABSTOP         = 8     /* top          */
} ED_Alignment;
#endif
/*--------------------------- HREF --------------------------------*/

struct _EDT_HREFData {
    char *pURL;
    char *pExtra;
};

typedef struct _EDT_HREFData EDT_HREFData;

/*--------------------------- Image --------------------------------*/

struct _EDT_ImageData {
    XP_Bool bIsMap;        
    char *pUseMap;              /* created with XP_ALLOC() */
    ED_Alignment align;
    char *pSrc;         
    char *pLowSrc;
    char *pName;
    char *pAlt;
    int32  iWidth;
    int32  iHeight;
    XP_Bool bWidthPercent;         /* Range: 1 - 100 if TRUE, else = pixels (default) */
    XP_Bool bHeightPercent;
    int32 iHSpace;
    int32 iVSpace;
    int32 iBorder;
/* Added by CLM: */
    int32  iOriginalWidth;        /* Width and Height we got on initial loading */
    int32  iOriginalHeight;
    EDT_HREFData *pHREFData;
    char *pExtra;
};

typedef struct _EDT_ImageData EDT_ImageData;

/*--------------------------- Character  --------------------------------*/
struct _EDT_CharacterData {
    ED_TextFormat mask;             /* bits to set or get */
    ED_TextFormat values;           /* values of the bits in the mask */
    LO_Color *pColor;               /* color if mask bit is set */
    int32 iSize;                    /* size if mask bit is set */
    EDT_HREFData *pHREFData;        /* href if mask bit is set */
    ED_LinkId linkId;               /* internal use only */
};

typedef struct _EDT_CharacterData EDT_CharacterData;

/*--------------------------- Horizonal Rule --------------------------------*/

struct _EDT_HorizRuleData {
    ED_Alignment align;         /* only allows left and right alignment */
    int32  size;                  /* value 1 to 100 indicates line thickness */     
    int32  iWidth;                /* CM: default = 100% */
    XP_Bool bWidthPercent;         /* Range: 1 - 100 if TRUE(default), else = pixels */
    XP_Bool bNoShade;              
    char *pExtra;
};

typedef struct _EDT_HorizRuleData EDT_HorizRuleData;

/*--------------------------- ContainerData --------------------------------*/

struct _EDT_ContainerData {
    ED_Alignment align;         /* only allows left and right alignment */
};

typedef struct _EDT_ContainerData EDT_ContainerData;

/*--------------------------- TableData --------------------------------*/

struct _EDT_TableData {
    ED_Alignment align; /* ED_ALIGN_LEFT, ED_ALIGN_ABSCENTER, ED_ALIGN_RIGHT */
    ED_Alignment malign; /* margin alignment: ED_ALIGN_DEFAULT, ED_ALIGN_LEFT, ED_ALIGN_RIGHT */
    int32 iRows;
    int32 iColumns;
    int32 iBorderWidth;
    int32 iCellSpacing;
    int32 iCellPadding;
    XP_Bool bWidthDefined;
    XP_Bool bWidthPercent;
    int32 iWidth;
    XP_Bool bHeightDefined;
    XP_Bool bHeightPercent;
    int32 iHeight;
    LO_Color *pColorBackground;     /* null in the default case */
    char *pExtra;
};

typedef struct _EDT_TableData EDT_TableData;

/*--------------------------- TableCaptionData --------------------------------*/

struct _EDT_TableCaptionData {
    ED_Alignment align;
    char *pExtra;
};

typedef struct _EDT_TableCaptionData EDT_TableCaptionData;

/*--------------------------- TableRowData --------------------------------*/

struct _EDT_TableRowData {
    ED_Alignment align;
    ED_Alignment valign;
    LO_Color *pColorBackground;     /* null in the default case */
    char *pExtra;
};

typedef struct _EDT_TableRowData EDT_TableRowData;

/*--------------------------- TableCellData --------------------------------*/

struct _EDT_TableCellData {
    ED_Alignment align;
    ED_Alignment valign;
    int32 iColSpan;
    int32 iRowSpan;
    XP_Bool bHeader; /* TRUE == th, FALSE == td */
    XP_Bool bNoWrap;
    XP_Bool bWidthDefined;
    XP_Bool bWidthPercent;
    int32 iWidth;
    XP_Bool bHeightDefined;
    XP_Bool bHeightPercent;
    int32 iHeight;
    LO_Color *pColorBackground;     /* null in the default case */
    char *pExtra;
};

typedef struct _EDT_TableCellData EDT_TableCellData;

/*--------------------------- MultiColumnData --------------------------------*/

struct _EDT_MultiColumnData {
    int32 iColumns;
    char *pExtra;
};

typedef struct _EDT_MultiColumnData EDT_MultiColumnData;

/*--------------------------- Page Properties --------------------------------*/
struct _EDT_MetaData {
    XP_Bool bHttpEquiv;        /* true, http-equiv="fdsfds", false name="fdsfds" */
    char *pName;            /* http-equiv's or name's value */
    char *pContent;
};

typedef struct _EDT_MetaData EDT_MetaData;

struct _EDT_PageData {
    LO_Color *pColorBackground;     /* null in the default case */
    LO_Color *pColorLink;
    LO_Color *pColorText;
    LO_Color *pColorFollowedLink;
    LO_Color *pColorActiveLink;
    char *pBackgroundImage;
    char *pTitle;
    XP_Bool bKeepImagesWithDoc;
};

typedef struct _EDT_PageData EDT_PageData;

typedef enum {
    ED_COLOR_BACKGROUND,
    ED_COLOR_LINK,
    ED_COLOR_TEXT,
    ED_COLOR_FOLLOWED_LINK
} ED_EColor;

/*
 * CLM: Java and PlugIn data structures
*/
 struct _EDT_ParamData {
    char *pName;
    char *pValue;
};
typedef struct _EDT_ParamData EDT_ParamData;

typedef int32 EDT_ParamID;

struct _EDT_PlugInData {
    EDT_ParamID   ParamID;               /* Identifies which Param list is associated */
    char          *pSrc;
    XP_Bool          bHidden;
    ED_Alignment  align;
    int32           iWidth;
    int32           iHeight;
    XP_Bool          bWidthPercent;         /* Range: 1 - 100 if TRUE, else = pixels default) */
    XP_Bool          bHeightPercent;
    XP_Bool          bForegroundPalette;    /* PC systems only. For controling 256-color palette wars */
    int32           iHSpace;
    int32           iVSpace;
    int32           iBorder;
};
typedef struct _EDT_PlugInData EDT_PlugInData;

struct _EDT_JavaData {
    EDT_ParamID   ParamID;
    char          *pCode;
    char          *pCodebase;
    char          *pName;
    ED_Alignment  align;
    char          *pSrc;
    int32           iWidth;
    int32           iHeight;
    XP_Bool          bWidthPercent;         /* Range: 1 - 100 if TRUE, else = pixels default) */
    XP_Bool          bHeightPercent;
    int32           iHSpace;
    int32           iVSpace;
    int32           iBorder;
};
typedef struct _EDT_JavaData EDT_JavaData;


/* CLM: Error codes for file writing
 *      Return 0 if no error
 */
typedef enum {
    ED_ERROR_NONE,
    ED_ERROR_READ_ONLY,           /* File is marked read-only */
    ED_ERROR_BLOCKED,             /* Can't write at this time, edit buffer blocked */
    ED_ERROR_BAD_URL,             /* URL was not a "file:" type or no string */
    ED_ERROR_FILE_OPEN,
    ED_ERROR_FILE_WRITE,
    ED_ERROR_CREATE_BAKNAME,
    ED_ERROR_DELETE_BAKFILE,
    ED_ERROR_FILE_RENAME_TO_BAK,
    ED_ERROR_CANCEL,
    ED_ERROR_FILE_EXISTS,         /* We really didn't save -- file existed and no overwrite */
    ED_ERROR_SRC_NOT_FOUND
} ED_FileError;

typedef enum {
    ED_TAG_OK,
    ED_TAG_UNOPENED,
    ED_TAG_UNCLOSED,
    ED_TAG_UNTERMINATED_STRING,
    ED_TAG_PREMATURE_CLOSE,
    ED_TAG_TAGNAME_EXPECTED
} ED_TagValidateResult;

typedef enum {
    ED_LIST_TYPE_DEFAULT,
    ED_LIST_TYPE_DIGIT,         
    ED_LIST_TYPE_BIG_ROMAN,
    ED_LIST_TYPE_SMALL_ROMAN,
    ED_LIST_TYPE_BIG_LETTERS,
    ED_LIST_TYPE_SMALL_LETTERS,
    ED_LIST_TYPE_CIRCLE,
    ED_LIST_TYPE_SQUARE,
    ED_LIST_TYPE_DISC
} ED_ListType;


struct _EDT_ListData {
    /* This should be TagType, but there are problems with the include file dependencies. */
    int8 iTagType;              /* P_UNUM_LIST, P_NUM_LIST, P_BLOCKQUOTE, */
                                /* P_DIRECTOR, P_MENU, P_DESC_LIST */
    XP_Bool bCompact;
    ED_ListType eType;
    int32 iStart;                /* automatically maps, start is one */
    char *pExtra;
};

typedef struct _EDT_ListData EDT_ListData;

typedef enum {
    ED_BREAK_NORMAL,            /* just break the line, ignore images */
    ED_BREAK_LEFT,              /* break so it passes the image on the left */
    ED_BREAK_RIGHT,             /* break past the right image */
    ED_BREAK_BOTH               /* break past both images */
} ED_BreakType;

typedef enum {
    ED_SAVE_OVERWRITE_THIS,
    ED_SAVE_OVERWRITE_ALL,
    ED_SAVE_DONT_OVERWRITE_THIS,
    ED_SAVE_DONT_OVERWRITE_ALL,
    ED_SAVE_CANCEL
} ED_SaveOption;

typedef int32 EDT_ClipboardResult;
#define EDT_COP_OK 0
#define EDT_COP_DOCUMENT_BUSY 1
#define EDT_COP_SELECTION_EMPTY 2
#define EDT_COP_SELECTION_CROSSES_TABLE_DATA_CELL 3


#ifdef FIND_REPLACE

#define ED_FIND_FIND_ALL_WORDS  1       /* used to enumerate all words in a */
                                        /*  buffer */
#define ED_FIND_MATCH_CASE      2       /* default is to ignore case */
#define ED_FIND_REPLACE         4       /* call back the replace routine */
#define ED_FIND_WHOLE_BUFFER    8       /* start search from the top */
#define ED_FIND_REVERSE         0x10    /* reverse search from this point */

typedef intn ED_FindFlags;

typedef void (*EDT_PFReplaceFunc)( void *pMWContext, 
                                  char *pFoundWord, 
                                  char **pReplaceWord );

struct _EDT_FindAndReplaceData {
    char* pSearchString;
    ED_FindFlags fflags;
    EDT_PFReplaceFunc pfReplace;
};

typedef struct _EDT_FindAndReplaceData EDT_FindAndReplaceData;

#endif

#endif