Search in sources :

Example 1 with Visitor

use of org.eclipse.ceylon.common.tools.help.model.Visitor in project ceylon by eclipse.

the class CeylonDocToolTool method generateDoc.

private void generateDoc(List<Doc> docs) throws IOException {
    for (Doc doc : docs) {
        File out = new File(applyCwd(dir), filename(doc));
        try (FileWriter writer = new FileWriter(out)) {
            Visitor visitor = format.newOutput(this, writer);
            doc.accept(visitor);
        }
    }
    if (index && format == Format.html) {
        generateIndexHtml(docs);
    }
}
Also used : Visitor(org.eclipse.ceylon.common.tools.help.model.Visitor) FileWriter(java.io.FileWriter) Doc(org.eclipse.ceylon.common.tools.help.model.Doc) File(java.io.File)

Example 2 with Visitor

use of org.eclipse.ceylon.common.tools.help.model.Visitor in project ceylon by eclipse.

the class CeylonHelpTool method run.

@Override
public void run() {
    if (wantsPager && OSUtil.isWindows() && tool != null) {
        if (openHelpInBrowser()) {
            return;
        }
    }
    docBuilder.setIncludeHidden(includeHidden);
    Doc doc;
    if (tool != null) {
        doc = docBuilder.buildDoc(tool);
    } else {
        final ToolModel<CeylonTool> root = toolLoader.loadToolModel("");
        doc = docBuilder.buildDoc(root, true);
    }
    Process pagerProcess = null;
    if (wantsPager && !OSUtil.isWindows()) {
        pagerProcess = startPager();
    }
    OutputStream pagerPipe = null;
    if (pagerProcess != null)
        pagerPipe = pagerProcess.getOutputStream();
    try {
        final WordWrap wrap = getWrap(pagerPipe);
        Visitor plain = new PlainVisitor(wrap);
        if (synopsis) {
            plain = new SynopsisOnlyVisitor(plain);
        } else if (options != null) {
            plain = new OptionsOnlyVisitor(plain, new HashSet<String>(Arrays.asList(options.trim().split("\\s*,\\s*"))));
        }
        doc.accept(plain);
        wrap.flush();
    } finally {
        // shutdown pager
        if (pagerPipe != null) {
            try {
                pagerPipe.close();
            } catch (IOException e) {
            // Seems common on MacOS so let's just ignore this
            }
            // wait for pager to be done, there's no point doing anything else meanwhile
            try {
                int errorCode = pagerProcess.waitFor();
                if (errorCode != 0) {
                    throw new ToolUsageError("Pager process returned an error exit code: " + errorCode + ". Try fixing your $CEYLON_PAGER or $PAGER environment variable or invoke with the --no-pager command-line option.");
                }
            } catch (InterruptedException e) {
                throw new ToolUsageError("Pager process interrupted. Try fixing your $CEYLON_PAGER or $PAGER environment variable or invoke with the --no-pager command-line option.");
            }
        }
    }
}
Also used : Visitor(org.eclipse.ceylon.common.tools.help.model.Visitor) OutputStream(java.io.OutputStream) CeylonTool(org.eclipse.ceylon.common.tools.CeylonTool) IOException(java.io.IOException) WordWrap(org.eclipse.ceylon.common.tool.WordWrap) ToolUsageError(org.eclipse.ceylon.common.tool.ToolUsageError) Doc(org.eclipse.ceylon.common.tools.help.model.Doc)

Aggregations

Doc (org.eclipse.ceylon.common.tools.help.model.Doc)2 Visitor (org.eclipse.ceylon.common.tools.help.model.Visitor)2 File (java.io.File)1 FileWriter (java.io.FileWriter)1 IOException (java.io.IOException)1 OutputStream (java.io.OutputStream)1 ToolUsageError (org.eclipse.ceylon.common.tool.ToolUsageError)1 WordWrap (org.eclipse.ceylon.common.tool.WordWrap)1 CeylonTool (org.eclipse.ceylon.common.tools.CeylonTool)1