StringBuffer out = new StringBuffer(); new Spp().spp(new Scanner(new FileInputStream(inputFile)),
out, "",
keys, vars, be, el, false); new FileOutputStream(outputFile, true).write(out.toString().getBytes());
}
staticfinal String LNSEP = System.getProperty("line.separator"); staticfinal String KEY = "([a-zA-Z0-9]+)"; staticfinal String VAR = "([a-zA-Z0-9_\\-]+)"; staticfinal String TEXT = "([\\p{Print}&&[^{#:}]]+)";
final Matcher ifkey = Pattern.compile("^#if\\[(!)?" + KEY + "\\]").matcher(""); final Matcher elsekey = Pattern.compile("^#else\\[(!)?" + KEY + "\\]").matcher(""); final Matcher endkey = Pattern.compile("^#end\\[(!)?" + KEY + "\\]").matcher(""); final Matcher vardef = Pattern.compile("\\{#if\\[(!)?" + KEY + "\\]\\?" + TEXT + "(:"+ TEXT + ")?\\}|\\$" + VAR + "\\$").matcher(""); final Matcher vardef2 = Pattern.compile("\\$" + VAR + "\\$").matcher("");
void append(StringBuffer buf, String ln,
Set<String> keys, Map<String, String> vars) {
vardef.reset(ln); while (vardef.find()) {
String repl = ""; if (vardef.group(GN_VAR) != null)
repl = vars.get(vardef.group(GN_VAR)); else { boolean test = keys.contains(vardef.group(GN_KEY)); if (vardef.group(GN_NOT) != null)
test = !test;
repl = test?vardef.group(GN_YES):vardef.group(GN_NO); if (repl == null)
repl = ""; else { // embedded $var$ while (vardef2.reset(repl).find()) {
repl = vardef2.replaceFirst(vars.get(vardef2.group(1)));
}
}
} if (repl == null) {
System.err.println("Error: undefined variable in line " + ln);
System.exit(-1);
}
vardef.appendReplacement(buf, repl);
}
vardef.appendTail(buf);
}
// return true if #end[key], #end or EOF reached boolean spp(Scanner in, StringBuffer buf, String key,
Set<String> keys, Map<String, String> vars, boolean be, boolean el, boolean skip) { while (in.hasNextLine()) {
String ln = in.nextLine(); if (be) { if (ln.startsWith("#begin")) {
buf.setLength(0); //clean up to this line continue;
} if (ln.equals("#end")) { while (in.hasNextLine())
in.nextLine(); returntrue; //discard the rest to EOF
}
} if (ifkey.reset(ln).find()) {
String k = ifkey.group(GN_KEY); boolean test = keys.contains(k); if (ifkey.group(GN_NOT) != null)
test = !test; if (el) buf.append(LNSEP); if (!spp(in, buf, k, keys, vars, be, el, skip || !test)) {
spp(in, buf, k, keys, vars, be, el, skip || test);
} continue;
} if (elsekey.reset(ln).find()) { if (!key.equals(elsekey.group(GN_KEY))) { thrownew Error("Mis-matched #if-else-end at line <" + ln + ">");
} if (el) buf.append(LNSEP); returnfalse;
} if (endkey.reset(ln).find()) { if (!key.equals(endkey.group(GN_KEY))) { thrownew Error("Mis-matched #if-else-end at line <" + ln + ">");
} if (el) buf.append(LNSEP); returntrue;
} if (ln.startsWith("#warn")) {
ln = "// -- This file was mechanically generated: Do not edit! -- //";
} elseif (ln.trim().startsWith("// ##")) {
ln = "";
} if (!skip) {
append(buf, ln, keys, vars); if (!el) buf.append(LNSEP);
} if (el) buf.append(LNSEP);
} returntrue;
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-09-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.