in freemarker-docgen-core/src/main/java/org/freemarker/docgen/core/PrintTextWithDocgenSubstitutionsDirective.java [152:199]
private void execute() throws TemplateException, IOException {
int lastUnprintedIdx = 0;
parseText: while (true) {
cursor = findNextDocgenTagStart(lastUnprintedIdx);
if (cursor == -1) {
break parseText;
} else {
lastDocgenTagStart = cursor;
}
HTMLOutputFormat.INSTANCE.output(text.substring(lastUnprintedIdx, cursor), out);
lastUnprintedIdx = cursor;
cursor += DOCGEN_TAG_START.length();
skipRequiredToken(".");
String subvarName = fetchRequiredVariableName();
if (Transform.VAR_CUSTOM_VARIABLES.equals(subvarName)) {
skipRequiredToken(".");
String customVarName = fetchRequiredVariableName();
skipRequiredToken(DOCGEN_TAG_END);
lastUnprintedIdx = cursor;
insertCustomVariable(customVarName);
} else if (INSERT_FILE.directiveName.equals(subvarName)) {
InsertDirectiveArgs args = fetchInsertDirectiveArgs(subvarName, INSERT_FILE);
lastUnprintedIdx = cursor;
insertFile(args);
} else if (INSERT_WITH_OUTPUT.directiveName.equals(subvarName)) {
InsertDirectiveArgs args = fetchInsertDirectiveArgs(subvarName, INSERT_WITH_OUTPUT);
lastUnprintedIdx = cursor;
insertCommandAndOutput(INSERT_WITH_OUTPUT, args);
} else if (CHECK_COMMAND.directiveName.equals(subvarName)) {
InsertDirectiveArgs args = fetchInsertDirectiveArgs(subvarName, CHECK_COMMAND);
lastUnprintedIdx = cursor;
insertCommandAndOutput(CHECK_COMMAND, args);
} else if (subvarName.equals(WD)) {
throw new TemplateException(
"The " + WD + " docgen subvariable can only be used in the nested content of Docgen "
+ "directives that specify a command to run.", env);
} else {
throw new TemplateException(
"Unsupported docgen subvariable " + StringUtil.jQuote(subvarName) + ".", env);
}
}
HTMLOutputFormat.INSTANCE.output(text.substring(lastUnprintedIdx, text.length()), out);
}