package org.oddjob.tools.includes; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.StringWriter; import java.util.regex.Matcher; import java.util.regex.Pattern; public class SnippetFilter implements StreamToText { private final Pattern start; private final Pattern end; public SnippetFilter(String filter) { start = Pattern.compile("#" + Pattern.quote(filter) + "\\s*\\{"); end = Pattern.compile("\\}\\s*#" + Pattern.quote(filter) + "\\b"); } @Override public String load(InputStream input) throws IOException { BufferedReader reader = new BufferedReader( new InputStreamReader(input)); StringWriter buff = new StringWriter(); PrintWriter writer = new PrintWriter(buff); boolean record = false; while (true) { String line = reader.readLine(); if (line == null) { break; } if (record) { Matcher matcher = end.matcher(line); if (matcher.find()) { record = false; } else { writer.println(line); } } else { Matcher matcher = start.matcher(line); if (matcher.find()) { record = true; } } } reader.close(); writer.close(); return buff.toString(); } }