| /* |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| |
| package flex2.compiler.asdoc; |
| |
| import flex2.tools.*; |
| import flex2.compiler.abc.AbcCompiler; |
| import flex2.compiler.as3.As3Compiler; |
| import flex2.compiler.as3.HostComponentExtension; |
| import flex2.compiler.as3.binding.BindableExtension; |
| import flex2.compiler.as3.managed.ManagedExtension; |
| import flex2.compiler.config.ConfigurationException; |
| import flex2.compiler.CompilerAPI; |
| import flex2.compiler.CompilerException; |
| import flex2.compiler.Source; |
| import flex2.compiler.SourceList; |
| import flex2.compiler.SubCompiler; |
| import flex2.compiler.Transcoder; |
| import flex2.compiler.SourcePath; |
| import flex2.compiler.FileSpec; |
| import flex2.compiler.ResourceContainer; |
| import flex2.compiler.ResourceBundlePath; |
| import flex2.compiler.CompilerSwcContext; |
| import flex2.compiler.swc.SwcAPI; |
| import flex2.compiler.swc.SwcComponent; |
| import flex2.compiler.swc.SwcCache; |
| import flex2.compiler.common.CompilerConfiguration; |
| import flex2.compiler.css.CssCompiler; |
| import flex2.compiler.fxg.FXGCompiler; |
| import flex2.compiler.i18n.I18nCompiler; |
| import flex2.compiler.i18n.I18nUtils; |
| import flex2.compiler.io.VirtualFile; |
| import flex2.compiler.mxml.MxmlCompiler; |
| import flex2.compiler.util.NameMappings; |
| import flex2.compiler.util.ThreadLocalToolkit; |
| import flex2.compiler.util.CompilerMessage; |
| |
| import java.io.BufferedWriter; |
| import java.io.InputStreamReader; |
| import java.io.OutputStreamWriter; |
| import java.io.Reader; |
| import java.io.FileWriter; |
| import java.io.BufferedReader; |
| import java.io.FileReader; |
| import java.io.IOException; |
| import java.io.File; |
| import java.io.FileFilter; |
| import java.io.FilenameFilter; |
| import java.io.FileInputStream; |
| import java.io.FileOutputStream; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.HashSet; |
| import java.util.Arrays; |
| import java.util.Map; |
| import java.util.HashMap; |
| import java.util.Set; |
| import java.util.Iterator; |
| |
| import org.xml.sax.InputSource; |
| |
| import javax.xml.parsers.SAXParserFactory; |
| import javax.xml.parsers.SAXParser; |
| |
| import flash.util.Trace; |
| import flash.util.FileUtils; |
| import flash.localization.LocalizationManager; |
| |
| /** |
| * The API class for ASDoc. A call to ASDoc has four main parts: |
| * 1. parameter handling, which done outside of this class in ConfigurationBuffer as well as in createASDocConfig() |
| * and createOverviews() |
| * 2. a call to asc and mxml compiler, done in createTopLevelXML() |
| * 3. Breaks the toplevel.xml into multiple DITA xml files (one for each package) |
| * 4. XSL processing, done in createHTML() |
| * |
| * For parameter handling and calling asc, this class works in the same way that Mxmlc |
| * and Compc do. Parameters go through the Flex configuration scheme and the ASC call uses |
| * Flex's infastructure for compiling. The XSLT processing is done by calling |
| * net.sf.saxon.Transform process. |
| */ |
| public class AsDocAPI |
| { |
| /** |
| * Reads the ASDoc_Config_Base.xml from the templates folder and creates a temporary ASDoc_Config.xml in the outut folder. |
| * |
| * @param config asdoc configuration |
| * @throws CompilerException |
| */ |
| public static void createASDocConfig(ASDocConfiguration config) throws CompilerException |
| { |
| String templatesPath = config.getTemplatesPath(); |
| String ditaPath = config.getOutput() + "tempdita" + File.separator; |
| |
| |
| File ditaDir = new File(ditaPath); |
| if(!ditaDir.exists()) { |
| ditaDir.mkdirs(); |
| } |
| |
| BufferedWriter writer = null; |
| Reader reader = null; |
| try |
| { |
| writer = new BufferedWriter(new OutputStreamWriter( |
| new FileOutputStream(ditaPath + "ASDoc_Config.xml"), "UTF-8")); |
| reader = new BufferedReader(new InputStreamReader( |
| new FileInputStream(templatesPath + "ASDoc_Config_Base.xml"), "UTF-8")); |
| |
| ASDocConfigHandler h = new ASDocConfigHandler(writer, config); |
| InputSource source = new InputSource(reader); |
| |
| SAXParserFactory factory = SAXParserFactory.newInstance(); |
| SAXParser parser = factory.newSAXParser(); |
| parser.parse(source, h); |
| } |
| catch (Exception e) |
| { |
| if (Trace.error) |
| e.printStackTrace(); |
| |
| CompilerMessage c = new CouldNotCreate("ASDoc_Config.xml", e.getMessage()); |
| ThreadLocalToolkit.log(c); |
| throw c; |
| } |
| finally |
| { |
| if (writer != null) |
| { |
| try { writer.close(); } catch(IOException ioe) {} |
| } |
| if (reader != null) |
| { |
| try { reader.close(); } catch(IOException ioe) {} |
| } |
| } |
| } |
| |
| /** |
| * Reads the Overviews_Base.xml from the templates folder and creates a temporary overviews.xml in the output folder |
| * |
| * @param config asdoc configuration |
| * @throws CompilerException |
| */ |
| public static void createOverviews(ASDocConfiguration config) throws CompilerException |
| { |
| String templatesPath = config.getTemplatesPath(); |
| String ditaPath = config.getOutput() + "tempdita" + File.separator; |
| BufferedWriter writer = null; |
| Reader reader = null; |
| try |
| { |
| writer = new BufferedWriter(new FileWriter(ditaPath + "overviews.xml")); |
| if(config.getPackageDescriptionFile() != null) |
| { |
| reader = new BufferedReader(new FileReader(config.getPackageDescriptionFile())); |
| } |
| else |
| { |
| reader = new BufferedReader(new FileReader(templatesPath + "Overviews_Base.xml")); |
| } |
| |
| OverviewsHandler h = new OverviewsHandler(writer, config); |
| InputSource source = new InputSource(reader); |
| |
| SAXParserFactory factory = SAXParserFactory.newInstance(); |
| SAXParser parser = factory.newSAXParser(); |
| parser.parse(source, h); |
| } |
| catch (Exception e) |
| { |
| if (Trace.error) |
| e.printStackTrace(); |
| |
| CompilerMessage c = new CouldNotCreate("overviews.xml", e.getMessage()); |
| ThreadLocalToolkit.log(c); |
| throw c; |
| } |
| finally |
| { |
| if (writer != null) |
| { |
| try { writer.close(); } catch(IOException ioe) {} |
| } |
| if (reader != null) |
| { |
| try { reader.close(); } catch(IOException ioe) {} |
| } |
| } |
| } |
| |
| /** |
| * This method reads the input asdoc configuration. The it uses helper methods to get the various compilers. |
| * It then adds the asdoc extension to the compiler which is used to generate the toplevel.xml file after |
| * compiling the sources. |
| * |
| * @param configuration asdoc configuration |
| * @param l10n |
| * @throws ConfigurationException |
| * @throws CompilerException |
| */ |
| public static void createTopLevelXML(ASDocConfiguration configuration, LocalizationManager l10n) |
| throws ConfigurationException, CompilerException |
| { |
| flex2.compiler.CompilerAPI.setupHeadless(configuration); |
| |
| // set to true so source file takes precedence over source from swc. |
| flex2.compiler.CompilerAPI.setSkipTimestampCheck(true); |
| |
| String[] sourceMimeTypes = flex2.tools.WebTierAPI.getSourcePathMimeTypes(); |
| |
| CompilerConfiguration compilerConfig = configuration.getCompilerConfiguration(); |
| |
| // asdoc should always have -doc=true so that it emits doc info. If it is false force it back to true. |
| if(!compilerConfig.doc()) |
| { |
| compilerConfig.cfgDoc(null, true); |
| } |
| |
| // create a SourcePath... |
| SourcePath sourcePath = new SourcePath(sourceMimeTypes, compilerConfig.allowSourcePathOverlap()); |
| sourcePath.addPathElements( compilerConfig.getSourcePath() ); |
| |
| List<VirtualFile>[] array = flex2.compiler.CompilerAPI.getVirtualFileList(configuration.getDocSources(), java.util.Collections.<VirtualFile>emptySet(), |
| new HashSet<String>(Arrays.asList(sourceMimeTypes)), |
| sourcePath.getPaths(), configuration.getExcludeSources()); |
| |
| NameMappings mappings = flex2.compiler.CompilerAPI.getNameMappings(configuration); |
| |
| // get standard bundle of compilers, transcoders |
| Transcoder[] transcoders = flex2.tools.WebTierAPI.getTranscoders( configuration ); |
| flex2.compiler.SubCompiler[] compilers = getCompilers(compilerConfig, mappings, transcoders); |
| |
| // create a FileSpec... can reuse based on appPath, debug settings, etc... |
| FileSpec fileSpec = new FileSpec(array[0], flex2.tools.WebTierAPI.getFileSpecMimeTypes(), false); |
| |
| // create a SourceList... |
| SourceList sourceList = new SourceList(array[1], compilerConfig.getSourcePath(), null, |
| flex2.tools.WebTierAPI.getSourceListMimeTypes(), false); |
| |
| ResourceContainer resources = new ResourceContainer(); |
| ResourceBundlePath bundlePath = new ResourceBundlePath(configuration.getCompilerConfiguration(), null); |
| |
| Map<String, Source> classes = new HashMap<String, Source>(); |
| List nsComponents = SwcAPI.setupNamespaceComponents(configuration.getNamespaces(), mappings, |
| sourcePath, sourceList, classes, |
| configuration.getIncludeLookupOnly(), |
| configuration.isIncludeAllForAsdoc()); |
| SwcAPI.setupClasses(configuration.getClasses(), sourcePath, sourceList, classes); |
| |
| // if exclude-dependencies is true, then we create a list of the only classes that we want to document |
| Set<String> includeOnly = null; |
| if (configuration.excludeDependencies()) |
| { |
| includeOnly = new HashSet<String>(); |
| for (Iterator iterator = nsComponents.iterator(); iterator.hasNext();) |
| { |
| SwcComponent component = (SwcComponent)iterator.next(); |
| includeOnly.add(component.getClassName()); |
| } |
| includeOnly.addAll(configuration.getClasses()); |
| } |
| |
| // set up the compiler extension which writes out toplevel.xml |
| List excludeClasses = configuration.getExcludeClasses(); |
| Set packages = configuration.getPackagesConfiguration().getPackageNames(); |
| ASDocExtension asdoc = new ASDocExtension(excludeClasses, includeOnly, packages, configuration.restoreBuiltinClasses()); |
| As3Compiler asc = (flex2.compiler.as3.As3Compiler)compilers[0]; |
| asc.addCompilerExtension(asdoc); |
| |
| // IMPORTANT!!!! The HostComponentExtension must run before the BindableExtension!!!! |
| asc.addCompilerExtension(new HostComponentExtension(configuration.getCompilerConfiguration().reportMissingRequiredSkinPartsAsWarnings()) ); |
| |
| String gendir = (compilerConfig.keepGeneratedActionScript()? compilerConfig.getGeneratedDirectory() : null); |
| asc.addCompilerExtension(new BindableExtension(gendir, compilerConfig.getGenerateAbstractSyntaxTree(),true) ); |
| asc.addCompilerExtension(new ManagedExtension(gendir, compilerConfig.getGenerateAbstractSyntaxTree(),true) ); |
| |
| ((flex2.compiler.mxml.MxmlCompiler)compilers[1]).addImplementationCompilerExtension(asdoc); |
| |
| if (ThreadLocalToolkit.getBenchmark() != null) |
| { |
| ThreadLocalToolkit.getBenchmark().benchmark(l10n.getLocalizedTextString(new flex2.tools.Mxmlc.InitialSetup())); |
| } |
| |
| // load SWCs |
| CompilerSwcContext swcContext = new CompilerSwcContext(); |
| SwcCache cache = new SwcCache(); |
| |
| // lazy read should only be set by mxmlc/compc/asdoc |
| cache.setLazyRead(true); |
| // for asdoc the theme and include-libraries values have been purposely not passed in below. |
| swcContext.load( compilerConfig.getLibraryPath(), |
| compilerConfig.getExternalLibraryPath(), |
| null, |
| null, |
| mappings, |
| I18nUtils.getTranslationFormat(compilerConfig), |
| cache ); |
| configuration.addExterns( swcContext.getExterns() ); |
| |
| // validate CompilationUnits in FileSpec and SourcePath |
| flex2.compiler.CompilerAPI.validateCompilationUnits(fileSpec, sourceList, sourcePath, bundlePath, |
| resources, swcContext, null, configuration); |
| |
| Map licenseMap = configuration.getLicensesConfiguration().getLicenseMap(); |
| |
| // we call compileSwc (and use CompcPreLink, both of which should probably be renamed) to "compile" ASDoc. |
| // everything runs through the normal compilation route, but we discard all of the output other than |
| // what ASDocExtension creates |
| CompilerAPI.compile(fileSpec, sourceList, classes.values(), sourcePath, resources, bundlePath, swcContext, |
| mappings, configuration, compilers, new CompcPreLink(null, null, true), |
| licenseMap, new ArrayList<Source>()); |
| |
| asdoc.finish(configuration.restoreBuiltinClasses()); |
| asdoc.saveFile(new File(configuration.getOutput(), "toplevel.xml")); |
| |
| if (excludeClasses.size() != 0) |
| { |
| StringBuilder sb = new StringBuilder(); |
| for (Iterator iterator = excludeClasses.iterator(); iterator.hasNext();) |
| { |
| sb.append(' '); |
| sb.append(iterator.next()); |
| } |
| ThreadLocalToolkit.log(new NotFound("exclude-classes", sb.toString())); |
| } |
| |
| if (packages.size() != 0) |
| { |
| StringBuilder sb = new StringBuilder(); |
| for (Iterator iterator = packages.iterator(); iterator.hasNext();) |
| { |
| sb.append(' '); |
| sb.append(iterator.next()); |
| } |
| |
| ThreadLocalToolkit.log(new NotFound("packages", sb.toString())); |
| } |
| } |
| |
| /** |
| * Helper method to get the various sub compilers (AS3, MXML, ABC, FXG, il8n, Css). |
| * |
| * @param compilerConfig |
| * @param mappings |
| * @param transcoders |
| * @return |
| */ |
| public static flex2.compiler.SubCompiler[] getCompilers(CompilerConfiguration compilerConfig, NameMappings mappings, |
| Transcoder[] transcoders) |
| { |
| // support AS3 |
| As3Compiler asc = new As3Compiler(compilerConfig); |
| |
| // support MXML.. call constructor with processComments as true. |
| MxmlCompiler mxmlc = new MxmlCompiler(compilerConfig, compilerConfig, |
| mappings, transcoders, true); |
| |
| // support ABC |
| AbcCompiler abc = new AbcCompiler(compilerConfig); |
| |
| // support FXG |
| FXGCompiler fxg = new FXGCompiler(compilerConfig, mappings); |
| |
| // support i18n (.properties) |
| I18nCompiler prop = new I18nCompiler(compilerConfig, transcoders); |
| |
| // support CSS |
| CssCompiler css = new CssCompiler(compilerConfig, transcoders, mappings); |
| |
| return new SubCompiler[]{asc, mxmlc, abc, fxg, prop, css}; |
| } |
| |
| /** |
| * This method is called to kick off the DITA generation process. |
| * It uses the ASDocHelper class as entry point to DITA generation. |
| * |
| * @param outputDir output directory |
| * @param templatesPath path to templates directory |
| * @param lenient boolean flag to represent whether to be lenient for HTML errors |
| * @throws CompilerException |
| */ |
| public static void createTopLevelClassesXML(String outputDir, String templatesPath, boolean lenient) throws CompilerException |
| { |
| try |
| { |
| AsDocHelper asDocHelp = new AsDocHelper(outputDir + "toplevel.xml", |
| outputDir + "tempdita", |
| outputDir, |
| outputDir + "tempdita" + File.separator + "ASDoc_Config.xml"); |
| asDocHelp.createTopLevelClasses(lenient); |
| } |
| catch (Throwable t) |
| { |
| t.printStackTrace(); |
| |
| CompilerMessage c = new CouldNotCreate("toplevel.xml", t.getMessage()); |
| ThreadLocalToolkit.log(c); |
| throw c; |
| } |
| } |
| |
| /** |
| * This methods runs the various dita xml files through xslt processing. It uses |
| * net.sf.saxon.Transform for xslt processing. The end result of this method is |
| * the final asdoc html. |
| * |
| * @param outputDir output direcctory |
| * @param templatesDir templates directory |
| * @param config asdoc configuration |
| * @throws Exception |
| */ |
| public static void createHTML(String outputDir, String templatesDir, ASDocConfiguration config) |
| throws Exception |
| { |
| // the XSL processing only works with forward slashes |
| templatesDir = templatesDir.replace('\\', '/'); |
| String outputDitaDir = outputDir + "tempdita/"; |
| File indexTmp = new File(outputDir + "index.tmp"); |
| // 0_processHTML |
| String inputFile = indexTmp.toString(); |
| while (inputFile.indexOf('\\') != -1) |
| { |
| inputFile = inputFile.replace('\\', '/'); |
| } |
| |
| try |
| { |
| // copy xslt files to tempdita |
| copyFile(templatesDir + "all-classes.xslt", outputDitaDir + "all-classes.xslt"); |
| copyFile(templatesDir + "all-index.xslt", outputDitaDir + "all-index.xslt"); |
| copyFile(templatesDir + "asdoc-util.xslt", outputDitaDir + "asdoc-util.xslt"); |
| copyFile(templatesDir + "ASDoc_terms.xml", outputDitaDir + "ASDoc_terms.xml"); |
| |
| copyFile(templatesDir + "class-files.xslt", outputDitaDir + "class-files.xslt"); |
| copyFile(templatesDir + "class-list.xslt", outputDitaDir + "class-list.xslt"); |
| copyFile(templatesDir + "class-parts.xslt", outputDitaDir + "class-parts.xslt"); |
| copyFile(templatesDir + "class-summary.xslt", outputDitaDir + "class-summary.xslt"); |
| copyFile(templatesDir + "Classes.xslt", outputDitaDir + "Classes.xslt"); |
| copyFile(templatesDir + "ClassHeader.xslt", outputDitaDir + "ClassHeader.xslt"); |
| |
| copyFile(templatesDir + "eventsGeneratedSummary.xslt", outputDitaDir + "eventsGeneratedSummary.xslt"); |
| copyFile(templatesDir + "effectsSummary.xslt", outputDitaDir + "effectsSummary.xslt"); |
| |
| copyFile(templatesDir + "fieldSummary.xslt", outputDitaDir + "fieldSummary.xslt"); |
| |
| copyFile(templatesDir + "merge_dita_xml.xslt", outputDitaDir + "merge_dita_xml.xslt"); |
| copyFile(templatesDir + "methodSummary.xslt", outputDitaDir + "methodSummary.xslt"); |
| |
| copyFile(templatesDir + "processHTML.xslt", outputDitaDir + "processHTML.xslt"); |
| copyFile(templatesDir + "PostProcessing.xslt", outputDitaDir + "PostProcessing.xslt"); |
| copyFile(templatesDir + "package-list.xslt", outputDitaDir + "package-list.xslt"); |
| copyFile(templatesDir + "package-detail.xslt", outputDitaDir + "package-detail.xslt"); |
| copyFile(templatesDir + "package-summary.xslt", outputDitaDir + "package-summary.xslt"); |
| copyFile(templatesDir + "package.xslt", outputDitaDir + "package.xslt"); |
| |
| copyFile(templatesDir + "stylesSummary.xslt", outputDitaDir + "stylesSummary.xslt"); |
| |
| copyFile(templatesDir + "index.html", outputDitaDir + "index.html"); |
| copyFile(templatesDir + "package-frame.html", outputDitaDir + "package-frame.html"); |
| copyFile(templatesDir + "title-bar.html", outputDitaDir + "title-bar.html"); |
| |
| // warnings:silent|recover |
| String warnings = "silent"; |
| |
| //process_html_dita |
| String[] args = new String[] { "-s", outputDitaDir + "index.html", |
| "-o", inputFile, |
| "-xsl", outputDitaDir + "processHTML.xslt", |
| "index-file=index.html", |
| "prog_language_name=ActionScript" }; |
| net.sf.saxon.Transform.main(args); |
| |
| args = new String[] { "-s", outputDitaDir + "package-frame.html", |
| "-o", outputDir + "package-frame.html", |
| "-xsl", outputDitaDir + "processHTML.xslt", |
| "package-frame=package-frame.html", |
| "prog_language_name=ActionScript"}; |
| net.sf.saxon.Transform.main(args); |
| |
| args = new String[] { "-s", templatesDir + "index-list.html", |
| "-o", outputDir + "index-list.html", |
| "-xsl", outputDitaDir + "processHTML.xslt" }; |
| net.sf.saxon.Transform.main(args); |
| |
| args = new String[] { "-s", outputDitaDir + "title-bar.html", |
| "-o", outputDir + "title-bar.html", |
| "-xsl", outputDitaDir + "processHTML.xslt", |
| "titleBarFile=title-bar.html", |
| "prog_language_name=ActionScript" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_merge_dita_xml |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-o", outputDitaDir + "packagemap.xml", |
| "-xsl", outputDitaDir + "merge_dita_xml.xslt" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_classes_dita_xml |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-o", outputDitaDir + "Classes.xml", |
| "-xsl", outputDitaDir + "Classes.xslt" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_classheader_xml |
| args = new String[] { "-s", outputDitaDir + "Classes.xml", |
| "-o", outputDitaDir + "ClassHeader.xml", |
| "-xsl", outputDitaDir + "ClassHeader.xslt" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_fieldSummary_dita_xml |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-o", outputDitaDir + "pp_fieldSummary.xml", |
| "-warnings:" + warnings, |
| "-xsl", outputDitaDir + "fieldSummary.xslt"}; |
| net.sf.saxon.Transform.main(args); |
| |
| args = new String[] { "-s", outputDitaDir + "pp_fieldSummary.xml", |
| "-warnings:" + warnings, |
| "-o", outputDitaDir + "fieldSummary.xml", |
| "-xsl", outputDitaDir + "PostProcessing.xslt" }; |
| net.sf.saxon.Transform.main(args); |
| //create_methodSummary_dita_xml |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-warnings:" + warnings, |
| "-o", outputDitaDir + "pp_methodSummary.xml", |
| "-xsl", outputDitaDir + "methodSummary.xslt" }; |
| net.sf.saxon.Transform.main(args); |
| |
| args = new String[] { "-s", outputDitaDir + "pp_methodSummary.xml", |
| "-warnings:" + warnings, |
| "-o", outputDitaDir + "methodSummary.xml", |
| "-xsl", outputDitaDir + "PostProcessing.xslt" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_eventsGeneratedSummary_dita_xml |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-warnings:" + warnings, |
| "-o", outputDitaDir + "eventsGeneratedSummary.xml", |
| "-xsl", outputDitaDir + "eventsGeneratedSummary.xslt" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_stylesSummary_dita_xml |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-warnings:" + warnings, |
| "-o", outputDitaDir + "stylesSummary.xml", |
| "-xsl", outputDitaDir + "stylesSummary.xslt" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_effectsSummary_dita_xml |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-warnings:" + warnings, |
| "-o", outputDitaDir + "effectsSummary.xml", |
| "-xsl", outputDitaDir + "effectsSummary.xslt" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_class_files_dita |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-warnings:" + warnings, |
| "-o", outputDir + "dummy.html", |
| "-xsl", outputDitaDir + "class-files.xslt", |
| "showIncludeExamples=true", |
| "prog_language_name=ActionScript", |
| "process_xref_href_attribute=1"}; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_all_classes_dita |
| args = new String[] { "-s", outputDitaDir + "packagemap.xml", |
| "-warnings:" + warnings, |
| "-o", outputDir + "all-classes.html", |
| "-xsl", outputDitaDir + "all-classes.xslt", |
| "prog_language_name=ActionScript" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_package_list_dita |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-warnings:" + warnings, |
| "-o", outputDir + "package-list.html", |
| "-xsl", outputDitaDir + "package-list.xslt" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_class_summary_dita |
| args = new String[] { "-s", outputDitaDir + "packagemap.xml", |
| "-warnings:" + warnings, |
| "-o", outputDir + "class-summary.html", |
| "-xsl", outputDitaDir + "class-summary.xslt", |
| "localTitle=allClasses", |
| "filter=*" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_package_detail_dita |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-warnings:" + warnings, |
| "-o", outputDir + "dummy.html", |
| "-xsl", outputDitaDir + "package-detail.xslt", |
| "prog_language_name=ActionScript" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_package_summary_dita |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-warnings:" + warnings, |
| "-o", outputDir + "package-summary.html", |
| "-xsl", outputDitaDir + "package-summary.xslt", |
| "localTitle=allPackages", |
| "filter=*", |
| "prog_language_name=ActionScript" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_class_list_dita |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-warnings:" + warnings, |
| "-o", outputDir + "dummy.html", |
| "-xsl", outputDitaDir + "class-list.xslt", |
| "prog_language_name=ActionScript" }; |
| net.sf.saxon.Transform.main(args); |
| |
| |
| //create_all_index_dita |
| args = new String[] { "-s", outputDitaDir + "packagemap.xml", |
| "-warnings:" + warnings, |
| "-o", outputDir + "dummy.html", |
| "-xsl", outputDitaDir + "all-index.xslt", |
| "prog_language_name=ActionScript" }; |
| net.sf.saxon.Transform.main(args); |
| |
| //create_package_dita |
| args = new String[] { "-s", outputDitaDir + "packages.dita", |
| "-warnings:" + warnings, |
| "-o", outputDir + "dummy.html", |
| "-xsl", outputDitaDir + "package.xslt", |
| "prog_language_name=ActionScript" }; |
| net.sf.saxon.Transform.main(args); |
| |
| (new File(outputDir + "dummy.html")).delete(); |
| } |
| catch(Exception ex) |
| { |
| ex.printStackTrace(); |
| throw ex; |
| } |
| |
| |
| File indexHtml = new File(outputDir + "index.html"); |
| if (config.getLeftFramesetWidth() == -1) |
| { |
| // we can't just originally name this as index.html because then the renaming in the other |
| // case fails (because of Java) |
| FileUtils.renameFile(indexTmp, indexHtml); |
| } |
| else |
| { |
| // here we do something that doesn't fit well into XSL, which is replacing the first frameset |
| // value we find in index.html |
| |
| BufferedReader reader = null; |
| BufferedWriter writer = null; |
| File indexTmp2 = new File(outputDir + "index2.tmp"); |
| try |
| { |
| reader = new BufferedReader(new FileReader(indexTmp)); |
| writer = new BufferedWriter(new FileWriter(indexTmp2)); |
| boolean foundFrameset = false; |
| String s; |
| String search1 = "frameset cols="; |
| String search2 = ","; |
| while ((s = reader.readLine()) != null) |
| { |
| if (! foundFrameset) |
| { |
| int ind = s.indexOf(search1); |
| if (ind != -1) |
| { |
| foundFrameset = true; |
| int ind2 = s.indexOf(search2, ind); |
| if (ind2 != -1) |
| { |
| s = s.substring(0, ind + search1.length() + 1) + config.getLeftFramesetWidth() + s.substring(ind2); |
| } |
| } |
| |
| } |
| writer.write(s); |
| writer.newLine(); |
| } |
| } |
| catch (Exception ex) |
| { |
| ex.printStackTrace(); |
| |
| CompilerMessage c = new CouldNotCreate("index.html", ex.getMessage()); |
| ThreadLocalToolkit.log(c); |
| throw c; |
| } |
| finally |
| { |
| if (writer != null) |
| { |
| try { writer.close(); } catch(IOException ioe) {} |
| } |
| if (reader != null) |
| { |
| try { reader.close(); } catch(IOException ioe) {} |
| } |
| |
| FileUtils.renameFile(indexTmp2, indexHtml); |
| } |
| } |
| } |
| |
| /** |
| * Helper method to copy various images, js, and css files file templates to the output folder. |
| * |
| * @param outputDir output directory |
| * @param templatesPath templates folder |
| * @throws IOException |
| */ |
| public static void copyFiles(String outputDir, String templatesPath) throws IOException |
| { |
| File templateFile = new File(templatesPath); |
| File[] temArr = templateFile.listFiles(new FilenameFilter() { |
| public boolean accept(File dir, String name) |
| { |
| name = name.toLowerCase(); |
| return (name.endsWith(".js") || name.endsWith(".css")); |
| }} |
| ); |
| for (int i = 0; i < temArr.length; i++) |
| { |
| File f = temArr[i]; |
| copyFile(new File(templatesPath, f.getName()), new File(outputDir, f.getName())); |
| } |
| |
| File outImages = new File(outputDir, "images"); |
| outImages.mkdir(); |
| |
| File temImages = new File(templatesPath, "images"); |
| File[] imageArr = temImages.listFiles(new FileFilter() { |
| public boolean accept(File f) |
| { |
| //does not accept hidden files or files that cannot be read or .* files |
| if (f.getName().startsWith(".") || f.isHidden() || !f.canRead() || f.isDirectory()) |
| return false; |
| return true; |
| } |
| }); |
| for (int i = 0; i < imageArr.length; i++) |
| { |
| File f = imageArr[i]; |
| copyFile(new File(temImages, f.getName()), new File(outImages, f.getName())); |
| } |
| } |
| |
| /** |
| * Helper method to copy file to a new location |
| * |
| * @param fromFile file to be copied |
| * @param toFile target location of the output file |
| * @throws IOException |
| */ |
| public static void copyFile(String fromFile, String toFile) throws IOException{ |
| copyFile(new File(fromFile), new File(toFile)); |
| } |
| |
| /** |
| * Helper method to copy file to a new location |
| * |
| * @param fromFile file to be copied |
| * @param toFile target location of the output file |
| * @throws IOException |
| */ |
| public static void copyFile(File fromFile, File toFile) throws IOException |
| { |
| FileInputStream fileInputStream = new FileInputStream( fromFile ); |
| FileOutputStream fileOutputStream = new FileOutputStream( toFile ); |
| int i; |
| byte bytes[] = new byte[ 2048 ]; |
| while ( ( i = fileInputStream.read(bytes) ) != -1 ) |
| { |
| fileOutputStream.write( bytes, 0, i ); |
| } |
| fileInputStream.close(); |
| fileOutputStream.close(); |
| } |
| |
| /** |
| * method to clean up temporary files after the asdoc generation is complete. |
| * It cleans up the dita xml files and out files that were copied from the templates folder. |
| * |
| * @param outputDir |
| * @param templatesPath |
| */ |
| public static void removeXML(String outputDir, String templatesPath) |
| { |
| (new File(templatesPath + "ASDoc_Config.xml")).delete(); |
| (new File(templatesPath + "overviews.xml")).delete(); |
| (new File(outputDir + "index.tmp")).delete(); |
| (new File(outputDir + "index2.tmp")).delete(); |
| (new File(outputDir + "toplevel.xml")).delete(); |
| File outputDitaDir = new File(outputDir + "tempdita/"); |
| if(outputDitaDir.exists()) { |
| File files[] = outputDitaDir.listFiles(); |
| for ( int ix=0; ix < files.length; ix++ ){ |
| files[ix].delete(); |
| } |
| outputDitaDir.delete(); |
| } |
| } |
| |
| /** |
| * Exception class used to get the localized error message when |
| * a file can not be created. |
| */ |
| public static class CouldNotCreate extends CompilerMessage.CompilerError |
| { |
| private static final long serialVersionUID = -6183856182026536203L; |
| public CouldNotCreate(String file, String message) |
| { |
| super(); |
| this.file = file; |
| this.message = message; |
| } |
| |
| public String file; |
| public String message; |
| } |
| |
| /** |
| * Exception class used to get the localized error message when |
| * a file can not be found. |
| */ |
| public static class NotFound extends CompilerMessage.CompilerWarning |
| { |
| private static final long serialVersionUID = -1859901085068385739L; |
| public NotFound(String property, String names) |
| { |
| super(); |
| this.property = property; |
| this.names = names; |
| } |
| |
| public String property; |
| public String names; |
| } |
| |
| |
| } |