private <T> WriteContinuation startRender(AdvisingAppendable out) throws IOException { RenderContext context = contextBuilder .withMessageBundle(msgs) .withActiveDelPackageSelector(activeDelegatePackages) .build(); BidiGlobalDir dir = BidiGlobalDir.forStaticLocale(msgs.getLocaleString()); Scoper scoper = new Scoper(apiCallScope, dir, msgs.getLocaleString()); CompiledTemplate template = templateFactory.create(data, ij); return doRender(template, scoper, out, context); }
/** * Compiles this Soy file set into JS source code files and writes these JS files to disk. * * @param outputPathFormat The format string defining how to build the output file path * corresponding to an input file path. * @param inputFilePathPrefix The prefix prepended to all input file paths (can be empty string). * @param jsSrcOptions The compilation options for the JS Src output target. * @param locales The list of locales. Can be an empty list if not applicable. * @param messageFilePathFormat The message file path format, or null if not applicable. * @throws SoySyntaxException If a syntax error is found. * @throws IOException If there is an error in opening/reading a message file or opening/writing * an output JS file. */ void compileToJsSrcFiles( String outputPathFormat, String inputFilePathPrefix, SoyJsSrcOptions jsSrcOptions, List<String> locales, @Nullable String messageFilePathFormat) throws SoySyntaxException, IOException { boolean doEnforceSyntaxVersionV2 = !jsSrcOptions.shouldAllowDeprecatedSyntax(); SoyFileSetNode soyTree = (new SoyFileSetParser(soyFileSuppliers)) .setDoEnforceSyntaxVersionV2(doEnforceSyntaxVersionV2) .parse(); runMiddleendPasses(soyTree, doEnforceSyntaxVersionV2); if (locales.size() == 0) { // Not generating localized JS. jsSrcMainProvider .get() .genJsFiles(soyTree, jsSrcOptions, null, null, outputPathFormat, inputFilePathPrefix); } else { // Generating localized JS. for (String locale : locales) { SoyFileSetNode soyTreeClone = soyTree.clone(); String msgFilePath = JsSrcUtils.buildFilePath(messageFilePathFormat, locale, null, inputFilePathPrefix); SoyMsgBundle msgBundle = msgBundleHandlerProvider.get().createFromFile(new File(msgFilePath)); if (msgBundle.getLocaleString() == null) { // TODO: Remove this check (but make sure no projects depend on this behavior). // There was an error reading the message file. We continue processing only if the locale // begins with "en", because falling back to the Soy source will proably be fine. if (!locale.startsWith("en")) { throw new IOException("Error opening or reading message file " + msgFilePath); } } jsSrcMainProvider .get() .genJsFiles( soyTreeClone, jsSrcOptions, locale, msgBundle, outputPathFormat, inputFilePathPrefix); } } }