Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 : #ifndef _HINTIDS_HXX
20 : #define _HINTIDS_HXX
21 :
22 : #include <tools/solar.h>
23 : #include <sal/types.h> // for sal_Unicode
24 : #include "swdllapi.h"
25 :
26 : // For SwTxtHints without end index the following char is added:
27 :
28 : #define CH_TXTATR_BREAKWORD ((sal_Unicode)0x01)
29 : #define CH_TXTATR_INWORD ((sal_Unicode)0xFFF9)
30 : #define CH_TXTATR_TAB ((sal_Unicode)'\t')
31 : #define CH_TXTATR_NEWLINE ((sal_Unicode)'\n')
32 : #define CH_TXT_ATR_FIELDSTART ((sal_Unicode)0x04)
33 : #define CH_TXT_ATR_FIELDEND ((sal_Unicode)0x05)
34 : #define CH_TXT_ATR_SUBST_FIELDSTART ("[")
35 : #define CH_TXT_ATR_SUBST_FIELDEND ("]")
36 : #define CH_TXT_ATR_FORMELEMENT ((sal_Unicode)0x06)
37 :
38 : /*
39 : * Enums for the hints
40 : */
41 :
42 : #define HINT_BEGIN 1
43 :
44 : #define POOLATTR_BEGIN HINT_BEGIN
45 : #define POOLATTR_END RES_UNKNOWNATR_END
46 :
47 : // Ranges for the IDs of the format-attributes.
48 : // Which-values for character-format attributes.
49 : enum RES_CHRATR
50 : {
51 : RES_CHRATR_BEGIN = HINT_BEGIN,
52 : RES_CHRATR_CASEMAP = RES_CHRATR_BEGIN, // 1
53 : RES_CHRATR_CHARSETCOLOR, // 2
54 : RES_CHRATR_COLOR, // 3
55 : RES_CHRATR_CONTOUR, // 4
56 : RES_CHRATR_CROSSEDOUT, // 5
57 : RES_CHRATR_ESCAPEMENT, // 6
58 : RES_CHRATR_FONT, // 7
59 : RES_CHRATR_FONTSIZE, // 8
60 : RES_CHRATR_KERNING, // 9
61 : RES_CHRATR_LANGUAGE, // 10
62 : RES_CHRATR_POSTURE, // 11
63 : RES_CHRATR_PROPORTIONALFONTSIZE, // 12
64 : RES_CHRATR_SHADOWED, // 13
65 : RES_CHRATR_UNDERLINE, // 14
66 : RES_CHRATR_WEIGHT, // 15
67 : RES_CHRATR_WORDLINEMODE, // 16
68 : RES_CHRATR_AUTOKERN, // 17
69 : RES_CHRATR_BLINK, // 18
70 : RES_CHRATR_NOHYPHEN, // 19
71 : RES_CHRATR_NOLINEBREAK, // 20
72 : RES_CHRATR_BACKGROUND, // 21
73 : RES_CHRATR_CJK_FONT, // 22
74 : RES_CHRATR_CJK_FONTSIZE, // 23
75 : RES_CHRATR_CJK_LANGUAGE, // 24
76 : RES_CHRATR_CJK_POSTURE, // 25
77 : RES_CHRATR_CJK_WEIGHT, // 26
78 : RES_CHRATR_CTL_FONT, // 27
79 : RES_CHRATR_CTL_FONTSIZE, // 28
80 : RES_CHRATR_CTL_LANGUAGE, // 29
81 : RES_CHRATR_CTL_POSTURE, // 30
82 : RES_CHRATR_CTL_WEIGHT, // 31
83 : RES_CHRATR_ROTATE, // 32
84 : RES_CHRATR_EMPHASIS_MARK, // 33
85 : RES_CHRATR_TWO_LINES, // 34
86 : RES_CHRATR_SCALEW, // 35
87 : RES_CHRATR_RELIEF, // 36
88 : RES_CHRATR_HIDDEN, // 37
89 : RES_CHRATR_OVERLINE, // 38
90 : RES_CHRATR_RSID, // 39
91 : RES_CHRATR_DUMMY1, // 40
92 : RES_CHRATR_END
93 : };
94 :
95 : // this Attribute used only in a TextNodes SwpAttr-Array
96 : enum RES_TXTATR
97 : {
98 : RES_TXTATR_BEGIN = RES_CHRATR_END,
99 :
100 : /** text attributes with start and end.
101 : #i105453#:
102 : Hints (SwTxtAttr) with the same start and end position are sorted by
103 : WhichId, i.e., the TXTATR constants defined here.
104 : The text formatting (SwAttrIter) poses some requirements on TXTATR order:
105 : - AUTOFMT must precede CHARFMT, so that auto style can overwrite char style.
106 : - INETFMT must precede CHARFMT, so that link style can overwrite char style.
107 : (this is actually surprising: CHARFMT hints are not split at INETFMT
108 : hints on insertion, but on exporting to ODF. if CHARFMT would precede
109 : INETFMT, then exporting and importing will effectively change precedence)
110 :
111 : Nesting hints (SwTxtAttrNesting) also have requirements on TXTATR order,
112 : to ensure proper nesting (because CJK_RUBY and INETFMT have no CH_TXTATR):
113 : - INETFMT should precede CJK_RUBY (for UNO API it does not matter...)
114 : - META and METAFIELD must precede CJK_RUBY and INETFMT
115 : */
116 : RES_TXTATR_WITHEND_BEGIN = RES_TXTATR_BEGIN ,
117 : RES_TXTATR_REFMARK = RES_TXTATR_WITHEND_BEGIN, // 41
118 : RES_TXTATR_TOXMARK, // 42
119 : RES_TXTATR_META, // 43
120 : RES_TXTATR_METAFIELD, // 44
121 : RES_TXTATR_AUTOFMT, // 45
122 : RES_TXTATR_INETFMT, // 46
123 : RES_TXTATR_CHARFMT, // 47
124 : RES_TXTATR_CJK_RUBY, // 48
125 : RES_TXTATR_UNKNOWN_CONTAINER, // 49
126 : RES_TXTATR_DUMMY5, // 50
127 : RES_TXTATR_WITHEND_END,
128 :
129 : // all TextAttributes without an end
130 : RES_TXTATR_NOEND_BEGIN = RES_TXTATR_WITHEND_END,
131 : RES_TXTATR_FIELD = RES_TXTATR_NOEND_BEGIN, // 51
132 : RES_TXTATR_FLYCNT, // 52
133 : RES_TXTATR_FTN, // 53
134 : RES_TXTATR_DUMMY4, // 54
135 : RES_TXTATR_DUMMY3, // 55
136 : RES_TXTATR_DUMMY1, // 56
137 : RES_TXTATR_DUMMY2, // 57
138 : RES_TXTATR_NOEND_END,
139 : RES_TXTATR_END = RES_TXTATR_NOEND_END
140 : };
141 :
142 : enum RES_PARATR
143 : {
144 : RES_PARATR_BEGIN = RES_TXTATR_END,
145 : RES_PARATR_LINESPACING = RES_PARATR_BEGIN, // 58
146 : RES_PARATR_ADJUST, // 59
147 : RES_PARATR_SPLIT, // 60
148 : RES_PARATR_ORPHANS, // 61
149 : RES_PARATR_WIDOWS, // 62
150 : RES_PARATR_TABSTOP, // 63
151 : RES_PARATR_HYPHENZONE, // 64
152 : RES_PARATR_DROP, // 65
153 : RES_PARATR_REGISTER, // 66
154 : RES_PARATR_NUMRULE, // 67
155 : RES_PARATR_SCRIPTSPACE, // 68
156 : RES_PARATR_HANGINGPUNCTUATION, // 69
157 : RES_PARATR_FORBIDDEN_RULES, // 70
158 : RES_PARATR_VERTALIGN, // 71
159 : RES_PARATR_SNAPTOGRID, // 72
160 : RES_PARATR_CONNECT_BORDER, // 73
161 : RES_PARATR_OUTLINELEVEL, // 74
162 : RES_PARATR_RSID, // 75
163 : RES_PARATR_END
164 : };
165 :
166 : // list attributes for paragraphs.
167 : // intentionally these list attributes are not contained in paragraph styles
168 : enum RES_PARATR_LIST
169 : {
170 : RES_PARATR_LIST_BEGIN = RES_PARATR_END,
171 : RES_PARATR_LIST_ID = RES_PARATR_LIST_BEGIN, // 76
172 : RES_PARATR_LIST_LEVEL, // 77
173 : RES_PARATR_LIST_ISRESTART, // 78
174 : RES_PARATR_LIST_RESTARTVALUE, // 79
175 : RES_PARATR_LIST_ISCOUNTED, // 80
176 : RES_PARATR_LIST_END
177 : };
178 :
179 : enum RES_FRMATR
180 : {
181 : RES_FRMATR_BEGIN = RES_PARATR_LIST_END,
182 : RES_FILL_ORDER = RES_FRMATR_BEGIN, // 81
183 : RES_FRM_SIZE, // 82
184 : RES_PAPER_BIN, // 83
185 : RES_LR_SPACE, // 84
186 : RES_UL_SPACE, // 85
187 : RES_PAGEDESC, // 86
188 : RES_BREAK, // 87
189 : RES_CNTNT, // 88
190 : RES_HEADER, // 89
191 : RES_FOOTER, // 90
192 : RES_PRINT, // 91
193 : RES_OPAQUE, // 92
194 : RES_PROTECT, // 93
195 : RES_SURROUND, // 94
196 : RES_VERT_ORIENT, // 95
197 : RES_HORI_ORIENT, // 96
198 : RES_ANCHOR, // 97
199 : RES_BACKGROUND, // 98
200 : RES_BOX, // 99
201 : RES_SHADOW, // 100
202 : RES_FRMMACRO, // 101
203 : RES_COL, // 102
204 : RES_KEEP, // 103
205 : RES_URL, // 104
206 : RES_EDIT_IN_READONLY, // 105
207 : RES_LAYOUT_SPLIT, // 106
208 : RES_CHAIN, // 107
209 : RES_TEXTGRID, // 108
210 : RES_LINENUMBER , // 109
211 : RES_FTN_AT_TXTEND, // 110
212 : RES_END_AT_TXTEND, // 111
213 : RES_COLUMNBALANCE, // 112
214 : RES_FRAMEDIR, // 113
215 : RES_HEADER_FOOTER_EAT_SPACING, // 114
216 : RES_ROW_SPLIT, // 115
217 : RES_FOLLOW_TEXT_FLOW, // 116
218 : RES_COLLAPSING_BORDERS, // 117
219 : RES_WRAP_INFLUENCE_ON_OBJPOS, // 118
220 : RES_AUTO_STYLE, // 119
221 : RES_FRMATR_STYLE_NAME, // 120
222 : RES_FRMATR_CONDITIONAL_STYLE_NAME, // 121
223 : RES_FILL_STYLE, // 122
224 : RES_FILL_GRADIENT, // 123
225 : RES_FRMATR_END
226 : };
227 :
228 : enum RES_GRFATR
229 : {
230 : RES_GRFATR_BEGIN = RES_FRMATR_END,
231 : RES_GRFATR_MIRRORGRF = RES_GRFATR_BEGIN, // 124
232 : RES_GRFATR_CROPGRF, // 125
233 :
234 : RES_GRFATR_ROTATION, // 126
235 : RES_GRFATR_LUMINANCE, // 127
236 : RES_GRFATR_CONTRAST, // 128
237 : RES_GRFATR_CHANNELR, // 129
238 : RES_GRFATR_CHANNELG, // 130
239 : RES_GRFATR_CHANNELB, // 131
240 : RES_GRFATR_GAMMA, // 132
241 : RES_GRFATR_INVERT, // 133
242 : RES_GRFATR_TRANSPARENCY, // 134
243 : RES_GRFATR_DRAWMODE, // 135
244 :
245 : RES_GRFATR_DUMMY1, // 136
246 : RES_GRFATR_DUMMY2, // 137
247 : RES_GRFATR_DUMMY3, // 138
248 : RES_GRFATR_DUMMY4, // 139
249 : RES_GRFATR_DUMMY5, // 140
250 : RES_GRFATR_END
251 : };
252 :
253 : enum RES_BOXATR
254 : {
255 : RES_BOXATR_BEGIN = RES_GRFATR_END,
256 : RES_BOXATR_FORMAT = RES_BOXATR_BEGIN, // 141
257 : RES_BOXATR_FORMULA, // 142
258 : RES_BOXATR_VALUE, // 143
259 : RES_BOXATR_END
260 : };
261 :
262 : enum RES_UNKNOWNATR
263 : {
264 : RES_UNKNOWNATR_BEGIN = RES_BOXATR_END,
265 : RES_UNKNOWNATR_CONTAINER = RES_UNKNOWNATR_BEGIN,// 142
266 : RES_UNKNOWNATR_END
267 : };
268 :
269 :
270 :
271 : // Format IDs
272 : enum RES_FMT
273 : {
274 : RES_FMT_BEGIN = RES_UNKNOWNATR_END,
275 : RES_CHRFMT = RES_FMT_BEGIN,
276 : RES_FRMFMT,
277 : RES_FLYFRMFMT,
278 : RES_TXTFMTCOLL,
279 : RES_GRFFMTCOLL,
280 : RES_DRAWFRMFMT,
281 : RES_CONDTXTFMTCOLL,
282 : RES_FMT_END
283 : };
284 :
285 : // ID's for Messages in the Formats
286 : enum RES_MSG
287 : {
288 : RES_MSG_BEGIN = RES_FMT_END,
289 : RES_OBJECTDYING = RES_MSG_BEGIN,
290 : RES_FMT_CHG,
291 : RES_ATTRSET_CHG,
292 : RES_FRM_SIZECHG,
293 : RES_TXTATR_FLDCHG,
294 : RES_TXTATR_EMPTYCHG,
295 : RES_INS_CHR,
296 : RES_INS_TXT,
297 : RES_DEL_CHR,
298 : RES_DEL_TXT,
299 : RES_UPDATE_ATTR,
300 : RES_PAGEDESC_FTNINFO,
301 : RES_REFMARKFLD_UPDATE,
302 : RES_DOCPOS_UPDATE,
303 : RES_TABLEFML_UPDATE,
304 : RES_UPDATEDDETBL,
305 : RES_TBLHEADLINECHG,
306 : RES_AUTOFMT_DOCNODE,
307 : RES_REPAINT,
308 : RES_DOC_DTOR,
309 : RES_SECTION_HIDDEN,
310 : RES_SECTION_NOT_HIDDEN,
311 : RES_GRAPHIC_ARRIVED,
312 : RES_GRAPHIC_PIECE_ARRIVED,
313 : RES_HIDDENPARA_PRINT,
314 : RES_CONDCOLL_CONDCHG,
315 : RES_VIRTPAGENUM_INFO,
316 : RES_GETLOWERNUMLEVEL,
317 : RES_RESET_FMTWRITTEN,
318 : RES_REMOVE_UNO_OBJECT,
319 : RES_GRF_REREAD_AND_INCACHE,
320 : RES_SECTION_RESETHIDDENFLAG,
321 : RES_FINDNEARESTNODE,
322 : RES_CONTENT_VISIBLE,
323 : RES_FOOTNOTE_DELETED,
324 : RES_REFMARK_DELETED,
325 : RES_TOXMARK_DELETED,
326 : RES_GRAPHIC_SWAPIN,
327 : RES_FIELD_DELETED,
328 : RES_NAME_CHANGED,
329 : RES_TITLE_CHANGED,
330 : RES_DESCRIPTION_CHANGED,
331 : RES_UNOCURSOR_LEAVES_SECTION,
332 : RES_LINKED_GRAPHIC_STREAM_ARRIVED,
333 : RES_MSG_END
334 : };
335 :
336 : // An ID for the RTF-reader. The stylesheets are treated like attributes,
337 : // i.e. there is a StyleSheet-attribute. To avoid collision with other
338 : // Which()-values, the value is listed here. (The help system too defines
339 : // new attributes!)
340 : enum RES_FLTRATTR
341 : {
342 : RES_FLTRATTR_BEGIN = RES_MSG_END,
343 : RES_FLTR_STYLESHEET = RES_FLTRATTR_BEGIN,
344 : RES_FLTR_BOOKMARK,
345 : RES_FLTR_ANCHOR,
346 : RES_FLTR_BORDER,
347 : RES_FLTR_NUMRULE,
348 : RES_FLTR_NUMRULE_NUM,
349 : RES_FLTR_SDR_ANCHOR,
350 : RES_FLTR_TOX,
351 : RES_FLTR_SECTION,
352 : RES_FLTR_REDLINE,
353 : RES_FLTR_SCRIPTTYPE,
354 : RES_FLTRATTR_END
355 : };
356 :
357 : #define RES_TBX_DUMMY RES_FLTRATTR_END + 1
358 :
359 : #define HINT_END RES_TBX_DUMMY
360 :
361 : // Error recognition!!
362 : #define INVALID_HINT HINT_END
363 : #define RES_WHICHHINT_END HINT_END
364 :
365 :
366 0 : inline bool isATR(const sal_uInt16 nWhich)
367 : {
368 0 : return (RES_CHRATR_BEGIN <= nWhich) && (RES_UNKNOWNATR_END > nWhich);
369 : }
370 161038 : inline bool isCHRATR(const sal_uInt16 nWhich)
371 : {
372 161038 : return (RES_CHRATR_BEGIN <= nWhich) && (RES_CHRATR_END > nWhich);
373 : }
374 534 : inline bool isTXTATR_WITHEND(const sal_uInt16 nWhich)
375 : {
376 : return (RES_TXTATR_WITHEND_BEGIN <= nWhich)
377 534 : && (RES_TXTATR_WITHEND_END > nWhich);
378 : }
379 0 : inline bool isTXTATR_NOEND(const sal_uInt16 nWhich)
380 : {
381 : return (RES_TXTATR_NOEND_BEGIN <= nWhich)
382 0 : && (RES_TXTATR_NOEND_END > nWhich);
383 : }
384 8242 : inline bool isTXTATR(const sal_uInt16 nWhich)
385 : {
386 8242 : return (RES_TXTATR_BEGIN <= nWhich) && (RES_TXTATR_END > nWhich);
387 : }
388 24709 : inline bool isPARATR(const sal_uInt16 nWhich)
389 : {
390 24709 : return (RES_PARATR_BEGIN <= nWhich) && (RES_PARATR_END > nWhich);
391 : }
392 21154 : inline bool isPARATR_LIST(const sal_uInt16 nWhich)
393 : {
394 21154 : return (RES_PARATR_LIST_BEGIN <= nWhich) && (RES_PARATR_LIST_END > nWhich); }
395 18973 : inline bool isFRMATR(const sal_uInt16 nWhich)
396 : {
397 18973 : return (RES_FRMATR_BEGIN <= nWhich) && (RES_FRMATR_END > nWhich);
398 : }
399 17072 : inline bool isGRFATR(const sal_uInt16 nWhich)
400 : {
401 17072 : return (RES_GRFATR_BEGIN <= nWhich) && (RES_GRFATR_END > nWhich);
402 : }
403 0 : inline bool isBOXATR(const sal_uInt16 nWhich)
404 : {
405 0 : return (RES_BOXATR_BEGIN <= nWhich) && (RES_BOXATR_END > nWhich);
406 : }
407 14982 : inline bool isUNKNOWNATR(const sal_uInt16 nWhich)
408 : {
409 14982 : return (RES_UNKNOWNATR_BEGIN <= nWhich) && (RES_UNKNOWNATR_END > nWhich);
410 : }
411 :
412 :
413 : // Take the respective default attribute from the statistical default
414 : // attributes table over the Which-value.
415 : // If none exists, return a 0 pointer!!!
416 : // This function is implemented in Init.cxx. It is declared here as external
417 : // in order to allow the formats to access it.
418 : // Inline in PRODUCT.
419 : class SfxPoolItem;
420 : struct SfxItemInfo;
421 : typedef SfxPoolItem* SwDfltAttrTab[ POOLATTR_END - POOLATTR_BEGIN ];
422 :
423 : extern SwDfltAttrTab aAttrTab;
424 : extern SfxItemInfo aSlotTab[];
425 :
426 : SW_DLLPUBLIC const SfxPoolItem* GetDfltAttr( sal_uInt16 nWhich );
427 :
428 : SW_DLLPUBLIC sal_uInt16 GetWhichOfScript( sal_uInt16 nWhich, sal_uInt16 nScript );
429 :
430 : // return for the given TextAttribute without an end the correct character.
431 : // This function returns
432 : // CH_TXTATR_BREAKWORD for Textattribute which breaks a word (default)
433 : // CH_TXTATR_INWORD for Textattribute which dont breaks a word
434 : class SwTxtAttr;
435 : sal_Unicode GetCharOfTxtAttr( const SwTxtAttr& rAttr );
436 :
437 : // all Sets defined in init.cxx
438 :
439 : // AttrSet-Range for the 3 Break-Attribute
440 : extern sal_uInt16 aBreakSetRange[];
441 : // AttrSet-Range for TxtFmtColl
442 : extern sal_uInt16 aTxtFmtCollSetRange[];
443 : // AttrSet-Range for GrfFmtColl
444 : extern sal_uInt16 aGrfFmtCollSetRange[];
445 : // AttrSet-Range for TextNode
446 : SW_DLLPUBLIC extern sal_uInt16 aTxtNodeSetRange[];
447 : // AttrSet-Range for NoTxtNode
448 : extern sal_uInt16 aNoTxtNodeSetRange[];
449 : // AttrSet-Range for SwTable
450 : extern sal_uInt16 aTableSetRange[];
451 : // AttrSet-Range for SwTableLine
452 : extern sal_uInt16 aTableLineSetRange[];
453 : // AttrSet-Range for SwTableBox
454 : extern sal_uInt16 aTableBoxSetRange[];
455 : // AttrSet-Range for SwFrmFmt
456 : SW_DLLPUBLIC extern sal_uInt16 aFrmFmtSetRange[];
457 : // AttrSet-Range for SwCharFmt
458 : extern sal_uInt16 aCharFmtSetRange[];
459 : // AttrSet-Range for the autostyles
460 : extern sal_uInt16 aCharAutoFmtSetRange[];
461 : // AttrSet-Range for SwPageDescFmt
462 : extern sal_uInt16 aPgFrmFmtSetRange[];
463 :
464 : // check if ID is InRange of AttrSet-Ids
465 : bool IsInRange( const sal_uInt16* pRange, const sal_uInt16 nId );
466 :
467 : #endif
468 :
469 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|