File: htmltag.h

package info (click to toggle)
wxwidgets3.0 3.0.5.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 120,464 kB
  • sloc: cpp: 896,633; makefile: 52,303; ansic: 21,971; sh: 5,713; python: 2,940; xml: 1,534; perl: 264; javascript: 33
file content (138 lines) | stat: -rw-r--r-- 4,765 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/////////////////////////////////////////////////////////////////////////////
// Name:        htmltag.h
// Purpose:     wx28HtmlTag class (represents single tag)
// Author:      Vaclav Slavik
// Copyright:   (c) 1999 Vaclav Slavik
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////

#ifndef _WX_HTMLTAG_H_
#define _WX_HTMLTAG_H_

#include "wx/defs.h"

#include "wx/object.h"
#include "wx/arrstr.h"

class  wx28HtmlEntitiesParser;

//-----------------------------------------------------------------------------
// wx28HtmlTagsCache
//          - internal wxHTML class, do not use!
//-----------------------------------------------------------------------------

struct wx28HtmlCacheItem;

class  wx28HtmlTagsCache : public wxObject
{
    DECLARE_DYNAMIC_CLASS(wx28HtmlTagsCache)

private:
    wx28HtmlCacheItem *m_Cache;
    int m_CacheSize;
    int m_CachePos;

public:
    wx28HtmlTagsCache() : wxObject() {m_CacheSize = 0; m_Cache = NULL;}
    wx28HtmlTagsCache(const wxString& source);
    virtual ~wx28HtmlTagsCache() {free(m_Cache);}

    // Finds parameters for tag starting at at and fills the variables
    void QueryTag(int at, int* end1, int* end2);

    DECLARE_NO_COPY_CLASS(wx28HtmlTagsCache)
};


//--------------------------------------------------------------------------------
// wx28HtmlTag
//                  This represents single tag. It is used as internal structure
//                  by wx28HtmlParser.
//--------------------------------------------------------------------------------

class  wx28HtmlTag : public wxObject
{
    DECLARE_CLASS(wx28HtmlTag)

protected:
    // constructs wx28HtmlTag object based on HTML tag.
    // The tag begins (with '<' character) at position pos in source
    // end_pos is position where parsing ends (usually end of document)
    wx28HtmlTag(wx28HtmlTag *parent,
              const wxString& source, int pos, int end_pos,
              wx28HtmlTagsCache *cache,
              wx28HtmlEntitiesParser *entParser);
    friend class wx28HtmlParser;
public:
    virtual ~wx28HtmlTag();

    wx28HtmlTag *GetParent() const {return m_Parent;}
    wx28HtmlTag *GetFirstSibling() const;
    wx28HtmlTag *GetLastSibling() const;
    wx28HtmlTag *GetChildren() const { return m_FirstChild; }
    wx28HtmlTag *GetPreviousSibling() const { return m_Prev; }
    wx28HtmlTag *GetNextSibling() const {return m_Next; }
    // Return next tag, as if tree had been flattened
    wx28HtmlTag *GetNextTag() const;

    // Returns tag's name in uppercase.
    inline wxString GetName() const {return m_Name;}

    // Returns true if the tag has given parameter. Parameter
    // should always be in uppercase.
    // Example : <IMG SRC="test.jpg"> HasParam("SRC") returns true
    bool HasParam(const wxString& par) const;

    // Returns value of the param. Value is in uppercase unless it is
    // enclosed with "
    // Example : <P align=right> GetParam("ALIGN") returns (RIGHT)
    //           <P IMG SRC="WhaT.jpg"> GetParam("SRC") returns (WhaT.jpg)
    //                           (or ("WhaT.jpg") if with_commas == true)
    wxString GetParam(const wxString& par, bool with_commas = false) const;

    bool GetParamAsInt(const wxString& par, int *clr) const;

    // Scans param like scanf() functions family does.
    // Example : ScanParam("COLOR", "\"#%X\"", &clr);
    // This is always with with_commas=false
    // Returns number of scanned values
    // (like sscanf() does)
    // NOTE: unlike scanf family, this function only accepts
    //       *one* parameter !
    int ScanParam(const wxString& par, const wxChar *format, void *param) const;

    // Returns string containing all params.
    wxString GetAllParams() const;

    // return true if this there is matching ending tag
    inline bool HasEnding() const {return m_End1 >= 0;}

    // returns beginning position of _internal_ block of text
    // See explanation (returned value is marked with *):
    // bla bla bla <MYTAG>* bla bla intenal text</MYTAG> bla bla
    inline int GetBeginPos() const {return m_Begin;}
    // returns ending position of _internal_ block of text.
    // bla bla bla <MYTAG> bla bla intenal text*</MYTAG> bla bla
    inline int GetEndPos1() const {return m_End1;}
    // returns end position 2 :
    // bla bla bla <MYTAG> bla bla internal text</MYTAG>* bla bla
    inline int GetEndPos2() const {return m_End2;}

private:
    wxString m_Name;
    int m_Begin, m_End1, m_End2;
    wxArrayString m_ParamNames, m_ParamValues;

    // DOM tree relations:
    wx28HtmlTag *m_Next;
    wx28HtmlTag *m_Prev;
    wx28HtmlTag *m_FirstChild, *m_LastChild;
    wx28HtmlTag *m_Parent;

    DECLARE_NO_COPY_CLASS(wx28HtmlTag)
};



#endif // _WX_HTMLTAG_H_