home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
-
- #ifndef _edt_h_
- #define _edt_h_
-
- #ifdef EDITOR
-
- #ifndef _XP_Core_
- #include "xp_core.h"
- #endif
-
- #ifndef _edttypes_h_
- #include "edttypes.h"
- #endif
-
- XP_BEGIN_PROTOS
-
- struct java_lang_Object;
-
- /*****************************************************************************
- * Layout Interface
- *****************************************************************************/
-
- /*
- * Create an edit buffer, ready to be pared into.
- */
- ED_Buffer* EDT_MakeEditBuffer(MWContext *pContext);
-
- /*
- * Destroy an edit buffer.
- */
- void EDT_DestroyEditBuffer(MWContext * pContext);
-
- /* CLM:
- * Front end can call this to prevent doing
- * bad stuff when we failed to load URL
- * and don't have a buffer
- */
- XP_Bool EDT_HaveEditBuffer(MWContext * pContext);
-
- /*
- * Call this to get a special string to feed the editor when you're
- * creating an empty document.
- * Returns an alias to a special empty document string.
- * (You don't own the storage, so don't free it.)
- */
-
- char* EDT_GetEmptyDocumentString(void);
-
- /*
- * Parse a tag into an edit buffer.
- */
- ED_Element* EDT_ParseTag(ED_Buffer* pEditBuffer, PA_Tag* pTag);
-
- /*
- * Called instead of LO_ProcessTag. This routine allows the Edit enginge to
- * build up an HTML tree. Inputs and outputs are the same as LO_ProcessTag.
- */
- intn EDT_ProcessTag(void *data_object, PA_Tag *tag, intn status);
-
- /*
- * Tells the edit engine to position the insert point.
- */
- void EDT_SetInsertPoint( ED_Buffer *pBuffer, ED_Element* pElement, int iPosition, XP_Bool bStickyAfter );
-
- /*
- * Assocates the layout element with a given edit element. Called from by the
- * layout engine onces a layout element has been has been created.
- */
- void EDT_SetLayoutElement( ED_Element* pElement, intn iEditOffset, intn lo_type,
- LO_Element *pLayoutElement );
-
- /* Breaks the association between a layout element and a given edit element.
- * Called by the layout engine when a layout element is being destroyed.
- */
-
- void EDT_ResetLayoutElement( ED_Element* pElement, intn iEditOffset,
- LO_Element* pLayoutElement);
-
- /*
- * Delete all tags in the chain beginning with pTag.
- */
- void EDT_DeleteTagChain( PA_Tag* pTag );
-
- /*
- * Retrieve the next tag element from the editor. Returns NULL when there are
- * no more tags.
- */
- PA_Tag* EDT_TagCursorGetNext( ED_TagCursor* pCursor );
-
- /*
- * enclosing html for a given point in the document
- */
- PA_Tag* EDT_TagCursorGetNextState( ED_TagCursor* pCursor );
-
- /*
- * returns true if at the beginning of a paragraph or break.
- */
- XP_Bool EDT_TagCursorAtBreak( ED_TagCursor *pCursor, XP_Bool* pEndTag );
-
- /*
- * Get the current line number for the cursor
- */
- int32 EDT_TagCursorCurrentLine( ED_TagCursor* pCursor );
-
- /*
- * Get the current line number for the cursor
- */
- XP_Bool EDT_TagCursorClearRelayoutState( ED_TagCursor* pCursor );
-
-
- /*
- * Clone a cursor. Used to save position state.
- */
- ED_TagCursor* EDT_TagCursorClone( ED_TagCursor *pCursor );
-
- /*
- * Delete a cloned (or otherwise) cursor
- */
- void EDT_TagCursorDelete( ED_TagCursor* pCursor );
-
- /*
- * called when LO finishes (only the first time)
- */
- void EDT_FinishedLayout( MWContext *pContext );
-
- /*
- * Call back from image library giving the height and width of an image.
- */
- void EDT_SetImageInfo(MWContext *context, int32 ele_id, int32 width, int32 height);
-
- /*
- * Test to see if the editor is currently loading a file.
- */
- XP_Bool EDT_IsBlocked( MWContext *pContext );
-
- /*****************************************************************************
- * FE Interface
- *****************************************************************************/
-
- void EDT_SaveToBuffer ( MWContext * pContext, XP_HUGE_CHAR_PTR* pBuffer );
-
- void EDT_ReadFromBuffer ( MWContext * pContext, XP_HUGE_CHAR_PTR pBuffer );
-
- /*
- * Returns ED_ERROR_NONE if files saved OK, else returns error code.
- */
- ED_FileError EDT_SaveFile( MWContext * pContext,
- char * pSourceURL,
- char * pDestURL,
- XP_Bool bSaveAs,
- XP_Bool bKeepImagesWithDoc,
- XP_Bool bAutoAdjustLinks );
- /*
- * Returns ED_ERROR_NONE if files saved OK, else returns error code.
- */
- ED_FileError EDT_PublishFile( MWContext * pContext,
- ED_SaveFinishedOption finishedOpt,
- char * pSourceURL,
- char **pIncludedFiles, /* list of files to publish */
- char * pDestURL, /* Should be http:// or ftp:// */
- XP_Bool bKeepImagesWithDoc,
- XP_Bool bAutoAdjustLinks,
- XP_Bool bSavePassword); /* Tied to user checkbox in dialog */
-
- /*
- * Check the URL that will be passed into EDT_PublishFile.
- * TRUE if pURL should be used, or FALSE if the user should
- * make another choice.
- */
- XP_Bool EDT_CheckPublishURL( MWContext * pContext, char * pURL);
-
- /*
- * Save editor and images to an abstract file system.
- * Used by libmsg to write MHTML mail messages.
- */
- ED_FileError EDT_SaveFileTo( MWContext * pContext,
- ED_SaveFinishedOption finishedOpt,
- char * pSourceURL,
- void *tapeFS, /* Really a (ITapeFileSystem *) */
- XP_Bool bKeepImagesWithDoc,
- XP_Bool bAutoAdjustLinks );
-
- /*
- * Create a temporary file with the contents of the edit buffer, images and links
- * will be adjusted to work from the new location. Call doneFn with the file:// URL
- * of the temp file or NULL if failure. doneFn may be called before EDT_SaveToTempFile
- * returns. Use EDT_RemoveTempFile when file is no longer needed.
- */
- typedef void (*EDT_SaveToTempCallbackFn)(char *pFileURL,void *hook);
- void EDT_SaveToTempFile(MWContext *pContext,EDT_SaveToTempCallbackFn doneFn, void *hook);
- void EDT_RemoveTempFile(MWContext *pContext,char *pFileURL);
-
- #if defined(MOZ_MAIL_COMPOSE) || defined(MOZ_MAIL_NEWS)
- /*
- * Like MSG_MailDocument, but will deal properly with dirty or unsaved documents.
- * I.e. May save document to a temp file before attaching it to the new mail
- * message.
- */
- void EDT_MailDocument(MWContext *pContext);
- #endif
-
- /*
- * Returns the temporary directory (in xpURL format) for all files associated with this document.
- * Contents of this directory will be deleted when this edit buffer is destroyed.
- */
- char *EDT_GetDocTempDir(MWContext *pContext);
-
- /*
- * Return a unique filename (in xpURL format) for a potential file in the documents temp directory. Does not actually
- * create the file.
- * If prefix is non-NULL, it will give the first few characters of the temp filename.
- * Only the first three characters of prefix will be used.
- * If extension is non-NULL, it will be the file extension, keep it <= 3 characters for windows,
- * default is "TMP".
- */
- char *EDT_CreateDocTempFilename(MWContext *pContext,char *prefix,char *extension);
-
-
- /*
- * cancel a load in progress
- */
- void EDT_SaveCancel( MWContext *pContext );
-
- /*
- * Enable and disable autosave. A value of zero disables autosave.
- * AutoSave doesn't start until the document has a file.
- */
-
- void EDT_SetAutoSavePeriod(MWContext *pContext, int32 minutes);
- int32 EDT_GetAutoSavePeriod(MWContext *pContext);
-
- void EDT_DisplaySource( MWContext *pContext );
-
- /*
- * Edit Navagation prototypes
- */
- void EDT_PreviousChar( MWContext *context, XP_Bool bSelect );
- void EDT_NextChar( MWContext *context, XP_Bool bSelect );
- void EDT_BeginOfLine( MWContext *context, XP_Bool bSelect );
- void EDT_EndOfLine( MWContext *context, XP_Bool bSelect );
- void EDT_BeginOfDocument( MWContext *context, XP_Bool bSelect );
- void EDT_EndOfDocument( MWContext *context, XP_Bool bSelect );
- void EDT_Up( MWContext *context, XP_Bool bSelect );
- void EDT_Down( MWContext *context, XP_Bool bSelect );
- void EDT_PageUp( MWContext *context, XP_Bool bSelect );
- void EDT_PageDown( MWContext *context, XP_Bool bSelect );
- void EDT_PreviousWord( MWContext *context, XP_Bool bSelect );
- void EDT_NextWord( MWContext *context, XP_Bool bSelect );
- void EDT_NextTableCell( MWContext *context, XP_Bool bSelect );
- void EDT_PreviousTableCell( MWContext *context, XP_Bool bSelect );
-
- void EDT_WindowScrolled( MWContext *context );
-
- /*
- * Edit functional stuff...
- */
- EDT_ClipboardResult EDT_DeletePreviousChar( MWContext *context );
- EDT_ClipboardResult EDT_DeleteChar( MWContext *context );
- void EDT_PositionCaret( MWContext *context, int32 x, int32 y );
-
- /* Delete current selection and move caret to the insert point
- * closest to supplied doc coordinates.
- * Use when moving dragged data within the same window.
- */
- void EDT_DeleteSelectionAndPositionCaret( MWContext *pContext, int32 x, int32 y );
-
- /* Converts ("snaps") input X, Y (doc coordinates) to X, Y needed for drop caret
- * and calls appropriate front-end FE_Display<Text|Generic|Image>Caret to use show where
- * a drop would occur. It does NOT change current selection or internal caret position
- * Also handles dragging table/cells and will return FALSE if mouse is
- * not over a good drop location within a target table
- * (Always returns TRUE if not dragging table or cells since
- * cursor is always snapped to a valid position)
- * Call during mouse moving over a window where drop can occur
- */
- XP_Bool EDT_PositionDropCaret( MWContext *pContext, int32 x, int32 y );
-
- /* Call to initialize global static data used for pasting table cells into existing table
- * Returns TRUE if we are dragging table or table cells
- */
- XP_Bool EDT_StartDragTable( MWContext *pContext, int32 x, int32 y );
-
- /* Clear the XP data for dragging tables and cells */
- void EDT_StopDragTable( MWContext *pContext );
- XP_Bool EDT_IsDraggingTable( MWContext *pContext );
-
- void EDT_DoubleClick( MWContext *context, int32 x, int32 y );
- void EDT_SelectObject( MWContext *context, int32 x, int32 y);
- EDT_ClipboardResult EDT_ReturnKey( MWContext *context );
-
- /* Do what the TAB key should do
- * Moves from cell to cell in Tables (in direction given by bForward)
- * unless 3rd param is TRUE, which forces regular tab insert in table text
- */
- EDT_ClipboardResult EDT_TabKey( MWContext *context, XP_Bool bForward, XP_Bool bForceTabChar );
-
- void EDT_Indent( MWContext *context );
- void EDT_Outdent( MWContext *context );
- void EDT_RemoveList( MWContext *context );
-
- void EDT_Reload( MWContext *pContext );
-
- /*
- * Kludge, supports only the windows front end now.
- */
- EDT_ClipboardResult EDT_KeyDown( MWContext *context, uint16 nChar, uint16 b, uint16 c );
-
- /*
- * Insert a nonbreaking space character. Usually wired to shift spacebar
- */
- EDT_ClipboardResult EDT_InsertNonbreakingSpace( MWContext *context );
-
- /*
- * Undo/Redo. Usage:
- * To tell if there's a command to undo:
- * if ( EDT_GetUndoCommandID(context, 0 ) != CEDITCOMMAND_ID_NULL )
- *
- * To undo the most recent command:
- * EDT_Undo( context );
- *
- * (Similarly for redo.)
- *
- * Use the CommandID to look up a string for saying "Undo <type of command>..."
- * on the menu.
- */
-
- #define CEDITCOMMAND_ID_NULL 0
- #define CEDITCOMMAND_ID_GENERICCOMMAND 1
-
- void EDT_Undo( MWContext *pContext );
- void EDT_Redo( MWContext *pContext );
- intn EDT_GetUndoCommandID( MWContext *pContext, intn index );
- intn EDT_GetRedoCommandID( MWContext *pContext, intn index );
-
- /* Lets the front end specify the command history limit. This is used to limit the total of commands on
- * both the undo and the redo lists.
- */
-
- intn EDT_GetCommandHistoryLimit(void);
- void EDT_SetCommandHistoryLimit(intn limit); /* Must be greater than or equal to zero. Ignored if less than zero. */
-
- /* Call from dialogs to batch changes for undo. To use, call EDT_BeginBatchChanges,
- * make the changes you want, and then call EDT_EndBatchChanges. It's OK to
- * not make any changes -- in that case the undo history won't be affected.
- */
-
- void EDT_BeginBatchChanges(MWContext *pContext);
- void EDT_EndBatchChanges(MWContext *pContext);
-
- /*
- * Used to control display of paragraph marks.
- */
-
- void EDT_SetDisplayParagraphMarks(MWContext *pContext, XP_Bool display);
- XP_Bool EDT_GetDisplayParagraphMarks(MWContext *pContext);
-
- /*
- * Used to control display of tables in either wysiwyg or flat mode.
- */
-
- void EDT_SetDisplayTables(MWContext *pContext, XP_Bool display);
- XP_Bool EDT_GetDisplayTables(MWContext *pContext);
-
- /*
- * need to figure out how to handle tags and parameters.
- */
- void EDT_MorphContainer( MWContext *pContext, TagType t );
- TagType EDT_GetParagraphFormatting( MWContext *pContext );
- ED_Alignment EDT_GetParagraphAlign( MWContext *pContext);
- void EDT_SetParagraphAlign( MWContext* pContext, ED_Alignment eAlign );
-
- /* Set Table alignment if caret is inside table or table is selected
- * EDT_SetParagraphAlign will also to table if it is selected,
- * so use this to force table alignment even if its not selected
- */
- void EDT_SetTableAlign( MWContext* pContext, ED_Alignment eAlign );
-
-
- /*
- * Find out what's under the cursor
- */
- ED_ElementType EDT_GetCurrentElementType( MWContext *pContext );
-
- /*
- * Character Formatting (DEPRECIATED)
- * Routines should only be called when EDT_GetCurrentElementType() returns
- * ED_ELEMENT_TEXT.
- */
- ED_TextFormat EDT_GetCharacterFormatting( MWContext *pContext );
- void EDT_FormatCharacter( MWContext *pContext, ED_TextFormat p);
- /* These use the older "relative" scale of 1 to 7 */
- int EDT_GetFontSize( MWContext *pContext );
- void EDT_SetFontSize( MWContext *pContext, int );
-
- /* These use the new absolute point size*/
- void EDT_SetFontPointSize( MWContext *pContext, int iPoints );
- int EDT_GetFontPointSize( MWContext *pContext );
-
- /* List of Font faces - concatenated strings ending in '\0\0'
- * Note: First 2 strings are for Default Proportional and Default Fixed width,
- * the rest are the "NS Fonts" used to set the FONT FACE tag
- * Use these to construct a list of fonts for the user
- * We cache 1 static list of faces (implemented in EDTUTIL.CPP)
- */
- char *EDT_GetFontFaces(void);
-
- /* Similar to above, but gets a list of the Tag strings
- * (what is written in FONT FACE tag that corresponds to a NS Font face name)
- */
- char *EDT_GetFontFaceTags(void);
-
- /* Set the Font Face - encapsulates complexity of EDT_CharacterData mangling
- * If pCharacterData is suppled, then it is used to set fontface data
- * (Note: pCharacterData is not freed).
- * If pCharacterData is NULL, then data is obtained from current selection or at caret
- * If pMWContext is supplied, then EDT_SetCharacterData() will be called
- * with either the supplied struct or the internally-obtained data
- *
- * Supply either iFontIndex or pFontFace:
- * iFontIndex is index within the font list returned by EDT_GetFontFaces(),
- * (we will lookup the appropriate string to use for Font Face Tag)
- * If pFontFace is supplied, use it exactly as is (iFontIndex is ignored)
- */
- void EDT_SetFontFace(MWContext * pMWContext, EDT_CharacterData * pCharacterData,
- int iFontIndex, char * pFontFace );
-
- /* Get the index into the FontFace list for the current caret location or selection
- * Returns 0 (ED_FONT_VARIABLE), 1 (ED_FONT_FIXED), or 2 (ED_FONT_LOCAL)
- */
- int EDT_GetFontFaceIndex(MWContext *pContext);
-
- /* Get the current font face for current selection or insert point
- * If the current font matches an XP font 'group',
- * this is the platform-specific font matching the group,
- * else it is the font face string from EDT_CharacterData or
- * the appropriate XP string for the Variable and Fixed Width states.
- * Use this to search your local font list in menu or listbox.
- *
- An empty string is returned when selection is mixed (> 1 face in selection)
- * DO NOT FREE RETURN VALUE (it is a static string), but use it quickly,
- * because it will change as caret moves throught text
- */
- char * EDT_GetFontFace(MWContext *pContext);
-
- /* Find the pFontFace within each set of comma-delimeted FontFace groups
- * Return pointer to entire group if pFontFace matches any single font in the group
- * If not found, return pFontFace, thus the
- * result can be passed directly as the last param of EDT_SetFontFace()
- * Comparing pFontFace to result pointer can be used as test that XP font was found
- * DO NOT free the resulting string pointer
- */
- char * EDT_TranslateToXPFontFace( char * pFontFace );
-
- XP_Bool EDT_GetFontColor( MWContext *pContext, LO_Color *pDestColor );
- void EDT_SetFontColor( MWContext *pContext, LO_Color *pColor);
-
- /* Parse a font colors string in the format: "r,g,b,ColorName" where colors for r,g,b
- * are decimal strings in range 0-255
- * Returns pointer (within supplied string) to the Color Name
- * and converts color strings into integers in supplied the LO_Color struct
- */
- char * EDT_ParseColorString(LO_Color * pLoColor, char * pColorString);
-
- /* Get the Netscape solid color. This replaces EDT_GetFontColorFromList */
- void EDT_GetNSColor(intn iIndex, LO_Color * pLoColor);
-
- /* Scan our list of colors and return index of matching color
- * or -1 if no match found. We NEVER return 0 (default color)
- */
- int EDT_GetMatchingFontColorIndex(LO_Color * pLOColor);
-
- /*
- * Get and set character formatting.
- */
-
- /*
- * EDT_GetCharacterData
- * returns the current character formatting for the current selection
- * or insert point. Should only be called when GetCurrentElementType is
- * ED_ELEMENT_TEXT or ED_ELEMENT_SELECTION.
- *
- * returns and EDT_CharacterData structure. Caller is responsible for
- * destroying the structure by calling EDT_FreeCharacterData().
- *
- * CharacterData contain on return
- * pRet->mask // the that were deterministic (all in insertpoint case
- * // and those that were consistant across the selection
- * pRet->values // if in the mask, 0 means clear across the selection
- * // 1 means set across the selection
- */
- EDT_CharacterData* EDT_GetCharacterData( MWContext *pContext );
-
- /*
- * EDT_SetCharacterData
- * sets the character charistics for the current insert point.
- *
- * the mask contains the bits to set
- * values contains the values to set them to
- *
- * for example if you wanted to just change the font size to 10 and leave
- * the rest alone:
- *
- * pData = EDT_NewCharacterData();
- * pData->mask = TF_FONT_SIZE
- * pData->value = TF_FONT_SIZE
- * pData->iSize = 5;
- * EDT_SetCharacterData( context ,pData );
- * EDT_FreeCharacterData(pData);
- *
- */
- void EDT_SetCharacterData( MWContext *pContext, EDT_CharacterData *pData );
- EDT_CharacterData* EDT_NewCharacterData(void);
- void EDT_FreeCharacterData( EDT_CharacterData *pData );
-
- /*
- * Set character data for a given offset in the buffer.
- */
- void EDT_SetCharacterDataAtOffset( MWContext *pContext, EDT_CharacterData *pData,
- ED_BufferOffset iBufOffset, int32 iLen );
-
- /*
- * Returns colors of all the different fonts.
- * Must call XP_FREE( pDest ) after use.
- */
- int EDT_GetExtraColors( MWContext *pContext, LO_Color **pDest );
-
- /*
- * Selection
- */
- void EDT_StartSelection(MWContext *context, int32 x, int32 y);
- void EDT_ExtendSelection(MWContext *context, int32 x, int32 y);
- void EDT_EndSelection(MWContext *context, int32 x, int32 y); /* cm */
- void EDT_ClearSelection(MWContext *context);
-
- void EDT_SelectAll(MWContext *context);
- void EDT_SelectTable(MWContext *context);
- void EDT_SelectTableCell(MWContext *context);
-
- XP_Block EDT_GetSelectionText(MWContext *context);
- XP_Bool EDT_IsSelected( MWContext *pContext );
- XP_Bool EDT_SelectionContainsLink( MWContext *pContext );
-
- /* Format all text contents into tab-delimited cells,
- ** with CR at end of each row.
- ** Use result to paste into Excell spreadsheets
- */
- char *EDT_GetTabDelimitedTextFromSelectedCells( MWContext *pContext );
-
- /* Convert Selected text into a table (put each paragraph in separate cell)
- * Number of rows is automatic - creates as many as needed
- */
- void EDT_ConvertTextToTable(MWContext *pMWContext, intn iColumns);
-
- /* Convert the table into text - unravel existing paragraphs in cells */
- void EDT_ConvertTableToText(MWContext *pMWContext);
-
- /* Save the character and paragraph style of selection or at caret */
- void EDT_CopyStyle(MWContext *pMWContext);
-
- /* This is TRUE after EDT_CopyStyle is called, until the next left mouse up call
- * or user cancels with ESC key, or ??? (any suggestions?)
- */
- XP_Bool EDT_CanPasteStyle(MWContext *pMWContext);
-
- /* Apply the style to selection or at caret. Use bApplyStyle = FALSE to cancel */
- void EDT_PasteStyle(MWContext *pMWContext, XP_Bool bApplyStyle);
-
-
- XP_Bool EDT_DirtyFlag( MWContext *pContext );
- void EDT_SetDirtyFlag( MWContext *pContext, XP_Bool bValue );
-
- /*
- * Clipboard stuff
- */
-
- #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
-
- EDT_ClipboardResult EDT_InsertText( MWContext *pContext, char *pText );
- EDT_ClipboardResult EDT_PasteText( MWContext *pContext, char *pText );
- EDT_ClipboardResult EDT_PasteHTML( MWContext *pContext, char *pHtml );
-
- /** API for pasting quoted text into the editor.
- * Call EDT_PasteQuoteBegin, then call EDT_PasteQuoteINTL zero or more times,
- * then call EDT_PasteQuoteEnd.
- * If EDT_PasteQuoteBegin returns EDT_COP_OK then you must eventually call EDT_PasteQuoteEnd.
- * If EDT_PasteQuoteBegin returns an error condition, then you must not call EDT_PasteQuoteEnd.
- *
- * The "quote" is something of a misnomer. The text isn't quoted. If you want it to be
- * quoted, then you have to quote it yourself, before calling EDT_PasteQuoteINTL.
- */
-
- EDT_ClipboardResult EDT_PasteQuoteBegin( MWContext *pContext, XP_Bool isHTML );
-
- /* Pass in the csid of the pasted text. The editor will transcode
- * the pasted text to the document's wincsid if nescessary. */
- EDT_ClipboardResult EDT_PasteQuoteINTL( MWContext *pContext, char *pText, int16 csid );
- /* The non-INTL version is only around for backwards compatability. */
- EDT_ClipboardResult EDT_PasteQuote( MWContext *pContext, char *pText );
-
- EDT_ClipboardResult EDT_PasteQuoteEnd(MWContext *pContext);
-
- /*
- * Can paste a singe or multiple HREFs. Pointer to array of HREF pointers and
- * title pointers.
- * Title pointers can be NULL
- */
- EDT_ClipboardResult EDT_PasteHREF( MWContext *pContext, char **ppHref, char **ppTitle, int iCount);
-
- /* Depreciated */
- void EDT_DropHREF( MWContext *pContext, char *pHref, char* pTitle, int32 x,
- int32 y );
-
- /* Depreciated */
- XP_Bool EDT_CanDropHREF( MWContext *pContext, int32 x, int32 y );
-
-
- /*
- * The text buffer should also be huge, it isn't
- */
- EDT_ClipboardResult EDT_CopySelection( MWContext *pContext, char** ppText,
- int32* pTextLen, XP_HUGE_CHAR_PTR* ppHtml, int32* pHtmlLen);
-
- EDT_ClipboardResult EDT_CutSelection( MWContext *pContext,
- char** ppText, int32* pTextLen,
- XP_HUGE_CHAR_PTR* ppHtml, int32* pHtmlLen);
-
- /*
- * Use to enable or disable the UI for cut/copy/paste.
- * If bStrictChecking is true, will check for all conditions,
- * Otherwise, will just check if the selection is empty.
- */
-
- EDT_ClipboardResult EDT_CanCut(MWContext *pContext, XP_Bool bStrictChecking);
- EDT_ClipboardResult EDT_CanCopy(MWContext *pContext, XP_Bool bStrictChecking);
- EDT_ClipboardResult EDT_CanPaste(MWContext *pContext, XP_Bool bStrictChecking);
-
- /*
- * returns true if we can set an HREF
- */
- XP_Bool EDT_CanSetHREF( MWContext *pContext );
-
- /*
- * Get the current link under the cursor or inside the current selection.
- */
- char *EDT_GetHREF( MWContext *pContext );
-
- /*
- * Get the anchor text of the current link under the cursor
- */
- char *EDT_GetHREFText( MWContext *pContext );
-
- /*
- * Use HREF structure
- */
- EDT_HREFData *EDT_GetHREFData( MWContext *pContext );
- void EDT_SetHREFData( MWContext *pContext, EDT_HREFData *pData );
- EDT_HREFData *EDT_NewHREFData( void );
- EDT_HREFData *EDT_DupHREFData( EDT_HREFData *pData );
- void EDT_FreeHREFData( EDT_HREFData *pData );
-
- /*
- * This routine can only be called when 'EDT_CanSetHREF()'
- */
- void EDT_SetHREF(MWContext *pContext, char *pHREF );
-
- /*
- * Refresh the entire document.
- */
- void EDT_RefreshLayout( MWContext *pContext );
-
- /*
- * Getting and setting properties of images. After Getting an image's properties
- * the EDT_ImageData must be freed with EDT_FreeImageData(). Routines should
- * only be called when EDT_GetCurrentElementType() returns ED_ELEMENT_IMAGE.
- */
- EDT_ImageData *EDT_GetImageData( MWContext *pContext );
- void EDT_SetImageData( MWContext *pContext, EDT_ImageData *pData, XP_Bool bKeepImagesWithDoc );
- EDT_ImageData *EDT_NewImageData(void);
- void EDT_FreeImageData( EDT_ImageData *pData );
- void EDT_InsertImage( MWContext *pContext, EDT_ImageData *pData, XP_Bool bKeepImageWithdoc );
- /* Value to display if EDT_ImageData::iBorder == -1. Different depending on whether the
- image has a link or not. */
- int32 EDT_GetDefaultBorderWidth( MWContext *pContext );
-
- EDT_HorizRuleData *EDT_GetHorizRuleData( MWContext *pContext );
- void EDT_SetHorizRuleData( MWContext *pContext, EDT_HorizRuleData *pData );
- EDT_HorizRuleData *EDT_NewHorizRuleData( void );
- void EDT_FreeHorizRuleData( EDT_HorizRuleData *pData );
- void EDT_InsertHorizRule( MWContext *pContext, EDT_HorizRuleData *pData );
-
- void EDT_ToggleList( MWContext *pContext, intn iTagType); /* All-in-one-call to create numbered or unnumbered lists. */
- XP_Bool EDT_GetToggleListState( MWContext *pContext, intn iTagType);
-
- EDT_ListData *EDT_GetListData( MWContext *pContext );
- void EDT_SetListData( MWContext *pContext, EDT_ListData *pData );
- void EDT_FreeListData( EDT_ListData *pData );
-
- void EDT_InsertBreak( MWContext *pContext, ED_BreakType eBreak );
-
- XP_Bool EDT_IsInsertPointInTable(MWContext *pContext );
- XP_Bool EDT_IsInsertPointInNestedTable(MWContext *pContext );
- EDT_TableData* EDT_GetTableData( MWContext *pContext );
-
- /* If bCellParent = TRUE:
- * Get width and height table enclosing current cell,
- * (minus border and cell spacing)
- * If bCell = FALSE:
- * Get the width/height of current page or
- * size the parent cell if insert point is in a nested table,
- */
- void EDT_GetTableParentSize( MWContext *pContext, XP_Bool bCell, int32 *pWidth, int32 *pHeight );
- void EDT_SetTableData( MWContext *pContext, EDT_TableData *pData );
- EDT_TableData* EDT_NewTableData( void );
- void EDT_FreeTableData( EDT_TableData *pData );
- void EDT_InsertTable( MWContext *pContext, EDT_TableData *pData);
- void EDT_DeleteTable( MWContext *pContext);
-
- XP_Bool EDT_IsInsertPointInTableCaption(MWContext *pContext );
- EDT_TableCaptionData* EDT_GetTableCaptionData( MWContext *pContext );
- void EDT_SetTableCaptionData( MWContext *pContext, EDT_TableCaptionData *pData );
- EDT_TableCaptionData* EDT_NewTableCaptionData( void );
- void EDT_FreeTableCaptionData( EDT_TableCaptionData *pData );
- void EDT_InsertTableCaption( MWContext *pContext, EDT_TableCaptionData *pData);
- void EDT_DeleteTableCaption( MWContext *pContext);
-
- XP_Bool EDT_IsInsertPointInTableRow(MWContext *pContext );
- EDT_TableRowData* EDT_GetTableRowData( MWContext *pContext );
- void EDT_SetTableRowData( MWContext *pContext, EDT_TableRowData *pData );
- EDT_TableRowData* EDT_NewTableRowData(void);
- void EDT_FreeTableRowData( EDT_TableRowData *pData );
- void EDT_InsertTableRows( MWContext *pContext, EDT_TableRowData *pData, XP_Bool bAfterCurrentRow, intn number);
- void EDT_DeleteTableRows( MWContext *pContext, intn number);
-
- XP_Bool EDT_IsInsertPointInTableCell(MWContext *pContext );
- EDT_TableCellData* EDT_GetTableCellData( MWContext *pContext );
-
- /* Change the table selection and/or move to previous/next cell, row, or column
- * depending on iMoveType.
- * To just change the selection, set the iHitType to new type
- * (ED_HIT_SEL_ROW, ED_HIT_SEL_COL, or ED_HIT_SEL_CELL) and set iMoveType to ED_MOVE_NONE
- * To change to another row, col, or cell, set iHitType to same as that in pData or ED_HIT_NONE,
- * and set iMoveType to ED_MOVE_PREV or ED_MOVE_NEXT
- * If pData is not NULL, it is filled with data for the selected cells
- * This will wrap around appropriately when end of selection or table is reached
- */
- void EDT_ChangeTableSelection(MWContext *pContext, ED_HitType iHitType, ED_MoveSelType iMoveType, EDT_TableCellData *pData);
-
- void EDT_SetTableCellData( MWContext *pContext, EDT_TableCellData *pData );
- EDT_TableCellData* EDT_NewTableCellData( void );
-
- void EDT_FreeTableCellData( EDT_TableCellData *pData );
- void EDT_InsertTableCells( MWContext *pContext, EDT_TableCellData *pData, XP_Bool bAfterCurrentCell, intn number);
- void EDT_DeleteTableCells( MWContext *pContext, intn number);
- void EDT_InsertTableColumns( MWContext *pContext, EDT_TableCellData *pData, XP_Bool bAfterCurrentCell, intn number);
- void EDT_DeleteTableColumns( MWContext *pContext, intn number);
-
- XP_Bool EDT_IsInsertPointInLayer(MWContext *pContext );
- EDT_LayerData* EDT_GetLayerData( MWContext *pContext );
- void EDT_SetLayerData( MWContext *pContext, EDT_LayerData *pData );
- EDT_LayerData* EDT_NewLayerData(void);
- void EDT_FreeLayerData( EDT_LayerData *pData );
- void EDT_InsertLayer( MWContext *pContext, EDT_LayerData *pData);
- void EDT_DeleteLayer( MWContext *pContext);
-
- EDT_PageData *EDT_GetPageData( MWContext *pContext );
- EDT_PageData *EDT_NewPageData(void);
- void EDT_SetPageData( MWContext *pContext, EDT_PageData *pData );
- void EDT_FreePageData( EDT_PageData *pData );
-
- /* Use to enable/disable Merge Cells feature.
- * Selected cells can be merged only if in a continuous set
- * within the same row or column.
- * A single cell can be merged with cell to the right
- * Returns 0 if neither conditions holds
- */
- ED_MergeType EDT_GetMergeTableCellsType( MWContext *pContext );
-
- /* Use to enable/disable Split Cell feature.
- * Current cell (containing caret) can be split
- * only if it has COLSPAN or ROWSPAN
- */
- XP_Bool EDT_CanSplitTableCell( MWContext *pContext );
-
- /* Set appropriate COLSPAN or ROWSPAN and move all
- * cell contents into first cell of set
- */
- void EDT_MergeTableCells( MWContext *pContext );
-
- /* Separate paragraphs into sepaparate cells,
- * removing COLSPAN or ROWSPAN
- */
- void EDT_SplitTableCell( MWContext *pContext );
-
- /* Take a single, selected image and turn it into the
- * background image of page, deleting it from the page
- */
- void EDT_SetImageAsBackground( MWContext *pContext );
-
- /* Get and Set MetaData.
- * Get the count of meta data objects.
- * enumerate through them (0 based).
- * If the name changes, a new meta data is created or may overwrite a different
- * name value pair.
- */
- intn EDT_MetaDataCount( MWContext *pContext );
- EDT_MetaData* EDT_GetMetaData( MWContext *pContext, intn n );
- EDT_MetaData* EDT_NewMetaData( void );
- void EDT_SetMetaData( MWContext *pContext, EDT_MetaData *pMetaData );
- void EDT_DeleteMetaData( MWContext *pContext, EDT_MetaData *pMetaData );
- void EDT_FreeMetaData( EDT_MetaData *pMetaData );
-
- /*******************************************************
- * CLM: JAVA, PLUG-IN interface
- */
-
- EDT_JavaData *EDT_GetJavaData( MWContext *pContext );
- EDT_JavaData *EDT_NewJavaData(void);
- void EDT_SetJavaData( MWContext *pContext, EDT_JavaData *pData );
- void EDT_FreeJavaData( EDT_JavaData *pData );
-
- EDT_PlugInData *EDT_GetPlugInData( MWContext *pContext );
- EDT_PlugInData *EDT_NewPlugInData(void);
- void EDT_SetPlugInData( MWContext *pContext, EDT_PlugInData *pData );
- void EDT_FreePlugInData( EDT_PlugInData *pData );
-
- /* Parameters: NAME=VALUE pairs used by both Java and PlugIns */
- EDT_ParamData* EDT_GetParamData( MWContext *pContext, intn n );
- EDT_ParamData* EDT_NewParamData(void);
- void EDT_SetParamData( MWContext *pContext, EDT_ParamData *pParamData );
- void EDT_DeleteParamData( MWContext *pContext, EDT_ParamData *pParamData );
- void EDT_FreeParamData( EDT_ParamData *pParamData );
-
- /*
- * Get and Set Named Anchors (Targets)
- */
- char *EDT_GetTargetData( MWContext *pContext );
- void EDT_SetTargetData( MWContext *pContext, char *pTargetName );
- void EDT_InsertTarget( MWContext *pContext, char* pTargetName );
- char *EDT_GetAllDocumentTargets( MWContext *pContext );
-
- /*CLM: Check current file-update time and
- * return TRUE if it is different
- * Save the newly-found time in edit buffer class
- */
- XP_Bool EDT_IsFileModified( MWContext* pContext );
-
- /* CLM: Read a file and build a targets list just like the current doc list */
- char *EDT_GetAllDocumentTargetsInFile( MWContext *pContext, char *pHref);
-
- /*
- * Returns a list of all local documents associated with
- * the current buffer.
- */
- char* EDT_GetAllDocumentFiles( MWContext *pContext );
- /*
- * Also sets ppSelected to be a list of whether each local document should be
- * saved/published/sent by default. Must pass in the preference for whether images
- * are sent along with the document.
- */
- char* EDT_GetAllDocumentFilesSelected( MWContext *pContext, XP_Bool **ppSelected,
- XP_Bool bKeepImagesWithDoc );
-
- /*
- * Get and Set UnknownTags
- */
- char *EDT_GetUnknownTagData( MWContext *pContext );
- void EDT_SetUnknownTagData( MWContext *pContext, char *pUnknownTagData );
- void EDT_InsertUnknownTag( MWContext *pContext, char* pUnknownTagData );
- /* CLM: Validate: check for matching quotes, "<" and ">" if bNoBrackets is FALSE
- * Skip (and strip out) <> if bNoBrackets is TRUE,
- * used for Attributes-only, such as MOCHA string in HREF
- */
- ED_TagValidateResult EDT_ValidateTag( char *pData, XP_Bool bNoBrackets );
-
- /*
- * Called by the front end when the user presses the cancel button on the
- * Modal dialog
- */
- void EDT_ImageLoadCancel( MWContext *pContext );
-
- /*****************************************************************************
- * Property Dialogs
- *****************************************************************************/
-
- #if 0
- /*
- * String allocation functions for parameters passed to EDT_Property functions
- */
- char *EDT_StringDup(char *pDupString);
- void EDT_StringFree(char* pString);
-
-
- void EDT_GetPageProperties( ED_PageProperties *pProps );
- void EDT_SetPageProperties( ED_PageProperties *pProps );
-
- void EDT_GetParagraphProperties( ED_ParagraphProperties *pProps );
- void EDT_SetParagraphProperties( ED_ParagraphProperties *pProps );
-
- #endif
-
- /*****************************************************************************
- * Utility stuff.
- *****************************************************************************/
-
- /* for debug purposes. */
- char *EDT_TagString(int32 tagType);
-
- #ifdef DEBUG
- void EDT_VerifyLayoutElement( MWContext *pContext, LO_Element *pLoElement,
- XP_Bool bPrint );
- #endif
-
- /* Cross platform macros */
- /* we may changed how we define editor status */
- #define EDT_IS_NEW_DOCUMENT(context) (context != NULL && context->is_editor && context->is_new_document)
- #define EDT_NEW_DOCUMENT(context,b) if(context != NULL) context->is_new_document=(context->is_editor&&b)
-
- /* Helper to gray UI items not allowed when inside Java Script
- * Note that the return value is TRUE if mixed selection,
- * allowing the non-script text to be changed.
- * Current Font Size, Color, and Character attributes will suppress
- * setting other attributes, so it is OK to call these when mixed
- */
- XP_Bool EDT_IsJavaScript(MWContext *pContext);
-
- /* Helper to use for enabling Character properties
- * (Bold, Italic, etc., but DONT use for clearing (TF_NONE)
- * or setting Java Script (Server or Client)
- * Tests for:
- * 1. Good edit buffer and not blocked because of some action,
- * 2. Caret or selection is NOT entirely within Java Script,
- * 3. Caret or selection has some text or is mixed selection
- * (thus FALSE if single non-text object is selected)
- */
- XP_Bool EDT_CanSetCharacterAttribute(MWContext *pContext);
-
- /* Replace the current selection with supplied text */
- /* if bReplaceAll is true then pTextToLookFor and the 3 subsequent Boolean need to be set */
- void EDT_ReplaceText(MWContext *pContext, char * pReplaceText, XP_Bool bReplaceAll,
- char *pTextToLookFor, XP_Bool bCaseless, XP_Bool bBackward, XP_Bool bDoWrap);
-
- #ifdef FIND_REPLACE
- /* Currently (12/3/97) not used */
- XP_Bool EDT_FindAndReplace(MWContext *pContext, EDT_FindAndReplaceData *pData );
-
- #endif
- /* Dynamic Object Sizing
- * Note:xVal and yVal for all functions are in Document coordinates
- * After calling EDT_StartSizing, either EDT_EndSizing or EDT_CancelSizing
- * must be called.
- */
-
- /* How close cursor must be to border to start sizing */
- #define ED_SIZING_BORDER 6
-
- /* Get the sizing, selection, or add row/column type define (0 if not at a hit region)
- * where xVal, yVal is Cursor position we are over
- * This ignores anything inside of tables or cells, so don't call it
- * if you want to size an image contained within a cell (use EDT_CanSizeObject instead)
- * ppElement is optional: If supplied, the relevant table or cell element is returned
- * (a cell ptr is returned for the row/col operations - use this to get col. or row members)
- * bModifierKeyPressed is applicable if selecting table (upper left corner)
- * or extending selection to multiple cells
- * If TRUE (Ctrl key is pressed in Windows), returns
- * ED_HIT_SEL_ALL_CELLS instead of ED_HIT_SEL_TABLE
- */
- ED_HitType EDT_GetTableHitRegion(MWContext *pContext, int32 xVal, int32 yVal,
- LO_Element **ppElement, XP_Bool bModifierKeyPressed);
-
- /* Wrapper for ease of use -- gets last-selected table object's hit type and element */
- ED_HitType EDT_GetSelectedTableElement(MWContext *pContext, LO_Element **ppElement);
-
- /* Select a Table, Row, Column, or Cell
- * iHitType is a define returned by EDT_GetTableHitRegion()
- * Returns TRUE if selection was done - it will fail if
- * missing pointers or iHitType doesn't match pLoElement type or
- * is not an allowable type for doing selection.
- * Selection rules:
- * Table: Any corner is OK (ED_HIT_SEL_TABLE, ED_HIT_SIZE_TABLE, ED_HIT_ADD_ROWS, or ED_HIT_ADD_COLS)
- * Column: Top of table above desired column (ED_HIT_SEL_COL)
- * Row: Left edge of table next to desired row (ED_HIT_SEL_ROW)
- * Cell: Left or top edge of cell, including upper right corner (ED_HIT_SEL_CELL)
- *
- * x and y values are used only when selecting rows or columns
- *
- * if pLoElement == NULL, we find it from current edit element
- * (use it this way to select items from a menu when caret is inside a table)
- *
- * If bAppendSelection is TRUE, new cells will be added to current selection
- * (ignored if selecting a table - all cell selection is cleared for that)
- *
- * If bExtendSelection is TRUE (Shift key is pressed),
- * select all cells withing smallest rect from first-selected to supplied cell
- */
- XP_Bool EDT_SelectTableElement(MWContext *pMWContext, int32 x, int32 y,
- LO_Element *pLoElement,
- ED_HitType iHitType,
- XP_Bool bModifierKeyPressed, XP_Bool bExtendSelection);
-
- /* Called on mouse-move message after selection was started
- * on a row, column, or cell element
- * Returns the hit type: ED_HIT_SEL_ROW, ED_HIT_SEL_COL, ED_HIT_SEL_CELL, or ED_HIT_NONE
- * reflecting what type of block we are extended,
- * or ED_HIT_NONE if mouse is outside of the table
- * Use this to set the type of cursor by the FEs
- */
- ED_HitType EDT_ExtendTableCellSelection(MWContext *pMWContext, int32 x, int32 y);
-
- /* Clear the all selected table or cells */
- void EDT_ClearTableAndCellSelection(MWContext *pMWContext);
-
- XP_Bool EDT_IsTableSelected(MWContext *pMWContext);
- int EDT_GetSelectedCellCount(MWContext *pMWContext);
-
- /* Clear any existing cells selected if current edit element is not inside selection
- * Call before poping up context menu inside table
- */
- void EDT_ClearCellSelectionIfNotInside(MWContext *pMWContext);
-
- /* Call just before bringing up the Table Properties dialog
- * Supply cell data struct so the iSelectionType and iSelectedCount are filled-in
- */
- void EDT_StartSpecialCellSelection(MWContext *pMWContext, EDT_TableCellData *pCellData);
- /* Call after closing the Table Properties dialog */
- void EDT_ClearSpecialCellSelection(MWContext *pMWContext);
-
- /* Called from lo_EndTable (laytable.c) to build list of tables being redrawn */
- void EDT_AddToRelayoutTables(MWContext *pMWContext, LO_TableStruct *pLoTable );
-
- /* Called after every table layout so editor size data is accurate */
- void EDT_FixupTableData(MWContext *pMWContext);
-
- /* Get the sizing type define (0 if not at a sizing location)
- * where xVal, yVal is Cursor position and pElement is the element
- * we are over -- if NULL, we will find it (param used for efficiency)
- */
- ED_SizeStyle EDT_CanSizeObject(MWContext *pContext, LO_Element *pLoElement, int32 xVal, int32 yVal);
-
- /* Return TRUE if we are currently sizing
- */
- XP_Bool EDT_IsSizing(MWContext *pContext);
-
- /* If bLockAspect is TRUE, constrain rect to keep original aspect ratio
- * This returns the rect to draw sizing feedback in View's coordinate system
- * Returns sizing style if sizing was started OK
- */
- ED_SizeStyle EDT_StartSizing(MWContext *pContext, LO_Element *pLoElement, int32 xVal, int32 yVal,
- XP_Bool bLockAspect, XP_Rect *pRect);
-
- /* Get the rect in View coordinates, so you can use it
- * directly for drawing "selection feedback"
- * Returns TRUE if this rect is different from the last
- * one calculated by EDT_StartSizing or EDT_GetSizingRect,
- * so you need to do sizing feedback only if we return TRUE;
- */
- XP_Bool EDT_GetSizingRect(MWContext *pContext, int32 xVal, int32 yVal,
- XP_Bool bLockAspect, XP_Rect *pRect);
-
- /* Uses rect (xVal and yVal) from last mouse move to
- * get new width and height and change current object size
- */
- void EDT_EndSizing(MWContext *pContext);
-
- /* Call this to abort sizing
- */
- void EDT_CancelSizing(MWContext *pContext);
-
- /*
- * Editor plugin interface
- * The strings returned by this interface are from the Java heap. This means that
- * they will automaticly be garbage collected once there is no thread that
- * is refering to them. So XP_STRDUP them if you want to hold onto them.
- */
- void EDT_RegisterPlugin(char* csFileSpec); /* Called by front end to register a plugin file. */
-
- /* The following calls are cheap enough to be called as often as you like. */
- int32 EDT_NumberOfPluginCategories(void);
- int32 EDT_NumberOfPlugins(int32 category);
-
- /* The result strings are garbage collected by the Java runtime. They are in UTF8 encoding. */
- char* EDT_GetPluginCategoryName(int32 category);
- char* EDT_GetPluginName(int32 category, int32 index);
- char* EDT_GetPluginMenuHelp(int32 category, int32 index);
-
- /*
- * Perform a Composer Plugin by category and index. Returns TRUE if the Plug-in was launched
- * successfully. Returns FALSE if the Plug-in failed to run. If this method returns true, then
- * the actual Plug-in runs asynchronously. When the plugin completes, doneFunction is called
- * in the main UI thread. Alternatively, you can poll EDT_IsPluginActive to find out when the
- * Plug-in is done.
- * If you don't want to be called back when the plugin completes, pass NULL for doneFunction.
- * "hook" is a variable for you to use any way you want. It is passed back to your doneFunction.
- */
-
- XP_Bool EDT_PerformPlugin(MWContext *pContext, int32 category, int32 index, EDT_ImageEncoderCallbackFn doneFunction, void* hook);
-
- /*
- * Just like EDT_PerformPlugin, except that the Plugin is identified by className rather than by
- * category and index. The className is a fully qualified Java class name in UTF8 encoding.
- * doneFunction can be NULL, in which case it won't be called.
- * Under some circumstances, the doneFunction may be called immediately.
- */
-
- XP_Bool EDT_PerformPluginByClassName(MWContext *pContext, char* className, EDT_ImageEncoderCallbackFn doneFunction, void* hook);
-
- /*
- * Just like EDT_PerformPlugin, except that all event handlers are called for
- * a particular event.
- * doneFunction can be NULL, in which case it won't be called.
- * Under some circumstances, the doneFunction may be called immediately.
- * pDocURL can be null, or empty
- */
-
- void EDT_PerformEvent(MWContext *pContext, char* pEvent, char* pDocURL, XP_Bool bCanChangeDocument, XP_Bool bCanCancel,
- EDT_ImageEncoderCallbackFn doneFunction, void* hook);
-
- XP_Bool EDT_IsPluginActive(MWContext* pContext);
- void EDT_StopPlugin(MWContext* pContext);
-
- /* Used internally by the Composer Plug-in implementation.
- */
- void EDT_ComposerPluginCallback(MWContext* pContext, int32 action,
- struct java_lang_Object* pArg);
-
- /* Image encoder interface.
- * The strings returned by this interface are from the Java heap. This means that
- * they will automaticly be garbage collected once there is no thread that
- * is refering to them. So XP_STRDUP them if you want to hold onto them.
- */
- int32 EDT_NumberOfEncoders(void);
- char* EDT_GetEncoderName(int32 index); /* The human name of the encoding. e.g. JPEG */
- char* EDT_GetEncoderFileExtension(int32 index); /* The file extension, without the period. e.g. jpg */
- char* EDT_GetEncoderFileType(int32 index); /* The Macintosh FileType field. An array of 4 characters. */
- char* EDT_GetEncoderMenuHelp(int32 index); /* A sentence describing the encoding. e.g. Joint Picture Encoding Group */
- XP_Bool EDT_GetEncoderNeedsQuantizedSource(int32 index); /* TRUE if the encoder needs 256 distinct colors or less. */
- /* Returns FALSE if there was a problem, or TRUE if the encoder was started successfully.
- * The pixels are copied -- you can dispose of the pixels as soon as EDT_StartEncoder returns.
- *
- */
- XP_Bool EDT_StartEncoder(MWContext* pContext, int32 index, int32 width, int32 height, char** pixels,
- char* csFileName, EDT_ImageEncoderCallbackFn doneFunction, void* hook);
-
- /* Will stop the encoder, and will cause the doneFunction to be called. */
- void EDT_StopEncoder(MWContext* pContext);
-
- /* Save and restore the cursor position or selection
- */
- ED_BufferOffset EDT_GetInsertPointOffset( MWContext *pContext );
- void EDT_SetInsertPointToOffset( MWContext *pContext, ED_BufferOffset i,
- int32 iLen );
-
- /* Given a character offset, return the layout element and offset for that character
- */
-
- void EDT_OffsetToLayoutElement( MWContext *pContext, ED_BufferOffset i,
- LO_Element * *element, int32 *caretPos);
- ED_BufferOffset EDT_LayoutElementToOffset( MWContext *pContext,
- LO_Element *element, int32 caretPos);
-
- /* Return the layout textblock for a text element
- */
- LO_TextBlock* EDT_GetTextBlock(MWContext *pContext, LO_Element *le);
-
- /* Spell check API
- */
- XP_Bool EDT_SelectFirstMisspelledWord( MWContext *pContext );
- XP_Bool EDT_SelectNextMisspelledWord( MWContext *pContext );
- XP_HUGE_CHAR_PTR EDT_GetPositionalText( MWContext* pContext );
- void EDT_SetRefresh( MWContext *pContext, XP_Bool bRefreshOn );
- void EDT_ReplaceMisspelledWord( MWContext *pContext, char* pOldWord,
- char*pNewWord, XP_Bool bAll );
- /* Ignore a misspelled word.
- * If pWord != NULL and bAll == TRUE. ignore all instances of the specified word
- * If pWord == NULL, ignore all misspelled words
- */
- void EDT_IgnoreMisspelledWord( MWContext *pContext, char* pWord,
- XP_Bool bAll );
-
- /* The selection is 1/2 open -- if the start and end are the same value, then
- * the selection is an insertion point.
- */
- void EDT_GetSelectionOffsets(MWContext *pContext, ED_BufferOffset* pStart, ED_BufferOffset* pEnd);
-
- /*
- * Set the document encoding. Returns TRUE if the encoding
- * was changed, or FALSE if it was not. (An encoding change
- * may require a save of the current document. The user may
- * cancel the save.)
- *
- */
-
- XP_Bool EDT_SetEncoding(MWContext* pContext, int16 csid);
-
- /* Take the document for current contextand change appropriate
- * params to make it look like a "Untitled" new document
- * Allows loading any document as a "Template"
- */
- void EDT_ConvertCurrentDocToNewDoc(MWContext * pMWContext);
-
- /* Assemble the filename part from supplied URL to
- * the base URL, replacing any filename in the latter
- * pURL can be most anything, full URL or local filename
- * If NULL, pBaseURL is returned without its filename
- * (Use this to strip off filename from a base URL);
- * Caller must free returned string
- */
- char * EDT_ReplaceFilename(char * pBaseURL, char * pURL, XP_Bool bMustHaveExtension);
-
- /* Simply returns the filename part of a URL or local filespec
- * Stuff starting with "#" or "?" is ommited
- * Used with EDT_ReplaceFilenam(pURL, NULL) parse out a URL
- * into separate "directory" and "filename" parts
- * If bMustHaveExtension is TRUE, then name after last "/" or "\"
- * must have a period indicating it has an extension
- * Note: Assumes bMustHaveExtension = TRUE when getting filename
- * Caller must free returned string
- */
- char * EDT_GetFilename(char * pURL, XP_Bool bMustHaveExtension);
-
-
- /* Return a destination URL for publishing:
- * If last-failed-published URL (saved globally) is same as URL about to be published,
- * then always returns the location, Username, and password last attempted,
- * obtained from prefs: "editor.publish_last_loc" and "editor.publish_last_password"
- * else:
- * If current page URL is
- * 1. Remote URL: Return current page name as is, with anything after filename stripped
- * 2. Local File: Return last-good location (from pref: "editor.publish_history_0")
- * or default (if no last-location) from "editor.publish_location"
- * *ppFilename is set to filename portion of current page
- * and UserName is parsed out the pref string and returned in ppUsername
- * 3. New (unsaved) page: Return pref URL as above, but *ppFilename is set to NULL
- *
- * Note: Assumes bMustHaveExtension = TRUE when getting filename
- * If available, the last-used password is also supplied
- * Caller must free returned strings
- */
- char * EDT_GetDefaultPublishURL(MWContext * pMWContext, char **ppFilename, char **ppUserName, char **ppPassword);
-
- /* The maximum number of history items shown */
- #define MAX_EDIT_HISTORY_LOCATIONS 10
-
- /*
- * Get the location, username, and password (plain text) for the Nth
- * publish history location. Caller must XP_FREE the returned location,
- * username, passwd.
- */
- XP_Bool EDT_GetPublishingHistory(unsigned n, char** loc, char** u, char** p);
-
- /*
- * Copy the last publish location to the 0th history, move everyone up one.
- */
- void EDT_SyncPublishingHistory(void);
-
- /* Get URL and TITLE from the recently-edited history list kept in preferences
- * Similar to Publish history list, except caller should NOT XP_FREE the returned strings
- * because they are cached in local string arrays for quicker access
- *
- * Supply MWContext pointer to check if the current document is
- * in the list before or at the requested URL.
- * If it is, the next item is returned instead, thus the current doc
- * never shows up in the list
- * Because of this behavior, this function should be used with MWContext*
- * both to build the menu items and also to get the URL when the menu item is executed
- *
- * Note: If there is no Title, *pTitle is set to NULL
- * (Front ends should use a compressed version of pUrl instead)
- */
- XP_Bool EDT_GetEditHistory(MWContext * pMWContext, unsigned n, char** pUrl, char** pTitle);
-
- /* Call this after opening a file or URL to make it
- * the most-recently-edited document in the URL history in preferences
- */
- void EDT_SyncEditHistory(MWContext * pMWContext);
-
- /* Construct a page title from supplied filename,
- * Extracts the filename part WITHOUT extension
- * Stuff starting with "#" or "?" is ommited
- * Caller must free returned string
- */
- char * EDT_GetPageTitleFromFilename(char * pFilename);
-
- /*
- * Call EDT_PreOpen when the user requests that you open an existing HTML document.
- * You will get called back with status that indicates whether or not to open the
- * document. You can pass anything you want as the hook argument -- it will be
- * passed back to you.
- *
- * The MWContext passed to EDT_PreOpen is only used for reporting errors.
- *
- * Use the pURL that's passed back to you as the URL to open -- it may be different
- * than the URL you passed in.
- *
- * Note: Unlike other similar calls, in EDT_PreOpen the doneFunction will always be
- * called. Under certain circumstances, however, the doneFunction will be called
- * immediately, before EDT_PreOpen even returns.
- *
- */
-
- typedef void (*EDT_PreOpenCallbackFn)(XP_Bool bUserCancled, char* pURL, void* hook);
- void EDT_PreOpen(MWContext *pErrorContext,char* pURL, EDT_PreOpenCallbackFn doneFunction, void* hook);
-
- /*
- * Call EDT_PreClose when an editor context is about to be closed. Don't actually
- * close the window until the passed in callback function is called.
- *
- * Similar to EDT_PreOpen, the doneFunction will always be called, and may be called
- * befre EDT_PreClose returns.
- *
- */
-
- typedef void (*EDT_PreCloseCallbackFn)(void* hook);
- void EDT_PreClose(MWContext * pMWContext,char* pURL, EDT_PreCloseCallbackFn doneFunction, void* hook);
-
- /*
- * True if both urls are the same, ignores any username/password
- * information. Does caseless comparison for file:// URLs
- * on windows and mac.
- * url1 and url2 are relative to base1 and base2, respectively.
- * If url1 or url2 is already absolute, base1 or base2 can
- * be passed in as NULL.
- */
- XP_Bool EDT_IsSameURL(char *url1,char *url2,char *base1,char *base2);
-
- /*
- * Extract the Extra HTML string from the ED_Element pointer in an image struct
- * (ED_Element is a void* to external users
- * Implemented in edtutil.cpp
- * Caller must XP_FREE result
- */
- char * EDT_GetExtraHTML_FromImage(LO_ImageStruct *pImage);
-
- XP_Bool EDT_IsWritableBuffer(MWContext *pContext);
-
- /*
- * Hack in pre-encrypted files into the editor. This function lets us
- * treat the editor's TapeFS as a net stream without all the baggage associated
- * with the regular edt_Stream functions.
- */
- NET_StreamClass *EDT_NetToTape(void *);
-
- /*
- * Several functions to handle the encrypt/no-encrypt flag
- */
- void EDT_EncryptToggle(MWContext *pContext);
- void EDT_EncryptSet(MWContext *pContext);
- void EDT_EncryptReset(MWContext *pContext);
- PRBool EDT_EncryptState(MWContext *pContext);
-
- /* Used for QA only - Ctrl+Alt+Shift+N accelerator for automated testing */
- void EDT_SelectNextNonTextObject(MWContext *pContext);
-
- XP_END_PROTOS
-
- #endif /* EDITOR */
- #endif /* _edt_h_ */
-
-