52 ContextBegin = Match | CxtBeg,
53 ContextEnd = Match | CxtEnd,
54 EscapeSeq = Match | CxtEsc,
89 typedef QHash<quint16, QCharTreeNode> QCharTreeLevel;
107 typedef QCharTreeLevel QCharTree;
128 static quint32 _count;
139 context = c->context;
140 parents = c->parents;
141 meaningless = c->meaningless;
153 meaningless = c.meaningless;
162 while ( parents.count() )
163 context = parents.pop();
168 QStack<QNFA*> parents;
176 virtual void matched(
int pos,
int len,
int action) = 0;
184 inline Command(
int p,
int len,
int act)
185 : pos(p), length(len), action(act) {}
205 inline void operator () (
int pos,
int len,
int action)
207 if ( handler && (m_buffers.isEmpty() || m_pending.count()) )
208 handler->matched(pos, len, action);
210 m_buffers.top() << Command(pos, len, action);
213 inline int bufferLevel()
const
215 return m_buffers.count();
218 inline void startBuffering()
220 m_buffers.push(CommandList());
223 inline void stopBuffering()
225 m_pending = m_buffers.pop();
230 foreach ( Command c, m_pending )
231 handler->matched(c.pos, c.length, c.action);
245 CommandList m_pending;
246 QStack<CommandList> m_buffers;
257 { match(lexer, s.constData(), s.length(), notify); }
261 void squeeze(
QNFA *nfa);
262 void squeeze(QCharTreeLevel& lvl);
264 QNFA* sharedContext(
const QString& start,
268 QNFA* context(
const QString& start,
270 const QString& escape,
275 inline void addNFA(
QNFA *context,
QNFA *nfa)
276 { context->out.branch->append(nfa); }
278 bool plain(
const QString& word, QString *dest);
280 void addWord( QCharTree& tree,
285 void addWord(
QNFA *lexer,
290 void addSequence(
QNFA *lexer,
295 QNFA* sequence(
const QChar *d,
300 inline QNFA* sequence(
304 {
return sequence(s.constData(), s.length(), end, cs); }