You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.8 KiB
152 lines
4.8 KiB
/***************************************************************************
|
|
saparser.h - description
|
|
-------------------
|
|
begin : Wed Feb 11 2004
|
|
copyright : (C) 2004 Andras Mantia <amantia@kde.org>
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#ifndef SAPARSER_H
|
|
#define SAPARSER_H
|
|
|
|
//qt includes
|
|
#include <tqobject.h>
|
|
#include <tqregexp.h>
|
|
#include <tqvaluestack.h>
|
|
|
|
//own includes
|
|
#include "tag.h" //for AreaStruct
|
|
|
|
//forward definitions
|
|
struct DTDStruct;
|
|
class Document;
|
|
class TQString;
|
|
class TQStringList;
|
|
class TQTimer;
|
|
class KDirWatch;
|
|
class SAGroupParser;
|
|
|
|
|
|
/**
|
|
This class is used to parse a special area (script) in the document.
|
|
*/
|
|
class SAParser: public TQObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
SAParser();
|
|
virtual ~SAParser();
|
|
|
|
void setParsingEnabled(bool enabled);
|
|
bool parsingEnabled() {return m_parsingEnabled;}
|
|
Document *write() {return m_write;}
|
|
void init(Node *node, Document *write);
|
|
/*
|
|
Parses the document for special areas (eg. scripts).
|
|
specialArea: the area (start/end position) in the document that may contain the special
|
|
area. It may end before the end position.
|
|
areaStartString: the special area starting string
|
|
forcedAreaEndString: force this as the special area ending string.
|
|
parentNode: the Node under where the special area goes
|
|
fullParse: the script node will be fully parsed for groups, structures or so. If false, only the script beginning and end will be determined.
|
|
synchronous: if true, the function does not return until the parsing is finished, otherwise
|
|
return immediately.
|
|
return value: in synchronous case returns the last inserted node, otherwise return 0L.
|
|
*/
|
|
Node* parseArea(const AreaStruct &specialArea,
|
|
const TQString &areaStartString,
|
|
const TQString &forcedAreaEndString,
|
|
Node *parentNode,
|
|
bool fullParse, bool synchronous);
|
|
/** Returns the line where the last parsing run ended. */
|
|
int lastParsedLine() {return m_lastParsedLine;}
|
|
/** Returns the column where the last parsing run ended. */
|
|
int lastParsedColumn() {return m_lastParsedCol;}
|
|
|
|
void parseInDetail(bool synchronous);
|
|
void setSpecialInsideXml(bool insideXml) {m_specialInsideXml = insideXml;}
|
|
|
|
public slots:
|
|
void slotGroupParsingDone(SAGroupParser *groupParser);
|
|
|
|
private slots:
|
|
/** Parses one line and calls itself with a singleshot timer to parse the next line. */
|
|
bool slotParseOneLine();
|
|
void slotParseNodeInDetail();
|
|
|
|
signals:
|
|
void rebuildStructureTree(bool);
|
|
void cleanGroups();
|
|
|
|
private:
|
|
//private methods
|
|
Node* parsingDone();
|
|
|
|
//private structures
|
|
struct ContextStruct{
|
|
int type;
|
|
AreaStruct area;
|
|
TQString startString;
|
|
Node *parentNode;
|
|
Node *lastNode;
|
|
};
|
|
enum ContextType {
|
|
Unknown = 0,
|
|
Text,
|
|
Comment,
|
|
QuotedString,
|
|
Group
|
|
};
|
|
|
|
//private member variables
|
|
bool m_useNext;
|
|
bool m_parsingEnabled;
|
|
bool m_synchronous;
|
|
Document* m_write;
|
|
Node* m_baseNode;
|
|
Node* m_lastParsedNode;
|
|
Node* m_currentNode; ///< the currently parsed script node for details. Changes only after the whole area between m_currentNode and m_currentNode->next is parsed.
|
|
int m_lastParsedLine, m_lastParsedCol;
|
|
const DTDStruct *m_dtd;
|
|
TQRegExp m_quotesRx;
|
|
bool m_specialInsideXml; //< true if the special area is defined inside a tag, like the PHP in <a href="<? echo $a ?>">
|
|
|
|
bool s_contextFound;
|
|
ContextStruct s_currentContext;
|
|
Node *s_parentNode;
|
|
bool s_searchContent;
|
|
TQString s_searchedString;
|
|
TQString s_textLine;
|
|
int s_line, s_col;
|
|
int s_endLine, s_endCol;
|
|
bool s_fullParse;
|
|
TQString s_areaEndString;
|
|
bool s_searchForAreaEnd;
|
|
bool s_searchForForcedAreaEnd;
|
|
TQRegExp s_forcedAreaRx;
|
|
const DTDStruct *s_dtd;
|
|
bool s_searchForSpecialAreas;
|
|
ContextStruct s_context;
|
|
TQValueStack<ContextStruct> s_contextStack;
|
|
ContextStruct s_previousContext;
|
|
Node *s_currentNode; ///< the current detailed node while parsing for details
|
|
Node *s_returnNode;
|
|
bool s_useReturnVars;
|
|
Node *s_next;
|
|
TQValueList<SAGroupParser*> m_groupParsers;
|
|
TQTimer *m_parseOneLineTimer;
|
|
TQTimer *m_parseInDetailTimer;
|
|
};
|
|
|
|
#endif
|