[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