[jboss-cvs] jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine ...
Christian Bauer
christian at hibernate.org
Fri Jan 11 13:05:14 EST 2008
User: cbauer
Date: 08/01/11 13:05:14
Modified: examples/wiki/src/main/org/jboss/seam/wiki/core/engine
WikiLink.java NullWikiTextRenderer.java
WikiLinkResolver.java WikiTextParser.java
DefaultWikiLinkResolver.java WikiTextRenderer.java
DefaultWikiTextRenderer.java
Log:
JBSEAM-2136 - Anchor/linking support for document headlines
Revision Changes Path
1.3 +12 -0 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiLink.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: WikiLink.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiLink.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- WikiLink.java 19 Dec 2007 04:29:18 -0000 1.2
+++ WikiLink.java 11 Jan 2008 18:05:14 -0000 1.3
@@ -1,6 +1,7 @@
package org.jboss.seam.wiki.core.engine;
import org.jboss.seam.wiki.core.model.WikiFile;
+import org.jboss.seam.wiki.util.WikiUtil;
/**
* Simple value holder for link resolution and rendering.
@@ -13,6 +14,7 @@
WikiFile file;
boolean requiresUpdating = false;
String url;
+ String fragment;
String description;
boolean broken = false;
boolean external = false;
@@ -31,6 +33,16 @@
public String getUrl() { return url; }
public void setUrl(String url) { this.url = url; }
+ public String getFragment() { return fragment; }
+ public void setFragment(String fragment) { this.fragment = fragment; }
+
+ public String getEncodedFragment() {
+ if (fragment != null) {
+ return WikiTextRenderer.HEADLINE_ID_PREFIX+WikiUtil.convertToWikiName(fragment);
+ }
+ return "";
+ }
+
public String getDescription() { return description; }
public void setDescription(String description) { this.description = description; }
1.6 +6 -6 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/NullWikiTextRenderer.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: NullWikiTextRenderer.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/NullWikiTextRenderer.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- NullWikiTextRenderer.java 2 Jan 2008 18:59:46 -0000 1.5
+++ NullWikiTextRenderer.java 11 Jan 2008 18:05:14 -0000 1.6
@@ -9,20 +9,20 @@
*/
public class NullWikiTextRenderer implements WikiTextRenderer {
- public String renderInlineLink(WikiLink inlineLink) { return null; }
+ public String renderInternalLink(WikiLink internalLink) { return null; }
public String renderExternalLink(WikiLink externalLink) { return null; }
public String renderFileAttachmentLink(int attachmentNumber, WikiLink attachmentLink) { return null; }
- public String renderThumbnailImageInlineLink(WikiLink inlineLink) { return null; }
+ public String renderThumbnailImageLink(WikiLink link) { return null; }
public void setAttachmentLinks(List<WikiLink> attachmentLinks) {}
public void setExternalLinks(List<WikiLink> externalLinks) {}
public String renderMacro(WikiMacro macro) { return null; }
public String renderParagraphOpenTag() { return "<p>\n"; }
public String renderPreformattedOpenTag() { return "<pre>\n"; }
public String renderBlockquoteOpenTag() { return "<blockquote>\n"; }
- public String renderHeadline1Opentag() { return "<h1>"; }
- public String renderHeadline2OpenTag() { return "<h2>"; }
- public String renderHeadline3OpenTag() { return "<h3>"; }
- public String renderHeadline4OpenTag() { return "<h4>"; }
+ public String renderHeadline1(String headline) { return "<h1>"+headline+"</h1>"; }
+ public String renderHeadline2(String headline) { return "<h2>"+headline+"</h2>"; }
+ public String renderHeadline3(String headline) { return "<h3>"+headline+"</h3>"; }
+ public String renderHeadline4(String headline) { return "<h4>"+headline+"</h4>"; }
public String renderOrderedListOpenTag() { return "<ol>\n"; }
public String renderOrderedListItemOpenTag() { return "<li>"; }
public String renderUnorderedListOpenTag() { return "<ul>\n"; }
1.6 +22 -7 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiLinkResolver.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: WikiLinkResolver.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiLinkResolver.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- WikiLinkResolver.java 19 Dec 2007 04:29:18 -0000 1.5
+++ WikiLinkResolver.java 11 Jan 2008 18:05:14 -0000 1.6
@@ -27,17 +27,32 @@
/**
* Matches known protocols, e.g. [=>http://foo.bar], which can be ignored and "resolved" as-is
*/
- public static final String REGEX_KNOWN_PROTOCOL = "(http://)|(https://)|(ftp://)|(mailto:)";
+ public static final String REGEX_KNOWN_PROTOCOL = "^(http://)|(https://)|(ftp://)|(mailto:).+$";
/**
* Matches customized protocols, e.g. [=>seamjira://123], which should be resolved and rendered
*/
- public static final String REGEX_CUSTOM_PROTOCOL = "([a-zA-Z]+)://(.+)";
+ public static final String REGEX_CUSTOM_PROTOCOL = "^([a-zA-Z]+)://(.+)$";
+
+ /**
+ * Matches WikiNode.getName() constraint.
+ */
+ public static final String REGEX_NODE_NAME = "[a-zA-Z0-9]+[^/#\\|\\]\\[]*";
+
+ /**
+ * Matches URL fragments, punctuation is limited, so not all fragments are reachable.
+ */
+ public static final String REGEX_FRAGMENT = "#[\\w\\s\\.\\,\\;\\-\\?\\!\\(\\)\\&\\/]+";
+
+ /**
+ * Matches "Node Name#Fragment123" with two groups.
+ */
+ public static final String REGEX_NODE_NAME_FRAGMENT = "("+REGEX_NODE_NAME+")(" + REGEX_FRAGMENT + ")?";
/**
* Prepended to primary identifiers when links are stored, e.g. [This is a stored link=>wiki://5]
*/
- public static final String REGEX_WIKI_PROTOCOL = "wiki://([0-9]+)";
+ public static final String REGEX_WIKI_PROTOCOL = "wiki://([0-9]+)("+REGEX_FRAGMENT+")?";
/**
* Match [GROUP1=>GROUP1], used to replace links from user input with wiki:// URLs - used
@@ -45,7 +60,7 @@
*/
public static final String REGEX_WIKILINK_FORWARD =
Pattern.quote("[") + "([^" + Pattern.quote("]") + "|" + Pattern.quote("[") + "]*)" +
- "=>([^(?://)@" + Pattern.quote("]") + Pattern.quote("[") + "]+)" + Pattern.quote("]");
+ "=>([^" + Pattern.quote("]") + Pattern.quote("[") + "]+)" + Pattern.quote("]");
/**
* Match [GROUP1=>wiki://GROUP2], used to replace wiki:// URLs with page names
@@ -55,9 +70,9 @@
"=>" + REGEX_WIKI_PROTOCOL + Pattern.quote("]");
/**
- * Match "Foo Bar|Baz Brrr" as two groups
+ * Match "Foo Bar|Baz Brrr#Fragment" as three groups
*/
- public static final String REGEX_WIKILINK_CROSSAREA = "^(.+)" + Pattern.quote("|") + "(.*)$";
+ public static final String REGEX_WIKILINK_CROSSAREA = "^(" + REGEX_NODE_NAME +")"+ Pattern.quote("|") + REGEX_NODE_NAME_FRAGMENT + "$";
/**
* Replaces clear text links such as <tt>[Link description=>Target Name]</tt> in <tt>wikiText</tt> with
@@ -141,7 +156,7 @@
* original document that contains this <tt>linkText</tt> should be updated in the datastore (usually
* by passing its wiki text content through <tt>convertToWikiProtocol</tt>) - set <tt>requiresUpdating=true</tt>
* on the <tt>WikiLink</tt> instance. It's the job of the client of this resolver to handle this flag
- * (or ignore it).
+ * (or to ignore it).
*</li>
* </ul>
*
1.14 +11 -11 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextParser.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: WikiTextParser.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextParser.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- WikiTextParser.java 30 Dec 2007 02:33:23 -0000 1.13
+++ WikiTextParser.java 11 Jan 2008 18:05:14 -0000 1.14
@@ -108,7 +108,7 @@
WikiLink unresolvedLink = new WikiLink(false, false);
unresolvedLink.setDescription(descriptionText);
unresolvedLink.setUrl(linkText);
- return renderer.renderInlineLink(unresolvedLink);
+ return renderer.renderInternalLink(unresolvedLink);
}
resolver.resolveLinkText(currentAreaNumber, resolvedLinks, linkText);
@@ -132,7 +132,7 @@
}
return renderer.renderFileAttachmentLink((attachments.indexOf(link)+1), link);
} else {
- return renderer.renderThumbnailImageInlineLink(link);
+ return renderer.renderThumbnailImageLink(link);
}
}
@@ -143,7 +143,7 @@
}
// Regular link
- return renderer.renderInlineLink(link);
+ return renderer.renderInternalLink(link);
}
protected String paragraphOpenTag() {
@@ -158,20 +158,20 @@
return renderer.renderBlockquoteOpenTag();
}
- protected String headline1OpenTag() {
- return renderer.renderHeadline1Opentag();
+ protected String headline1(String headline) {
+ return renderer.renderHeadline1(headline);
}
- protected String headline2OpenTag() {
- return renderer.renderHeadline2OpenTag();
+ protected String headline2(String headline) {
+ return renderer.renderHeadline2(headline);
}
- protected String headline3OpenTag() {
- return renderer.renderHeadline3OpenTag();
+ protected String headline3(String headline) {
+ return renderer.renderHeadline3(headline);
}
- protected String headline4OpenTag() {
- return renderer.renderHeadline4OpenTag();
+ protected String headline4(String headline) {
+ return renderer.renderHeadline4(headline);
}
protected String orderedListOpenTag() {
1.6 +82 -24 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/DefaultWikiLinkResolver.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: DefaultWikiLinkResolver.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/DefaultWikiLinkResolver.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- DefaultWikiLinkResolver.java 19 Dec 2007 04:29:18 -0000 1.5
+++ DefaultWikiLinkResolver.java 11 Jan 2008 18:05:14 -0000 1.6
@@ -38,42 +38,78 @@
public String convertToWikiProtocol(Set<WikiFile> linkTargets, Long currentAreaNumber, String wikiText) {
if (wikiText == null) return null;
+ log.debug("converting wiki text links to wiki protocol for storage, current area: " + currentAreaNumber);
+
StringBuffer replacedWikiText = new StringBuffer(wikiText.length());
Matcher matcher = Pattern.compile(REGEX_WIKILINK_FORWARD).matcher(wikiText);
// Replace with [Link Text=>wiki://<node id>] or leave as is if not found
while (matcher.find()) {
String linkText = matcher.group(2);
- WikiFile file = resolveCrossAreaLinkText(currentAreaNumber, linkText);
+
+ if (linkText.matches(REGEX_KNOWN_PROTOCOL) || linkText.matches(REGEX_CUSTOM_PROTOCOL)) continue;
+
+ log.debug("converting to wiki protocol: " + linkText);
+
+ WikiFile file = null;
+ String fragment = null;
+ Matcher linkTextMatcher = getCrossAreaMatcher(linkText);
+ if (linkTextMatcher != null) {
+ log.debug("link to different area: " + linkTextMatcher.group(1));
+ file = resolve(currentAreaNumber, linkTextMatcher.group(1), linkTextMatcher.group(2));
+ fragment = linkTextMatcher.group(3);
+ } else {
+ log.debug("link to current area");
+ linkTextMatcher = getAreaMatcher(linkText);
+ if (linkTextMatcher != null) {
+ file = resolve(currentAreaNumber, null, linkTextMatcher.group(1));
+ fragment = linkTextMatcher.group(2);
+ }
+ }
+
+ log.debug("resolved file: " + file);
+ log.debug("resolved fragment: " + fragment);
+
if (file != null) {
- matcher.appendReplacement(replacedWikiText, "[$1=>wiki://" + file.getId() + "]");
+ if (fragment == null) fragment = "";
+ log.debug("updating wiki text with wiki protocol link: " + "wiki://" + file.getId() + ""+fragment);
+ matcher.appendReplacement(replacedWikiText, "[$1=>wiki://" + file.getId() + ""+fragment+"]");
linkTargets.add(file);
}
}
matcher.appendTail(replacedWikiText);
+ log.debug("completed converting wiki text links to wiki protocol, ready for storing");
return replacedWikiText.toString();
}
public String convertFromWikiProtocol(Long currentAreaNumber, String wikiText) {
if (wikiText == null) return null;
+ log.debug("converting wiki protocol to wiki text, current area: " + currentAreaNumber);
+
StringBuffer replacedWikiText = new StringBuffer(wikiText.length());
Matcher matcher = Pattern.compile(REGEX_WIKILINK_REVERSE).matcher(wikiText);
// Replace with [Link Text=>Page Name] or replace with BROKENLINK "page name"
while (matcher.find()) {
+ String fileId = matcher.group(2);
+ String fragment = matcher.group(3);
+ log.debug("found file id: " + fileId);
+ log.debug("found fragment: " + fragment);
+ if (fragment == null) fragment = "";
+
// Find the node by PK
- WikiFile file = wikiNodeDAO.findWikiFile(Long.valueOf(matcher.group(2)));
+ WikiFile file = wikiNodeDAO.findWikiFile(Long.valueOf(fileId));
// Node is in current area, just use its name
if (file != null && file.getAreaNumber().equals(currentAreaNumber)) {
- matcher.appendReplacement(replacedWikiText, "[$1=>" + file.getName() + "]");
+ matcher.appendReplacement(replacedWikiText, "[$1=>" + file.getName() + fragment +"]");
// Node is in different area, prepend the area name
} else if (file != null && !file.getAreaNumber().equals(currentAreaNumber)) {
WikiDirectory area = wikiNodeDAO.findArea(file.getAreaNumber());
- matcher.appendReplacement(replacedWikiText, "[$1=>" + area.getName() + "|" + file.getName() + "]");
+ matcher.appendReplacement(replacedWikiText, "[$1=>" + area.getName() + "|" + file.getName() + fragment +"]");
// Couldn't find it anymore, its a broken link
} else {
@@ -81,6 +117,7 @@
}
}
matcher.appendTail(replacedWikiText);
+ log.debug("completed converting wiki protocol to wiki text");
return replacedWikiText.toString();
}
@@ -89,6 +126,8 @@
// Don't resolve twice
if (links.containsKey(linkText)) return;
+ log.debug("trying to resolve link text: " + linkText);
+
Matcher wikiProtocolMatcher = Pattern.compile(REGEX_WIKI_PROTOCOL).matcher(linkText);
Matcher knownProtocolMatcher = Pattern.compile(REGEX_KNOWN_PROTOCOL).matcher(linkText);
Matcher customProtocolMatcher = Pattern.compile(REGEX_CUSTOM_PROTOCOL).matcher(linkText);
@@ -107,17 +146,19 @@
// Find the node by PK
WikiFile file = wikiNodeDAO.findWikiFile(Long.valueOf(wikiProtocolMatcher.group(1)));
+ String fragment = wikiProtocolMatcher.group(2);
if (file != null) {
wikiLink = new WikiLink(false, false);
wikiLink.setFile(file);
+ wikiLink.setFragment(fragment);
wikiLink.setDescription(file.getName());
- log.debug("wiki link resolved to existing node: " + linkText);
+ log.debug("link text resolved to existing node: " + file + " and fragment: " + fragment);
} else {
// Can't do anything, [=>wiki://123] no longer exists
wikiLink = new WikiLink(true, false);
wikiLink.setUrl(BROKENLINK_URL);
wikiLink.setDescription(BROKENLINK_DESCRIPTION);
- log.debug("wiki link could not be resolved: " + linkText);
+ log.debug("link tet could not be resolved: " + linkText);
}
// Check if it is a custom protocol
@@ -128,12 +169,12 @@
wikiLink = new WikiLink(false, true);
wikiLink.setUrl(protocol.getRealLink(customProtocolMatcher.group(2)));
wikiLink.setDescription(protocol.getPrefix() + "://" + customProtocolMatcher.group(2));
- log.debug("link resolved to custom protocol: " + linkText);
+ log.debug("link text resolved to custom protocol: " + linkText);
} else {
wikiLink = new WikiLink(true, false);
wikiLink.setUrl(BROKENLINK_URL);
wikiLink.setDescription(BROKENLINK_DESCRIPTION);
- log.debug("link resolved to non-existant custom protocol: " + linkText);
+ log.debug("link text resolved to non-existant custom protocol: " + linkText);
}
// It must be a stored clear text link, such as [=>Target Name] or [=>Area Name|Target Name]
@@ -142,15 +183,28 @@
} else {
// Try a WikiWord search in the current or named area
- WikiFile doc = resolveCrossAreaLinkText(currentAreaNumber, linkText);
- if (doc!=null) {
+ WikiFile file = null;
+ String fragment = null;
+ Matcher linkTextMatcher = getCrossAreaMatcher(linkText);
+ if (linkTextMatcher != null) {
+ file = resolve(currentAreaNumber, linkTextMatcher.group(1), linkTextMatcher.group(2));
+ fragment = linkTextMatcher.group(3);
+ } else {
+ linkTextMatcher = getAreaMatcher(linkText);
+ if (linkTextMatcher != null) {
+ file = resolve(currentAreaNumber, null, linkTextMatcher.group(1));
+ fragment = linkTextMatcher.group(2);
+ }
+ }
+ if (file!=null) {
wikiLink = new WikiLink(false, false);
- wikiLink.setFile(doc);
- wikiLink.setDescription(doc.getName());
+ wikiLink.setFile(file);
+ wikiLink.setFragment(fragment);
+ wikiLink.setDescription(file.getName());
// Indicate that caller should update the wiki text that contains this link
wikiLink.setRequiresUpdating(true);
- log.debug("resolved wiki word link, this needs updating to the real identifier: " + linkText);
+ log.debug("link text resolved (needs updating to wiki protocol): " + file + " and fragment: " + fragment);
} else {
/* TODO: Not sure we should actually implement this..., one of these things that the wiki "designers" got wrong
@@ -173,20 +227,24 @@
links.put(linkText, wikiLink);
}
- private WikiFile resolveCrossAreaLinkText(Long currentAreaNumber, String linkText) {
- Matcher crossLinkMatcher = Pattern.compile(REGEX_WIKILINK_CROSSAREA).matcher(linkText);
- if (crossLinkMatcher.find()) {
- // Try to find the node in the referenced area
- String areaName = crossLinkMatcher.group(1);
- String nodeName = crossLinkMatcher.group(2);
+ private Matcher getCrossAreaMatcher(String linkText) {
+ Matcher matcher = Pattern.compile(REGEX_WIKILINK_CROSSAREA).matcher(linkText);
+ return matcher.find() ? matcher : null;
+ }
+
+ private Matcher getAreaMatcher(String linkText) {
+ Matcher matcher = Pattern.compile(REGEX_NODE_NAME_FRAGMENT).matcher(linkText);
+ return matcher.find() ? matcher : null;
+ }
+
+ private WikiFile resolve(Long currentAreaNumber, String areaName, String nodeName) {
+ log.debug("trying to resolve, current area " + currentAreaNumber + ", search in area '" + areaName + "' for node name: " + nodeName);
+ if (areaName != null) {
WikiNode crossLinkArea = wikiNodeDAO.findArea(WikiUtil.convertToWikiName(areaName));
if (crossLinkArea != null)
return wikiNodeDAO.findWikiFileInArea(crossLinkArea.getAreaNumber(), WikiUtil.convertToWikiName(nodeName));
- } else {
- // Try the current area
- return wikiNodeDAO.findWikiFileInArea(currentAreaNumber, WikiUtil.convertToWikiName(linkText));
}
- return null;
+ return wikiNodeDAO.findWikiFileInArea(currentAreaNumber, WikiUtil.convertToWikiName(nodeName));
}
}
1.8 +8 -8 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextRenderer.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: WikiTextRenderer.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/WikiTextRenderer.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- WikiTextRenderer.java 30 Dec 2007 02:33:23 -0000 1.7
+++ WikiTextRenderer.java 11 Jan 2008 18:05:14 -0000 1.8
@@ -1,7 +1,5 @@
package org.jboss.seam.wiki.core.engine;
-import org.jboss.seam.wiki.core.engine.WikiMacro;
-
import java.util.List;
/**
@@ -11,19 +9,21 @@
*/
public interface WikiTextRenderer {
- public String renderInlineLink(WikiLink inlineLink);
+ public static final String HEADLINE_ID_PREFIX = "H-";
+
+ public String renderInternalLink(WikiLink internalLink);
public String renderExternalLink(WikiLink externalLink);
- public String renderThumbnailImageInlineLink(WikiLink inlineLink);
+ public String renderThumbnailImageLink(WikiLink link);
public String renderFileAttachmentLink(int attachmentNumber, WikiLink attachmentLink);
public String renderMacro(WikiMacro macro);
public String renderParagraphOpenTag();
public String renderPreformattedOpenTag();
public String renderBlockquoteOpenTag();
- public String renderHeadline1Opentag();
- public String renderHeadline2OpenTag();
- public String renderHeadline3OpenTag();
- public String renderHeadline4OpenTag();
+ public String renderHeadline1(String headline);
+ public String renderHeadline2(String headline);
+ public String renderHeadline3(String headline);
+ public String renderHeadline4(String headline);
public String renderOrderedListOpenTag();
public String renderOrderedListItemOpenTag();
public String renderUnorderedListOpenTag();
1.7 +20 -13 jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/DefaultWikiTextRenderer.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: DefaultWikiTextRenderer.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/examples/wiki/src/main/org/jboss/seam/wiki/core/engine/DefaultWikiTextRenderer.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- DefaultWikiTextRenderer.java 2 Jan 2008 18:59:46 -0000 1.6
+++ DefaultWikiTextRenderer.java 11 Jan 2008 18:05:14 -0000 1.7
@@ -11,12 +11,12 @@
*/
public class DefaultWikiTextRenderer implements WikiTextRenderer {
- public String renderInlineLink(WikiLink inlineLink) {
- return !inlineLink.isBroken() ?
+ public String renderInternalLink(WikiLink internalLink) {
+ return !internalLink.isBroken() ?
"<a href=\""
- + WikiUtil.renderURL(inlineLink.getFile())
+ + WikiUtil.renderURL(internalLink.getFile())
+ "\">"
- + inlineLink.getDescription()
+ + internalLink.getDescription()
+ "</a>" : "[Broken Link]";
}
@@ -32,7 +32,7 @@
return "[Attachment]";
}
- public String renderThumbnailImageInlineLink(WikiLink inlineLink) {
+ public String renderThumbnailImageLink(WikiLink link) {
return "[Embedded Image]";
}
@@ -55,22 +55,23 @@
return "<blockquote class=\"wikiBlockquote\">\n";
}
- public String renderHeadline1Opentag() {
- return "<h1 class=\"wikiHeadline1\">";
+ public String renderHeadline1(String headline) {
+ return "<h1 class=\"wikiHeadline1\" id=\""+getHeadlineId(headline)+"\">" + headline + "</h1>";
}
- public String renderHeadline2OpenTag() {
- return "<h2 class=\"wikiHeadline2\">";
+ public String renderHeadline2(String headline) {
+ return "<h2 class=\"wikiHeadline2\" id=\""+getHeadlineId(headline)+"\">" + headline + "</h2>";
}
- public String renderHeadline3OpenTag() {
- return "<h3 class=\"wikiHeadline3\">";
+ public String renderHeadline3(String headline) {
+ return "<h3 class=\"wikiHeadline3\" id=\""+getHeadlineId(headline)+"\">" + headline + "</h3>";
}
- public String renderHeadline4OpenTag() {
- return "<h4 class=\"wikiHeadline4\">";
+ public String renderHeadline4(String headline) {
+ return "<h4 class=\"wikiHeadline4\" id=\""+getHeadlineId(headline)+"\">" + headline + "</h4>";
}
+
public String renderOrderedListOpenTag() {
return "<ol class=\"wikiOrderedList\">\n";
}
@@ -94,4 +95,10 @@
public String renderEmphasisCloseTag() {
return "</i>";
}
+
+ protected String getHeadlineId(String headline) {
+ // HTML id attribute has restrictions on valid values... so the easiest way is to make this a WikiLink
+ return HEADLINE_ID_PREFIX+WikiUtil.convertToWikiName(headline);
+ // We also need to access it correctly, see WikiLink.java
+ }
}
More information about the jboss-cvs-commits
mailing list