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; }