site

(djk)
2011-04-03: Parser delegate impl tweaks.

Parser delegate impl tweaks.

diff --git a/src/fniki/wiki/WikiApp.java b/src/fniki/wiki/WikiApp.java
--- a/src/fniki/wiki/WikiApp.java
+++ b/src/fniki/wiki/WikiApp.java
@@ -284,8 +284,8 @@ public class WikiApp implements ChildCon
             return containerPrefix(); // LATER: revisit.
         }
 
-        protected String getFproxyPrefix() {
-            return mContext.getString("fproxy_prefix", null);
+        protected boolean getFreenetLinksAllowed(){
+            return mContext.getString("fproxy_prefix", null) != null;
         }
 
         protected boolean getImagesAllowed() {
@@ -295,9 +295,17 @@ public class WikiApp implements ChildCon
         protected String makeLink(String containerRelativePath) {
             return mContext.makeLink(containerRelativePath);
         }
+
+        protected String makeFreenetLink(String uri) {
+            String prefix = mContext.getString("fproxy_prefix", null);
+            if (prefix == null) {
+                throw new RuntimeException("fproxy_prefix is null!");
+            }
+            return makeFproxyHref(prefix, uri);
+        }
     }
 
-    // Hrrmm.. kind of weird. I can't remember why I used this static method instead of a constant.
+    // Hmmmm... kind of weird. I can't remember why I used this static method instead of a constant.
     // NO trailing slash.
     private static String containerPrefix() { return "/plugins/fniki.freenet.plugin.Fniki"; }
 
diff --git a/src/fniki/wiki/WikiParserDelegate.java b/src/fniki/wiki/WikiParserDelegate.java
--- a/src/fniki/wiki/WikiParserDelegate.java
+++ b/src/fniki/wiki/WikiParserDelegate.java
@@ -36,68 +36,73 @@ import static fniki.wiki.HtmlUtils.*;
 import static fniki.wiki.Validations.*;
 
 public abstract class WikiParserDelegate implements FreenetWikiTextParser.ParserDelegate {
-    final ArchiveManager mArchiveManager;
+    final protected ArchiveManager mArchiveManager;
 
     public WikiParserDelegate(ArchiveManager archiveManager) {
         mArchiveManager = archiveManager;
     }
 
     protected abstract String getContainerPrefix();
-    protected abstract String getFproxyPrefix();
+    protected abstract boolean getFreenetLinksAllowed();
     protected abstract boolean getImagesAllowed();
     protected abstract String makeLink(String containerRelativePath);
+    protected abstract String makeFreenetLink(String uri);
+
+    protected boolean processedLocalChangesMacro(StringBuilder sb, String text) {
+        try { // Should never happen while dumping and existing archive to html.
+            FileManifest.Changes changes =  mArchiveManager.getLocalChanges();
+            if (changes.isUnmodified()) {
+                sb.append("<br>No local changes.<br>");
+            }
+            appendChangesHtml(changes, getContainerPrefix(), sb);
+        } catch (IOException ioe) {
+            sb.append("{ERROR PROCESSING LOCALCHANGES MACRO}");
+        }
+        return true;
+    }
+
+    protected boolean processedTitleIndexMacro(StringBuilder sb, String text) {
+        try {
+            for (String name : mArchiveManager.getStorage().getNames()) {
+                appendPageLink(getContainerPrefix(), sb, name, null, true);
+                sb.append("<br>");
+            }
+        } catch (IOException ioe) {
+            sb.append("{ERROR PROCESSING TITLEINDEX MACRO}");
+            return true;
+        }
+        return true;
+    }
 
     public boolean processedMacro(StringBuilder sb, String text) {
         if (text.equals("LocalChanges")) {
-            try {
-                FileManifest.Changes changes  = mArchiveManager.getLocalChanges();
-                if (changes.isUnmodified()) {
-                    sb.append("<br>No local changes.<br>");
-                    return true;
-                }
-                appendChangesHtml(changes, getContainerPrefix(), sb);
-                return true;
-            } catch (IOException ioe) {
-                sb.append("{ERROR PROCESSING LOCALCHANGES MACRO}");
-                return true;
-            }
+            return processedLocalChangesMacro(sb, text);
         } else if (text.equals("TitleIndex")) {
-            try {
-                for (String name : mArchiveManager.getStorage().getNames()) {
-                    appendPageLink(getContainerPrefix(), sb, name, null, true);
-                    sb.append("<br>");
-                }
-            } catch (IOException ioe) {
-                sb.append("{ERROR PROCESSING TITLEINDEX MACRO}");
-                return true;
-            }
-            return true;
+            return processedTitleIndexMacro(sb, text);
         }
-
         return false;
     }
 
     // CHK, SSK, USK freenet links.
     public void appendLink(StringBuilder sb, String text) {
-        String fproxyPrefix = getFproxyPrefix();
-
         String[] link=split(text, '|');
-        if (fproxyPrefix != null &&
+        if (getFreenetLinksAllowed() &&
             isValidFreenetUri(link[0])) {
-            sb.append("<a href=\""+ makeFproxyHref(fproxyPrefix, link[0].trim()) +"\" rel=\"nofollow\">");
-            sb.append(escapeHTML(unescapeHTML(link.length>=2 && !isEmpty(link[1].trim())? link[1]:link[0])));
-            sb.append("</a>");
-            return;
-        }
-        if (isAlphaNumOrUnder(link[0])) {
-            // Link to an internal wiki page.
-            sb.append("<a href=\""+ makeHref(makeLink("/" + link[0].trim())) +"\" rel=\"nofollow\">");
+            sb.append("<a href=\""+ makeFreenetLink(link[0].trim()) +"\">");
             sb.append(escapeHTML(unescapeHTML(link.length>=2 && !isEmpty(link[1].trim())? link[1]:link[0])));
             sb.append("</a>");
             return;
         }
 
-        sb.append("<a href=\"" + makeHref(makeLink("/ExternalLink")) +"\" rel=\"nofollow\">");
+        if (isAlphaNumOrUnder(link[0])) {
+            // Link to an internal wiki page.
+            sb.append("<a href=\""+ makeHref(makeLink("/" + link[0].trim())) +"\">");
+            sb.append(escapeHTML(unescapeHTML(link.length>=2 && !isEmpty(link[1].trim())? link[1]:link[0])));
+            sb.append("</a>");
+            return;
+        }
+
+        sb.append("<a href=\"" + makeHref(makeLink("/ExternalLink")) +"\">");
         sb.append(escapeHTML(unescapeHTML(link.length>=2 && !isEmpty(link[1].trim())? link[1]:link[0])));
         sb.append("</a>");
     }
@@ -109,18 +114,17 @@ public abstract class WikiParserDelegate
             return;
         }
 
-        String fproxyPrefix = getFproxyPrefix();
-        if (fproxyPrefix == null) {
+        if (!getFreenetLinksAllowed()) {
+            // Hmmm... A little wonky. But this is ok.
             sb.append("{FPROXY PREFIX NOT SET. IMAGE WIKITEXT IGNORED}");
             return;
         }
 
         String[] link=split(text, '|');
-        if (fproxyPrefix != null &&
-            isValidFreenetUri(link[0]) &&
+        if (isValidFreenetUri(link[0]) &&
             !link[0].startsWith("freenet:USK@")) {
             String alt=escapeHTML(unescapeHTML(link.length>=2 && !isEmpty(link[1].trim())? link[1]:link[0]));
-            sb.append("<img src=\"" + makeFproxyHref(fproxyPrefix, link[0].trim())
+            sb.append("<img src=\"" + makeFreenetLink(link[0].trim())
                       + "\" alt=\""+alt+"\" title=\""+alt+"\" />");
             return;
         }