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]>.

Reply via email to