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 42329641ee7cfe2f0d2d9e4bef19483fcd7cf2ab Author: juanpablo <[email protected]> AuthorDate: Wed Dec 27 23:17:27 2017 +0100 substitute Links with JSPWikiLinks and work with the latter instead of the former --- .../JSPWikiLinkAttributeProvider.java | 31 +++++++--------- .../JSPWikiLinkNodePostProcessor.java | 41 +++++++++++++++------- 2 files changed, 42 insertions(+), 30 deletions(-) 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 0a85f29..6c9dc58 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 @@ -20,10 +20,10 @@ package org.apache.wiki.markdown.extensions.jspwikilinks.attributeprovider; import org.apache.commons.lang.StringUtils; 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.ast.Link; import com.vladsch.flexmark.ast.Node; import com.vladsch.flexmark.html.AttributeProvider; import com.vladsch.flexmark.html.renderer.AttributablePart; @@ -31,9 +31,9 @@ import com.vladsch.flexmark.util.html.Attributes; /** - * {@link AttributeProvider} for JSPWiki links. + * {@link AttributeProvider} to decorate {@link JSPWikiLink}s. * - * Acts as a factory of {@link NodeAttributeProviderState}, which are the classes setting the attributes for each concrete type of link. + * Acts as a factory of {@link NodeAttributeProviderState}s, which are the classes setting the attributes for each concrete type of link. */ public class JSPWikiLinkAttributeProvider implements AttributeProvider { @@ -52,24 +52,19 @@ public class JSPWikiLinkAttributeProvider implements AttributeProvider { */ @Override public void setAttributes( final Node node, final AttributablePart part, final Attributes attributes ) { - if( node instanceof Link ) { - final Link link = ( Link )node; - boolean hasRef = true; - if( StringUtils.isEmpty( link.getUrl().toString() ) ) { // empty link == link.getText() is a wiki page - link.setUrl( link.getText() ); - hasRef = false; - } - final NodeAttributeProviderState< Link > linkState; - if( linkOperations.isExternalLink( link.getUrl().toString() ) ) { - linkState = new ExternalLinkAttributeProviderState( wikiContext, hasRef ); - } else if( linkOperations.isInterWikiLink( link.getUrl().toString() ) ) { - linkState = new InterWikiLinkAttributeProviderState( wikiContext, hasRef ); - } else if( StringUtils.startsWith( link.getUrl().toString(), "#" ) ) { + if( node instanceof JSPWikiLink ) { + final JSPWikiLink link = ( JSPWikiLink )node; + final NodeAttributeProviderState< JSPWikiLink > linkState; + if( linkOperations.isExternalLink( link.getWikiLink() ) ) { + linkState = new ExternalLinkAttributeProviderState( wikiContext, link.hasRef() ); + } else if( linkOperations.isInterWikiLink( link.getWikiLink() ) ) { + linkState = new InterWikiLinkAttributeProviderState( wikiContext, link.hasRef() ); + } else if( StringUtils.startsWith( link.getWikiLink(), "#" ) ) { linkState = new LocalFootnoteLinkAttributeProviderState( wikiContext ); - } else if( TextUtil.isNumber( link.getUrl().toString() ) ) { + } else if( TextUtil.isNumber( link.getWikiLink() ) ) { linkState = new LocalFootnoteRefLinkAttributeProviderState( wikiContext ); } else { - linkState = new LocalLinkAttributeProviderState( wikiContext, hasRef ); + linkState = new LocalLinkAttributeProviderState( wikiContext, link.hasRef() ); } linkState.setAttributes( attributes, link ); } 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 680de26..0715810 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 @@ -20,6 +20,7 @@ package org.apache.wiki.markdown.extensions.jspwikilinks.postprocessor; import org.apache.commons.lang.StringUtils; 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; @@ -33,7 +34,7 @@ import com.vladsch.flexmark.util.NodeTracker; /** - * {@link NodePostProcessor} for JSPWiki links. + * {@link NodePostProcessor} to convert {@link Link}s into {@link JSPWikiLink}s. * * Acts as a factory of {@link NodePostProcessorState}, which are the classes generating the extra markup for each concrete type of link. */ @@ -59,14 +60,9 @@ public class JSPWikiLinkNodePostProcessor extends NodePostProcessor { @Override public void process( final NodeTracker state, final Node node ) { if( node instanceof Link ) { - final Link link = ( Link )node; - boolean hasRef = true; - if( StringUtils.isEmpty( link.getUrl().toString() ) ) { // empty link == link.getText() is a wiki page - link.setUrl( link.getText() ); - hasRef = false; - } + JSPWikiLink link = replaceLinkWithJSPWikiLink( state, node ); - final NodePostProcessorState< Link > linkPostProcessor; + final NodePostProcessorState< JSPWikiLink > linkPostProcessor; if( linkOperations.isAccessRule( link.getUrl().toString() ) ) { linkPostProcessor = new AccessRuleLinkNodePostProcessorState( m_context ); } else if( linkOperations.isMetadata( link.getUrl().toString() ) ) { @@ -76,16 +72,37 @@ 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, hasRef ); + linkPostProcessor = new ExternalLinkNodePostProcessorState( m_context ); } else if( linkOperations.isInterWikiLink( link.getUrl().toString() ) ) { - linkPostProcessor = new InterWikiLinkNodePostProcessorState( m_context, document, hasRef ); + linkPostProcessor = new InterWikiLinkNodePostProcessorState( m_context, document ); + } else if( StringUtils.startsWith( link.getUrl().toString(), "#" ) ) { + linkPostProcessor = new LocalFootnoteLinkNodePostProcessorState( m_context ); } else if( TextUtil.isNumber( link.getUrl().toString() ) ) { - linkPostProcessor = new FootnoteRefLinkNodePostProcessorState(); + linkPostProcessor = new LocalFootnoteRefLinkNodePostProcessorState( m_context ); } else { - linkPostProcessor = new LocalLinkNodePostProcessorState( m_context, hasRef ); + linkPostProcessor = new LocalLinkNodePostProcessorState( m_context ); } linkPostProcessor.process( state, link ); } } + JSPWikiLink replaceLinkWithJSPWikiLink( final NodeTracker state, final Node node ) { + JSPWikiLink link = new JSPWikiLink( ( Link )node ); + Node previous = node.getPrevious(); + Node parent = node.getParent(); + + link.takeChildren( node ); + node.unlink(); + + if( previous != null ) { + previous.insertAfter( link ); + } else { + parent.appendChild( link ); + } + + state.nodeRemoved( node ); + state.nodeAddedWithChildren( link ); + return link; + } + } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
