1 /* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */
2 
3 /* libstaroffice
4 * Version: MPL 2.0 / LGPLv2+
5 *
6 * The contents of this file are subject to the Mozilla Public License Version
7 * 2.0 (the "License"); you may not use this file except in compliance with
8 * the License or as specified alternatively below. You may obtain a copy of
9 * the License at http://www.mozilla.org/MPL/
10 *
11 * Software distributed under the License is distributed on an "AS IS" basis,
12 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 * for the specific language governing rights and limitations under the
14 * License.
15 *
16 * Major Contributor(s):
17 * Copyright (C) 2002 William Lachance (wrlach@gmail.com)
18 * Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net)
19 * Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
20 * Copyright (C) 2006, 2007 Andrew Ziem
21 * Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr)
22 *
23 *
24 * All Rights Reserved.
25 *
26 * For minor contributions see the git repository.
27 *
28 * Alternatively, the contents of this file may be used under the terms of
29 * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
30 * in which case the provisions of the LGPLv2+ are applicable
31 * instead of those above.
32 */
33 
34 /*
35  * file to read/parse StarOffice attributes
36  *
37  */
38 #ifndef STAR_ATTRIBUTE
39 #  define STAR_ATTRIBUTE
40 
41 #include <set>
42 #include <sstream>
43 #include <vector>
44 
45 #include "STOFFDebug.hxx"
46 #include "STOFFEntry.hxx"
47 #include "STOFFInputStream.hxx"
48 
49 #include "StarItem.hxx"
50 
51 namespace StarAttributeInternal
52 {
53 struct State;
54 }
55 
56 class StarItemPool;
57 class StarObject;
58 class StarState;
59 class StarZone;
60 
61 //! virtual class used to store the different attribute
62 class StarAttribute
63 {
64 public:
65   //! the attribute list
66   enum Type {
67     ATTR_SPECIAL=-1,                                  // special
68     ATTR_CHR_CASEMAP = 1,					        	    		// 1
69     ATTR_CHR_CHARSETCOLOR,					        	    	// 2
70     ATTR_CHR_COLOR,								        	    		// 3
71     ATTR_CHR_CONTOUR,							        	    		// 4
72     ATTR_CHR_CROSSEDOUT,						        	    	// 5
73     ATTR_CHR_ESCAPEMENT,						        	    	// 6
74     ATTR_CHR_FONT,									        	    	// 7
75     ATTR_CHR_FONTSIZE,							        	    	// 8
76     ATTR_CHR_KERNING, 							        	    	// 9
77     ATTR_CHR_LANGUAGE,							        	    	// 10
78     ATTR_CHR_POSTURE, 							        	    	// 11
79     ATTR_CHR_PROPORTIONALFONTSIZE,		      	    	// 12
80     ATTR_CHR_SHADOWED,							        	    	// 13
81     ATTR_CHR_UNDERLINE,						        	    		// 14
82     ATTR_CHR_WEIGHT,								        	    	// 15
83     ATTR_CHR_WORDLINEMODE,					        	    	// 16
84     ATTR_CHR_AUTOKERN,							        	    	// 17
85     ATTR_CHR_BLINK,								        	    		// 18
86     ATTR_CHR_NOHYPHEN,							        	    	// 19
87     ATTR_CHR_NOLINEBREAK, 					        	    	// 20
88     ATTR_CHR_BACKGROUND,						        	    	// 21
89     ATTR_CHR_CJK_FONT,							        	    	// 22
90     ATTR_CHR_CJK_FONTSIZE,					        	    	// 23
91     ATTR_CHR_CJK_LANGUAGE,					        	    	// 24
92     ATTR_CHR_CJK_POSTURE, 					        	    	// 25
93     ATTR_CHR_CJK_WEIGHT,						        	    	// 26
94     ATTR_CHR_CTL_FONT,							        	    	// 27
95     ATTR_CHR_CTL_FONTSIZE,					        	    	// 28
96     ATTR_CHR_CTL_LANGUAGE,					        	    	// 29
97     ATTR_CHR_CTL_POSTURE, 					        	    	// 30
98     ATTR_CHR_CTL_WEIGHT,						        	    	// 31
99     ATTR_CHR_ROTATE,								        	    	// 32
100     ATTR_CHR_EMPHASIS_MARK,				        	    		// 33
101     ATTR_CHR_TWO_LINES, 						        	    	// 34
102     ATTR_CHR_SCALEW,								        	    	// 35
103     ATTR_CHR_RELIEF,								        	    	// 36
104     ATTR_CHR_DUMMY1,								        	    	// 37
105 
106     ATTR_TXT_INETFMT,							        	    		// 38
107     ATTR_TXT_DUMMY4,								        	    	// 39
108     ATTR_TXT_REFMARK, 							        	    	// 40
109     ATTR_TXT_TOXMARK, 							        	    	// 41
110     ATTR_TXT_CHARFMT, 							        	    	// 42
111     ATTR_TXT_DUMMY5, 								      	    		// 43
112     ATTR_TXT_CJK_RUBY, 							      	    		// 44
113     ATTR_TXT_UNKNOWN_CONTAINER,					  	    		// 45
114     ATTR_TXT_DUMMY6,								        	    	// 46
115     ATTR_TXT_DUMMY7,								        	    	// 47
116 
117     ATTR_TXT_FIELD,								        	    		// 48
118     ATTR_TXT_FLYCNT,								        	    	// 49
119     ATTR_TXT_FTN, 									        	    	// 50
120     ATTR_TXT_SOFTHYPH,							        	    	// 51
121     ATTR_TXT_HARDBLANK,							      	    		// 52
122     ATTR_TXT_DUMMY1,								        	    	// 53
123     ATTR_TXT_DUMMY2,								        	    	// 54
124 
125     ATTR_PARA_LINESPACING,		              	    	// 55
126     ATTR_PARA_ADJUST,								    	    			// 56
127     ATTR_PARA_SPLIT,								              	// 57
128     ATTR_PARA_ORPHANS, 							    	    			// 58
129     ATTR_PARA_WIDOWS,								    	    			// 59
130     ATTR_PARA_TABSTOP, 							    	    			// 60
131     ATTR_PARA_HYPHENZONE,							    	    		// 61
132     ATTR_PARA_DROP,								              		// 62
133     ATTR_PARA_REGISTER,							    	    			// 63
134     ATTR_PARA_NUMRULE, 							    	    			// 64
135     ATTR_PARA_SCRIPTSPACE,							    	    	// 65
136     ATTR_PARA_HANGINGPUNCTUATION,					    	    // 66
137     ATTR_PARA_FORBIDDEN_RULES,						    	    // 67
138     ATTR_PARA_VERTALIGN,								            // 68
139     ATTR_PARA_SNAPTOGRID,                    	    	// 69
140     ATTR_PARA_CONNECT_BORDER,                	    	// 70
141     ATTR_PARA_DUMMY5,								              	// 71
142     ATTR_PARA_DUMMY6,								              	// 72
143     ATTR_PARA_DUMMY7,								              	// 73
144     ATTR_PARA_DUMMY8,								              	// 74
145 
146     ATTR_FRM_FILL_ORDER,                           	// 75
147     ATTR_FRM_FRM_SIZE,                             	// 76
148     ATTR_FRM_PAPER_BIN,                            	// 77
149     ATTR_FRM_LR_SPACE,                             	// 78
150     ATTR_FRM_UL_SPACE,                             	// 79
151     ATTR_FRM_PAGEDESC,                             	// 80
152     ATTR_FRM_BREAK,                                	// 81
153     ATTR_FRM_CNTNT,                                	// 82
154     ATTR_FRM_HEADER,                               	// 83
155     ATTR_FRM_FOOTER,                               	// 84
156     ATTR_FRM_PRINT,                                	// 85
157     ATTR_FRM_OPAQUE,                               	// 86
158     ATTR_FRM_PROTECT,                              	// 87
159     ATTR_FRM_SURROUND,                             	// 88
160     ATTR_FRM_VERT_ORIENT,                          	// 89
161     ATTR_FRM_HORI_ORIENT,                          	// 90
162     ATTR_FRM_ANCHOR,                               	// 91
163     ATTR_FRM_BACKGROUND,                           	// 92
164     ATTR_FRM_BOX,                                  	// 93
165     ATTR_FRM_SHADOW,                               	// 94
166     ATTR_FRM_FRMMACRO,                             	// 95
167     ATTR_FRM_COL,                                  	// 96
168     ATTR_FRM_KEEP,                                 	// 97
169     ATTR_FRM_URL,                                  	// 98
170     ATTR_FRM_EDIT_IN_READONLY,                     	// 99
171     ATTR_FRM_LAYOUT_SPLIT,                         	// 100
172     ATTR_FRM_CHAIN,                                	// 101
173     ATTR_FRM_TEXTGRID,                             	// 102
174     ATTR_FRM_LINENUMBER,                         	// 103
175     ATTR_FRM_FTN_AT_TXTEND,                        	// 104
176     ATTR_FRM_END_AT_TXTEND,                        	// 105
177     ATTR_FRM_COLUMNBALANCE,                        	// 106
178     ATTR_FRM_FRAMEDIR,                             	// 107
179     ATTR_FRM_HEADER_FOOTER_EAT_SPACING,            	// 108
180     ATTR_FRM_FRMATTR_DUMMY9,                        // 109
181 
182     ATTR_GRF_MIRRORGRF,  	                 	      	// 110
183     ATTR_GRF_CROPGRF,                       	      // 111
184     ATTR_GRF_ROTATION,                      	      // 112
185     ATTR_GRF_LUMINANCE,                     	      // 113
186     ATTR_GRF_CONTRAST,                      	      // 114
187     ATTR_GRF_CHANNELR,                      	      // 115
188     ATTR_GRF_CHANNELG,                      	      // 116
189     ATTR_GRF_CHANNELB,                      	      // 117
190     ATTR_GRF_GAMMA,                         	      // 118
191     ATTR_GRF_INVERT,                        	      // 119
192     ATTR_GRF_TRANSPARENCY,                  	      // 120
193     ATTR_GRF_DRAWMODE,                      	      // 121
194     ATTR_GRF_DUMMY1,                        	      // 122
195     ATTR_GRF_DUMMY2,                        	      // 123
196     ATTR_GRF_DUMMY3,                        	      // 124
197     ATTR_GRF_DUMMY4,                        	      // 125
198     ATTR_GRF_DUMMY5,                        	      // 126
199 
200     ATTR_BOX_FORMAT,     	                 	      	// 127
201     ATTR_BOX_FORMULA,                       	      // 128
202     ATTR_BOX_VALUE,                         	      // 129
203 
204     // other
205     ATTR_SC_USERDEF,                         	      // 130
206     ATTR_SC_HYPHENATE,
207     ATTR_SC_HORJUSTIFY,
208     ATTR_SC_INDENT,
209     ATTR_SC_VERJUSTIFY,
210     ATTR_SC_ORIENTATION,
211     ATTR_SC_ROTATE_VALUE,
212     ATTR_SC_ROTATE_MODE,
213     ATTR_SC_VERTICAL_ASIAN,
214     ATTR_SC_WRITINGDIR,
215     ATTR_SC_LINEBREAK,                         	     // 140
216     ATTR_SC_MARGIN,
217     ATTR_SC_MERGE,
218     ATTR_SC_MERGE_FLAG,
219     ATTR_SC_VALUE_FORMAT,
220     ATTR_SC_LANGUAGE_FORMAT,
221     ATTR_SC_BACKGROUND,
222     ATTR_SC_PROTECTION,
223     ATTR_SC_BORDER,
224     ATTR_SC_BORDER_INNER,
225     ATTR_SC_SHADOW,																	// 150
226     ATTR_SC_VALIDDATA,
227     ATTR_SC_CONDITIONAL,
228     ATTR_SC_PATTERN,
229     ATTR_SC_PAGE,
230     ATTR_SC_PAGE_PAPERTRAY,
231     ATTR_SC_PAGE_SIZE,
232     ATTR_SC_PAGE_MAXSIZE,
233     ATTR_SC_PAGE_HORCENTER,
234     ATTR_SC_PAGE_VERCENTER,
235     ATTR_SC_PAGE_ON,
236     ATTR_SC_PAGE_DYNAMIC,
237     ATTR_SC_PAGE_SHARED,
238     ATTR_SC_PAGE_NOTES,
239     ATTR_SC_PAGE_GRID,
240     ATTR_SC_PAGE_HEADERS,
241     ATTR_SC_PAGE_CHARTS,
242     ATTR_SC_PAGE_OBJECTS,
243     ATTR_SC_PAGE_DRAWINGS,
244     ATTR_SC_PAGE_TOPDOWN,
245     ATTR_SC_PAGE_SCALE,
246     ATTR_SC_PAGE_SCALETOPAGES,
247     ATTR_SC_PAGE_FIRSTPAGENO,
248     ATTR_SC_PAGE_PRINTAREA,
249     ATTR_SC_PAGE_REPEATROW,
250     ATTR_SC_PAGE_REPEATCOL,
251     ATTR_SC_PAGE_PRINTTABLES,
252     ATTR_SC_PAGE_HEADERLEFT,
253     ATTR_SC_PAGE_FOOTERLEFT,
254     ATTR_SC_PAGE_HEADERRIGHT,
255     ATTR_SC_PAGE_FOOTERRIGHT,
256     ATTR_SC_PAGE_HEADERSET,
257     ATTR_SC_PAGE_FOOTERSET,
258     ATTR_SC_PAGE_FORMULAS,
259     ATTR_SC_PAGE_NULLVALS,
260 
261     ATTR_EE_PARA_XMLATTRIBS,
262     ATTR_EE_PARA_ASIANCJKSPACING,
263     ATTR_EE_PARA_NUMBULLET,
264     ATTR_EE_PARA_BULLETSTATE,
265     ATTR_EE_PARA_OUTLLR_SPACE,
266     ATTR_EE_PARA_OUTLLEVEL,
267     ATTR_EE_PARA_BULLET,
268     ATTR_EE_CHR_SCALEW,
269     ATTR_EE_CHR_RUBI_DUMMY,
270     ATTR_EE_CHR_XMLATTRIBS,
271     ATTR_EE_FEATURE_TAB,
272     ATTR_EE_FEATURE_LINEBR,
273     ATTR_EE_FEATURE_FIELD,
274 
275     ATTR_SCH_DATADESCR_DESCR,
276     ATTR_SCH_DATADESCR_SHOW_SYM,
277     ATTR_SCH_LEGEND_POS,
278     ATTR_SCH_TEXT_ORIENT,
279     ATTR_SCH_TEXT_ORDER,
280 
281     ATTR_SCH_X_AXIS_AUTO_MIN,
282     ATTR_SCH_X_AXIS_MIN,
283     ATTR_SCH_X_AXIS_AUTO_MAX,
284     ATTR_SCH_X_AXIS_MAX,
285     ATTR_SCH_X_AXIS_AUTO_STEP_MAIN,
286     ATTR_SCH_X_AXIS_STEP_MAIN,
287     ATTR_SCH_X_AXIS_AUTO_STEP_HELP,
288     ATTR_SCH_X_AXIS_STEP_HELP,
289     ATTR_SCH_X_AXIS_LOGARITHM,
290     ATTR_SCH_X_AXIS_AUTO_ORIGIN,
291     ATTR_SCH_X_AXIS_ORIGIN,
292     ATTR_SCH_Y_AXIS_AUTO_MIN,
293     ATTR_SCH_Y_AXIS_MIN,
294     ATTR_SCH_Y_AXIS_AUTO_MAX,
295     ATTR_SCH_Y_AXIS_MAX,
296     ATTR_SCH_Y_AXIS_AUTO_STEP_MAIN,
297     ATTR_SCH_Y_AXIS_STEP_MAIN,
298     ATTR_SCH_Y_AXIS_AUTO_STEP_HELP,
299     ATTR_SCH_Y_AXIS_STEP_HELP,
300     ATTR_SCH_Y_AXIS_LOGARITHM,
301     ATTR_SCH_Y_AXIS_AUTO_ORIGIN,
302     ATTR_SCH_Y_AXIS_ORIGIN,
303     ATTR_SCH_Z_AXIS_AUTO_MIN,
304     ATTR_SCH_Z_AXIS_MIN,
305     ATTR_SCH_Z_AXIS_AUTO_MAX,
306     ATTR_SCH_Z_AXIS_MAX,
307     ATTR_SCH_Z_AXIS_AUTO_STEP_MAIN,
308     ATTR_SCH_Z_AXIS_STEP_MAIN,
309     ATTR_SCH_Z_AXIS_AUTO_STEP_HELP,
310     ATTR_SCH_Z_AXIS_STEP_HELP,
311     ATTR_SCH_Z_AXIS_LOGARITHM,
312     ATTR_SCH_Z_AXIS_AUTO_ORIGIN,
313     ATTR_SCH_Z_AXIS_ORIGIN,
314 
315     ATTR_SCH_AXISTYPE,
316     ATTR_SCH_DUMMY0,
317     ATTR_SCH_DUMMY1,
318     ATTR_SCH_DUMMY2,
319     ATTR_SCH_DUMMY3,
320     ATTR_SCH_DUMMY_END,
321 
322     ATTR_SCH_STAT_AVERAGE,
323     ATTR_SCH_STAT_KIND_ERROR,
324     ATTR_SCH_STAT_PERCENT,
325     ATTR_SCH_STAT_BIGERROR,
326     ATTR_SCH_STAT_CONSTPLUS,
327     ATTR_SCH_STAT_CONSTMINUS,
328     ATTR_SCH_STAT_REGRESSTYPE,
329     ATTR_SCH_STAT_INDICATE,
330     ATTR_SCH_TEXT_DEGREES,
331     ATTR_SCH_TEXT_OVERLAP,
332     ATTR_SCH_TEXT_DUMMY0,
333     ATTR_SCH_TEXT_DUMMY1,
334     ATTR_SCH_TEXT_DUMMY2,
335     ATTR_SCH_TEXT_DUMMY3,
336 
337     ATTR_SCH_STYLE_DEEP,
338     ATTR_SCH_STYLE_3D,
339     ATTR_SCH_STYLE_VERTICAL,
340     ATTR_SCH_STYLE_BASETYPE,
341     ATTR_SCH_STYLE_LINES,
342     ATTR_SCH_STYLE_PERCENT,
343     ATTR_SCH_STYLE_STACKED,
344     ATTR_SCH_STYLE_SPLINES,
345     ATTR_SCH_STYLE_SYMBOL,
346     ATTR_SCH_STYLE_SHAPE,
347 
348     ATTR_SCH_AXIS,
349     ATTR_SCH_AXIS_AUTO_MIN,
350     ATTR_SCH_AXIS_MIN,
351     ATTR_SCH_AXIS_AUTO_MAX,
352     ATTR_SCH_AXIS_MAX,
353     ATTR_SCH_AXIS_AUTO_STEP_MAIN,
354     ATTR_SCH_AXIS_STEP_MAIN,
355     ATTR_SCH_AXIS_AUTO_STEP_HELP,
356     ATTR_SCH_AXIS_STEP_HELP,
357     ATTR_SCH_AXIS_LOGARITHM,
358     ATTR_SCH_AXIS_AUTO_ORIGIN,
359     ATTR_SCH_AXIS_ORIGIN,
360 
361     ATTR_SCH_AXIS_TICKS,
362     ATTR_SCH_AXIS_NUMFMT,
363     ATTR_SCH_AXIS_NUMFMTPERCENT,
364     ATTR_SCH_AXIS_SHOWAXIS,
365     ATTR_SCH_AXIS_SHOWDESCR,
366     ATTR_SCH_AXIS_SHOWMAINGRID,
367     ATTR_SCH_AXIS_SHOWHELPGRID,
368     ATTR_SCH_AXIS_TOPDOWN,
369     ATTR_SCH_AXIS_HELPTICKS,
370 
371     ATTR_SCH_AXIS_DUMMY0,
372     ATTR_SCH_AXIS_DUMMY1,
373     ATTR_SCH_AXIS_DUMMY2,
374     ATTR_SCH_AXIS_DUMMY3,
375     ATTR_SCH_BAR_OVERLAP,
376     ATTR_SCH_BAR_GAPWIDTH,
377 
378     ATTR_SCH_SYMBOL_BRUSH,
379     ATTR_SCH_STOCK_VOLUME,
380     ATTR_SCH_STOCK_UPDOWN,
381     ATTR_SCH_SYMBOL_SIZE,
382     ATTR_SCH_USER_DEFINED_ATTR,
383 
384     XATTR_LINESTYLE,
385     XATTR_LINEDASH,
386     XATTR_LINEWIDTH,
387     XATTR_LINECOLOR,
388     XATTR_LINESTART,
389     XATTR_LINEEND,
390     XATTR_LINESTARTWIDTH,
391     XATTR_LINEENDWIDTH,
392     XATTR_LINESTARTCENTER,
393     XATTR_LINEENDCENTER,
394     XATTR_LINETRANSPARENCE,
395     XATTR_LINEJOINT,
396     XATTR_LINERESERVED2,
397     XATTR_LINERESERVED3,
398     XATTR_LINERESERVED4,
399     XATTR_LINERESERVED5,
400     XATTR_LINERESERVED_LAST,
401     XATTR_SET_LINE,
402     XATTR_FILLSTYLE,
403     XATTR_FILLCOLOR,
404     XATTR_FILLGRADIENT,
405     XATTR_FILLHATCH,
406     XATTR_FILLBITMAP,
407     XATTR_FILLTRANSPARENCE,
408     XATTR_GRADIENTSTEPCOUNT,
409     XATTR_FILLBMP_TILE,
410     XATTR_FILLBMP_POS,
411     XATTR_FILLBMP_SIZEX,
412     XATTR_FILLBMP_SIZEY,
413     XATTR_FILLFLOATTRANSPARENCE,
414     XATTR_FILLBMP_SIZELOG,
415     XATTR_FILLBMP_TILEOFFSETX,
416     XATTR_FILLBMP_TILEOFFSETY,
417     XATTR_FILLBMP_STRETCH,
418     XATTR_FILLBMP_POSOFFSETX,
419     XATTR_FILLBMP_POSOFFSETY,
420     XATTR_FILLBACKGROUND,
421     XATTR_FILLRESERVED2,
422     XATTR_FILLRESERVED3,
423     XATTR_FILLRESERVED4,
424     XATTR_FILLRESERVED5,
425     XATTR_FILLRESERVED6,
426     XATTR_FILLRESERVED7,
427     XATTR_FILLRESERVED8,
428     XATTR_FILLRESERVED10,
429     XATTR_FILLRESERVED11,
430     XATTR_FILLRESERVED_LAST,
431     XATTR_SET_FILL,
432     XATTR_FORMTXTSTYLE,
433     XATTR_FORMTXTADJUST,
434     XATTR_FORMTXTDISTANCE,
435     XATTR_FORMTXTSTART,
436     XATTR_FORMTXTMIRROR,
437     XATTR_FORMTXTOUTLINE,
438     XATTR_FORMTXTSHADOW,
439     XATTR_FORMTXTSHDWCOLOR,
440     XATTR_FORMTXTSHDWXVAL,
441     XATTR_FORMTXTSHDWYVAL,
442     XATTR_FORMTXTSTDFORM,
443     XATTR_FORMTXTHIDEFORM,
444     XATTR_FORMTXTSHDWTRANSP,
445     XATTR_FTRESERVED2,
446     XATTR_FTRESERVED3,
447     XATTR_FTRESERVED4,
448     XATTR_FTRESERVED5,
449     XATTR_FTRESERVED_LAST,
450     XATTR_SET_TEXT,
451 
452     // SDR
453     SDRATTR_SHADOW,
454     SDRATTR_SHADOWCOLOR,
455     SDRATTR_SHADOWXDIST,
456     SDRATTR_SHADOWYDIST,
457     SDRATTR_SHADOWTRANSPARENCE,
458     SDRATTR_SHADOW3D,
459     SDRATTR_SHADOWPERSP,
460     SDRATTR_SHADOWRESERVE1,
461     SDRATTR_SHADOWRESERVE2,
462     SDRATTR_SHADOWRESERVE3,
463     SDRATTR_SHADOWRESERVE4,
464     SDRATTR_SHADOWRESERVE5,
465     SDRATTR_SET_SHADOW,
466 
467     SDRATTR_CAPTIONTYPE,
468     SDRATTR_CAPTIONFIXEDANGLE,
469     SDRATTR_CAPTIONANGLE,
470     SDRATTR_CAPTIONGAP,
471     SDRATTR_CAPTIONESCDIR,
472     SDRATTR_CAPTIONESCISREL,
473     SDRATTR_CAPTIONESCREL,
474     SDRATTR_CAPTIONESCABS,
475     SDRATTR_CAPTIONLINELEN,
476     SDRATTR_CAPTIONFITLINELEN,
477     SDRATTR_CAPTIONRESERVE1,
478     SDRATTR_CAPTIONRESERVE2,
479     SDRATTR_CAPTIONRESERVE3,
480     SDRATTR_CAPTIONRESERVE4,
481     SDRATTR_CAPTIONRESERVE5,
482     SDRATTR_SET_CAPTION,
483 
484     SDRATTR_SET_OUTLINER,
485 
486     SDRATTR_ECKENRADIUS,
487     SDRATTR_TEXT_MINFRAMEHEIGHT,
488     SDRATTR_TEXT_AUTOGROWHEIGHT,
489     SDRATTR_TEXT_FITTOSIZE,
490     SDRATTR_TEXT_LEFTDIST,
491     SDRATTR_TEXT_RIGHTDIST,
492     SDRATTR_TEXT_UPPERDIST,
493     SDRATTR_TEXT_LOWERDIST,
494     SDRATTR_TEXT_VERTADJUST,
495     SDRATTR_TEXT_MAXFRAMEHEIGHT,
496     SDRATTR_TEXT_MINFRAMEWIDTH,
497     SDRATTR_TEXT_MAXFRAMEWIDTH,
498     SDRATTR_TEXT_AUTOGROWWIDTH,
499     SDRATTR_TEXT_HORZADJUST,
500     SDRATTR_TEXT_ANIKIND,
501     SDRATTR_TEXT_ANIDIRECTION,
502     SDRATTR_TEXT_ANISTARTINSIDE,
503     SDRATTR_TEXT_ANISTOPINSIDE,
504     SDRATTR_TEXT_ANICOUNT,
505     SDRATTR_TEXT_ANIDELAY,
506     SDRATTR_TEXT_ANIAMOUNT,
507     SDRATTR_TEXT_CONTOURFRAME,
508     SDRATTR_AUTOSHAPE_ADJUSTMENT,
509     SDRATTR_XMLATTRIBUTES,
510     SDRATTR_RESERVE15,
511     SDRATTR_RESERVE16,
512     SDRATTR_RESERVE17,
513     SDRATTR_RESERVE18,
514     SDRATTR_RESERVE19,
515     SDRATTR_SET_MISC,
516 
517     SDRATTR_EDGEKIND,
518     SDRATTR_EDGENODE1HORZDIST,
519     SDRATTR_EDGENODE1VERTDIST,
520     SDRATTR_EDGENODE2HORZDIST,
521     SDRATTR_EDGENODE2VERTDIST,
522     SDRATTR_EDGENODE1GLUEDIST,
523     SDRATTR_EDGENODE2GLUEDIST,
524     SDRATTR_EDGELINEDELTAANZ,
525     SDRATTR_EDGELINE1DELTA,
526     SDRATTR_EDGELINE2DELTA,
527     SDRATTR_EDGELINE3DELTA,
528     SDRATTR_EDGERESERVE02,
529     SDRATTR_EDGERESERVE03,
530     SDRATTR_EDGERESERVE04,
531     SDRATTR_EDGERESERVE05,
532     SDRATTR_EDGERESERVE06,
533     SDRATTR_EDGERESERVE07,
534     SDRATTR_EDGERESERVE08,
535     SDRATTR_EDGERESERVE09,
536     SDRATTR_SET_EDGE,
537 
538     SDRATTR_MEASUREKIND,
539     SDRATTR_MEASURETEXTHPOS,
540     SDRATTR_MEASURETEXTVPOS,
541     SDRATTR_MEASURELINEDIST,
542     SDRATTR_MEASUREHELPLINEOVERHANG,
543     SDRATTR_MEASUREHELPLINEDIST,
544     SDRATTR_MEASUREHELPLINE1LEN,
545     SDRATTR_MEASUREHELPLINE2LEN,
546     SDRATTR_MEASUREBELOWREFEDGE,
547     SDRATTR_MEASURETEXTROTA90,
548     SDRATTR_MEASURETEXTUPSIDEDOWN,
549     SDRATTR_MEASUREOVERHANG,
550     SDRATTR_MEASUREUNIT,
551     SDRATTR_MEASURESCALE,
552     SDRATTR_MEASURESHOWUNIT,
553     SDRATTR_MEASUREFORMATSTRING,
554     SDRATTR_MEASURETEXTAUTOANGLE,
555     SDRATTR_MEASURETEXTAUTOANGLEVIEW,
556     SDRATTR_MEASURETEXTISFIXEDANGLE,
557     SDRATTR_MEASURETEXTFIXEDANGLE,
558     SDRATTR_MEASUREDECIMALPLACES,
559     SDRATTR_MEASURERESERVE05,
560     SDRATTR_MEASURERESERVE06,
561     SDRATTR_MEASURERESERVE07,
562     SDRATTR_SET_MEASURE,
563 
564     SDRATTR_CIRCKIND,
565     SDRATTR_CIRCSTARTANGLE,
566     SDRATTR_CIRCENDANGLE,
567     SDRATTR_CIRCRESERVE0,
568     SDRATTR_CIRCRESERVE1,
569     SDRATTR_CIRCRESERVE2,
570     SDRATTR_CIRCRESERVE3,
571     SDRATTR_SET_CIRC,
572 
573     SDRATTR_OBJMOVEPROTECT,
574     SDRATTR_OBJSIZEPROTECT,
575     SDRATTR_OBJPRINTABLE,
576     SDRATTR_LAYERID,
577     SDRATTR_LAYERNAME,
578     SDRATTR_OBJECTNAME,
579     SDRATTR_ALLPOSITIONX,
580     SDRATTR_ALLPOSITIONY,
581     SDRATTR_ALLSIZEWIDTH,
582     SDRATTR_ALLSIZEHEIGHT,
583     SDRATTR_ONEPOSITIONX,
584     SDRATTR_ONEPOSITIONY,
585     SDRATTR_ONESIZEWIDTH,
586     SDRATTR_ONESIZEHEIGHT,
587     SDRATTR_LOGICSIZEWIDTH,
588     SDRATTR_LOGICSIZEHEIGHT,
589     SDRATTR_ROTATEANGLE,
590     SDRATTR_SHEARANGLE,
591     SDRATTR_MOVEX,
592     SDRATTR_MOVEY,
593     SDRATTR_RESIZEXONE,
594     SDRATTR_RESIZEYONE,
595     SDRATTR_ROTATEONE,
596     SDRATTR_HORZSHEARONE,
597     SDRATTR_VERTSHEARONE,
598     SDRATTR_RESIZEXALL,
599     SDRATTR_RESIZEYALL,
600     SDRATTR_ROTATEALL,
601     SDRATTR_HORZSHEARALL,
602     SDRATTR_VERTSHEARALL,
603     SDRATTR_TRANSFORMREF1X,
604     SDRATTR_TRANSFORMREF1Y,
605     SDRATTR_TRANSFORMREF2X,
606     SDRATTR_TRANSFORMREF2Y,
607     SDRATTR_TEXTDIRECTION,
608     SDRATTR_NOTPERSISTRESERVE2,
609     SDRATTR_NOTPERSISTRESERVE3,
610     SDRATTR_NOTPERSISTRESERVE4,
611     SDRATTR_NOTPERSISTRESERVE5,
612     SDRATTR_NOTPERSISTRESERVE6,
613     SDRATTR_NOTPERSISTRESERVE7,
614     SDRATTR_NOTPERSISTRESERVE8,
615     SDRATTR_NOTPERSISTRESERVE9,
616     SDRATTR_NOTPERSISTRESERVE10,
617     SDRATTR_NOTPERSISTRESERVE11,
618     SDRATTR_NOTPERSISTRESERVE12,
619     SDRATTR_NOTPERSISTRESERVE13,
620     SDRATTR_NOTPERSISTRESERVE14,
621     SDRATTR_NOTPERSISTRESERVE15,
622 
623     SDRATTR_GRAFRED,
624     SDRATTR_GRAFGREEN,
625     SDRATTR_GRAFBLUE,
626     SDRATTR_GRAFLUMINANCE,
627     SDRATTR_GRAFCONTRAST,
628     SDRATTR_GRAFGAMMA,
629     SDRATTR_GRAFTRANSPARENCE,
630     SDRATTR_GRAFINVERT,
631     SDRATTR_GRAFMODE,
632     SDRATTR_GRAFCROP,
633     SDRATTR_GRAFRESERVE3,
634     SDRATTR_GRAFRESERVE4,
635     SDRATTR_GRAFRESERVE5,
636     SDRATTR_GRAFRESERVE6,
637     SDRATTR_SET_GRAF,
638 
639     SDRATTR_3DOBJ_PERCENT_DIAGONAL,
640     SDRATTR_3DOBJ_BACKSCALE,
641     SDRATTR_3DOBJ_DEPTH,
642     SDRATTR_3DOBJ_HORZ_SEGS,
643     SDRATTR_3DOBJ_VERT_SEGS,
644     SDRATTR_3DOBJ_END_ANGLE,
645     SDRATTR_3DOBJ_DOUBLE_SIDED,
646     SDRATTR_3DOBJ_NORMALS_KIND,
647     SDRATTR_3DOBJ_NORMALS_INVERT,
648     SDRATTR_3DOBJ_TEXTURE_PROJ_X,
649     SDRATTR_3DOBJ_TEXTURE_PROJ_Y,
650     SDRATTR_3DOBJ_SHADOW_3D,
651     SDRATTR_3DOBJ_MAT_COLOR,
652     SDRATTR_3DOBJ_MAT_EMISSION,
653     SDRATTR_3DOBJ_MAT_SPECULAR,
654     SDRATTR_3DOBJ_MAT_SPECULAR_INTENSITY,
655     SDRATTR_3DOBJ_TEXTURE_KIND,
656     SDRATTR_3DOBJ_TEXTURE_MODE,
657     SDRATTR_3DOBJ_TEXTURE_FILTER,
658 
659     SDRATTR_3DOBJ_SMOOTH_NORMALS,
660     SDRATTR_3DOBJ_SMOOTH_LIDS,
661     SDRATTR_3DOBJ_CHARACTER_MODE,
662     SDRATTR_3DOBJ_CLOSE_FRONT,
663     SDRATTR_3DOBJ_CLOSE_BACK,
664 
665     SDRATTR_3DOBJ_RESERVED_06,
666     SDRATTR_3DOBJ_RESERVED_07,
667     SDRATTR_3DOBJ_RESERVED_08,
668     SDRATTR_3DOBJ_RESERVED_09,
669     SDRATTR_3DOBJ_RESERVED_10,
670     SDRATTR_3DOBJ_RESERVED_11,
671     SDRATTR_3DOBJ_RESERVED_12,
672     SDRATTR_3DOBJ_RESERVED_13,
673     SDRATTR_3DOBJ_RESERVED_14,
674     SDRATTR_3DOBJ_RESERVED_15,
675     SDRATTR_3DOBJ_RESERVED_16,
676     SDRATTR_3DOBJ_RESERVED_17,
677     SDRATTR_3DOBJ_RESERVED_18,
678     SDRATTR_3DOBJ_RESERVED_19,
679     SDRATTR_3DOBJ_RESERVED_20,
680 
681     SDRATTR_3DSCENE_PERSPECTIVE,
682     SDRATTR_3DSCENE_DISTANCE,
683     SDRATTR_3DSCENE_FOCAL_LENGTH,
684     SDRATTR_3DSCENE_TWO_SIDED_LIGHTING,
685     SDRATTR_3DSCENE_LIGHTCOLOR_1,
686     SDRATTR_3DSCENE_LIGHTCOLOR_2,
687     SDRATTR_3DSCENE_LIGHTCOLOR_3,
688     SDRATTR_3DSCENE_LIGHTCOLOR_4,
689     SDRATTR_3DSCENE_LIGHTCOLOR_5,
690     SDRATTR_3DSCENE_LIGHTCOLOR_6,
691     SDRATTR_3DSCENE_LIGHTCOLOR_7,
692     SDRATTR_3DSCENE_LIGHTCOLOR_8,
693     SDRATTR_3DSCENE_AMBIENTCOLOR,
694     SDRATTR_3DSCENE_LIGHTON_1,
695     SDRATTR_3DSCENE_LIGHTON_2,
696     SDRATTR_3DSCENE_LIGHTON_3,
697     SDRATTR_3DSCENE_LIGHTON_4,
698     SDRATTR_3DSCENE_LIGHTON_5,
699     SDRATTR_3DSCENE_LIGHTON_6,
700     SDRATTR_3DSCENE_LIGHTON_7,
701     SDRATTR_3DSCENE_LIGHTON_8,
702     SDRATTR_3DSCENE_LIGHTDIRECTION_1,
703     SDRATTR_3DSCENE_LIGHTDIRECTION_2,
704     SDRATTR_3DSCENE_LIGHTDIRECTION_3,
705     SDRATTR_3DSCENE_LIGHTDIRECTION_4,
706     SDRATTR_3DSCENE_LIGHTDIRECTION_5,
707     SDRATTR_3DSCENE_LIGHTDIRECTION_6,
708     SDRATTR_3DSCENE_LIGHTDIRECTION_7,
709     SDRATTR_3DSCENE_LIGHTDIRECTION_8,
710     SDRATTR_3DSCENE_SHADOW_SLANT,
711     SDRATTR_3DSCENE_SHADE_MODE,
712     SDRATTR_3DSCENE_RESERVED_01,
713     SDRATTR_3DSCENE_RESERVED_02,
714     SDRATTR_3DSCENE_RESERVED_03,
715     SDRATTR_3DSCENE_RESERVED_04,
716     SDRATTR_3DSCENE_RESERVED_05,
717     SDRATTR_3DSCENE_RESERVED_06,
718     SDRATTR_3DSCENE_RESERVED_07,
719     SDRATTR_3DSCENE_RESERVED_08,
720     SDRATTR_3DSCENE_RESERVED_09,
721     SDRATTR_3DSCENE_RESERVED_10,
722     SDRATTR_3DSCENE_RESERVED_11,
723     SDRATTR_3DSCENE_RESERVED_12,
724     SDRATTR_3DSCENE_RESERVED_13,
725     SDRATTR_3DSCENE_RESERVED_14,
726     SDRATTR_3DSCENE_RESERVED_15,
727     SDRATTR_3DSCENE_RESERVED_16,
728     SDRATTR_3DSCENE_RESERVED_17,
729     SDRATTR_3DSCENE_RESERVED_18,
730     SDRATTR_3DSCENE_RESERVED_19,
731     SDRATTR_3DSCENE_RESERVED_20
732   };
733 
734   //! destructor
735   virtual ~StarAttribute();
736   //! returns the attribute type
getType() const737   Type getType() const
738   {
739     return m_type;
740   }
741   //! create a new attribute
742   virtual std::shared_ptr<StarAttribute> create() const=0;
743   //! read an attribute zone
744   virtual bool read(StarZone &zone, int vers, long endPos, StarObject &document)=0;
745   //! add to a state
addTo(StarState & state) const746   void addTo(StarState &state) const
747   {
748     std::set<StarAttribute const *> done;
749     addTo(state, done);
750   }
751   //! add to send the zone data
send(STOFFListenerPtr & listener,StarState & state) const752   bool send(STOFFListenerPtr &listener, StarState &state) const
753   {
754     std::set<StarAttribute const *> done;
755     return send(listener, state, done);
756   }
757   //! add to a state(internal)
addTo(StarState &,std::set<StarAttribute const * > &) const758   virtual void addTo(StarState &/*state*/, std::set<StarAttribute const *> &/*done*/) const
759   {
760   }
761   //! try to send the child zone(internal)
send(STOFFListenerPtr &,StarState &,std::set<StarAttribute const * > &) const762   virtual bool send(STOFFListenerPtr &/*listener*/, StarState &/*state*/, std::set<StarAttribute const *> &/*done*/) const
763   {
764     return false;
765   }
766   //! returns the debug name
getDebugName() const767   std::string const &getDebugName() const
768   {
769     return m_debugName;
770   }
771   //! debug function to print the data
print(libstoff::DebugStream & o,std::set<StarAttribute const * > & done) const772   virtual void print(libstoff::DebugStream &o, std::set<StarAttribute const *> &done) const
773   {
774     if (done.find(this)!=done.end()) {
775       o << m_debugName << ",";
776       return;
777     }
778     done.insert(this);
779     printData(o);
780   }
781   //! debug function to print the data
printData(libstoff::DebugStream & o) const782   virtual void printData(libstoff::DebugStream &o) const
783   {
784     o << m_debugName << ",";
785   }
786 protected:
787   //! constructor
StarAttribute(Type type,std::string const & debugName)788   StarAttribute(Type type, std::string const &debugName)
789     : m_type(type)
790     , m_debugName(debugName)
791   {
792   }
793   //! copy constructor
StarAttribute(StarAttribute const & orig)794   explicit StarAttribute(StarAttribute const &orig)
795     : m_type(orig.m_type)
796     , m_debugName(orig.m_debugName)
797   {
798   }
799 
800   //
801   // data
802   //
803 
804   //! the type
805   Type m_type;
806   //! the debug name
807   std::string m_debugName;
808 
809 private:
810   StarAttribute &operator=(StarAttribute const &orig);
811 };
812 
813 //! a boolean attribute
814 class StarAttributeBool : public StarAttribute
815 {
816 public:
817   //! constructor
StarAttributeBool(Type type,std::string const & debugName,bool value)818   StarAttributeBool(Type type, std::string const &debugName, bool value)
819     : StarAttribute(type, debugName)
820     , m_value(value)
821   {
822   }
823   //! create a new attribute
create() const824   std::shared_ptr<StarAttribute> create() const override
825   {
826     return std::shared_ptr<StarAttribute>(new StarAttributeBool(*this));
827   }
828   //! read a zone
829   bool read(StarZone &zone, int ver, long endPos, StarObject &object) override;
830   //! debug function to print the data
printData(libstoff::DebugStream & o) const831   void printData(libstoff::DebugStream &o) const override
832   {
833     o << m_debugName;
834     if (m_value) o << "=true";
835     o << ",";
836   }
837 protected:
838   //! copy constructor
839   StarAttributeBool(StarAttributeBool const &) = default;
840   // the bool value
841   bool m_value;
842 };
843 
844 //! a color attribute
845 class StarAttributeColor : public StarAttribute
846 {
847 public:
848   //! constructor
StarAttributeColor(Type type,std::string const & debugName,STOFFColor const & value)849   StarAttributeColor(Type type, std::string const &debugName, STOFFColor const &value)
850     : StarAttribute(type, debugName)
851     , m_value(value)
852     , m_defValue(value)
853   {
854   }
855   //! create a new attribute
create() const856   std::shared_ptr<StarAttribute> create() const override
857   {
858     return std::shared_ptr<StarAttribute>(new StarAttributeColor(*this));
859   }
860   //! read a zone
861   bool read(StarZone &zone, int vers, long endPos, StarObject &object) override;
862   //! debug function to print the data
printData(libstoff::DebugStream & o) const863   void printData(libstoff::DebugStream &o) const override
864   {
865     o << m_debugName << "[col=" << m_value << "],";
866   }
867 protected:
868   //! copy constructor
869   StarAttributeColor(StarAttributeColor const &) = default;
870   //! the color value
871   STOFFColor m_value;
872   //! the default value
873   STOFFColor m_defValue;
874 };
875 
876 //! a double attribute
877 class StarAttributeDouble : public StarAttribute
878 {
879 public:
880   //! constructor
StarAttributeDouble(Type type,std::string const & debugName,double value)881   StarAttributeDouble(Type type, std::string const &debugName, double value) : StarAttribute(type, debugName), m_value(value)
882   {
883   }
884   //! create a new attribute
create() const885   std::shared_ptr<StarAttribute> create() const override
886   {
887     return std::shared_ptr<StarAttribute>(new StarAttributeDouble(*this));
888   }
889   //! read a zone
890   bool read(StarZone &zone, int vers, long endPos, StarObject &object) override;
891 
892   //! debug function to print the data
printData(libstoff::DebugStream & o) const893   void printData(libstoff::DebugStream &o) const override
894   {
895     o << m_debugName;
896     if (m_value<0 || m_value>0) o << "=" << m_value;
897     o << ",";
898   }
899 protected:
900   //! copy constructor
901   StarAttributeDouble(StarAttributeDouble const &) = default;
902   // the double value
903   double m_value;
904 };
905 
906 //! an integer attribute
907 class StarAttributeInt : public StarAttribute
908 {
909 public:
910   //! constructor
StarAttributeInt(Type type,std::string const & debugName,int intSize,int value)911   StarAttributeInt(Type type, std::string const &debugName, int intSize, int value)
912     : StarAttribute(type, debugName)
913     , m_value(value)
914     , m_intSize(intSize)
915   {
916     if (intSize!=1 && intSize!=2 && intSize!=4) {
917       STOFF_DEBUG_MSG(("StarAttributeInt: bad num size\n"));
918       m_intSize=0;
919     }
920   }
921   //! create a new attribute
create() const922   std::shared_ptr<StarAttribute> create() const override
923   {
924     return std::shared_ptr<StarAttribute>(new StarAttributeInt(*this));
925   }
926   //! read a zone
927   bool read(StarZone &zone, int vers, long endPos, StarObject &object) override;
928   //! debug function to print the data
printData(libstoff::DebugStream & o) const929   void printData(libstoff::DebugStream &o) const override
930   {
931     o << m_debugName;
932     if (m_value) o << "=" << m_value;
933     o << ",";
934   }
935 
936 protected:
937   //! copy constructor
938   StarAttributeInt(StarAttributeInt const &) = default;
939   // the int value
940   int m_value;
941   // number of byte 1,2,4
942   int m_intSize;
943 };
944 
945 //! a unsigned integer attribute
946 class StarAttributeUInt : public StarAttribute
947 {
948 public:
949   //! constructor
StarAttributeUInt(Type type,std::string const & debugName,int intSize,unsigned int value)950   StarAttributeUInt(Type type, std::string const &debugName, int intSize, unsigned int value)
951     : StarAttribute(type, debugName)
952     , m_value(value)
953     , m_intSize(intSize)
954   {
955     if (intSize!=1 && intSize!=2 && intSize!=4) {
956       STOFF_DEBUG_MSG(("StarAttributeUInt: bad num size\n"));
957       m_intSize=0;
958     }
959   }
960   //! create a new attribute
create() const961   std::shared_ptr<StarAttribute> create() const override
962   {
963     return std::shared_ptr<StarAttribute>(new StarAttributeUInt(*this));
964   }
965   //! read a zone
966   bool read(StarZone &zone, int vers, long endPos, StarObject &object) override;
967   //! debug function to print the data
printData(libstoff::DebugStream & o) const968   void printData(libstoff::DebugStream &o) const override
969   {
970     o << m_debugName;
971     if (m_value) o << "=" << m_value;
972     o << ",";
973   }
974 protected:
975   //! copy constructor
976   StarAttributeUInt(StarAttributeUInt const &) = default;
977   // the int value
978   unsigned int m_value;
979   // number of byte 1,2,4
980   int m_intSize;
981 };
982 
983 //! an Vec2i attribute
984 class StarAttributeVec2i : public StarAttribute
985 {
986 public:
987   //! constructor
StarAttributeVec2i(Type type,std::string const & debugName,int intSize,STOFFVec2i value=STOFFVec2i (0,0))988   StarAttributeVec2i(Type type, std::string const &debugName, int intSize, STOFFVec2i value=STOFFVec2i(0,0))
989     : StarAttribute(type, debugName)
990     , m_value(value)
991     , m_intSize(intSize)
992   {
993     if (intSize!=1 && intSize!=2 && intSize!=4) {
994       STOFF_DEBUG_MSG(("StarAttributeVec2i: bad num size\n"));
995       m_intSize=0;
996     }
997   }
998   //! create a new attribute
create() const999   std::shared_ptr<StarAttribute> create() const override
1000   {
1001     return std::shared_ptr<StarAttribute>(new StarAttributeVec2i(*this));
1002   }
1003   //! read a zone
1004   bool read(StarZone &zone, int vers, long endPos, StarObject &object) override;
1005   //! debug function to print the data
printData(libstoff::DebugStream & o) const1006   void printData(libstoff::DebugStream &o) const override
1007   {
1008     o << m_debugName;
1009     if (m_value!=STOFFVec2i(0,0)) o << "=" << m_value;
1010     o << ",";
1011   }
1012 
1013 protected:
1014   //! copy constructor
1015   StarAttributeVec2i(StarAttributeVec2i const &) = default;
1016   // the int value
1017   STOFFVec2i m_value;
1018   // number of byte 1,2,4
1019   int m_intSize;
1020 };
1021 
1022 //! a list of item attribute of StarAttributeInternal
1023 class StarAttributeItemSet : public StarAttribute
1024 {
1025 public:
1026   //! constructor
StarAttributeItemSet(Type type,std::string const & debugName,std::vector<STOFFVec2i> const & limits)1027   StarAttributeItemSet(Type type, std::string const &debugName, std::vector<STOFFVec2i> const &limits)
1028     : StarAttribute(type, debugName)
1029     , m_limits(limits)
1030     , m_itemSet()
1031   {
1032   }
1033   //! create a new attribute
create() const1034   std::shared_ptr<StarAttribute> create() const override
1035   {
1036     return std::shared_ptr<StarAttribute>(new StarAttributeItemSet(*this));
1037   }
1038   //! read a zone
1039   bool read(StarZone &zone, int vers, long endPos, StarObject &object) override;
1040   //! debug function to print the data
1041   void print(libstoff::DebugStream &o, std::set<StarAttribute const *> &done) const override;
1042 
1043 protected:
1044   //! add to a state
1045   void addTo(StarState &state, std::set<StarAttribute const *> &done) const override;
1046   //! try to send the sone data
1047   bool send(STOFFListenerPtr &listener, StarState &state, std::set<StarAttribute const *> &done) const override;
1048 
1049   //! copy constructor
1050   StarAttributeItemSet(StarAttributeItemSet const &) = default;
1051   //! the pool limits id
1052   std::vector<STOFFVec2i> m_limits;
1053   //! the list of items
1054   StarItemSet m_itemSet;
1055 };
1056 
1057 //! void attribute of StarAttribute
1058 class StarAttributeVoid : public StarAttribute
1059 {
1060 public:
1061   //! constructor
StarAttributeVoid(Type type,std::string const & debugName)1062   StarAttributeVoid(Type type, std::string const &debugName)
1063     : StarAttribute(type, debugName)
1064   {
1065   }
1066   //! create a new attribute
create() const1067   std::shared_ptr<StarAttribute> create() const override
1068   {
1069     return std::shared_ptr<StarAttribute>(new StarAttributeVoid(*this));
1070   }
1071   //! read a zone
1072   bool read(StarZone &zone, int vers, long endPos, StarObject &object) override;
1073 };
1074 
1075 /** \brief the main class to read/.. a StarOffice attribute
1076  *
1077  *
1078  *
1079  */
1080 class StarAttributeManager
1081 {
1082 public:
1083   //! constructor
1084   StarAttributeManager();
1085   //! destructor
1086   virtual ~StarAttributeManager();
1087 
1088 
1089   //! try to read an attribute and return it
1090   std::shared_ptr<StarAttribute> readAttribute(StarZone &zone, int which, int vers, long endPos, StarObject &document);
1091   //! try to return the default attribute
1092   std::shared_ptr<StarAttribute> getDefaultAttribute(int which);
1093   //! return a dummy attribute
1094   static std::shared_ptr<StarAttribute> getDummyAttribute(int type=-1);
1095 
1096 protected:
1097   //
1098   // data
1099   //
1100 private:
1101   //! the state
1102   std::shared_ptr<StarAttributeInternal::State> m_state;
1103 };
1104 #endif
1105 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
1106