1 /* 2 * $LynxId: HText.h,v 1.16 2010/09/25 11:41:08 tom Exp $ 3 * Rich Hypertext object for libWWW 4 * RICH HYPERTEXT OBJECT 5 * 6 * This is the C interface to the Objective-C (or whatever) Style-oriented 7 * HyperText class. It is used when a style-oriented text object is available 8 * or craeted in order to display hypertext. 9 */ 10 #ifndef HTEXT_H 11 #define HTEXT_H 12 13 #include <HTAnchor.h> 14 #include <HTStyle.h> 15 #include <HTStream.h> 16 #include <SGML.h> 17 18 #ifdef __cplusplus 19 extern "C" { 20 #endif 21 #ifndef THINK_C 22 #ifndef HyperText /* Objective C version defined HyperText */ 23 typedef struct _HText HText; /* Normal Library */ 24 #endif 25 #else 26 class CHyperText; /* Mac Think-C browser hook */ 27 typedef CHyperText HText; 28 #endif 29 30 extern HText *HTMainText; /* Pointer to current main text */ 31 extern HTParentAnchor *HTMainAnchor; /* Pointer to current text's anchor */ 32 33 extern const char *HTAppName; /* Application name */ 34 extern const char *HTAppVersion; /* Application version */ 35 36 /* 37 38 Creation and deletion 39 40 HTEXT_NEW: CREATE HYPERTEXT OBJECT 41 42 There are several methods depending on how much you want to specify. The 43 output stream is used with objects which need to output the hypertext to a 44 stream. The structure is for objects which need to refer to the structure 45 which is kep by the creating stream. 46 47 */ 48 extern HText *HText_new(HTParentAnchor *anchor); 49 50 extern HText *HText_new2(HTParentAnchor *anchor, 51 HTStream *output_stream); 52 53 extern HText *HText_new3(HTParentAnchor *anchor, 54 HTStream *output_stream, 55 HTStructured * structure); 56 57 /* 58 59 FREE HYPERTEXT OBJECT 60 61 */ 62 extern void HText_free(HText *me); 63 64 /* 65 66 Object Building methods 67 68 These are used by a parser to build the text in an object HText_beginAppend 69 must be called, then any combination of other append calls, then 70 HText_endAppend. This allows optimised handling using buffers and caches 71 which are flushed at the end. 72 73 */ 74 extern void HText_beginAppend(HText *text); 75 76 extern void HText_endAppend(HText *text); 77 78 /* 79 80 SET THE STYLE FOR FUTURE TEXT 81 82 */ 83 84 extern void HText_setStyle(HText *text, HTStyle *style); 85 86 /* 87 88 ADD ONE CHARACTER 89 90 */ 91 extern void HText_appendCharacter(HText *text, int ch); 92 93 /* 94 95 ADD A ZERO-TERMINATED STRING 96 97 */ 98 99 extern void HText_appendText(HText *text, const char *str); 100 101 /* 102 103 NEW PARAGRAPH 104 105 and similar things 106 107 */ 108 extern void HText_appendParagraph(HText *text); 109 110 extern void HText_appendLineBreak(HText *text); 111 112 extern void HText_appendHorizontalRule(HText *text); 113 114 /* 115 116 START/END SENSITIVE TEXT 117 118 */ 119 120 /* 121 122 The anchor object is created and passed to HText_beginAnchor. The senstive 123 text is added to the text object, and then HText_endAnchor is called. 124 Anchors may not be nested. 125 126 */ 127 extern int HText_beginAnchor(HText *text, int underline, 128 HTChildAnchor *anc); 129 extern void HText_endAnchor(HText *text, int number); 130 extern BOOL HText_isAnchorBlank(HText *text, int number); 131 132 /* 133 134 APPEND AN INLINE IMAGE 135 136 The image is handled by the creation of an anchor whose destination is the 137 image document to be included. The semantics is the intended inline display 138 of the image. 139 140 An alternative implementation could be, for example, to begin an anchor, 141 append the alternative text or "IMAGE", then end the anchor. This would 142 simply generate some text linked to the image itself as a separate document. 143 144 */ 145 extern void HText_appendImage(HText *text, HTChildAnchor *anc, 146 const char *alternative_text, 147 int alignment, 148 int isMap); 149 150 /* 151 152 RETURN THE ANCHOR ASSOCIATED WITH THIS NODE 153 154 */ 155 extern HTParentAnchor *HText_nodeAnchor(HText *me); 156 157 /* 158 159 Browsing functions 160 161 */ 162 163 /* 164 165 BRING TO FRONT AND HIGHLIGHT IT 166 167 */ 168 169 extern BOOL HText_select(HText *text); 170 extern BOOL HText_selectAnchor(HText *text, HTChildAnchor *anchor); 171 172 /* 173 174 Editing functions 175 176 These are called from the application. There are many more functions not 177 included here from the orginal text object. These functions NEED NOT BE 178 IMPLEMENTED in a browser which cannot edit. 179 180 */ 181 /* Style handling: 182 */ 183 /* Apply this style to the selection 184 */ 185 extern void HText_applyStyle(HText *me, HTStyle *style); 186 187 /* Update all text with changed style. 188 */ 189 extern void HText_updateStyle(HText *me, HTStyle *style); 190 191 /* Return style of selection 192 */ 193 extern HTStyle *HText_selectionStyle(HText *me, HTStyleSheet *sheet); 194 195 /* Paste in styled text 196 */ 197 extern void HText_replaceSel(HText *me, const char *aString, 198 HTStyle *aStyle); 199 200 /* Apply this style to the selection and all similarly formatted text 201 * (style recovery only) 202 */ 203 extern void HTextApplyToSimilar(HText *me, HTStyle *style); 204 205 /* Select the first unstyled run. 206 * (style recovery only) 207 */ 208 extern void HTextSelectUnstyled(HText *me, HTStyleSheet *sheet); 209 210 /* Anchor handling: 211 */ 212 extern void HText_unlinkSelection(HText *me); 213 extern HTAnchor *HText_referenceSelected(HText *me); 214 extern HTAnchor *HText_linkSelTo(HText *me, HTAnchor * anchor); 215 216 #ifdef __cplusplus 217 } 218 #endif 219 #endif /* HTEXT_H */ 220