Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGHtmlElement.cxx
Go to the documentation of this file.
1// $Id$
2// Author: Valeriy Onuchin 03/05/2007
3
4/*************************************************************************
5 * Copyright (C) 1995-2001, Rene Brun, Fons Rademakers and Reiner Rohlfs *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12/**************************************************************************
13
14 HTML widget for xclass. Based on tkhtml 1.28
15 Copyright (C) 1997-2000 D. Richard Hipp <drh@acm.org>
16 Copyright (C) 2002-2003 Hector Peraza.
17
18 This library is free software; you can redistribute it and/or
19 modify it under the terms of the GNU Library General Public
20 License as published by the Free Software Foundation; either
21 version 2 of the License, or (at your option) any later version.
22
23 This library is distributed in the hope that it will be useful,
24 but WITHOUT ANY WARRANTY; without even the implied warranty of
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26 Library General Public License for more details.
27
28 You should have received a copy of the GNU Library General Public
29 License along with this library; if not, write to the Free
30 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
31
32**************************************************************************/
33
34#include <string.h>
35
36#include "TGHtml.h"
37#include "TImage.h"
38
39// TODO: make these TGHtml static members
40
41extern void HtmlTranslateEscapes(char *z);
42extern void ToLower(char *z);
43
44
45////////////////////////////////////////////////////////////////////////////////
46/// HTML element constructor.
47
49{
50 fPNext = fPPrev = 0;
51 fStyle.fFont = 0;
52 fStyle.fColor = 0;
54 fStyle.fAlign = 0;
55 fStyle.fBgcolor = 0;
56 fStyle.fExpbg = 0;
57 fStyle.fFlags = 0;
58 fType = etype;
59 fFlags = 0;
60 fCount = 0;
61 fElId = 0;
62 fOffs = 0;
63}
64
65////////////////////////////////////////////////////////////////////////////////
66/// HTML element constructor.
67
69{
70 fZText = new char[size + 1];
71 fX = 0; fY = 0; fW = 0;
72 fAscent = 0;
73 fDescent = 0;
74 fSpaceWidth = 0;
75}
76
77////////////////////////////////////////////////////////////////////////////////
78/// HTML element destructor.
79
81{
82 delete[] fZText;
83}
84
85////////////////////////////////////////////////////////////////////////////////
86/// HTML mrkup element constructor.
87
88TGHtmlMarkupElement::TGHtmlMarkupElement(int type2, int argc, int arglen[],
89 char *av[]) : TGHtmlElement(type2)
90{
91 fCount = argc - 1;
92
93 if (argc > 1) {
94 fArgv = new char*[argc+1];
95 for (int i = 1; i < argc; i++) {
96 if (arglen) {
97 fArgv[i-1] = new char[arglen[i]+1];
98 //sprintf(fArgv[i-1], "%.*s", arglen[i], av[i]);
99 strncpy(fArgv[i-1], av[i], arglen[i]);
100 fArgv[i-1][arglen[i]] = 0;
102 if ((i & 1) == 1) ToLower(fArgv[i-1]);
103 } else {
104 fArgv[i-1] = StrDup(av[i]);
106 if ((i & 1) == 1) ToLower(fArgv[i-1]);
107 }
108 }
109 fArgv[argc-1] = 0;
110
111 // Following is just a flag that this is unmodified
112 fArgv[argc] = (char *) fArgv;
113
114 } else {
115 fArgv = 0;
116 }
117}
118
119////////////////////////////////////////////////////////////////////////////////
120/// HTML markup element destructor.
121
123{
124 if (fArgv) {
125 for (int i = 0; i < fCount; ++i) delete [] fArgv[i];
126 delete [] fArgv;
127 }
128}
129
130////////////////////////////////////////////////////////////////////////////////
131/// Lookup an argument in the given markup with the name given.
132/// Return a pointer to its value, or the given default
133/// value if it doesn't appear.
134
135const char *TGHtmlMarkupElement::MarkupArg(const char *tag, const char *zDefault)
136{
137 int i;
138
139 for (i = 0; i < fCount; i += 2) {
140 if (strcmp(fArgv[i], tag) == 0) return fArgv[i+1];
141 }
142 return zDefault;
143}
144
145////////////////////////////////////////////////////////////////////////////////
146/// Return an alignment or justification flag associated with the
147/// given markup. The given default value is returned if no alignment is
148/// specified.
149
151{
152 const char *z = MarkupArg("align", 0);
153 int rc = dflt;
154
155 if (z) {
156 if (strcasecmp(z, "left") == 0) {
157 rc = ALIGN_Left;
158 } else if (strcasecmp(z, "right") == 0) {
159 rc = ALIGN_Right;
160 } else if (strcasecmp(z, "center") == 0) {
161 rc = ALIGN_Center;
162 }
163 }
164
165 return rc;
166}
167
168////////////////////////////////////////////////////////////////////////////////
169/// The "type" argument to the given element might describe the type
170/// for an ordered list. Return the corresponding LI_TYPE_* entry
171/// if this is the case, or the default value if it isn't.
172/// (this and the following should be defined only for TGHtmlLi)
173
175{
176 const char *z = MarkupArg("type", 0);
177 if (z) {
178 switch (*z) {
179 case 'A': dflt = LI_TYPE_Enum_A; break;
180 case 'a': dflt = LI_TYPE_Enum_a; break;
181 case '1': dflt = LI_TYPE_Enum_1; break;
182 case 'I': dflt = LI_TYPE_Enum_I; break;
183 case 'i': dflt = LI_TYPE_Enum_i; break;
184 default: break;
185 }
186 }
187
188 return dflt;
189}
190
191////////////////////////////////////////////////////////////////////////////////
192/// The "type" argument to the given element might describe a type
193/// for an unordered list. Return the corresponding LI_TYPE entry
194/// if this is the case, or the default value if it isn't.
195
197{
198 const char *z = MarkupArg("type", 0);
199 if (z) {
200 if (strcasecmp(z, "disc") == 0) {
201 dflt = LI_TYPE_Bullet1;
202 } else if (strcasecmp(z, "circle") == 0) {
203 dflt = LI_TYPE_Bullet2;
204 } else if (strcasecmp(z, "square") == 0) {
205 dflt = LI_TYPE_Bullet3;
206 }
207 }
208
209 return dflt;
210}
211
212//int TGHtmlMarkupElement::GetVerticalAlignment(int dflt);
213
214////////////////////////////////////////////////////////////////////////////////
215/// HTML table element constructor.
216
217TGHtmlTable::TGHtmlTable(int type2, int argc, int arglen[], char *argv2[]) :
218 TGHtmlMarkupElement(type2, argc, arglen, argv2)
219{
220 fBorderWidth = 0;
221 fNCol = 0;
222 fNRow = 0;
223 fX = 0; fY = 0; fW = 0; fH = 0;
224 fPEnd = 0;
225 fBgImage = 0;
226 fHasbg = 0;
227 for (int i=0;i<=HTML_MAX_COLUMNS;++i) {
228 fMinW[i] = fMaxW[i] = 0;
229 }
230}
231
232////////////////////////////////////////////////////////////////////////////////
233/// HTML table element destructor.
234
236{
237 if (fBgImage) delete fBgImage;
238}
239
240////////////////////////////////////////////////////////////////////////////////
241/// HTML cell element constructor.
242
243TGHtmlCell::TGHtmlCell(int type2, int argc, int arglen[], char *argv2[]) :
244 TGHtmlMarkupElement(type2, argc, arglen, argv2)
245{
246 fRowspan = 0;
247 fColspan = 0;
248 fX = 0; fY = 0; fW = 0; fH = 0;
249 fPTable = 0;
250 fPRow = 0;
251 fPEnd = 0;
252 fBgImage = 0;
253}
254
255////////////////////////////////////////////////////////////////////////////////
256/// HTML cell element destructor.
257
259{
260 if (fBgImage) delete fBgImage;
261}
262
263////////////////////////////////////////////////////////////////////////////////
264/// HTML ref element constructor.
265
266TGHtmlRef::TGHtmlRef(int type2, int argc, int arglen[], char *argv2[]) :
267 TGHtmlMarkupElement(type2, argc, arglen, argv2)
268{
269 fPOther = 0;
270 fBgImage = 0;
271}
272
273////////////////////////////////////////////////////////////////////////////////
274/// HTML ref element destructor.
275
277{
278 if (fBgImage) delete fBgImage;
279}
280
281////////////////////////////////////////////////////////////////////////////////
282/// HTML li element constructor.
283
284TGHtmlLi::TGHtmlLi(int type2, int argc, int arglen[], char *argv2[]) :
285 TGHtmlMarkupElement(type2, argc, arglen, argv2)
286{
287 fLtype = 0;
288 fAscent = 0;
289 fDescent = 0;
290 fCnt = 0;
291 fX = 0; fY = 0;
292}
293
294////////////////////////////////////////////////////////////////////////////////
295/// HTML list start element constructor.
296
297TGHtmlListStart::TGHtmlListStart(int type2, int argc, int arglen[], char *argv2[]) :
298 TGHtmlMarkupElement(type2, argc, arglen, argv2)
299{
300 fLtype = 0;
301 fCompact = 0;
302 fCnt = 0;
303 fWidth = 0;
304 fLPrev = 0;
305}
306
307////////////////////////////////////////////////////////////////////////////////
308/// HTML image element constructor.
309
311 int arglen[], char *argv2[]) :
312 TGHtmlMarkupElement(type2, argc, arglen, argv2)
313{
314 fAlign = 0;
315 fTextAscent = 0;
316 fTextDescent = 0;
317 fRedrawNeeded = 0;
318 fX = 0; fY = 0; fW = 0; fH = 0;
319 fAscent = 0;
320 fDescent = 0;
321 fZAlt = 0;
322 fPImage = 0;
323 fPMap = 0;
324 fINext = 0;
325}
326
327////////////////////////////////////////////////////////////////////////////////
328/// HTML form element constructor.
329
330TGHtmlForm::TGHtmlForm(int type2, int argc, int arglen[], char *argv2[]) :
331 TGHtmlMarkupElement(type2, argc, arglen, argv2)
332{
333 fFormId = 0;
334 fElements = 0;
335 fHasctl = 0;
336 fPFirst = 0;
337 fPEnd = 0;
338}
339
340////////////////////////////////////////////////////////////////////////////////
341/// HTML hr element constructor.
342
343TGHtmlHr::TGHtmlHr(int type2, int argc, int arglen[], char *argv2[]) :
344 TGHtmlMarkupElement(type2, argc, arglen, argv2)
345{
346 fX = 0; fY = 0; fW = 0; fH = 0;
347 fIs3D = 0;
348}
349
350////////////////////////////////////////////////////////////////////////////////
351/// HTML anchor element constructor.
352
353TGHtmlAnchor::TGHtmlAnchor(int type2, int argc, int arglen[], char *argv2[]) :
354 TGHtmlMarkupElement(type2, argc, arglen, argv2)
355{
356 fY = 0;
357}
358
359////////////////////////////////////////////////////////////////////////////////
360/// HTML script element constructor.
361
362TGHtmlScript::TGHtmlScript(int type2, int argc, int arglen[], char *argv2[]) :
363 TGHtmlMarkupElement(type2, argc, arglen, argv2)
364{
365 fNStart = -1;
366 fNScript = 0;
367}
368
369////////////////////////////////////////////////////////////////////////////////
370/// HTML map area constructor.
371
372TGHtmlMapArea::TGHtmlMapArea(int type2, int argc, int arglen[], char *argv2[]) :
373 TGHtmlMarkupElement(type2, argc, arglen, argv2)
374{
375 fMType = 0;
376 fCoords = 0;
377 fNum = 0;
378}
379
380
381//----------------------------------------------------------------------
382
383#if 0
385{
386 // HTML block element constructor.
387}
388
390{
391 // HTML block element destructor.
392}
393#endif
394
395////////////////////////////////////////////////////////////////////////////////
396/// HTML input element constructor.
397
398TGHtmlInput::TGHtmlInput(int type2, int argc, int arglen[], char *argv2[]) :
399 TGHtmlMarkupElement(type2, argc, arglen, argv2)
400{
401 fPForm = 0;
402 fINext = 0;
403 fFrame = 0;
404 fHtml = 0;
405 fPEnd = 0;
406 fInpId = 0; fSubId = 0;
407 fX = 0; fY = 0; fW = 0; fH = 0;
408 fPadLeft = 0;
409 fAlign = 0;
410 fTextAscent = 0;
411 fTextDescent = 0;
412 fItype = 0;
413 fSized = 0;
414 fCnt = 0;
415}
416
417////////////////////////////////////////////////////////////////////////////////
418/// Mark this element as being empty. It has no widget and doesn't appear on
419/// the screen.
420///
421/// This is called for HIDDEN inputs or when the corresponding widget is
422/// not created.
423
425{
426 fFrame = NULL;
427 fW = 0;
428 fH = 0;
429 fFlags &= ~HTML_Visible;
431 fSized = 1;
432}
433
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
void ToLower(char *z)
Convert a string to all lower-case letters.
void HtmlTranslateEscapes(char *z)
Translate escape sequences in the string "z".
@ Html_Text
#define LI_TYPE_Enum_a
Definition TGHtml.h:444
#define LI_TYPE_Bullet2
Definition TGHtml.h:440
#define ALIGN_Left
Definition TGHtml.h:209
#define HTML_MAX_COLUMNS
Definition TGHtml.h:343
#define STY_Invisible
Definition TGHtml.h:240
#define ALIGN_Right
Definition TGHtml.h:210
#define LI_TYPE_Bullet1
Definition TGHtml.h:439
#define LI_TYPE_Enum_1
Definition TGHtml.h:442
#define ALIGN_Center
Definition TGHtml.h:211
#define LI_TYPE_Enum_i
Definition TGHtml.h:446
#define LI_TYPE_Bullet3
Definition TGHtml.h:441
#define LI_TYPE_Enum_I
Definition TGHtml.h:445
#define LI_TYPE_Enum_A
Definition TGHtml.h:443
TString ToLower(const TString &s)
Return a lower-case version of str.
Definition TString.cxx:1497
char * StrDup(const char *str)
Duplicate the string str.
Definition TString.cxx:2557
Html_32_t fY
Definition TGHtml.h:668
TGHtmlAnchor(int type, int argc, int arglen[], char *argv[])
HTML anchor element constructor.
~TGHtmlBlock() override
dtor.
TGHtmlBlock()
ctor.
Html_32_t fH
Definition TGHtml.h:392
TImage * fBgImage
Definition TGHtml.h:396
Html_16_t fColspan
Definition TGHtml.h:388
~TGHtmlCell() override
HTML cell element destructor.
Html_16_t fX
Definition TGHtml.h:389
Html_16_t fW
Definition TGHtml.h:390
Html_16_t fRowspan
Definition TGHtml.h:387
TGHtmlCell(int type, int argc, int arglen[], char *argv[])
HTML cell element constructor.
TGHtmlTable * fPTable
Definition TGHtml.h:393
TGHtmlElement * fPEnd
Definition TGHtml.h:395
Html_32_t fY
Definition TGHtml.h:391
TGHtmlElement * fPRow
Definition TGHtml.h:394
Html_u8_t fFlags
Definition TGHtml.h:266
Html_u8_t fType
Definition TGHtml.h:265
SHtmlStyle_t fStyle
Definition TGHtml.h:264
TGHtmlElement(int etype=0)
HTML element constructor.
TGHtmlElement * fPPrev
Definition TGHtml.h:263
Html_16_t fCount
Definition TGHtml.h:267
TGHtmlElement * fPNext
Definition TGHtml.h:262
unsigned int fHasctl
Definition TGHtml.h:641
TGHtmlElement * fPEnd
Definition TGHtml.h:643
Html_u16_t fFormId
Definition TGHtml.h:639
TGHtmlForm(int type, int argc, int arglen[], char *argv[])
HTML form element constructor.
unsigned int fElements
Definition TGHtml.h:640
TGHtmlElement * fPFirst
Definition TGHtml.h:642
Html_32_t fY
Definition TGHtml.h:654
Html_u16_t fW
Definition TGHtml.h:656
Html_u16_t fX
Definition TGHtml.h:655
Html_u8_t fIs3D
Definition TGHtml.h:657
TGHtmlHr(int type, int argc, int arglen[], char *argv[])
HTML hr element constructor.
Html_u16_t fH
Definition TGHtml.h:656
TGHtmlImage * fPImage
Definition TGHtml.h:552
TGHtmlImageMarkup * fINext
Definition TGHtml.h:554
Html_16_t fAscent
Definition TGHtml.h:547
Html_u8_t fRedrawNeeded
Definition TGHtml.h:543
Html_32_t fY
Definition TGHtml.h:550
Html_16_t fW
Definition TGHtml.h:546
Html_u8_t fTextAscent
Definition TGHtml.h:541
TGHtmlImageMarkup(int type, int argc, int arglen[], char *argv[])
HTML image element constructor.
TGHtmlElement * fPMap
Definition TGHtml.h:553
Html_16_t fDescent
Definition TGHtml.h:548
Html_16_t fH
Definition TGHtml.h:545
Html_u8_t fAlign
Definition TGHtml.h:540
Html_16_t fX
Definition TGHtml.h:549
Html_u8_t fTextDescent
Definition TGHtml.h:542
const char * fZAlt
Definition TGHtml.h:551
void Empty()
Mark this element as being empty.
Html_u8_t fTextAscent
Definition TGHtml.h:601
Html_u16_t fW
Definition TGHtml.h:598
Html_u8_t fTextDescent
Definition TGHtml.h:602
Html_u8_t fItype
Definition TGHtml.h:603
Html_u8_t fSized
Definition TGHtml.h:604
Html_u16_t fH
Definition TGHtml.h:598
TGFrame * fFrame
Definition TGHtml.h:591
Html_u16_t fX
Definition TGHtml.h:597
TGHtml * fHtml
Definition TGHtml.h:592
Html_u8_t fAlign
Definition TGHtml.h:600
TGHtmlElement * fPEnd
Definition TGHtml.h:593
Html_u16_t fInpId
Definition TGHtml.h:594
Html_u16_t fCnt
Definition TGHtml.h:605
Html_u8_t fPadLeft
Definition TGHtml.h:599
TGHtmlForm * fPForm
Definition TGHtml.h:589
Html_u16_t fSubId
Definition TGHtml.h:595
TGHtmlInput * fINext
Definition TGHtml.h:590
Html_32_t fY
Definition TGHtml.h:596
TGHtmlInput(int type, int argc, int arglen[], char *argv[])
HTML input element constructor.
Html_u8_t fDescent
Definition TGHtml.h:426
Html_u8_t fAscent
Definition TGHtml.h:425
Html_32_t fY
Definition TGHtml.h:429
TGHtmlLi(int type, int argc, int arglen[], char *argv[])
HTML li element constructor.
Html_16_t fX
Definition TGHtml.h:428
Html_16_t fCnt
Definition TGHtml.h:427
Html_u8_t fLtype
Definition TGHtml.h:424
TGHtmlListStart * fLPrev
Definition TGHtml.h:460
Html_u8_t fLtype
Definition TGHtml.h:456
TGHtmlListStart(int type, int argc, int arglen[], char *argv[])
HTML list start element constructor.
Html_u16_t fWidth
Definition TGHtml.h:459
Html_u16_t fCnt
Definition TGHtml.h:458
Html_u8_t fCompact
Definition TGHtml.h:457
TGHtmlMapArea(int type, int argc, int arglen[], char *argv[])
HTML map area constructor.
int * fCoords
Definition TGHtml.h:474
int GetAlignment(int dflt) override
Return an alignment or justification flag associated with the given markup.
int GetOrderedListType(int dflt) override
The "type" argument to the given element might describe the type for an ordered list.
~TGHtmlMarkupElement() override
HTML markup element destructor.
TGHtmlMarkupElement(int type, int argc, int arglen[], char *argv[])
HTML mrkup element constructor.
int GetUnorderedListType(int dflt) override
The "type" argument to the given element might describe a type for an unordered list.
const char * MarkupArg(const char *tag, const char *zDefault) override
Lookup an argument in the given markup with the name given.
TImage * fBgImage
Definition TGHtml.h:412
~TGHtmlRef() override
HTML ref element destructor.
TGHtmlRef(int type, int argc, int arglen[], char *argv[])
HTML ref element constructor.
TGHtmlElement * fPOther
Definition TGHtml.h:411
int fNStart
Definition TGHtml.h:684
TGHtmlScript(int type, int argc, int arglen[], char *argv[])
HTML script element constructor.
int fNScript
Definition TGHtml.h:685
Html_u8_t fBorderWidth
Definition TGHtml.h:360
TGHtmlTable(int type, int argc, int arglen[], char *argv[])
HTML table element constructor.
int fHasbg
Definition TGHtml.h:371
int fMaxW[40+1]
Definition TGHtml.h:368
TGHtmlElement * fPEnd
Definition TGHtml.h:369
Html_32_t fY
Definition TGHtml.h:363
~TGHtmlTable() override
HTML table element destructor.
int fMinW[40+1]
Definition TGHtml.h:367
Html_16_t fX
Definition TGHtml.h:365
Html_16_t fW
Definition TGHtml.h:366
Html_u8_t fNCol
Definition TGHtml.h:361
Html_u16_t fNRow
Definition TGHtml.h:362
Html_32_t fH
Definition TGHtml.h:364
TImage * fBgImage
Definition TGHtml.h:370
Html_16_t fW
Definition TGHtml.h:297
TGHtmlTextElement(const TGHtmlTextElement &)=delete
Html_u8_t fDescent
Definition TGHtml.h:299
Html_u8_t fSpaceWidth
Definition TGHtml.h:300
Html_32_t fY
Definition TGHtml.h:295
~TGHtmlTextElement() override
HTML element destructor.
Html_16_t fX
Definition TGHtml.h:296
Html_u8_t fAscent
Definition TGHtml.h:298
unsigned int fColor
Definition TGHtml.h:146
signed int fSubscript
Definition TGHtml.h:147
unsigned int fExpbg
Definition TGHtml.h:150
unsigned int fAlign
Definition TGHtml.h:148
unsigned int fBgcolor
Definition TGHtml.h:149
unsigned int fFont
Definition TGHtml.h:145
unsigned int fFlags
Definition TGHtml.h:151