[DOXIASITETOOLS-183] add RenderingContext.isEditable()
diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
index 704e421..9a17e3c 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
@@ -165,6 +165,14 @@
     public Map<String, DocumentRenderer> locateDocumentFiles( SiteRenderingContext siteRenderingContext )
             throws IOException, RendererException
     {
+        return locateDocumentFiles( siteRenderingContext, false );
+    }
+
+    /** {@inheritDoc} */
+    public Map<String, DocumentRenderer> locateDocumentFiles( SiteRenderingContext siteRenderingContext,
+                                                              boolean editable )
+        throws IOException, RendererException
+    {
         Map<String, DocumentRenderer> files = new LinkedHashMap<String, DocumentRenderer>();
         Map<String, String> moduleExcludes = siteRenderingContext.getModuleExcludes();
 
@@ -181,7 +189,7 @@
 
                     String excludes = ( moduleExcludes == null ) ? null : moduleExcludes.get( module.getParserId() );
 
-                    addModuleFiles( moduleBasedir, module, excludes, files );
+                    addModuleFiles( moduleBasedir, module, excludes, files, editable );
                 }
             }
         }
@@ -195,7 +203,7 @@
 
                 String excludes = ( moduleExcludes == null ) ? null : moduleExcludes.get( module.getParserId() );
 
-                addModuleFiles( module.getBasedir(), parserModule, excludes, files );
+                addModuleFiles( module.getBasedir(), parserModule, excludes, files, editable );
             }
             catch ( ParserModuleNotFoundException e )
             {
@@ -222,7 +230,7 @@
     }
 
     private void addModuleFiles( File moduleBasedir, ParserModule module, String excludes,
-                                 Map<String, DocumentRenderer> files )
+                                 Map<String, DocumentRenderer> files, boolean editable )
             throws IOException, RendererException
     {
         if ( !moduleBasedir.exists() || ArrayUtils.isEmpty( module.getExtensions() ) )
@@ -246,7 +254,7 @@
             for ( String doc : docs )
             {
                 RenderingContext context =
-                        new RenderingContext( moduleBasedir, doc, module.getParserId(), extension );
+                        new RenderingContext( moduleBasedir, doc, module.getParserId(), extension, editable );
 
                 // TODO: DOXIA-111: we need a general filter here that knows how to alter the context
                 if ( endsWithIgnoreCase( doc, ".vm" ) )
diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java
index 701b66f..148cef9 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/Renderer.java
@@ -67,8 +67,8 @@
      * @param sink the Site Renderer Sink that received the Doxia events during document content rendering.
      * @param siteRenderingContext the SiteRenderingContext to use.
      * @throws RendererException if it bombs.
+     * @deprecated since 1.8, use mergeDocumentIntoSite
      */
-    @Deprecated
     void generateDocument( Writer writer, SiteRendererSink sink, SiteRenderingContext siteRenderingContext )
         throws RendererException;
 
@@ -151,11 +151,25 @@
      * @return the Doxia document renderers in a Map keyed by output file name.
      * @throws IOException if it bombs.
      * @throws RendererException if it bombs.
+     * @deprecated since 1.8, use locateDocumentFiles with editable parameter
      */
     Map<String, DocumentRenderer> locateDocumentFiles( SiteRenderingContext siteRenderingContext )
         throws IOException, RendererException;
 
     /**
+     * Locate Doxia document source files in the site source context.
+     *
+     * @param siteRenderingContext
+     * @param mark Doxia document renderer as editable? (should not mark editable if generated Doxia source)
+     * @return the Doxia document renderers in a Map keyed by output file name.
+     * @throws IOException if it bombs.
+     * @throws RendererException if it bombs.
+     * @since 1.8
+     */
+    Map<String, DocumentRenderer> locateDocumentFiles( SiteRenderingContext siteRenderingContext, boolean editable )
+        throws IOException, RendererException;
+
+    /**
      * Render a document written in a Doxia markup language. This method is an internal method, used by
      * {@link DoxiaDocumentRenderer}.
      *
diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/RenderingContext.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/RenderingContext.java
index 6540066..86ce0ba 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/RenderingContext.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/RenderingContext.java
@@ -48,6 +48,8 @@
 
     private Map<String, String> attributes;
 
+    private final boolean editable;
+
     /**
      * <p>
      * Constructor for RenderingContext when document is not rendered from a Doxia markup source.
@@ -59,7 +61,13 @@
      */
     public RenderingContext( File basedir, String document )
     {
-        this( basedir, document, null, null );
+        this( basedir, document, null, null, false );
+    }
+
+    @Deprecated
+    public RenderingContext( File basedir, String document, String parserId, String extension )
+    {
+        this( basedir, document, parserId, extension, false);
     }
 
     /**
@@ -74,7 +82,7 @@
      * @param extension the source document filename extension, may be null if document not rendered from
      *            a Doxia source.
      */
-    public RenderingContext( File basedir, String document, String parserId, String extension )
+    public RenderingContext( File basedir, String document, String parserId, String extension, boolean editable )
     {
         this.basedir = basedir;
         this.extension = extension;
@@ -85,6 +93,8 @@
         if ( StringUtils.isNotEmpty( extension ) )
         {
             // document comes from a Doxia source: see DoxiaDocumentRenderer
+            this.editable = editable;
+
             // here we know the parserId and extension, we can play with this to get output name from document:
             // - index.xml -> index.html
             // - index.xml.vm -> index.html
@@ -99,7 +109,8 @@
         else
         {
             // document does not come from a Doxia source but direct Sink API
-            // just make sure output name ends in .html
+            this.editable = false;
+            // make sure output name ends in .html
             this.outputName = document.substring( 0, document.lastIndexOf( '.' ) ).replace( '\\', '/' ) + ".html";
         }
 
@@ -188,4 +199,13 @@
     {
         return extension;
     }
+
+    /**
+     * Is the source document editable?
+     * @return <code>true</code> if comes from an editable Doxia source (not generated one).
+     */
+    public boolean isEditable()
+    {
+        return editable;
+    }
 }