[DOXIA-386] Snippet Macro: Reference file does not support UTF-8 file format to generate the page garbage
- Added macro parameter 'encoding' which takes in specific encoding
git-svn-id: https://svn.apache.org/repos/asf/maven/doxia/doxia/trunk@1543585 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/doxia-core/src/main/java/org/apache/maven/doxia/macro/snippet/SnippetMacro.java b/doxia-core/src/main/java/org/apache/maven/doxia/macro/snippet/SnippetMacro.java
index 7ef25a7..2a743fe 100644
--- a/doxia-core/src/main/java/org/apache/maven/doxia/macro/snippet/SnippetMacro.java
+++ b/doxia-core/src/main/java/org/apache/maven/doxia/macro/snippet/SnippetMacro.java
@@ -106,6 +106,8 @@
verbatim = Boolean.valueOf( verbatimParam ).booleanValue();
}
+ String encoding = (String) request.getParameter( "encoding" );
+
URL url;
if ( !StringUtils.isEmpty( urlParam ) )
@@ -146,7 +148,7 @@
try
{
- snippet = getSnippet( url, id );
+ snippet = getSnippet( url, encoding, id );
}
catch ( IOException e )
{
@@ -171,11 +173,12 @@
* Return a snippet of the given url.
*
* @param url The URL to parse.
+ * @param encoding The encoding of the URL to parse.
* @param id The id of the snippet.
* @return The snippet.
* @throws IOException if something goes wrong.
*/
- private StringBuffer getSnippet( URL url, String id )
+ private StringBuffer getSnippet( URL url, String encoding, String id )
throws IOException
{
StringBuffer result;
@@ -195,7 +198,7 @@
{
try
{
- result = new SnippetReader( url ).readSnippet( id );
+ result = new SnippetReader( url, encoding ).readSnippet( id );
cacheSnippet( url, id, result.toString() );
if ( debug )
{
diff --git a/doxia-core/src/main/java/org/apache/maven/doxia/macro/snippet/SnippetReader.java b/doxia-core/src/main/java/org/apache/maven/doxia/macro/snippet/SnippetReader.java
index c208f1e..224d841 100644
--- a/doxia-core/src/main/java/org/apache/maven/doxia/macro/snippet/SnippetReader.java
+++ b/doxia-core/src/main/java/org/apache/maven/doxia/macro/snippet/SnippetReader.java
@@ -42,14 +42,19 @@
/** The source. */
private URL source;
+ /** The encoding of the source. */
+ private String encoding;
+
/**
* Constructor.
*
- * @param src The source.
+ * @param src The source
+ * @param encoding The file encoding
*/
- public SnippetReader( URL src )
+ public SnippetReader( URL src, String encoding )
{
this.source = src;
+ this.encoding = encoding;
}
/**
@@ -119,8 +124,12 @@
private List<String> readLines( String snippetId )
throws IOException
{
- // TODO: DOXIA-386, use InputStreamReader(InputStream in, Charset cs)
- BufferedReader reader = new BufferedReader( new InputStreamReader( source.openStream() ) );
+ BufferedReader reader;
+ if ( encoding == null || "".equals(encoding) )
+ reader = new BufferedReader( new InputStreamReader( source.openStream() ) );
+ else
+ reader = new BufferedReader( new InputStreamReader( source.openStream(), encoding ) );
+
List<String> lines = new ArrayList<String>();
try
{