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,"&","&"), url, false ); - } - else - { - result = makeLink( EXTERNAL, StringUtils.replace(url,"&","&"), url, null, null ); + if( m_linkParsingOperations.isImageLink( url, isImageInlining(), getInlineImagePatterns() ) ) { + result = handleImageLink( StringUtils.replace( url, "&", "&" ), url, false ); + } else { + result = makeLink( EXTERNAL, StringUtils.replace( url, "&", "&" ), 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(); } /**
