/* Copied and pasted from src/declarative/qml/qqmlscriptparser.cpp then modified to return a list of removed pragmas. Searches for ".pragma <value>" declarations within \a script. Currently supported pragmas are: library */ QList<QQmlJS::AST::SourceLocation> QmlCodeMarker::extractPragmas(QString &script) { const QString pragma(QLatin1String("pragma")); const QString library(QLatin1String("library")); QList<QQmlJS::AST::SourceLocation> removed; QQmlJS::Lexer l(0); l.setCode(script, 0); int token = l.lex(); while (true) { if (token != QQmlJSGrammar::T_DOT) return removed; int startOffset = l.tokenOffset(); int startLine = l.tokenStartLine(); int startColumn = l.tokenStartColumn(); token = l.lex(); if (token != QQmlJSGrammar::T_IDENTIFIER || l.tokenStartLine() != startLine || script.mid(l.tokenOffset(), l.tokenLength()) != pragma) return removed; token = l.lex(); if (token != QQmlJSGrammar::T_IDENTIFIER || l.tokenStartLine() != startLine) return removed; QString pragmaValue = script.mid(l.tokenOffset(), l.tokenLength()); int endOffset = l.tokenLength() + l.tokenOffset(); token = l.lex(); if (l.tokenStartLine() == startLine) return removed; if (pragmaValue == QLatin1String("library")) { replaceWithSpace(script, startOffset, endOffset - startOffset); removed.append( QQmlJS::AST::SourceLocation( startOffset, endOffset - startOffset, startLine, startColumn)); } else return removed; } return removed; }
/* Copied and pasted from src/declarative/qml/qdeclarativescriptparser.cpp then modified to return no values. Searches for ".pragma <value>" declarations within \a script. Currently supported pragmas are: library */ void QmlCodeParser::extractPragmas(QString &script) { const QString pragma(QLatin1String("pragma")); const QString library(QLatin1String("library")); QDeclarativeJS::Lexer l(0); l.setCode(script, 0); int token = l.lex(); while (true) { if (token != QDeclarativeJSGrammar::T_DOT) return; int startOffset = l.tokenOffset(); int startLine = l.currentLineNo(); token = l.lex(); if (token != QDeclarativeJSGrammar::T_IDENTIFIER || l.currentLineNo() != startLine || script.mid(l.tokenOffset(), l.tokenLength()) != pragma) return; token = l.lex(); if (token != QDeclarativeJSGrammar::T_IDENTIFIER || l.currentLineNo() != startLine) return; QString pragmaValue = script.mid(l.tokenOffset(), l.tokenLength()); int endOffset = l.tokenLength() + l.tokenOffset(); token = l.lex(); if (l.currentLineNo() == startLine) return; if (pragmaValue == QLatin1String("library")) replaceWithSpace(script, startOffset, endOffset - startOffset); else return; } return; }