private void processFile(File file) throws IOException {
		String name = file.getName();
		String absPath = file.getAbsolutePath();
		String newAbsPath = absPath.replace(REMOVE_FROM_PATH, "");
		File newFile = new File(newAbsPath);
		log.fine("NEW ABS PATH = " + newAbsPath);
		if (name == null || name.length() == 0 ||
			EXCLUDE_FILES_FILENAME.equals(name)) {
			return;
		}
		if (excludeFiles.contains(name)) {
			checkIgnoredFileForMarkup(file);
			if (newFile.exists()) {
				log.severe("Excluded file exists: " + newAbsPath + "; nuking it!");
				newFile.delete();
				if (newFile./*still*/exists()) {
					// Fail early and often.
					throw new IllegalArgumentException("Sob! Tried to delete " + newAbsPath + " but failed!");
				}
			}
			return;
		}
		newFile.getParentFile().mkdirs();
		log.fine(String.format("FileSub.processFile(%s->%s)%n", file, newAbsPath));		
		if (isTextFile(file.getName())) {
			processTextFile(file);
		} else {						// copy as binary
			try {
				copyFile(file, newFile);
			} catch (IOException e) {
				System.err.println("Failed to copy " + file + "; " + e);
			}
		}		
	}