public void renderDocument()

in doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java [361:447]


    public void renderDocument(
            Writer writer, DocumentRenderingContext docRenderingContext, SiteRenderingContext siteContext)
            throws RendererException {
        SiteRendererSink sink = new SiteRendererSink(docRenderingContext);

        File doc = new File(docRenderingContext.getBasedir(), docRenderingContext.getInputName());

        Reader reader = null;
        try {
            String resource = doc.getAbsolutePath();

            Parser parser = doxia.getParser(docRenderingContext.getParserId());
            ParserConfigurator configurator = siteContext.getParserConfigurator();
            boolean isConfigured = false;
            if (configurator != null) {
                isConfigured = configurator.configure(docRenderingContext.getParserId(), doc.toPath(), parser);
            }
            if (!isConfigured) {
                // DOXIASITETOOLS-146 don't render comments from source markup
                parser.setEmitComments(false);
                parser.setEmitAnchorsForIndexableEntries(true);
            }

            // TODO: DOXIA-111: the filter used here must be checked generally.
            if (docRenderingContext.getAttribute("velocity") != null) {
                LOGGER.debug("Processing Velocity for " + docRenderingContext.getDoxiaSourcePath());
                try {
                    Context vc = createDocumentVelocityContext(docRenderingContext, siteContext);

                    StringWriter sw = new StringWriter();

                    velocity.getEngine().mergeTemplate(resource, siteContext.getInputEncoding(), vc, sw);

                    String doxiaContent = sw.toString();

                    if (siteContext.getProcessedContentOutput() != null) {
                        // save Velocity processing result, ie the Doxia content that will be parsed after
                        saveVelocityProcessedContent(docRenderingContext, siteContext, doxiaContent);
                    }

                    reader = new StringReader(doxiaContent);
                } catch (VelocityException e) {
                    throw new RendererException(
                            "Error parsing " + docRenderingContext.getDoxiaSourcePath() + " as a Velocity template", e);
                }

                if (parser.getType() == Parser.XML_TYPE && siteContext.isValidate()) {
                    reader = validate(reader, resource);
                }
            } else {
                switch (parser.getType()) {
                    case Parser.XML_TYPE:
                        reader = ReaderFactory.newXmlReader(doc);
                        if (siteContext.isValidate()) {
                            reader = validate(reader, resource);
                        }
                        break;

                    case Parser.TXT_TYPE:
                    case Parser.UNKNOWN_TYPE:
                    default:
                        reader = ReaderFactory.newReader(doc, siteContext.getInputEncoding());
                }
            }

            doxia.parse(reader, docRenderingContext.getParserId(), sink, docRenderingContext.getDoxiaSourcePath());
        } catch (ParserNotFoundException e) {
            throw new RendererException("Error getting a parser for '" + doc + "'", e);
        } catch (ParseException e) {
            StringBuilder errorMsgBuilder = new StringBuilder();
            errorMsgBuilder.append("Error parsing '").append(doc).append("'");
            if (e.getLineNumber() > 0) {
                errorMsgBuilder.append(", line ").append(e.getLineNumber());
            }
            throw new RendererException(errorMsgBuilder.toString(), e);
        } catch (IOException e) {
            throw new RendererException("Error while processing '" + doc + "'", e);
        } finally {
            sink.flush();

            sink.close();

            IOUtil.close(reader);
        }

        mergeDocumentIntoSite(writer, (DocumentContent) sink, siteContext);
    }