/** * Warning: The Java Src backend is experimental (incomplete, repetitive, untested, undocumented). * * <p>To use Soy from Java, you should call {@link #compileToTofu()} to obtain a {@code SoyTofu} * object that will be able to render any public template in this Soy file set. * * @param javaSrcOptions The compilation options for the Java Src output target. * @param msgBundle The bundle of translated messages, or null to use the messages from the Soy * source. * @return Java source code in one big ugly blob. Can be put inside any class without needing * additional imports because all class names in the generated code are fully qualified. */ public String compileToJavaSrc(SoyJavaSrcOptions javaSrcOptions, SoyMsgBundle msgBundle) { SoyFileSetNode soyTree = (new SoyFileSetParser(soyFileSuppliers)).parse(); runMiddleendPasses(soyTree, true); return compileFileSetToJavaSrc(soyTree, javaSrcOptions, msgBundle); }
/** * Warning: The Go Src backend is experimental (repetitive, untested, undocumented). * * <p>To use Soy from Go, you should call {@link #compileToJavaObj()} to obtain a {@code SoyTofu} * object that will be able to render any public template in this Soy file set. * * @param goSrcOptions The compilation options for the Go Src output target. * @param msgBundle The bundle of translated messages, or null to use the messages from the Soy * source. * @return Go source code in one big ugly blob. Can be put inside any class without needing * additional imports because all class names in the generated code are fully qualified. */ public List<Pair<String, String>> compileToGoSrc( SoyGoSrcOptions goSrcOptions, SoyMsgBundle msgBundle) { SoyFileSetNode soyTree = (new SoyFileSetParser(soyFileSuppliers)).parse(); runMiddleendPasses(soyTree, true); return compileFileSetToGoSrc(soyTree, goSrcOptions, msgBundle); }
/** * 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); } } }
/** * Compiles this Soy file set into JS source code files and returns these JS files as a list of * strings, one per file. * * @param jsSrcOptions The compilation options for the JS Src output target. * @param msgBundle The bundle of translated messages, or null to use the messages from the Soy * source. * @return A list of strings where each string represents the JS source code that belongs in one * JS file. The generated JS files correspond one-to-one to the original Soy source files. * @throws SoySyntaxException If a syntax error is found. */ public List<String> compileToJsSrc(SoyJsSrcOptions jsSrcOptions, @Nullable SoyMsgBundle msgBundle) throws SoySyntaxException { boolean doEnforceSyntaxVersionV2 = !jsSrcOptions.shouldAllowDeprecatedSyntax(); SoyFileSetNode soyTree = (new SoyFileSetParser(soyFileSuppliers)) .setDoEnforceSyntaxVersionV2(doEnforceSyntaxVersionV2) .parse(); runMiddleendPasses(soyTree, doEnforceSyntaxVersionV2); return jsSrcMainProvider.get().genJsSrc(soyTree, jsSrcOptions, msgBundle); }
/** * Compiles this Soy file set into a Java object (type {@code SoyTofu}) capable of rendering the * compiled templates. * * @param tofuOptions The compilation options for the Tofu backend. * @return The resulting {@code SoyTofu} object. * @throws SoySyntaxException If a syntax error is found. */ public SoyTofu compileToTofu(SoyTofuOptions tofuOptions) throws SoySyntaxException { // Defensive copy of options. (Doesn't matter now, but might forget later when it matters.) tofuOptions = tofuOptions.clone(); // TODO: Allow binding a SoyTofu instance to volatile inputs. SoyFileSetNode soyTree = (new SoyFileSetParser(soyFileSuppliers)).parse(); runMiddleendPasses(soyTree, true); // If allowExternalCalls is not explicitly set, then disallow by default for Tofu backend. if (generalOptions.allowExternalCalls() == null) { // TODO: Enable this check when all Google internal projects are compliant. // (new AssertNoExternalCallsVisitor()).exec(soyTree); } // Note: Globals should have been substituted already. The pass below is just a check. (new SubstituteGlobalsVisitor(generalOptions.getCompileTimeGlobals(), true)).exec(soyTree); // Clear the SoyDoc strings because they use unnecessary memory. (new ClearSoyDocStringsVisitor()).exec(soyTree); return baseTofuFactory.create(soyTree, tofuOptions.useCaching()); }