This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 943704d1a0cb475ab0ec0c1506574dc1a0578915
Author: juanpablo <[email protected]>
AuthorDate: Fri Mar 6 17:50:07 2020 +0100

    provide boolean isImageInlining and inlineImagePatterns to 
LinkParsingOperations#isImageLink(..)
    
    in order to break a package cycle between o.a.w.render and o.a.w.parser
---
 .../apache/wiki/parser/JSPWikiMarkupParser.java    | 169 +++++++--------------
 .../apache/wiki/parser/LinkParsingOperations.java  |  23 +--
 .../wiki/markdown/MarkdownForJSPWikiExtension.java |  15 +-
 .../ExternalLinkAttributeProviderState.java        |  15 +-
 .../InterWikiLinkAttributeProviderState.java       |  14 +-
 .../JSPWikiLinkAttributeProvider.java              |  24 ++-
 .../JSPWikiLinkAttributeProviderFactory.java       |  16 +-
 .../LocalLinkAttributeProviderState.java           |  14 +-
 .../ExternalLinkNodePostProcessorState.java        |  13 +-
 .../InterWikiLinkNodePostProcessorState.java       |  13 +-
 .../JSPWikiLinkNodePostProcessor.java              |  20 ++-
 .../JSPWikiNodePostProcessorFactory.java           |  14 +-
 .../LocalLinkNodePostProcessorState.java           |  13 +-
 .../wiki/parser/markdown/MarkdownDocument.java     |   6 +-
 .../wiki/parser/markdown/MarkdownParser.java       |   2 +-
 .../wiki/render/markdown/MarkdownRenderer.java     |  17 ++-
 16 files changed, 218 insertions(+), 170 deletions(-)

diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java 
b/jspwiki-main/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java
index 23eee96..e2a18cc 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/parser/JSPWikiMarkupParser.java
@@ -958,32 +958,26 @@ public class JSPWikiMarkupParser extends MarkupParser {
      * @param url
      * @return An anchor Element containing the link.
      */
-    private Element makeDirectURILink( String url )
-    {
+    private Element makeDirectURILink( String url ) {
         final Element result;
         String last = null;
 
-        if( url.endsWith(",") || url.endsWith(".") )
-        {
-            last = url.substring( url.length()-1 );
-            url  = url.substring( 0, url.length()-1 );
+        if( url.endsWith( "," ) || url.endsWith( "." ) ) {
+            last = url.substring( url.length() - 1 );
+            url = url.substring( 0, url.length() - 1 );
         }
 
         callMutatorChain( m_externalLinkMutatorChain, url );
 
-        if( m_linkParsingOperations.isImageLink( url ) )
-        {
-            result = handleImageLink( StringUtils.replace(url,"&amp;","&"), 
url, false );
-        }
-        else
-        {
-            result = makeLink( EXTERNAL, StringUtils.replace(url,"&amp;","&"), 
url, null, null );
+        if( m_linkParsingOperations.isImageLink( url, isImageInlining(), 
getInlineImagePatterns() ) ) {
+            result = handleImageLink( StringUtils.replace( url, "&amp;", "&" 
), url, false );
+        } else {
+            result = makeLink( EXTERNAL, StringUtils.replace( url, "&amp;", 
"&" ), url, null, null );
             addElement( outlinkImage() );
         }
 
-        if( last != null )
-        {
-            m_plainTextBuf.append(last);
+        if( last != null ) {
+            m_plainTextBuf.append( last );
         }
 
         return result;
@@ -1101,9 +1095,8 @@ public class JSPWikiMarkupParser extends MarkupParser {
      *  very useful if you want to emit HTML directly into the stream.
      *
      */
-    private void disableOutputEscaping()
-    {
-        addElement( new 
ProcessingInstruction(Result.PI_DISABLE_OUTPUT_ESCAPING, "") );
+    private void disableOutputEscaping() {
+        addElement( new ProcessingInstruction( 
Result.PI_DISABLE_OUTPUT_ESCAPING, "" ) );
     }
 
     /**
@@ -1111,7 +1104,7 @@ public class JSPWikiMarkupParser extends MarkupParser {
      */
     private Element handleHyperlinks( String linktext, final int pos ) {
         final ResourceBundle rb = Preferences.getBundle( m_context, 
InternationalizationManager.CORE_BUNDLE );
-        final StringBuilder sb = new StringBuilder(linktext.length()+80);
+        final StringBuilder sb = new StringBuilder( linktext.length() + 80 );
 
         if( m_linkParsingOperations.isAccessRule( linktext ) ) {
             return handleAccessRule( linktext );
@@ -1121,28 +1114,19 @@ public class JSPWikiMarkupParser extends MarkupParser {
             return handleMetadata( linktext );
         }
 
-        if( m_linkParsingOperations.isPluginLink( linktext ) )
-        {
-            try
-            {
+        if( m_linkParsingOperations.isPluginLink( linktext ) ) {
+            try {
                 final PluginContent pluginContent = 
PluginContent.parsePluginLine( m_context, linktext, pos );
-                //
-                //  This might sometimes fail, especially if there is 
something which looks
-                //  like a plugin invocation but is really not.
-                //
-                if( pluginContent != null )
-                {
-                    addElement( pluginContent );
 
+                // This might sometimes fail, especially if there is something 
which looks like a plugin invocation but is really not.
+                if( pluginContent != null ) {
+                    addElement( pluginContent );
                     pluginContent.executeParse( m_context );
                 }
-            }
-            catch( final PluginException e )
-            {
+            } catch( final PluginException e ) {
                 log.info( m_context.getRealPage().getWiki() + " : " + 
m_context.getRealPage().getName() + " - Failed to insert plugin: " + 
e.getMessage() );
                 //log.info( "Root cause:",e.getRootThrowable() );
-                if( !m_wysiwygEditorMode )
-                {
+                if( !m_wysiwygEditorMode ) {
                     final ResourceBundle rbPlugin = Preferences.getBundle( 
m_context, WikiPlugin.CORE_PLUGINS_RESOURCEBUNDLE );
                     return addElement( makeError( MessageFormat.format( 
rbPlugin.getString( "plugin.error.insertionfailed" ),
                                                                            
m_context.getRealPage().getWiki(),
@@ -1154,10 +1138,9 @@ public class JSPWikiMarkupParser extends MarkupParser {
             return m_currentElement;
         }
 
-        try
-        {
-            final LinkParser.Link link = m_linkParser.parse(linktext);
-            linktext       = link.getText();
+        try {
+            final LinkParser.Link link = m_linkParser.parse( linktext );
+            linktext = link.getText();
             String linkref = link.getReference();
 
             //
@@ -1167,33 +1150,23 @@ public class JSPWikiMarkupParser extends MarkupParser {
             //
             //  In many cases these are the same.  [linktext|linkref].
             //
-            if( m_linkParsingOperations.isVariableLink( linktext ) )
-            {
-                final Content el = new VariableContent(linktext);
+            if( m_linkParsingOperations.isVariableLink( linktext ) ) {
+                final Content el = new VariableContent( linktext );
 
                 addElement( el );
-            }
-            else if( m_linkParsingOperations.isExternalLink( linkref ) )
-            {
+            } else if( m_linkParsingOperations.isExternalLink( linkref ) ) {
                 // It's an external link, out of this Wiki
 
                 callMutatorChain( m_externalLinkMutatorChain, linkref );
 
-                if( m_linkParsingOperations.isImageLink( linkref ) )
-                {
+                if( m_linkParsingOperations.isImageLink( linkref, 
isImageInlining(), getInlineImagePatterns() ) ) {
                     handleImageLink( linkref, linktext, link.hasReference() );
-                }
-                else
-                {
+                } else {
                     makeLink( EXTERNAL, linkref, linktext, null, 
link.getAttributes() );
                     addElement( outlinkImage() );
                 }
-            }
-            else if( link.isInterwikiLink() )
-            {
-                // It's an interwiki link
-                // InterWiki links also get added to external link chain
-                // after the links have been resolved.
+            } else if( link.isInterwikiLink() ) {
+                // It's an interwiki link; InterWiki links also get added to 
external link chain after the links have been resolved.
 
                 // FIXME: There is an interesting issue here:  We probably 
should
                 //        URLEncode the wikiPage, but we can't since some of 
the
@@ -1202,81 +1175,57 @@ public class JSPWikiMarkupParser extends MarkupParser {
                 //        is using, so you'll have to write the entire name as 
it appears
                 //        in the URL.  Bugger.
 
-                final String extWiki  = link.getExternalWiki();
+                final String extWiki = link.getExternalWiki();
                 final String wikiPage = link.getExternalWikiPage();
 
-                if( m_wysiwygEditorMode )
-                {
+                if( m_wysiwygEditorMode ) {
                     makeLink( INTERWIKI, extWiki + ":" + wikiPage, linktext, 
null, link.getAttributes() );
-                }
-                else
-                {
+                } else {
                     String urlReference = m_engine.getInterWikiURL( extWiki );
 
-                    if( urlReference != null )
-                    {
+                    if( urlReference != null ) {
                         urlReference = TextUtil.replaceString( urlReference, 
"%s", wikiPage );
                         urlReference = callMutatorChain( 
m_externalLinkMutatorChain, urlReference );
 
-                        if( m_linkParsingOperations.isImageLink(urlReference) )
-                        {
+                        if( m_linkParsingOperations.isImageLink( urlReference, 
isImageInlining(), getInlineImagePatterns() ) ) {
                             handleImageLink( urlReference, linktext, 
link.hasReference() );
-                        }
-                        else
-                        {
+                        } else {
                             makeLink( INTERWIKI, urlReference, linktext, null, 
link.getAttributes() );
                         }
 
-                        if( 
m_linkParsingOperations.isExternalLink(urlReference) )
-                        {
+                        if( m_linkParsingOperations.isExternalLink( 
urlReference ) ) {
                             addElement( outlinkImage() );
                         }
-                    }
-                    else
-                    {
-                        final Object[] args = { escapeHTMLEntities(extWiki) };
+                    } else {
+                        final Object[] args = { escapeHTMLEntities( extWiki ) 
};
 
                         addElement( makeError( MessageFormat.format( 
rb.getString( "markupparser.error.nointerwikiref" ), args ) ) );
                     }
                 }
-            }
-            else if( linkref.startsWith("#") )
-            {
+            } else if( linkref.startsWith( "#" ) ) {
                 // It defines a local footnote
                 makeLink( LOCAL, linkref, linktext, null, link.getAttributes() 
);
-            }
-            else if( TextUtil.isNumber( linkref ) )
-            {
+            } else if( TextUtil.isNumber( linkref ) ) {
                 // It defines a reference to a local footnote
                 makeLink( LOCALREF, linkref, linktext, null, 
link.getAttributes() );
-            }
-            else
-            {
-                int hashMark = -1;
+            } else {
+                final int hashMark;
 
-                //
-                //  Internal wiki link, but is it an attachment link?
-                //
+                // Internal wiki link, but is it an attachment link?
                 String attachment = m_engine.getManager( 
AttachmentManager.class ).getAttachmentInfoName( m_context, linkref );
-                if( attachment != null )
-                {
+                if( attachment != null ) {
                     callMutatorChain( m_attachmentLinkMutatorChain, attachment 
);
 
-                    if( m_linkParsingOperations.isImageLink( linkref ) )
-                    {
+                    if( m_linkParsingOperations.isImageLink( linkref, 
isImageInlining(), getInlineImagePatterns() ) ) {
                         attachment = m_context.getURL( WikiContext.ATTACH, 
attachment );
                         sb.append( handleImageLink( attachment, linktext, 
link.hasReference() ) );
-                    }
-                    else
-                    {
+                    } else {
                         makeLink( ATTACHMENT, attachment, linktext, null, 
link.getAttributes() );
                     }
-                }
-                else if( (hashMark = linkref.indexOf('#')) != -1 )
-                {
+                } else if( ( hashMark = linkref.indexOf( '#' ) ) != -1 ) {
                     // It's an internal Wiki link, but to a named section
 
-                    final String namedSection = linkref.substring( hashMark+1 
);
+                    final String namedSection = linkref.substring( hashMark + 
1 );
                     linkref = linkref.substring( 0, hashMark );
 
                     linkref = MarkupParser.cleanLink( linkref );
@@ -1285,15 +1234,13 @@ public class JSPWikiMarkupParser extends MarkupParser {
 
                     final String matchedLink = 
m_linkParsingOperations.linkIfExists( linkref );
                     if( matchedLink != null ) {
-                        String sectref = 
"section-"+m_engine.encodeName(matchedLink+"-"+wikifyLink(namedSection));
-                        sectref = sectref.replace('%', '_');
+                        String sectref = "section-" + m_engine.encodeName( 
matchedLink + "-" + wikifyLink( namedSection ) );
+                        sectref = sectref.replace( '%', '_' );
                         makeLink( READ, matchedLink, linktext, sectref, 
link.getAttributes() );
                     } else {
                         makeLink( EDIT, linkref, linktext, null, 
link.getAttributes() );
                     }
-                }
-                else
-                {
+                } else {
                     // It's an internal Wiki link
                     linkref = MarkupParser.cleanLink( linkref );
 
@@ -1307,14 +1254,12 @@ public class JSPWikiMarkupParser extends MarkupParser {
                     }
                 }
             }
-        }
-        catch( final ParseException e )
-        {
-            log.info("Parser failure: ",e);
-            final Object[] args = { e.getMessage() };
-            addElement( makeError( MessageFormat.format( rb.getString( 
"markupparser.error.parserfailure" ), args ) ) );
-        }
 
+    } catch( final ParseException e ) {
+        log.info( "Parser failure: ", e );
+        final Object[] args = { e.getMessage() };
+        addElement( makeError( MessageFormat.format( rb.getString( 
"markupparser.error.parserfailure" ), args ) ) );
+    }
         return m_currentElement;
     }
 
diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/parser/LinkParsingOperations.java 
b/jspwiki-main/src/main/java/org/apache/wiki/parser/LinkParsingOperations.java
index 8102e73..51263ef 100644
--- 
a/jspwiki-main/src/main/java/org/apache/wiki/parser/LinkParsingOperations.java
+++ 
b/jspwiki-main/src/main/java/org/apache/wiki/parser/LinkParsingOperations.java
@@ -23,7 +23,6 @@ import org.apache.oro.text.regex.Pattern;
 import org.apache.oro.text.regex.Perl5Matcher;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.api.exceptions.ProviderException;
-import org.apache.wiki.render.RenderingManager;
 
 import java.util.Arrays;
 import java.util.Comparator;
@@ -41,13 +40,11 @@ public class LinkParsingOperations {
     private final WikiContext wikiContext;
 
     /**
-     *  This list contains all IANA registered URI protocol
-     *  types as of September 2004 + a few well-known extra types.
+     *  This list contains all IANA registered URI protocol types as of 
September 2004 + a few well-known extra types.
      *
      *  JSPWiki recognises all of them as external links.
      *
-     *  This array is sorted during class load, so you can just dump
-     *  here whatever you want in whatever order you want.
+     *  This array is sorted during class load, so you can just dump here 
whatever you want in whatever order you want.
      */
     static final String[] EXTERNAL_LINKS = {
         "http:", "ftp:", "https:", "mailto:";,
@@ -83,8 +80,7 @@ public class LinkParsingOperations {
     /**
      *  Returns true if the link is really command to insert a plugin.
      *  <P>
-     *  Currently we just check if the link starts with "{INSERT",
-     *  or just plain "{" but not "{$".
+     *  Currently we just check if the link starts with "{INSERT", or just 
plain "{" but not "{$".
      *
      *  @param link Link text, i.e. the contents of text between [].
      *  @return True, if this link seems to be a command to insert a plugin 
here.
@@ -135,8 +131,7 @@ public class LinkParsingOperations {
     }
 
     /**
-     * Figures out if a link is an off-site link.  This recognizes
-     * the most common protocols by checking how it starts.
+     * Figures out if a link is an off-site link.  This recognizes the most 
common protocols by checking how it starts.
      *
      * @param page The link to check.
      * @return true, if this is a link outside of this wiki.
@@ -149,15 +144,11 @@ public class LinkParsingOperations {
     }
 
     /**
-     *  Matches the given link to the list of image name patterns to
-     *  determine whether it should be treated as an inline image or not.
+     *  Matches the given link to the list of image name patterns to determine 
whether it should be treated as an inline image or not.
      */
-    public boolean isImageLink( String link ) {
-        if( wikiContext.getEngine().getManager( RenderingManager.class 
).getParser( wikiContext, link ).isImageInlining() ) {
+    public boolean isImageLink( String link, final boolean isImageInlining, 
final List< Pattern > inlineImagePatterns ) {
+        if( isImageInlining ) {
             link = link.toLowerCase();
-            final List< Pattern > inlineImagePatterns = 
wikiContext.getEngine().getManager( RenderingManager.class )
-                                                                  .getParser( 
wikiContext, link ).getInlineImagePatterns();
-
             for( final Pattern p : inlineImagePatterns ) {
                 if( new Perl5Matcher().matches( link, p ) ) {
                     return true;
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/MarkdownForJSPWikiExtension.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/MarkdownForJSPWikiExtension.java
index b7cec13..cc93a62 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/MarkdownForJSPWikiExtension.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/MarkdownForJSPWikiExtension.java
@@ -21,11 +21,14 @@ package org.apache.wiki.markdown;
 import com.vladsch.flexmark.html.HtmlRenderer;
 import com.vladsch.flexmark.parser.Parser;
 import com.vladsch.flexmark.util.data.MutableDataHolder;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
 import 
org.apache.wiki.markdown.extensions.jspwikilinks.attributeprovider.JSPWikiLinkAttributeProviderFactory;
 import 
org.apache.wiki.markdown.extensions.jspwikilinks.postprocessor.JSPWikiNodePostProcessorFactory;
 import org.apache.wiki.markdown.renderer.JSPWikiNodeRendererFactory;
 
+import java.util.List;
+
 
 /**
  * Flexmark entry point to bootstrap JSPWiki extensions.
@@ -33,9 +36,15 @@ import 
org.apache.wiki.markdown.renderer.JSPWikiNodeRendererFactory;
 public class MarkdownForJSPWikiExtension implements Parser.ParserExtension, 
HtmlRenderer.HtmlRendererExtension {
 
        private final WikiContext context;
+       private final boolean isImageInlining;
+       private final List< Pattern > inlineImagePatterns;
 
-       public MarkdownForJSPWikiExtension( final WikiContext context ) {
+       public MarkdownForJSPWikiExtension( final WikiContext context,
+                                                                               
final boolean isImageInlining,
+                                                                               
final List< Pattern > inlineImagePatterns ) {
                this.context = context;
+               this.isImageInlining = isImageInlining;
+               this.inlineImagePatterns = inlineImagePatterns;
        }
 
        /**
@@ -58,7 +67,7 @@ public class MarkdownForJSPWikiExtension implements 
Parser.ParserExtension, Html
        @Override
        public void extend( final HtmlRenderer.Builder rendererBuilder, final 
String rendererType ) {
            rendererBuilder.nodeRendererFactory( new 
JSPWikiNodeRendererFactory( context ) );
-        rendererBuilder.attributeProviderFactory( new 
JSPWikiLinkAttributeProviderFactory( context ) );
+        rendererBuilder.attributeProviderFactory( new 
JSPWikiLinkAttributeProviderFactory( context, isImageInlining, 
inlineImagePatterns ) );
        }
 
     /**
@@ -66,7 +75,7 @@ public class MarkdownForJSPWikiExtension implements 
Parser.ParserExtension, Html
         */
        @Override
        public void extend( final Parser.Builder parserBuilder ) {
-           parserBuilder.postProcessorFactory( new 
JSPWikiNodePostProcessorFactory( context, parserBuilder ) );
+           parserBuilder.postProcessorFactory( new 
JSPWikiNodePostProcessorFactory( context, parserBuilder, isImageInlining, 
inlineImagePatterns ) );
        }
 
 }
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/ExternalLinkAttributeProviderState.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/ExternalLinkAttributeProviderState.java
index 9add6de..76dc98e 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/ExternalLinkAttributeProviderState.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/ExternalLinkAttributeProviderState.java
@@ -19,12 +19,14 @@
 package org.apache.wiki.markdown.extensions.jspwikilinks.attributeprovider;
 
 import com.vladsch.flexmark.util.ast.Node;
+import com.vladsch.flexmark.util.html.Attributes;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.markdown.nodes.JSPWikiLink;
 import org.apache.wiki.parser.LinkParsingOperations;
 import org.apache.wiki.parser.MarkupParser;
 
-import com.vladsch.flexmark.util.html.Attributes;
+import java.util.List;
 
 
 /**
@@ -36,11 +38,18 @@ public class ExternalLinkAttributeProviderState implements 
NodeAttributeProvider
     private final boolean m_useRelNofollow;
     private final WikiContext wikiContext;
     private final LinkParsingOperations linkOperations;
+    private final boolean isImageInlining;
+    private final List< Pattern > inlineImagePatterns;
 
-    public ExternalLinkAttributeProviderState( final WikiContext wikiContext, 
final boolean hasRef ) {
+    public ExternalLinkAttributeProviderState( final WikiContext wikiContext,
+                                               final boolean hasRef,
+                                               final boolean isImageInlining,
+                                               final List< Pattern > 
inlineImagePatterns ) {
         this.hasRef = hasRef;
         this.wikiContext = wikiContext;
         this.linkOperations = new LinkParsingOperations( wikiContext );
+        this.isImageInlining = isImageInlining;
+        this.inlineImagePatterns = inlineImagePatterns;
         this.m_useRelNofollow = wikiContext.getBooleanWikiProperty( 
MarkupParser.PROP_USERELNOFOLLOW, false );
     }
 
@@ -51,7 +60,7 @@ public class ExternalLinkAttributeProviderState implements 
NodeAttributeProvider
      */
     @Override
     public void setAttributes( final Attributes attributes, final JSPWikiLink 
link ) {
-        if( linkOperations.isImageLink( link.getUrl().toString() ) ) {
+        if( linkOperations.isImageLink( link.getUrl().toString(), 
isImageInlining, inlineImagePatterns ) ) {
             new ImageLinkAttributeProviderState( wikiContext, 
link.getText().toString(), hasRef ).setAttributes( attributes, link );
         } else {
             attributes.replaceValue( "class", MarkupParser.CLASS_EXTERNAL );
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/InterWikiLinkAttributeProviderState.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/InterWikiLinkAttributeProviderState.java
index 4de92d6..7138720 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/InterWikiLinkAttributeProviderState.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/InterWikiLinkAttributeProviderState.java
@@ -21,12 +21,15 @@ package 
org.apache.wiki.markdown.extensions.jspwikilinks.attributeprovider;
 import com.vladsch.flexmark.ast.Link;
 import com.vladsch.flexmark.util.ast.Node;
 import com.vladsch.flexmark.util.html.Attributes;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.markdown.nodes.JSPWikiLink;
 import org.apache.wiki.parser.LinkParsingOperations;
 import org.apache.wiki.parser.MarkupParser;
 import org.apache.wiki.util.TextUtil;
 
+import java.util.List;
+
 
 /**
  * {@link NodeAttributeProviderState} which sets the attributes for interwiki 
links.
@@ -37,11 +40,18 @@ public class InterWikiLinkAttributeProviderState implements 
NodeAttributeProvide
     private final boolean m_wysiwygEditorMode;
     private final WikiContext wikiContext;
     private final LinkParsingOperations linkOperations;
+    private final boolean isImageInlining;
+    private final List< Pattern > inlineImagePatterns;
 
-    public InterWikiLinkAttributeProviderState( final WikiContext wikiContext, 
final boolean hasRef ) {
+    public InterWikiLinkAttributeProviderState( final WikiContext wikiContext,
+                                                final boolean hasRef,
+                                                final boolean isImageInlining,
+                                                final List< Pattern > 
inlineImagePatterns ) {
         this.hasRef = hasRef;
         this.wikiContext = wikiContext;
         this.linkOperations = new LinkParsingOperations( wikiContext );
+        this.isImageInlining = isImageInlining;
+        this.inlineImagePatterns = inlineImagePatterns;
         final Boolean wysiwygVariable = ( Boolean )wikiContext.getVariable( 
WikiContext.VAR_WYSIWYG_EDITOR_MODE );
         m_wysiwygEditorMode = wysiwygVariable != null ? wysiwygVariable : 
false;
     }
@@ -58,7 +68,7 @@ public class InterWikiLinkAttributeProviderState implements 
NodeAttributeProvide
             String urlReference = wikiContext.getEngine().getInterWikiURL( 
refAndPage[ 0 ] );
             if( urlReference != null ) {
                 urlReference = TextUtil.replaceString( urlReference, "%s", 
refAndPage[ 1 ] );
-                if( linkOperations.isImageLink( urlReference ) ) {
+                if( linkOperations.isImageLink( urlReference, isImageInlining, 
inlineImagePatterns ) ) {
                     new ImageLinkAttributeProviderState( wikiContext, 
urlReference, hasRef ).setAttributes( attributes, link );
                 } else {
                     setInterWikiLinkAttrs( attributes, link, urlReference );
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/JSPWikiLinkAttributeProvider.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/JSPWikiLinkAttributeProvider.java
index 45a91a3..4d8ba7e 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/JSPWikiLinkAttributeProvider.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/JSPWikiLinkAttributeProvider.java
@@ -18,16 +18,18 @@
  */
 package org.apache.wiki.markdown.extensions.jspwikilinks.attributeprovider;
 
+import com.vladsch.flexmark.html.AttributeProvider;
+import com.vladsch.flexmark.html.renderer.AttributablePart;
+import com.vladsch.flexmark.util.ast.Node;
+import com.vladsch.flexmark.util.html.Attributes;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.markdown.nodes.JSPWikiLink;
 import org.apache.wiki.parser.LinkParsingOperations;
 import org.apache.wiki.util.TextUtil;
 
-import com.vladsch.flexmark.html.AttributeProvider;
-import com.vladsch.flexmark.html.renderer.AttributablePart;
-import com.vladsch.flexmark.util.ast.Node;
-import com.vladsch.flexmark.util.html.Attributes;
+import java.util.List;
 
 
 /**
@@ -39,10 +41,16 @@ public class JSPWikiLinkAttributeProvider implements 
AttributeProvider {
 
     protected final WikiContext wikiContext;
     protected final LinkParsingOperations linkOperations;
+    private final boolean isImageInlining;
+    private final List< Pattern > inlineImagePatterns;
 
-    public JSPWikiLinkAttributeProvider( final WikiContext wikiContext ) {
+    public JSPWikiLinkAttributeProvider( final WikiContext wikiContext,
+                                         final boolean isImageInlining,
+                                         final List< Pattern > 
inlineImagePatterns ) {
         this.wikiContext = wikiContext;
         this.linkOperations = new LinkParsingOperations( wikiContext );
+        this.isImageInlining = isImageInlining;
+        this.inlineImagePatterns = inlineImagePatterns;
     }
 
     /**
@@ -56,15 +64,15 @@ public class JSPWikiLinkAttributeProvider implements 
AttributeProvider {
             final JSPWikiLink link = ( JSPWikiLink )node;
             final NodeAttributeProviderState< JSPWikiLink > linkState;
             if( linkOperations.isExternalLink( link.getWikiLink() ) ) {
-                linkState = new ExternalLinkAttributeProviderState( 
wikiContext, link.hasRef() );
+                linkState = new ExternalLinkAttributeProviderState( 
wikiContext, link.hasRef(), isImageInlining, inlineImagePatterns );
             } else if( linkOperations.isInterWikiLink( link.getWikiLink() ) ) {
-                linkState = new InterWikiLinkAttributeProviderState( 
wikiContext, link.hasRef() );
+                linkState = new InterWikiLinkAttributeProviderState( 
wikiContext, link.hasRef(), isImageInlining, inlineImagePatterns );
             } else if( StringUtils.startsWith( link.getWikiLink(), "#" ) ) {
                 linkState = new LocalFootnoteLinkAttributeProviderState( 
wikiContext );
             } else if( TextUtil.isNumber( link.getWikiLink() ) ) {
                 linkState = new LocalFootnoteRefLinkAttributeProviderState( 
wikiContext );
             } else {
-                linkState = new LocalLinkAttributeProviderState( wikiContext, 
link.hasRef() );
+                linkState = new LocalLinkAttributeProviderState( wikiContext, 
link.hasRef(), isImageInlining, inlineImagePatterns );
             }
             linkState.setAttributes( attributes, link );
         }
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/JSPWikiLinkAttributeProviderFactory.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/JSPWikiLinkAttributeProviderFactory.java
index 1a0d6d9..c61a6fc 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/JSPWikiLinkAttributeProviderFactory.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/JSPWikiLinkAttributeProviderFactory.java
@@ -18,12 +18,14 @@
  */
 package org.apache.wiki.markdown.extensions.jspwikilinks.attributeprovider;
 
-import org.apache.wiki.WikiContext;
-
 import com.vladsch.flexmark.html.AttributeProvider;
 import com.vladsch.flexmark.html.AttributeProviderFactory;
 import com.vladsch.flexmark.html.IndependentAttributeProviderFactory;
 import com.vladsch.flexmark.html.renderer.LinkResolverContext;
+import org.apache.oro.text.regex.Pattern;
+import org.apache.wiki.WikiContext;
+
+import java.util.List;
 
 
 /**
@@ -32,9 +34,15 @@ import 
com.vladsch.flexmark.html.renderer.LinkResolverContext;
 public class JSPWikiLinkAttributeProviderFactory extends 
IndependentAttributeProviderFactory {
 
     final WikiContext wikiContext;
+    private final boolean isImageInlining;
+    private final List< Pattern > inlineImagePatterns;
 
-    public JSPWikiLinkAttributeProviderFactory( final WikiContext wikiContext 
) {
+    public JSPWikiLinkAttributeProviderFactory( final WikiContext wikiContext,
+                                                final boolean isImageInlining,
+                                                final List< Pattern > 
inlineImagePatterns ) {
         this.wikiContext = wikiContext;
+        this.isImageInlining = isImageInlining;
+        this.inlineImagePatterns = inlineImagePatterns;
     }
 
     /**
@@ -44,7 +52,7 @@ public class JSPWikiLinkAttributeProviderFactory extends 
IndependentAttributePro
      */
     @Override
     public AttributeProvider apply( final LinkResolverContext context ) {
-        return new JSPWikiLinkAttributeProvider( wikiContext );
+        return new JSPWikiLinkAttributeProvider( wikiContext, isImageInlining, 
inlineImagePatterns );
     }
 
 }
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/LocalLinkAttributeProviderState.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/LocalLinkAttributeProviderState.java
index 48c749c..add256b 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/LocalLinkAttributeProviderState.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/attributeprovider/LocalLinkAttributeProviderState.java
@@ -21,12 +21,15 @@ package 
org.apache.wiki.markdown.extensions.jspwikilinks.attributeprovider;
 import com.vladsch.flexmark.util.ast.Node;
 import com.vladsch.flexmark.util.html.Attributes;
 import com.vladsch.flexmark.util.sequence.CharSubSequence;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.attachment.AttachmentManager;
 import org.apache.wiki.markdown.nodes.JSPWikiLink;
 import org.apache.wiki.parser.LinkParsingOperations;
 import org.apache.wiki.parser.MarkupParser;
 
+import java.util.List;
+
 
 /**
  * {@link NodeAttributeProviderState} which sets the attributes for local 
links.
@@ -36,11 +39,18 @@ public class LocalLinkAttributeProviderState implements 
NodeAttributeProviderSta
     private final boolean hasRef;
     private final WikiContext wikiContext;
     private final LinkParsingOperations linkOperations;
+    private final boolean isImageInlining;
+    private final List< Pattern > inlineImagePatterns;
 
-    public LocalLinkAttributeProviderState( final WikiContext wikiContext, 
final boolean hasRef ) {
+    public LocalLinkAttributeProviderState( final WikiContext wikiContext,
+                                            final boolean hasRef,
+                                            final boolean isImageInlining,
+                                            final List< Pattern > 
inlineImagePatterns ) {
         this.hasRef = hasRef;
         this.wikiContext = wikiContext;
         this.linkOperations = new LinkParsingOperations( wikiContext );
+        this.isImageInlining = isImageInlining;
+        this.inlineImagePatterns = inlineImagePatterns;
     }
 
     /**
@@ -53,7 +63,7 @@ public class LocalLinkAttributeProviderState implements 
NodeAttributeProviderSta
         final int hashMark = link.getUrl().toString().indexOf( '#' );
         final String attachment = wikiContext.getEngine().getManager( 
AttachmentManager.class ).getAttachmentInfoName( wikiContext, 
link.getWikiLink() );
         if( attachment != null ) {
-            if( !linkOperations.isImageLink( link.getUrl().toString() ) ) {
+            if( !linkOperations.isImageLink( link.getUrl().toString(), 
isImageInlining, inlineImagePatterns ) ) {
                 attributes.replaceValue( "class", 
MarkupParser.CLASS_ATTACHMENT );
                 final String attlink = wikiContext.getURL( WikiContext.ATTACH, 
link.getWikiLink() );
                 attributes.replaceValue( "href", attlink );
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/ExternalLinkNodePostProcessorState.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/ExternalLinkNodePostProcessorState.java
index 3e8dac8..bd2ee43 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/ExternalLinkNodePostProcessorState.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/ExternalLinkNodePostProcessorState.java
@@ -21,11 +21,14 @@ package 
org.apache.wiki.markdown.extensions.jspwikilinks.postprocessor;
 import com.vladsch.flexmark.util.ast.Node;
 import com.vladsch.flexmark.util.ast.NodeTracker;
 import com.vladsch.flexmark.util.sequence.CharSubSequence;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.markdown.nodes.JSPWikiLink;
 import org.apache.wiki.parser.LinkParsingOperations;
 import org.apache.wiki.parser.MarkupParser;
 
+import java.util.List;
+
 
 /**
  * {@link NodePostProcessorState} which further post processes external links.
@@ -34,11 +37,17 @@ public class ExternalLinkNodePostProcessorState implements 
NodePostProcessorStat
 
     private final WikiContext wikiContext;
     private final LinkParsingOperations linkOperations;
+    private final boolean isImageInlining;
+    private final List< Pattern > inlineImagePatterns;
     private boolean m_useOutlinkImage = true;
 
-    public ExternalLinkNodePostProcessorState( final WikiContext wikiContext ) 
{
+    public ExternalLinkNodePostProcessorState( final WikiContext wikiContext,
+                                               final boolean isImageInlining,
+                                               final List< Pattern > 
inlineImagePatterns ) {
         this.wikiContext = wikiContext;
         this.linkOperations = new LinkParsingOperations( wikiContext );
+        this.isImageInlining = isImageInlining;
+        this.inlineImagePatterns = inlineImagePatterns;
         this.m_useOutlinkImage = wikiContext.getBooleanWikiProperty( 
MarkupParser.PROP_USEOUTLINKIMAGE, m_useOutlinkImage );
     }
 
@@ -49,7 +58,7 @@ public class ExternalLinkNodePostProcessorState implements 
NodePostProcessorStat
      */
     @Override
     public void process( final NodeTracker state, final JSPWikiLink link ) {
-        if( linkOperations.isImageLink( link.getUrl().toString() ) ) {
+        if( linkOperations.isImageLink( link.getUrl().toString(), 
isImageInlining, inlineImagePatterns ) ) {
             new ImageLinkNodePostProcessorState( wikiContext, 
link.getUrl().toString(), link.hasRef() ).process( state, link );
         } else {
             link.setUrl( CharSubSequence.of( link.getUrl().toString() ) );
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/InterWikiLinkNodePostProcessorState.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/InterWikiLinkNodePostProcessorState.java
index 39a1252..340cf65 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/InterWikiLinkNodePostProcessorState.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/InterWikiLinkNodePostProcessorState.java
@@ -23,6 +23,7 @@ import com.vladsch.flexmark.util.ast.Node;
 import com.vladsch.flexmark.util.ast.NodeTracker;
 import com.vladsch.flexmark.util.sequence.CharSubSequence;
 import org.apache.log4j.Logger;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.i18n.InternationalizationManager;
 import org.apache.wiki.markdown.nodes.JSPWikiLink;
@@ -32,6 +33,7 @@ import org.apache.wiki.preferences.Preferences;
 import org.apache.wiki.util.TextUtil;
 
 import java.text.MessageFormat;
+import java.util.List;
 import java.util.ResourceBundle;
 
 
@@ -43,13 +45,20 @@ public class InterWikiLinkNodePostProcessorState implements 
NodePostProcessorSta
     private static final Logger LOG = Logger.getLogger( 
InterWikiLinkNodePostProcessorState.class );
     private final WikiContext wikiContext;
     private final LinkParsingOperations linkOperations;
+    private final boolean isImageInlining;
+    private final List< Pattern > inlineImagePatterns;
     private final Document document;
     private final boolean m_wysiwygEditorMode;
     private boolean m_useOutlinkImage = true;
 
-    public InterWikiLinkNodePostProcessorState( final WikiContext wikiContext, 
final Document document ) {
+    public InterWikiLinkNodePostProcessorState( final WikiContext wikiContext,
+                                                final Document document,
+                                                final boolean isImageInlining,
+                                                final List< Pattern > 
inlineImagePatterns ) {
         this.wikiContext = wikiContext;
         this.linkOperations = new LinkParsingOperations( wikiContext );
+        this.isImageInlining = isImageInlining;
+        this.inlineImagePatterns = inlineImagePatterns;
         this.document = document;
         this.m_useOutlinkImage = wikiContext.getBooleanWikiProperty( 
MarkupParser.PROP_USEOUTLINKIMAGE, m_useOutlinkImage );
         final Boolean wysiwygVariable = ( Boolean )wikiContext.getVariable( 
WikiContext.VAR_WYSIWYG_EDITOR_MODE );
@@ -68,7 +77,7 @@ public class InterWikiLinkNodePostProcessorState implements 
NodePostProcessorSta
             String urlReference = wikiContext.getEngine().getInterWikiURL( 
refAndPage[ 0 ] );
             if( urlReference != null ) {
                 urlReference = TextUtil.replaceString( urlReference, "%s", 
refAndPage[ 1 ] );
-                if( linkOperations.isImageLink( urlReference ) ) {
+                if( linkOperations.isImageLink( urlReference, isImageInlining, 
inlineImagePatterns ) ) {
                     new ImageLinkNodePostProcessorState( wikiContext, 
urlReference, link.hasRef() ).process( state, link );
                 } else {
                     link.setUrl( CharSubSequence.of( urlReference ) );
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/JSPWikiLinkNodePostProcessor.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/JSPWikiLinkNodePostProcessor.java
index 2aba7de..0ee69f1 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/JSPWikiLinkNodePostProcessor.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/JSPWikiLinkNodePostProcessor.java
@@ -25,12 +25,15 @@ import com.vladsch.flexmark.util.ast.Document;
 import com.vladsch.flexmark.util.ast.Node;
 import com.vladsch.flexmark.util.ast.NodeTracker;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.markdown.nodes.JSPWikiLink;
 import org.apache.wiki.parser.LinkParsingOperations;
 import org.apache.wiki.parser.MarkupParser;
 import org.apache.wiki.util.TextUtil;
 
+import java.util.List;
+
 
 /**
  * {@link NodePostProcessor} to convert {@link Link}s into {@link 
JSPWikiLink}s.
@@ -41,13 +44,20 @@ public class JSPWikiLinkNodePostProcessor extends 
NodePostProcessor {
 
     protected final WikiContext m_context;
     protected final LinkParsingOperations linkOperations;
+    private final boolean isImageInlining;
+    private final List< Pattern > inlineImagePatterns;
     protected boolean m_useOutlinkImage = true;
     protected final Document document;
 
-    public JSPWikiLinkNodePostProcessor( final WikiContext m_context, final 
Document document ) {
+    public JSPWikiLinkNodePostProcessor( final WikiContext m_context,
+                                         final Document document,
+                                         final boolean isImageInlining,
+                                         final List< Pattern > 
inlineImagePatterns ) {
         this.m_context = m_context;
         this.document = document;
         linkOperations = new LinkParsingOperations( m_context );
+        this.isImageInlining = isImageInlining;
+        this.inlineImagePatterns = inlineImagePatterns;
         m_useOutlinkImage = m_context.getBooleanWikiProperty( 
MarkupParser.PROP_USEOUTLINKIMAGE, m_useOutlinkImage );
     }
 
@@ -71,15 +81,15 @@ public class JSPWikiLinkNodePostProcessor extends 
NodePostProcessor {
             } else if( linkOperations.isVariableLink( link.getUrl().toString() 
) ) {
                 linkPostProcessor = new VariableLinkNodePostProcessorState( 
m_context );
             } else if( linkOperations.isExternalLink( link.getUrl().toString() 
) ) {
-                linkPostProcessor = new ExternalLinkNodePostProcessorState( 
m_context );
+                linkPostProcessor = new ExternalLinkNodePostProcessorState( 
m_context, isImageInlining, inlineImagePatterns );
             } else if( linkOperations.isInterWikiLink( 
link.getUrl().toString() ) ) {
-                linkPostProcessor = new InterWikiLinkNodePostProcessorState( 
m_context, document );
+                linkPostProcessor = new InterWikiLinkNodePostProcessorState( 
m_context, document, isImageInlining, inlineImagePatterns );
             } else if( StringUtils.startsWith( link.getUrl().toString(), "#" ) 
) {
                 linkPostProcessor = new 
LocalFootnoteLinkNodePostProcessorState( m_context );
             } else if( TextUtil.isNumber( link.getUrl().toString() ) ) {
                 linkPostProcessor = new 
LocalFootnoteRefLinkNodePostProcessorState( m_context );
             } else {
-                linkPostProcessor = new LocalLinkNodePostProcessorState( 
m_context );
+                linkPostProcessor = new LocalLinkNodePostProcessorState( 
m_context, isImageInlining, inlineImagePatterns );
             }
             linkPostProcessor.process( state, link );
         }
@@ -95,7 +105,7 @@ public class JSPWikiLinkNodePostProcessor extends 
NodePostProcessor {
 
         if( previous != null ) {
             previous.insertAfter( link );
-        } else {
+        } else if( parent != null ) {
             parent.appendChild( link );
         }
 
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/JSPWikiNodePostProcessorFactory.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/JSPWikiNodePostProcessorFactory.java
index 889d80d..d929240 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/JSPWikiNodePostProcessorFactory.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/JSPWikiNodePostProcessorFactory.java
@@ -23,8 +23,11 @@ import com.vladsch.flexmark.parser.block.NodePostProcessor;
 import com.vladsch.flexmark.parser.block.NodePostProcessorFactory;
 import com.vladsch.flexmark.util.ast.Document;
 import com.vladsch.flexmark.util.data.DataHolder;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
 
+import java.util.List;
+
 
 /**
  * Simple {@link NodePostProcessorFactory} to instantiate {@link 
JSPWikiLinkNodePostProcessor}s.
@@ -32,11 +35,18 @@ import org.apache.wiki.WikiContext;
 public class JSPWikiNodePostProcessorFactory extends NodePostProcessorFactory {
 
     private final WikiContext m_context;
+    private final boolean isImageInlining;
+    private final List< Pattern > inlineImagePatterns;
 
-    public JSPWikiNodePostProcessorFactory( final WikiContext m_context, final 
DataHolder options ) {
+    public JSPWikiNodePostProcessorFactory( final WikiContext m_context,
+                                            final DataHolder options,
+                                            final boolean isImageInlining,
+                                            final List< Pattern > 
inlineImagePatterns ) {
         super( true );
         addNodes( Link.class ); // needs to be called before create( Document )
         this.m_context = m_context;
+        this.isImageInlining = isImageInlining;
+        this.inlineImagePatterns = inlineImagePatterns;
     }
 
     /**
@@ -44,7 +54,7 @@ public class JSPWikiNodePostProcessorFactory extends 
NodePostProcessorFactory {
      */
     @Override
     public NodePostProcessor apply( final Document document ) {
-        return new JSPWikiLinkNodePostProcessor( m_context, document );
+        return new JSPWikiLinkNodePostProcessor( m_context, document, 
isImageInlining, inlineImagePatterns );
     }
 
 }
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/LocalLinkNodePostProcessorState.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/LocalLinkNodePostProcessorState.java
index 0e1629a..b1eca9e 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/LocalLinkNodePostProcessorState.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/markdown/extensions/jspwikilinks/postprocessor/LocalLinkNodePostProcessorState.java
@@ -22,12 +22,15 @@ import com.vladsch.flexmark.ast.HtmlInline;
 import com.vladsch.flexmark.util.ast.Node;
 import com.vladsch.flexmark.util.ast.NodeTracker;
 import com.vladsch.flexmark.util.sequence.CharSubSequence;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.attachment.AttachmentManager;
 import org.apache.wiki.markdown.nodes.JSPWikiLink;
 import org.apache.wiki.parser.LinkParsingOperations;
 import org.apache.wiki.parser.MarkupParser;
 
+import java.util.List;
+
 
 /**
  * {@link NodePostProcessorState} which further post processes local links.
@@ -36,10 +39,16 @@ public class LocalLinkNodePostProcessorState implements 
NodePostProcessorState<
 
     private final WikiContext wikiContext;
     private final LinkParsingOperations linkOperations;
+    private final boolean isImageInlining;
+    private final List< Pattern > inlineImagePatterns;
 
-    public LocalLinkNodePostProcessorState( final WikiContext wikiContext ) {
+    public LocalLinkNodePostProcessorState( final WikiContext wikiContext,
+                                            final boolean isImageInlining,
+                                            final List< Pattern > 
inlineImagePatterns ) {
         this.wikiContext = wikiContext;
         this.linkOperations = new LinkParsingOperations( wikiContext );
+        this.isImageInlining = isImageInlining;
+        this.inlineImagePatterns = inlineImagePatterns;
     }
 
     /**
@@ -52,7 +61,7 @@ public class LocalLinkNodePostProcessorState implements 
NodePostProcessorState<
         final int hashMark = link.getUrl().toString().indexOf( '#' );
         final String attachment = wikiContext.getEngine().getManager( 
AttachmentManager.class ).getAttachmentInfoName( wikiContext, 
link.getUrl().toString() );
         if( attachment != null  ) {
-            if( !linkOperations.isImageLink( link.getUrl().toString() ) ) {
+            if( !linkOperations.isImageLink( link.getUrl().toString(), 
isImageInlining, inlineImagePatterns ) ) {
                 final String attlink = wikiContext.getURL( WikiContext.ATTACH, 
link.getUrl().toString() );
                 link.setUrl( CharSubSequence.of( attlink ) );
                 link.removeChildren();
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/parser/markdown/MarkdownDocument.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/parser/markdown/MarkdownDocument.java
index e441a0a..17eb5fa 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/parser/markdown/MarkdownDocument.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/parser/markdown/MarkdownDocument.java
@@ -25,6 +25,7 @@ import com.vladsch.flexmark.parser.ParserEmulationProfile;
 import com.vladsch.flexmark.util.ast.Node;
 import com.vladsch.flexmark.util.data.MutableDataSet;
 import com.vladsch.flexmark.util.misc.Extension;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
 import org.apache.wiki.WikiPage;
 import org.apache.wiki.markdown.MarkdownForJSPWikiExtension;
@@ -32,6 +33,7 @@ import org.apache.wiki.parser.JSPWikiMarkupParser;
 import org.apache.wiki.parser.WikiDocument;
 
 import java.util.Arrays;
+import java.util.List;
 
 
 /**
@@ -58,12 +60,12 @@ public class MarkdownDocument extends WikiDocument {
         * @param context current wikicontext
         * @return configuration options for MarkdownRenderers.
         */
-       public static MutableDataSet options( final WikiContext context ) {
+       public static MutableDataSet options( final WikiContext context, final 
boolean isImageInlining, final List< Pattern > inlineImagePatterns ) {
                final MutableDataSet options = new MutableDataSet();
                options.setFrom( ParserEmulationProfile.COMMONMARK );
                // align style of Markdown's footnotes extension with jspwiki 
footnotes refs
                options.set( FootnoteExtension.FOOTNOTE_LINK_REF_CLASS, 
JSPWikiMarkupParser.CLASS_FOOTNOTE_REF );
-               options.set( Parser.EXTENSIONS, Arrays.asList( new Extension[] 
{ new MarkdownForJSPWikiExtension( context ),
+               options.set( Parser.EXTENSIONS, Arrays.asList( new Extension[] 
{ new MarkdownForJSPWikiExtension( context, isImageInlining, 
inlineImagePatterns ),
                                                                                
 FootnoteExtension.create(),
                                                                                
 TocExtension.create() } ) );
                return options;
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/parser/markdown/MarkdownParser.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/parser/markdown/MarkdownParser.java
index d36647b..2c69f09 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/parser/markdown/MarkdownParser.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/parser/markdown/MarkdownParser.java
@@ -43,7 +43,7 @@ public class MarkdownParser extends MarkupParser {
             context.getEngine().getManager( AuthorizationManager.class ) == 
null ) {
             disableAccessRules();
         }
-        parser = Parser.builder( MarkdownDocument.options( context ) ).build();
+        parser = Parser.builder( MarkdownDocument.options( context, 
isImageInlining(), getInlineImagePatterns() ) ).build();
     }
 
     /**
diff --git 
a/jspwiki-markdown/src/main/java/org/apache/wiki/render/markdown/MarkdownRenderer.java
 
b/jspwiki-markdown/src/main/java/org/apache/wiki/render/markdown/MarkdownRenderer.java
index bf13633..1400b61 100755
--- 
a/jspwiki-markdown/src/main/java/org/apache/wiki/render/markdown/MarkdownRenderer.java
+++ 
b/jspwiki-markdown/src/main/java/org/apache/wiki/render/markdown/MarkdownRenderer.java
@@ -18,14 +18,18 @@
  */
 package org.apache.wiki.render.markdown;
 
-import java.io.IOException;
-
+import com.vladsch.flexmark.html.HtmlRenderer;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.oro.text.regex.Pattern;
 import org.apache.wiki.WikiContext;
+import org.apache.wiki.parser.MarkupParser;
 import org.apache.wiki.parser.WikiDocument;
 import org.apache.wiki.parser.markdown.MarkdownDocument;
+import org.apache.wiki.render.RenderingManager;
 import org.apache.wiki.render.WikiRenderer;
 
-import com.vladsch.flexmark.html.HtmlRenderer;
+import java.io.IOException;
+import java.util.List;
 
 
 /**
@@ -37,7 +41,12 @@ public class MarkdownRenderer extends WikiRenderer {
 
        public MarkdownRenderer( final WikiContext context, final WikiDocument 
doc ) {
                super( context, doc );
-               renderer = HtmlRenderer.builder( MarkdownDocument.options( 
context ) ).build();
+               final MarkupParser mp = context.getEngine()
+                                                      .getManager( 
RenderingManager.class )
+                                                      .getParser( context, 
StringUtils.defaultString( doc.getPageData() ) );
+               final boolean isImageInlining = mp.isImageInlining();
+               final List< Pattern > inlineImagePatterns = 
mp.getInlineImagePatterns();
+               renderer = HtmlRenderer.builder( MarkdownDocument.options( 
context, isImageInlining, inlineImagePatterns ) ).build();
        }
 
        /**

Reply via email to