00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
#ifndef _PHTML
00103
#define _PHTML
00104
00105
#ifdef P_USE_PRAGMA
00106
#pragma interface
00107
#endif
00108
00109
00110
00112
00113
00120 class PHTML :
public PStringStream
00121 {
00122
PCLASSINFO(
PHTML,
PStringStream)
00123
00124
public:
00125 enum ElementInSet {
00126
InHTML,
00127
InHead,
00128
InBody,
00129
InTitle,
00130
InHeading,
00131
InDivision,
00132
InPreFormat,
00133
InAnchor,
00134
InNote,
00135
InAddress,
00136
InBlockQuote,
00137
InCredit,
00138
InBold,
00139
InItalic,
00140
InTeleType,
00141
InUnderline,
00142
InStrikeThrough,
00143
InBig,
00144
InSmall,
00145
InSubscript,
00146
InSuperscript,
00147
InEmphasis,
00148
InCite,
00149
InStrong,
00150
InCode,
00151
InSample,
00152
InKeyboard,
00153
InVariable,
00154
InDefinition,
00155
InQuote,
00156
InAuthor,
00157
InPerson,
00158
InAcronym,
00159
InAbbrev,
00160
InInsertedText,
00161
InDeletedText,
00162
InList,
00163
InListHeading,
00164
InDefinitionTerm,
00165
InTable,
00166
InForm,
00167
InSelect,
00168
InTextArea,
00169
NumElementsInSet
00170 };
00171
00176
PHTML(
00177 ElementInSet initialState = NumElementsInSet
00178 );
00179
PHTML(
00180
const char * cstr
00181 );
00182
PHTML(
00183
const PString & str
00184 );
00185
00186
~PHTML();
00187
00192 PHTML &
operator=(
00193
const PHTML & html
00194 ) {
AssignContents(html);
return *
this; }
00195 PHTML &
operator=(
00196
const PString & str
00197 ) {
AssignContents(str);
return *
this; }
00198 PHTML &
operator=(
00199
const char * cstr
00200 ) {
AssignContents(
PString(cstr));
return *
this; }
00201 PHTML &
operator=(
00202
char ch
00203 ) {
AssignContents(
PString(ch));
return *
this; }
00204
00205
00206
00207 BOOL Is(ElementInSet elmt)
const;
00208
void Set(ElementInSet elmt);
00209
void Clr(ElementInSet elmt);
00210
void Toggle(ElementInSet elmt);
00211
00212
00213 class Element {
00214
protected:
00215 enum OptionalCRLF {
NoCRLF,
OpenCRLF,
CloseCRLF,
BothCRLF };
00216 Element(
00217
const char * nam,
00218
const char * att,
00219 ElementInSet elmt,
00220 ElementInSet req,
00221 OptionalCRLF opt
00222 ) { name = nam; attr= att; inElement = elmt; reqElement = req; crlf = opt; }
00223
virtual void Output(
PHTML & html)
const;
00224
virtual void AddAttr(
PHTML & html)
const;
00225
private:
00226
const char * name;
00227
const char * attr;
00228 ElementInSet inElement;
00229 ElementInSet reqElement;
00230 OptionalCRLF crlf;
00231 friend ostream &
operator<<(ostream & strm,
const Element & elmt)
00232 { elmt.
Output((
PHTML&)strm);
return strm; }
00233 };
00234
00235 class HTML :
public Element {
00236
public:
00237
HTML(
const char * attr = NULL);
00238 };
00239
00240 class Head :
public Element {
00241
public:
00242
Head();
00243
protected:
00244
virtual void Output(
PHTML & html)
const;
00245 };
00246
00247 class Body :
public Element {
00248
public:
00249
Body(
const char * attr = NULL);
00250
protected:
00251
virtual void Output(
PHTML & html)
const;
00252 };
00253
00254 class Title :
public Element {
00255
public:
00256
Title();
00257
Title(
const char * titleCStr);
00258
Title(
const PString & titleStr);
00259
protected:
00260
virtual void Output(
PHTML & html)
const;
00261
private:
00262
const char * titleString;
00263 };
00264
00265 class Banner :
public Element {
00266
public:
00267
Banner(
const char * attr = NULL);
00268 };
00269
00270 class Division :
public Element {
00271
public:
00272
Division(
const char * attr = NULL);
00273 };
00274
00275 class Heading :
public Element {
00276
public:
00277
Heading(
int number,
00278
int sequence = 0,
00279
int skip = 0,
00280
const char * attr = NULL);
00281
Heading(
int number,
00282
const char * image,
00283
int sequence = 0,
00284
int skip = 0,
00285
const char * attr = NULL);
00286
Heading(
int number,
00287
const PString & imageStr,
00288
int sequence = 0,
00289
int skip = 0,
00290
const char * attr = NULL);
00291
protected:
00292
virtual void AddAttr(
PHTML & html)
const;
00293
private:
00294
int num;
00295
const char * srcString;
00296
int seqNum, skipSeq;
00297 };
00298
00299 class BreakLine :
public Element {
00300
public:
00301
BreakLine(
const char * attr = NULL);
00302 };
00303
00304 class Paragraph :
public Element {
00305
public:
00306
Paragraph(
const char * attr = NULL);
00307 };
00308
00309 class PreFormat :
public Element {
00310
public:
00311
PreFormat(
int widthInChars = 0,
00312
const char * attr = NULL);
00313
protected:
00314
virtual void AddAttr(
PHTML & html)
const;
00315
private:
00316
int width;
00317 };
00318
00319 class HotLink :
public Element {
00320
public:
00321
HotLink(
const char * href = NULL,
const char * attr = NULL);
00322
protected:
00323
virtual void AddAttr(
PHTML & html)
const;
00324
private:
00325
const char * hrefString;
00326 };
00327
00328 class Target :
public Element {
00329
public:
00330
Target(
const char * name = NULL,
const char * attr = NULL);
00331
protected:
00332
virtual void AddAttr(
PHTML & html)
const;
00333
private:
00334
const char * nameString;
00335 };
00336
00337 class ImageElement :
public Element {
00338
protected:
00339
ImageElement(
const char * nam,
00340
const char * attr,
00341 ElementInSet elmt,
00342 ElementInSet req,
00343 OptionalCRLF opt,
00344
const char * image);
00345
virtual void AddAttr(
PHTML & html)
const;
00346 const char *
srcString;
00347 };
00348
00349 class Image :
public ImageElement {
00350
public:
00351
Image(
const char * src,
00352
int width = 0,
00353
int height = 0,
00354
const char * attr = NULL);
00355
Image(
const char * src,
00356
const char * alt,
00357
int width = 0,
00358
int height = 0,
00359
const char * attr = NULL);
00360
protected:
00361
virtual void AddAttr(
PHTML & html)
const;
00362
private:
00363
const char * altString;
00364
int width, height;
00365 };
00366
00367 class HRule :
public ImageElement {
00368
public:
00369
HRule(
const char * image = NULL,
const char * attr = NULL);
00370 };
00371
00372 class Note :
public ImageElement {
00373
public:
00374
Note(
const char * image = NULL,
const char * attr = NULL);
00375 };
00376
00377 class Address :
public Element {
00378
public:
00379
Address(
const char * attr = NULL);
00380 };
00381
00382 class BlockQuote :
public Element {
00383
public:
00384
BlockQuote(
const char * attr = NULL);
00385 };
00386
00387 class Credit :
public Element {
00388
public:
00389
Credit(
const char * attr = NULL);
00390 };
00391
00392 class SetTab :
public Element {
00393
public:
00394
SetTab(
const char *
id,
const char * attr = NULL);
00395
protected:
00396
virtual void AddAttr(
PHTML & html)
const;
00397
private:
00398
const char * ident;
00399 };
00400
00401 class Tab :
public Element {
00402
public:
00403
Tab(
int indent,
const char * attr = NULL);
00404
Tab(
const char *
id,
const char * attr = NULL);
00405
protected:
00406
virtual void AddAttr(
PHTML & html)
const;
00407
private:
00408
const char * ident;
00409
int indentSize;
00410 };
00411
00412
00413 class Bold :
public Element {
00414 public:
Bold() :
Element("B", NULL, InBold, InBody, NoCRLF) { }
00415 };
00416 class Italic :
public Element {
00417 public:
Italic() :
Element("I", NULL, InItalic, InBody, NoCRLF) { }
00418 };
00419 class TeleType :
public Element {
00420 public:
TeleType() :
Element("TT", NULL, InTeleType, InBody, NoCRLF) { }
00421 };
00422 class Underline :
public Element {
00423 public:
Underline() :
Element("U", NULL, InUnderline, InBody, NoCRLF) { }
00424 };
00425 class StrikeThrough :
public Element {
00426 public:
StrikeThrough()
00427 :
Element("S", NULL, InStrikeThrough, InBody, NoCRLF) { }
00428 };
00429 class Big :
public Element {
00430 public:
Big() :
Element("BIG", NULL, InBig, InBody, NoCRLF) { }
00431 };
00432 class Small :
public Element {
00433 public:
Small() :
Element("SMALL", NULL, InSmall, InBody, NoCRLF) { }
00434 };
00435 class Subscript :
public Element {
00436 public:
Subscript()
00437 :
Element("SUB", NULL, InSubscript, InBody, NoCRLF) { }
00438 };
00439 class Superscript :
public Element {
00440 public:
Superscript()
00441 :
Element("SUP", NULL, InSuperscript, InBody, NoCRLF) { }
00442 };
00443 class Emphasis :
public Element {
00444 public:
Emphasis() :
Element("EM", NULL, InEmphasis, InBody, NoCRLF) { }
00445 };
00446 class Cite :
public Element {
00447 public:
Cite() :
Element("CITE", NULL, InCite, InBody, NoCRLF) { }
00448 };
00449 class Strong :
public Element {
00450 public:
Strong() :
Element("STRONG", NULL, InStrong, InBody, NoCRLF) { }
00451 };
00452 class Code :
public Element {
00453 public:
Code() :
Element("CODE", NULL, InCode, InBody, NoCRLF) { }
00454 };
00455 class Sample :
public Element {
00456 public:
Sample() :
Element("SAMP", NULL, InSample, InBody, NoCRLF) { }
00457 };
00458 class Keyboard :
public Element {
00459 public:
Keyboard() :
Element("KBD", NULL, InKeyboard, InBody, NoCRLF) { }
00460 };
00461 class Variable :
public Element {
00462 public:
Variable() :
Element("VAR", NULL, InVariable, InBody, NoCRLF) { }
00463 };
00464 class Definition :
public Element {
00465 public:
Definition()
00466 :
Element("DFN", NULL, InDefinition, InBody, NoCRLF) { }
00467 };
00468 class Quote :
public Element {
00469 public:
Quote() :
Element("Q", NULL, InQuote, InBody, NoCRLF) { }
00470 };
00471 class Author :
public Element {
00472 public:
Author() :
Element("AU", NULL, InAuthor, InBody, NoCRLF) { }
00473 };
00474 class Person :
public Element {
00475 public:
Person() :
Element("PERSON", NULL, InPerson, InBody, NoCRLF) { }
00476 };
00477 class Acronym :
public Element {
00478 public:
Acronym():
Element("ACRONYM", NULL, InAcronym, InBody, NoCRLF) { }
00479 };
00480 class Abbrev :
public Element {
00481 public:
Abbrev() :
Element("ABBREV", NULL, InAbbrev, InBody, NoCRLF) { }
00482 };
00483 class InsertedText :
public Element {
00484 public:
InsertedText()
00485 :
Element("INS", NULL, InInsertedText, InBody, NoCRLF) { }
00486 };
00487 class DeletedText :
public Element {
00488 public:
DeletedText()
00489 :
Element("DEL", NULL, InDeletedText, InBody, NoCRLF) { }
00490 };
00491
00492
00493 class SimpleList :
public Element {
00494
public:
00495
SimpleList(
const char * attr = NULL);
00496
protected:
00497
virtual void AddAttr(
PHTML & html)
const;
00498 };
00499
00500 class BulletList :
public Element {
00501
public:
00502
BulletList(
const char * attr = NULL);
00503 };
00504
00505 class OrderedList :
public Element {
00506
public:
00507
OrderedList(
int seqNum = 0,
const char * attr = NULL);
00508
protected:
00509
virtual void AddAttr(
PHTML & html)
const;
00510
private:
00511
int sequenceNum;
00512 };
00513
00514 class DefinitionList :
public Element {
00515
public:
00516
DefinitionList(
const char * attr = NULL);
00517 };
00518
00519 class ListHeading :
public Element {
00520
public:
00521
ListHeading(
const char * attr = NULL);
00522 };
00523
00524 class ListItem :
public Element {
00525
public:
00526
ListItem(
int skip = 0,
const char * attr = NULL);
00527
protected:
00528
virtual void AddAttr(
PHTML & html)
const;
00529
private:
00530
int skipSeq;
00531 };
00532
00533 class DefinitionTerm :
public Element {
00534
public:
00535
DefinitionTerm(
const char * attr = NULL);
00536
protected:
00537
virtual void Output(
PHTML & html)
const;
00538 };
00539
00540 class DefinitionItem :
public Element {
00541
public:
00542
DefinitionItem(
const char * attr = NULL);
00543
protected:
00544
virtual void Output(
PHTML & html)
const;
00545 };
00546
00547
00548 enum BorderCodes {
00549
NoBorder,
00550
Border
00551 };
00552 class TableStart :
public Element {
00553
public:
00554
TableStart(
const char * attr = NULL);
00555
TableStart(BorderCodes border,
const char * attr = NULL);
00556
protected:
00557
virtual void Output(
PHTML & html)
const;
00558
virtual void AddAttr(
PHTML & html)
const;
00559
private:
00560 BOOL borderFlag;
00561 };
00562
friend class TableStart;
00563
00564 class TableEnd :
public Element {
00565
public:
00566
TableEnd();
00567
protected:
00568
virtual void Output(
PHTML & html)
const;
00569 };
00570
friend class TableEnd;
00571
00572 class TableRow :
public Element {
00573
public:
00574
TableRow(
const char * attr = NULL);
00575 };
00576
00577 class TableHeader :
public Element {
00578
public:
00579
TableHeader(
const char * attr = NULL);
00580 };
00581
00582 class TableData :
public Element {
00583
public:
00584
TableData(
const char * attr = NULL);
00585 };
00586
00587
00588 class Form :
public Element {
00589
public:
00590
Form(
00591
const char * method = NULL,
00592
const char * action = NULL,
00593
const char * encoding = NULL,
00594
const char * script = NULL
00595 );
00596
protected:
00597
virtual void AddAttr(
PHTML & html)
const;
00598
private:
00599
const char * methodString;
00600
const char * actionString;
00601
const char * mimeTypeString;
00602
const char * scriptString;
00603 };
00604
00605 enum DisableCodes {
00606
Enabled,
00607
Disabled
00608 };
00609 class FieldElement :
public Element {
00610
protected:
00611
FieldElement(
00612
const char * nam,
00613
const char * attr,
00614 ElementInSet elmt,
00615 OptionalCRLF opt,
00616 DisableCodes disabled
00617 );
00618
virtual void AddAttr(
PHTML & html)
const;
00619
private:
00620 BOOL disabledFlag;
00621 };
00622
00623 class Select :
public FieldElement {
00624
public:
00625
Select(
00626
const char * fname = NULL,
00627
const char * attr = NULL
00628 );
00629
Select(
00630
const char * fname,
00631 DisableCodes disabled,
00632
const char * attr = NULL
00633 );
00634
protected:
00635
virtual void AddAttr(
PHTML & html)
const;
00636
private:
00637
const char * nameString;
00638 };
00639
00640 enum SelectionCodes {
00641
NotSelected,
00642
Selected
00643 };
00644 class Option :
public FieldElement {
00645
public:
00646
Option(
00647
const char * attr = NULL
00648 );
00649
Option(
00650 SelectionCodes select,
00651
const char * attr = NULL
00652 );
00653
Option(
00654 DisableCodes disabled,
00655
const char * attr = NULL
00656 );
00657
Option(
00658 SelectionCodes select,
00659 DisableCodes disabled,
00660
const char * attr = NULL
00661 );
00662
protected:
00663
virtual void AddAttr(
PHTML & html)
const;
00664
private:
00665 BOOL selectedFlag;
00666 };
00667
00668 class FormField :
public FieldElement {
00669
protected:
00670
FormField(
00671
const char * nam,
00672
const char * attr,
00673 ElementInSet elmt,
00674 OptionalCRLF opt,
00675 DisableCodes disabled,
00676
const char * fname
00677 );
00678
virtual void AddAttr(
PHTML & html)
const;
00679
private:
00680
const char * nameString;
00681 };
00682
00683 class TextArea :
public FormField {
00684
public:
00685
TextArea(
00686
const char * fname,
00687 DisableCodes disabled = Enabled,
00688
const char * attr = NULL
00689 );
00690
TextArea(
00691
const char * fname,
00692
int rows,
int cols,
00693 DisableCodes disabled = Enabled,
00694
const char * attr = NULL
00695 );
00696
protected:
00697
virtual void AddAttr(
PHTML & html)
const;
00698
private:
00699
int numRows, numCols;
00700 };
00701
00702 class InputField :
public FormField {
00703
protected:
00704
InputField(
00705
const char * type,
00706
const char * fname,
00707 DisableCodes disabled,
00708
const char * attr
00709 );
00710
virtual void AddAttr(
PHTML & html)
const;
00711
private:
00712
const char * typeString;
00713 };
00714
00715 class HiddenField :
public InputField {
00716
public:
00717
HiddenField(
00718
const char * fname,
00719
const char * value,
00720
const char * attr = NULL
00721 );
00722
protected:
00723
virtual void AddAttr(
PHTML & html)
const;
00724
private:
00725
const char * valueString;
00726 };
00727
00728 class InputText :
public InputField {
00729
public:
00730
InputText(
00731
const char * fname,
00732
int size,
00733
const char * init = NULL,
00734
const char * attr = NULL
00735 );
00736
InputText(
00737
const char * fname,
00738
int size,
00739 DisableCodes disabled,
00740
const char * attr = NULL
00741 );
00742
InputText(
00743
const char * fname,
00744
int size,
00745
int maxLength,
00746 DisableCodes disabled = Enabled,
00747
const char * attr = NULL
00748 );
00749
InputText(
00750
const char * fname,
00751
int size,
00752
const char * init,
00753
int maxLength,
00754 DisableCodes disabled = Enabled,
00755
const char * attr = NULL
00756 );
00757
protected:
00758
InputText(
00759
const char * type,
00760
const char * fname,
00761
int size,
00762
const char * init,
00763
int maxLength,
00764 DisableCodes disabled,
00765
const char * attr
00766 );
00767
virtual void AddAttr(
PHTML & html)
const;
00768
private:
00769
const char * value;
00770
int width, length;
00771 };
00772
00773 class InputPassword :
public InputText {
00774
public:
00775
InputPassword(
00776
const char * fname,
00777
int size,
00778
const char * init = NULL,
00779
const char * attr = NULL
00780 );
00781
InputPassword(
00782
const char * fname,
00783
int size,
00784 DisableCodes disabled,
00785
const char * attr = NULL
00786 );
00787
InputPassword(
00788
const char * fname,
00789
int size,
00790
int maxLength,
00791 DisableCodes disabled = Enabled,
00792
const char * attr = NULL
00793 );
00794
InputPassword(
00795
const char * fname,
00796
int size,
00797
const char * init,
00798
int maxLength,
00799 DisableCodes disabled = Enabled,
00800
const char * attr = NULL
00801 );
00802 };
00803
00804 enum CheckedCodes {
00805
UnChecked,
00806
Checked
00807 };
00808 class RadioButton :
public InputField {
00809
public:
00810
RadioButton(
00811
const char * fname,
00812
const char * value,
00813
const char * attr = NULL
00814 );
00815
RadioButton(
00816
const char * fname,
00817
const char * value,
00818 DisableCodes disabled,
00819
const char * attr = NULL
00820 );
00821
RadioButton(
00822
const char * fname,
00823
const char * value,
00824 CheckedCodes check,
00825 DisableCodes disabled = Enabled,
00826
const char * attr = NULL
00827 );
00828
protected:
00829
RadioButton(
00830
const char * type,
00831
const char * fname,
00832
const char * value,
00833 CheckedCodes check,
00834 DisableCodes disabled,
00835
const char * attr
00836 );
00837
virtual void AddAttr(
PHTML & html)
const;
00838
private:
00839
const char * valueString;
00840 BOOL checkedFlag;
00841 };
00842
00843 class CheckBox :
public RadioButton {
00844
public:
00845
CheckBox(
00846
const char * fname,
00847
const char * attr = NULL
00848 );
00849
CheckBox(
00850
const char * fname,
00851 DisableCodes disabled,
00852
const char * attr = NULL
00853 );
00854
CheckBox(
00855
const char * fname,
00856 CheckedCodes check,
00857 DisableCodes disabled = Enabled,
00858
const char * attr = NULL
00859 );
00860 };
00861
00862
00863 class InputRange :
public InputField {
00864
public:
00865
InputRange(
00866
const char * fname,
00867
int min,
int max,
00868
int value = 0,
00869 DisableCodes disabled = Enabled,
00870
const char * attr = NULL
00871 );
00872
protected:
00873
virtual void AddAttr(
PHTML & html)
const;
00874
private:
00875
int minValue, maxValue, initValue;
00876 };
00877
00878 class InputFile :
public InputField {
00879
public:
00880
InputFile(
00881
const char * fname,
00882
const char * accept = NULL,
00883 DisableCodes disabled = Enabled,
00884
const char * attr = NULL
00885 );
00886
protected:
00887
virtual void AddAttr(
PHTML & html)
const;
00888
private:
00889
const char * acceptString;
00890 };
00891
00892 class InputImage :
public InputField {
00893
public:
00894
InputImage(
00895
const char * fname,
00896
const char * src = NULL,
00897 DisableCodes disabled = Enabled,
00898
const char * attr = NULL
00899 );
00900
protected:
00901
InputImage(
00902
const char * type,
00903
const char * fname,
00904
const char * src,
00905 DisableCodes disabled,
00906
const char * attr
00907 );
00908
virtual void AddAttr(
PHTML & html)
const;
00909
private:
00910
const char * srcString;
00911 };
00912
00913 class InputScribble :
public InputImage {
00914
public:
00915
InputScribble(
00916
const char * fname,
00917
const char * src = NULL,
00918 DisableCodes disabled = Enabled,
00919
const char * attr = NULL
00920 );
00921 };
00922
00923 class ResetButton :
public InputImage {
00924
public:
00925
ResetButton(
00926
const char * title,
00927
const char * fname = NULL,
00928
const char * src = NULL,
00929 DisableCodes disabled = Enabled,
00930
const char * attr = NULL
00931 );
00932
protected:
00933
ResetButton(
00934
const char * type,
00935
const char * title,
00936
const char * fname = NULL,
00937
const char * src = NULL,
00938 DisableCodes disabled = Enabled,
00939
const char * attr = NULL
00940 );
00941
virtual void AddAttr(
PHTML & html)
const;
00942
private:
00943
const char * titleString;
00944 };
00945
00946 class SubmitButton :
public ResetButton {
00947
public:
00948
SubmitButton(
00949
const char * title,
00950
const char * fname = NULL,
00951
const char * src = NULL,
00952 DisableCodes disabled = Enabled,
00953
const char * attr = NULL
00954 );
00955 };
00956
00957
00958
protected:
00959
virtual void AssignContents(
const PContainer & c);
00960
00961
private:
00962
ElementInSet initialElement;
00963 BYTE elementSet[
NumElementsInSet/8+1];
00964 PINDEX tableNestLevel;
00965 };
00966
00967
00968
#endif
00969
00970
00971