throws FileNotFoundException, IOException, PreprocessException
throws FileNotFoundException, IOException, BuildException
	public boolean preprocess( File sourceDir, String fileName ) 	throws FileNotFoundException, IOException, PreprocessException	{		this.ifDirectiveCount = 0;		File sourceFile = new File( sourceDir.getAbsolutePath()  + "/" + fileName );		String[] sourceLines = FileUtil.readTextFile( sourceFile );		StringList lines = new StringList( sourceLines );		// set source directory:		this.variables.put( "polish.source", sourceDir.getAbsolutePath() );		String className = fileName.substring(0, fileName.indexOf('.'));		className = TextUtil.replace( className, "/", "." );		int result = preprocess( className, lines );		if (result == SKIP_FILE) {			return false;		}		boolean preprocessed = (result == CHANGED);		if (this.newExtension != null) {			// change the extension of the file:			int dotPos = fileName.indexOf('.');			if (dotPos != -1) {				fileName = fileName.substring( 0, dotPos + 1 ) + this.newExtension;			} else {				fileName += "." + this.newExtension;			}		}		File destinationFile = new File( this.destinationDir.getAbsolutePath() + "/" + fileName );		if (preprocessed 				|| ( !destinationFile.exists() ) 				|| ( sourceFile.lastModified() > destinationFile.lastModified() ) 				) 		{			// the file needs to be written			if (this.backup && destinationFile.exists() ) {				// create backup:				destinationFile.renameTo( new File( destinationFile.getAbsolutePath() + ".bak") );			}			// save preprocessed file:			FileUtil.writeTextFile( destinationFile, lines.getArray() );			return true;		} else {			return false;		}	}