⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qtexthtmlparser_p.h

📁 奇趣公司比较新的qt/emd版本
💻 H
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtGui module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifndef QTEXTHTMLPARSER_P_H#define QTEXTHTMLPARSER_P_H////  W A R N I N G//  -------------//// This file is not part of the Qt API.  It exists purely as an// implementation detail.  This header file may change from version to// version without notice, or even be removed.//// We mean it.//#include "QtCore/qvector.h"#include "QtGui/qbrush.h"#include "QtGui/qcolor.h"#include "QtGui/qfont.h"#include "QtGui/qtextdocument.h"#include "QtGui/qtextcursor.h"#include "private/qtextformat_p.h"#include "private/qtextdocument_p.h"#include "private/qcssparser_p.h"enum QTextHTMLElements {    Html_unknown = -1,    Html_qt = 0,    Html_body,    Html_a,    Html_em,    Html_i,    Html_big,    Html_small,    Html_strong,    Html_b,    Html_cite,    Html_address,    Html_var,    Html_dfn,    Html_h1,    Html_h2,    Html_h3,    Html_h4,    Html_h5,    Html_h6,    Html_p,    Html_center,    Html_font,    Html_ul,    Html_ol,    Html_li,    Html_code,    Html_tt,    Html_kbd,    Html_samp,    Html_img,    Html_br,    Html_hr,    Html_sub,    Html_sup,    Html_pre,    Html_blockquote,    Html_head,    Html_div,    Html_span,    Html_dl,    Html_dt,    Html_dd,    Html_u,    Html_s,    Html_nobr,    // tables    Html_table,    Html_tr,    Html_td,    Html_th,    Html_thead,    Html_tbody,    Html_tfoot,    Html_caption,    // misc...    Html_html,    Html_style,    Html_title,    Html_meta,    Html_link,    Html_NumElements};struct QTextHtmlElement{    const char *name;    QTextHTMLElements id;    enum DisplayMode { DisplayBlock, DisplayInline, DisplayTable, DisplayNone } displayMode;};class QTextHtmlParser;struct QTextHtmlParserNode {    enum WhiteSpaceMode {        WhiteSpaceNormal,        WhiteSpacePre,        WhiteSpaceNoWrap,        WhiteSpacePreWrap,        WhiteSpaceModeUndefined = -1    };    QTextHtmlParserNode();    QString tag;    QString text;    QStringList attributes;    int parent;    QVector<int> children;    QTextHTMLElements id;    QTextCharFormat charFormat;    QTextBlockFormat blockFormat;    uint cssFloat : 2;    uint hasOwnListStyle : 1;    uint hasCssListIndent : 1;    uint isEmptyParagraph : 1;    uint isTextFrame : 1;    uint isRootFrame : 1;    uint displayMode : 3; // QTextHtmlElement::DisplayMode    uint hasHref : 1;    QTextListFormat::Style listStyle;    QString imageName;    qreal imageWidth;    qreal imageHeight;    QTextLength width;    QTextLength height;    qreal tableBorder;    int tableCellRowSpan;    int tableCellColSpan;    qreal tableCellSpacing;    qreal tableCellPadding;    QBrush borderBrush;    QTextFrameFormat::BorderStyle borderStyle;    int userState;    int cssListIndent;    WhiteSpaceMode wsm;    inline bool isListStart() const    { return id == Html_ol || id == Html_ul; }    inline bool isTableCell() const    { return id == Html_td || id == Html_th; }    inline bool isBlock() const    { return displayMode == QTextHtmlElement::DisplayBlock; }    inline bool isNotSelfNesting() const    { return id == Html_p || id == Html_li; }    inline bool allowedInContext(int parentId) const    {        switch (id) {            case Html_dd:            case Html_dt: return (parentId == Html_dl);            case Html_tr: return (parentId == Html_table                                  || parentId == Html_thead                                  || parentId == Html_tbody                                  || parentId == Html_tfoot                                 );            case Html_th:            case Html_td: return (parentId == Html_tr);            case Html_thead:            case Html_tbody:            case Html_tfoot: return (parentId == Html_table);            case Html_caption: return (parentId == Html_table);            default: break;        }        return true;    }    inline bool mayNotHaveChildren() const    { return id == Html_img || id == Html_hr || id == Html_br; }    void initializeProperties(const QTextHtmlParserNode *parent, const QTextHtmlParser *parser);    inline int uncollapsedMargin(int mar) const { return margin[mar]; }    bool isNestedList(const QTextHtmlParser *parser) const;    void parseStyleAttribute(const QString &value, const QTextDocument *resourceProvider);    void applyCssDeclarations(const QVector<QCss::Declaration> &declarations, const QTextDocument *resrouceProvider);    void setListStyle(const QVector<QCss::Value> &cssValues);    bool hasOnlyWhitespace() const;    int margin[4];    friend class QTextHtmlParser;};Q_DECLARE_TYPEINFO(QTextHtmlParserNode, Q_MOVABLE_TYPE);class QTextHtmlParser{public:    enum Margin {        MarginTop,        MarginRight,        MarginBottom,        MarginLeft    };    inline const QTextHtmlParserNode &at(int i) const { return nodes.at(i); }    inline QTextHtmlParserNode &operator[](int i) { return nodes[i]; }    inline int count() const { return nodes.count(); }    inline int last() const { return nodes.count()-1; }    int depth(int i) const;    int topMargin(int i) const;    int bottomMargin(int i) const;    inline int leftMargin(int i) const { return margin(i, MarginLeft); }    inline int rightMargin(int i) const { return margin(i, MarginRight); }    void dumpHtml();    void parse(const QString &text, const QTextDocument *resourceProvider);    static int lookupElement(const QString &element);protected:    QTextHtmlParserNode *newNode(int parent);    QVector<QTextHtmlParserNode> nodes;    QString txt;    int pos, len;    bool textEditMode;    void parse();    void parseTag();    void parseCloseTag();    void parseExclamationTag();    QString parseEntity();    QString parseWord();    QTextHtmlParserNode *resolveParent();    void resolveNode();    QStringList parseAttributes();    void applyAttributes(const QStringList &attributes);    void eatSpace();    inline bool hasPrefix(QChar c, int lookahead = 0) const        {return pos + lookahead < len && txt.at(pos) == c; }    int margin(int i, int mar) const;    bool nodeIsChildOf(int i, QTextHTMLElements id) const;    QVector<QCss::Declaration> declarationsForNode(int node) const;    void resolveStyleSheetImports(const QCss::StyleSheet &sheet);    void importStyleSheet(const QString &href);    struct ExternalStyleSheet    {        inline ExternalStyleSheet() {}        inline ExternalStyleSheet(const QString &_url, const QCss::StyleSheet &_sheet)            : url(_url), sheet(_sheet) {}        QString url;        QCss::StyleSheet sheet;    };    QVector<ExternalStyleSheet> externalStyleSheets;    QVector<QCss::StyleSheet> inlineStyleSheets;    const QTextDocument *resourceProvider;};#endif // QTEXTHTMLPARSER_P_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -