From 683d490074d93baa8a47db7ec43b7bd31145a12a Mon Sep 17 00:00:00 2001 From: Mark Donszelmann Date: Thu, 5 Nov 2009 23:00:15 +0100 Subject: Tar file expanded and committed --- .../cpptasks/trolltech/MetaObjectParser.java | 148 +++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 src/main/java/net/sf/antcontrib/cpptasks/trolltech/MetaObjectParser.java (limited to 'src/main/java/net/sf/antcontrib/cpptasks/trolltech/MetaObjectParser.java') diff --git a/src/main/java/net/sf/antcontrib/cpptasks/trolltech/MetaObjectParser.java b/src/main/java/net/sf/antcontrib/cpptasks/trolltech/MetaObjectParser.java new file mode 100644 index 0000000..e75a116 --- /dev/null +++ b/src/main/java/net/sf/antcontrib/cpptasks/trolltech/MetaObjectParser.java @@ -0,0 +1,148 @@ +/* + * + * Copyright 2004 The Ant-Contrib project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package net.sf.antcontrib.cpptasks.trolltech; + +import java.io.IOException; +import java.io.Reader; + +import net.sf.antcontrib.cpptasks.parser.AbstractParser; +import net.sf.antcontrib.cpptasks.parser.AbstractParserState; +import net.sf.antcontrib.cpptasks.parser.LetterState; +import net.sf.antcontrib.cpptasks.parser.WhitespaceOrLetterState; + +/** + * Scans a source file for Q_OBJECT. + * + * @author Curt Arnold + */ +public final class MetaObjectParser + extends AbstractParser { + /** + * Parser state that matches file T character. + */ + private static final class FinalTState + extends AbstractParserState { + /** + * Parser. + */ + private final MetaObjectParser mocParser; + + /** + * Constructor. + * @param parser MetaObjectParser parser + */ + public FinalTState(final MetaObjectParser parser) { + super(parser); + this.mocParser = parser; + } + + /** + * Consumes a character and returns the next state for the parser. + * + * @param ch + * next character + * @return the configured nextState if ch is the expected character or the + * configure noMatchState otherwise. + */ + public AbstractParserState consume(final char ch) { + if (ch == 'T') { + mocParser.setQObject(true); + return null; + } + if (ch == '\n') { + getParser().getNewLineState(); + } + return null; + } + } + + /** + * Determines if source file contains Q_OBJECT. + * @param reader Reader source reader + * @throws IOException if unable to read source file + * @return boolean true if source contains Q_OBJECT + */ + public static boolean hasQObject(final Reader reader) throws IOException { + MetaObjectParser parser = new MetaObjectParser(); + parser.parse(reader); + return parser.hasQObject; + + } + + /** + * Has Q_OBJECT been encountered. + */ + private boolean hasQObject = false; + + /** + * Parser state for start of new line. + */ + private AbstractParserState newLineState; + + /** + * Constructor. + * + */ + private MetaObjectParser() { + // + // search for Q_OBJECT + // + AbstractParserState t = new FinalTState(this); + AbstractParserState c = new LetterState(this, 'C', t, null); + AbstractParserState e = new LetterState(this, 'E', c, null); + AbstractParserState j = new LetterState(this, 'J', e, null); + AbstractParserState b = new LetterState(this, 'B', j, null); + AbstractParserState o = new LetterState(this, 'O', b, null); + AbstractParserState underline = new LetterState(this, '_', o, null); + newLineState = new WhitespaceOrLetterState(this, 'Q', underline); + } + + /** + * Adds a filename to the list of included files. + * + * @param filename filename to be added + */ + protected void addFilename(final String filename) { + + } + + /** + * Gets new line state. + * @return AbstractParserState new line state. + */ + public AbstractParserState getNewLineState() { + return newLineState; + } + + /** + * Parse input file. + * @param reader Reader source file + * @throws IOException if error reading source file + */ + public void parse(final Reader reader) throws IOException { + hasQObject = false; + super.parse(reader); + } + + /** + * Called FinalTState to set that Q_OBJECT was found. + * @param value boolean new value for hasQObject + */ + public void setQObject(final boolean value) { + this.hasQObject = value; + } +} -- cgit v1.2.3