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 (179 lines) | stat: -rw-r--r-- 6,540 bytes parent folder | download | duplicates (10)
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/////////////////////////////////////////////////////////////////////////////
// Name:        wx/html/htmltag.h
// Purpose:     wxHtmlTag 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"

#if wxUSE_HTML

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

class WXDLLIMPEXP_FWD_CORE wxColour;
class WXDLLIMPEXP_FWD_HTML wxHtmlEntitiesParser;

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

class wxHtmlTagsCacheData;

class WXDLLIMPEXP_HTML wxHtmlTagsCache
{
private:
    wxHtmlTagsCacheData *m_Cache;
    int m_CachePos;

    wxHtmlTagsCacheData& Cache() { return *m_Cache; }

public:
    wxHtmlTagsCache() {m_Cache = NULL;}
    wxHtmlTagsCache(const wxString& source);
    virtual ~wxHtmlTagsCache();

    // Finds parameters for tag starting at at and fills the variables
    void QueryTag(const wxString::const_iterator& at,
                  const wxString::const_iterator& inputEnd,
                  wxString::const_iterator *end1,
                  wxString::const_iterator *end2,
                  bool *hasEnding);

    wxDECLARE_NO_COPY_CLASS(wxHtmlTagsCache);
};


//--------------------------------------------------------------------------------
// wxHtmlTag
//                  This represents single tag. It is used as internal structure
//                  by wxHtmlParser.
//--------------------------------------------------------------------------------

class WXDLLIMPEXP_HTML wxHtmlTag
{
protected:
    // constructs wxHtmlTag 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)
    wxHtmlTag(wxHtmlTag *parent,
              const wxString *source,
              const wxString::const_iterator& pos,
              const wxString::const_iterator& end_pos,
              wxHtmlTagsCache *cache,
              wxHtmlEntitiesParser *entParser);
    friend class wxHtmlParser;
public:
    ~wxHtmlTag();

    wxHtmlTag *GetParent() const {return m_Parent;}
    wxHtmlTag *GetFirstSibling() const;
    wxHtmlTag *GetLastSibling() const;
    wxHtmlTag *GetChildren() const { return m_FirstChild; }
    wxHtmlTag *GetPreviousSibling() const { return m_Prev; }
    wxHtmlTag *GetNextSibling() const {return m_Next; }
    // Return next tag, as if tree had been flattened
    wxHtmlTag *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_quotes == true)
    wxString GetParam(const wxString& par, bool with_quotes = false) const;

    // Return true if the string could be parsed as an HTML colour and false
    // otherwise.
    static bool ParseAsColour(const wxString& str, wxColour *clr);

    // Convenience functions:
    bool GetParamAsString(const wxString& par, wxString *str) const;
    bool GetParamAsColour(const wxString& par, wxColour *clr) const;
    bool GetParamAsInt(const wxString& par, int *clr) const;
    bool GetParamAsIntOrPercent(const wxString& param,
                                int* value, bool& isPercent) const;

    // Scans param like scanf() functions family does.
    // Example : ScanParam("COLOR", "\"#%X\"", &clr);
    // This is always with with_quotes=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 char *format, void *param) const;
    int ScanParam(const wxString& par, const wchar_t *format, void *param) const;

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

    // return true if there is matching ending tag
    inline bool HasEnding() const {return m_hasEnding;}

    // returns beginning position of _internal_ block of text as iterator
    // into parser's source string (see wxHtmlParser::GetSource())
    // See explanation (returned value is marked with *):
    // bla bla bla <MYTAG>* bla bla intenal text</MYTAG> bla bla
    wxString::const_iterator GetBeginIter() const
        { return m_Begin; }
    // returns ending position of _internal_ block of text as iterator
    // into parser's source string (see wxHtmlParser::GetSource()):
    // bla bla bla <MYTAG> bla bla intenal text*</MYTAG> bla bla
    wxString::const_iterator GetEndIter1() const { return m_End1; }
    // returns end position 2 as iterator
    // into parser's source string (see wxHtmlParser::GetSource()):
    // bla bla bla <MYTAG> bla bla internal text</MYTAG>* bla bla
    wxString::const_iterator GetEndIter2() const { return m_End2; }

#if WXWIN_COMPATIBILITY_2_8
    // use GetBeginIter(), GetEndIter1() and GetEndIter2() instead
    wxDEPRECATED( inline int GetBeginPos() const );
    wxDEPRECATED( inline int GetEndPos1() const );
    wxDEPRECATED( inline int GetEndPos2() const );
#endif // WXWIN_COMPATIBILITY_2_8

private:
    wxString m_Name;
    bool m_hasEnding;
    wxString::const_iterator m_Begin, m_End1, m_End2;
    wxArrayString m_ParamNames, m_ParamValues;
#if WXWIN_COMPATIBILITY_2_8
    wxString::const_iterator m_sourceStart;
#endif

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

    wxDECLARE_NO_COPY_CLASS(wxHtmlTag);
};


#if WXWIN_COMPATIBILITY_2_8
inline int wxHtmlTag::GetBeginPos() const { return int(m_Begin - m_sourceStart); }
inline int wxHtmlTag::GetEndPos1() const { return int(m_End1 - m_sourceStart); }
inline int wxHtmlTag::GetEndPos2() const { return int(m_End2 - m_sourceStart); }
#endif // WXWIN_COMPATIBILITY_2_8




#endif // wxUSE_HTML

#endif // _WX_HTMLTAG_H_