You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2005/06/09 05:19:20 UTC

svn commit: r189695 [2/67] - in /incubator/roller/trunk: ./ contrib/ contrib/lib/ contrib/plugins/ contrib/plugins/src/ contrib/plugins/src/org/ contrib/plugins/src/org/roller/ contrib/plugins/src/org/roller/presentation/ contrib/plugins/src/org/roller/presentation/velocity/ contrib/plugins/src/org/roller/presentation/velocity/plugins/ contrib/plugins/src/org/roller/presentation/velocity/plugins/acronyms/ contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/ contrib/plugins/src/org/roller/presentation/velocity/plugins/email/ contrib/plugins/src/org/roller/presentation/velocity/plugins/jspwiki/ contrib/plugins/src/org/roller/presentation/velocity/plugins/radeox/ contrib/plugins/src/org/roller/presentation/velocity/plugins/readmore/ contrib/plugins/src/org/roller/presentation/velocity/plugins/smileys/ contrib/plugins/src/org/roller/presentation/velocity/plugins/textile/ contrib/plugins/src/org/roller/presentation/velocity/plugins/topictag/ custom/ custom/src/ custom/web/ docs/ docs/images/ docs/installguide/ docs/installguide/old/ docs/userguide/ docs/userguide/images/ docs/userguide/old/ metadata/ metadata/database/ metadata/database/hibernate/ metadata/xdoclet/ nbproject/ personal/ personal/eclipse/ personal/testing/ sandbox/ sandbox/planetroller/ sandbox/planetroller/metadata/ sandbox/planetroller/metadata/database/ sandbox/planetroller/src/ sandbox/planetroller/src/org/ sandbox/planetroller/src/org/roller/ sandbox/planetroller/src/org/roller/tools/ sandbox/planetroller/src/org/roller/tools/planet/ sandbox/planetroller/templates/ sandbox/planetroller/test/ sandbox/planetroller/test/org/ sandbox/planetroller/test/org/roller/ sandbox/planetroller/test/org/roller/model/ sandbox/planetroller/test/org/roller/tools/ sandbox/planetroller/test/org/roller/tools/planet/ sandbox/planetroller/testdata/ sandbox/planetroller/testdata/cache/ sandbox/planetroller/testdata/output/ sandbox/standalone/ sandbox/standalone/jspwiki/ sandbox/standalone/jspwiki/default/ sandbox/standalone/jspwiki/default/images/ sandbox/standalone/lib/ sandbox/standalone/src/ sandbox/standalone/src/org/ sandbox/standalone/src/org/roller/ sandbox/standalone/src/org/roller/jspwiki/ sandbox/standalone/src/org/roller/tomcat/ sandbox/standalone/src/org/roller/util/ sandbox/standalone/tests/ sandbox/standalone/tests/org/ sandbox/standalone/tests/org/roller/ sandbox/standalone/tests/org/roller/util/ sandbox/standalone/tomcat/ src/ src/org/ src/org/roller/ src/org/roller/business/ src/org/roller/business/hibernate/ src/org/roller/business/search/ src/org/roller/business/search/operations/ src/org/roller/business/utils/ src/org/roller/config/ src/org/roller/config/runtime/ src/org/roller/model/ src/org/roller/pojos/ src/org/roller/presentation/ src/org/roller/presentation/atomapi/ src/org/roller/presentation/bookmarks/ src/org/roller/presentation/bookmarks/actions/ src/org/roller/presentation/bookmarks/formbeans/ src/org/roller/presentation/bookmarks/tags/ src/org/roller/presentation/filters/ src/org/roller/presentation/forms/ src/org/roller/presentation/newsfeeds/ src/org/roller/presentation/pagecache/ src/org/roller/presentation/pagecache/rollercache/ src/org/roller/presentation/pings/ src/org/roller/presentation/planet/ src/org/roller/presentation/tags/ src/org/roller/presentation/tags/calendar/ src/org/roller/presentation/tags/menu/ src/org/roller/presentation/util/ src/org/roller/presentation/velocity/ src/org/roller/presentation/weblog/ src/org/roller/presentation/weblog/actions/ src/org/roller/presentation/weblog/formbeans/ src/org/roller/presentation/weblog/tags/ src/org/roller/presentation/website/ src/org/roller/presentation/website/actions/ src/org/roller/presentation/website/formbeans/ src/org/roller/presentation/website/tags/ src/org/roller/presentation/xmlrpc/ src/org/roller/util/ src/org/roller/util/rome/ tests/ tests/org/ tests/org/roller/ tests/org/roller/ant/ tests/org/roller/business/ tests/org/roller/presentation/ tests/org/roller/presentation/atomapi/ tests/org/roller/presentation/bookmarks/ tests/org/roller/presentation/filters/ tests/org/roller/presentation/velocity/ tests/org/roller/presentation/velocity/plugins/ tests/org/roller/presentation/velocity/plugins/smileys/ tests/org/roller/presentation/velocity/plugins/textile/ tests/org/roller/presentation/weblog/ tests/org/roller/presentation/xmlrpc/ tests/org/roller/util/ tests/org/roller/util/rome/ tools/ tools/buildtime/ tools/buildtime/ant-1.6.2/ tools/buildtime/findbugs/ tools/buildtime/findbugs/lib/ tools/buildtime/findbugs/plugin/ tools/buildtime/mockrunner-0.3/ tools/buildtime/mockrunner-0.3/lib/ tools/buildtime/mockrunner-0.35/ tools/buildtime/mockrunner-0.35/lib/ tools/buildtime/tomcat-4.1.24/ tools/buildtime/xdoclet-1.2/ tools/buildtime/xdoclet-1.2/lib/ tools/hibernate-2.1/ tools/hibernate-2.1/lib/ tools/lib/ tools/standard-1.0.3/ tools/standard-1.0.3/lib/ tools/standard-1.0.3/tld/ tools/struts-1.2.4/ tools/struts-1.2.4/lib/ web/ web/WEB-INF/ web/WEB-INF/classes/ web/WEB-INF/classes/flavors/ web/WEB-INF/classes/themes/ web/bookmarks/ web/editor/ web/editor/images/ web/images/ web/images/editor/ web/images/midas/ web/images/preview/ web/images/smileys/ web/planet/ web/tags/ web/templates/ web/theme/ web/theme/images/ web/theme/lavender/ web/theme/scripts/ web/theme/scripts/classes/ web/themes/ web/themes/basic/ web/themes/berkley/ web/themes/berkley/images/ web/themes/brushedmetal/ web/themes/brushedmetal/images/ web/themes/cheb/ web/themes/cheb/images/ web/themes/cheb/scripts/ web/themes/clean/ web/themes/currency-i18n/ web/themes/currency-i18n/images/ web/themes/currency/ web/themes/currency/images/ web/themes/grey2/ web/themes/moonshine/ web/themes/movablemanila/ web/themes/movablemanila/images/ web/themes/pacifica/ web/themes/robot/ web/themes/rolling/ web/themes/rolling/images/ web/themes/sotto/ web/themes/sotto/images/ web/themes/sotto/styles/ web/themes/sunsets/ web/themes/sunsets/images/ web/themes/sunsets/scripts/ web/themes/sunsets/styles/ web/themes/werner/ web/themes/x2/ web/themes/x2/images/ web/themes/x2/scripts/ web/themes/x2/styles/ web/weblog/ web/website/

Added: incubator/roller/trunk/CHANGES.txt
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/CHANGES.txt?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/CHANGES.txt (added)
+++ incubator/roller/trunk/CHANGES.txt Wed Jun  8 20:18:46 2005
@@ -0,0 +1,437 @@
+
+ROLLER CHANGE LOG
+-----------------
+This release includes basic support for Podcasting, bug fixes and minor improvements.
+A new aggregator front page (known as Planet Roller) has been added to Roller, but
+it is an unsupported feature available only via Roller's custom build mechanism.
+
+    New Features
+    * [ROL-711] - Support Podcasting
+	* [ROL-596] - Aggregator front page (unsupported: only in custom builds)
+
+    Bugs
+	* [ROL-405] - getConfigPath() in RollerContext doesn't handle SecurityException
+	* [ROL-433] - Bookmarks, Import of OPML file fails on trying to insert null.
+	* [ROL-464] - Error changing name of folder
+	* [ROL-529] - read more summary plugins can't support chinese title
+	* [ROL-649] - Email notification may not send notifications with bad addresses
+	* [ROL-650] - Email privacy issues in comment notification
+	* [ROL-651] - Notification emails don't use the correct website URL
+	* [ROL-652] - Notification emails contain unnecessary information for commenter
+	* [ROL-655] - Bookmark linker plugin is overly agressive
+	* [ROL-665] - Broken themes on Tomcat 5.5.7
+	* [ROL-677] - CloseSessionFilter not always called for login.jsp
+	* [ROL-689] - Rolling theme in theme selectors - preview fails to return
+	* [ROL-695] - Can't save anything in an empty db or empty website
+	* [ROL-700] - Exception on RollerSession passivation
+	* [ROL-701] - Rolling theme includes don't show up in preview
+	* [ROL-710] - MetaWeblog API: permalinks should not be relative
+
+    Improvements
+	* [ROL-530] - Child categories should be in a parent categories feed
+	* [ROL-604] - Add MS SqlServer support to Roller
+	* [ROL-615] - Lift 100 entry limit in MetaWelog API
+	* [ROL-632] - UserCookieData lacks equals() and hashcode()
+	* [ROL-669] - Main page should include auto-disco link
+	* [ROL-679] - Externalize configuration of Hibernate
+	
+	
+1.0.1 Bug Fix Releasee
+
+Fixes minor bugs in Roller 1.0 and adds support for rel="nofollow"
+
+    Bug
+    * [ROL-621] - Twisty Comments broken in 1.0
+    * [ROL-623] - Unexpanded type macros in 097-098 upgrade script for mysql
+    * [ROL-625] - Remember Me doesn't work in 1.0 and Firefox
+    * [ROL-628] - Flawed SQL clause for moving users in 097-to-098-upgrade script.
+    * [ROL-631] - Blacklist update task doesn't catch all exceptions
+    * [ROL-640] - Search page reports incorrect (high) counts
+    * [ROL-641] - CommentsServlet *throws* an NPE if it can't find a weblog entry
+    * [ROL-647] - Unclosed link tag causes StringIndexOutOfBoundsException if 
+                  using Textile and ReadMore plugins
+    
+    New Feature
+    * [ROL-627] - rel="nofollow" for referrers, trackbacks, and comments
+
+    Improvement
+    * [ROL-642] - cheb theme requires a minor adjustment to fix font color problem on the menu
+    * [ROL-643] - Add Icelandic application resources
+
+
+1.0 FINAL
+
+Fixes minor found in Roller 1.0 RC2.
+
+    * [ROL-538] - Remember Me seems to be broken
+    * [ROL-554] - Norwegian and Danish characters are corrupted
+    * [ROL-560] - Weblog Edit page problems with some browsers
+    * [ROL-565] - File upload creates bogus directory
+    * [ROL-572] - User admin page glitches
+    * [ROL-574] - Site wide RSS feed is your own if you are logged in
+    * [ROL-575] - Confusing instructions -- Replace "&" by "&"
+    * [ROL-576] - Email notification is not working
+    * [ROL-577] - Missing and Unexpected jars in lib
+    * [ROL-578] - Captcha requiring duplicate gimpybackgrounds directory
+    * [ROL-581] - Warning navigating to Website tab
+    * [ROL-583] - Double defined listeners
+    * [ROL-585] - Restore old themes
+    * [ROL-586] - Edit folder fails with exception
+    * [ROL-590] - "Read More" plugin should ignore HTML tags
+    * [ROL-603] - roller.log file created in startup directory
+    * [ROL-612] - blacklist.txt file getting written to /
+    * [ROL-501] - Allow commenters to opt-in to email notification of comments
+    * [ROL-558] - Resources should not be browsable
+
+--------------------------------------------------------------------------------
+
+1.0RC2: 2nd Release Candidate for Roller 1.0
+
+   [ROL-338] - Delete-user blows up on PostgreSQL
+   [ROL-508] - I18N problems in sending a trackback
+   [ROL-509] - Errors in PostgreSQL migration script for 0.98 to 1.0
+   [ROL-512] - Recent Drafts list in Weblog editor does not show future posts
+   [ROL-516] - properties.xmlf missing from src release
+   [ROL-522] - RSS feed pubDate does not indicate AM/PM
+   [ROL-523] - org.apache.jasper.JasperException: /taglibs.jsp(0,0)  problem
+   [ROL-524] - rollerpw.sh utility won't work with PostgreSQL
+   [ROL-525] - Attempt to disable Blogger API raises exception
+   [ROL-532] - no rollback on exception when deleting user
+   [ROL-535] - Velocity context not properly populated on CommentServlet.doPost()
+   [ROL-539] - Correct comments path in #showHiddenCommentsForm()
+   [ROL-542] - XML-RPC deletePost not working
+   [ROL-544] - Exception on following link after comment submission
+   [ROL-548] - Bookmark display macro not obeying sort order
+   [ROL-550] - Checkbox for e-mail on comments appears even if e-mail is centrally disabled
+   [ROL-551] - Toggle linkback throws exception
+   [ROL-477] - Pluggable authentication mechanism for comments (with JCaptcha option)
+   [ROL-507] - Redundant numerical character references in RSS feed
+	
+--------------------------------------------------------------------------------
+1.0RC1: 1st Release Candidate for Roller 1.0
+
+The major new features of Roller 0.9.9 are a new Editor UI, hierarchical 
+categories, hierarchical bookmark/blogroll folders with OPML import/export, 
+Atom API support, Atom newsfeed support, a new look-and-feel in the Web 
+interface, lots of other features, and numerous bug fixes. 
+
+This is the fifth release in the Roller 0.9.9 branch. The first release 
+was deployed on JRoller in May. Since then many bug fixes and architectural
+improvements have been made, including:
+
+   ROL-199 FIXED Referential integrity failure deleting bookmark folder
+   ROL-60  FIXED Encrypt passwords in the DB 
+   ROL-294 FIXED Add a #showWeblogEntriesForCategory(catname) macro. 
+   ROL-293 FIXED add macro to display all bookmarks without specifying category 
+   ROL-292 FIXED BoggerAPIHandler shows password in plain text 
+   ROL-229 FIXED Customizable Calendar? 
+   ROL-359 FIXED CVS Create-db.sql fails on postgresql 
+   ROL-310 FIXED Deleting entry should also delete referrers and comments 
+   ROL-271 FIXED Description field should be encoded or CDATA-ified 
+   ROL-325 FIXED Don't allow delete of last category 
+   ROL-318 FIXED Don't count referrers from own blog 
+   ROL-303 FIXED Hierarchical Categories 
+   ROL-357 FIXED Improve Calendar/archive navigation 
+   ROL-321 FIXED Improve wiki syntax handling in RSS feeds 
+   ROL-273 FIXED Installation instructions need to include mention of mail.jar 
+   ROL-306 FIXED Linkback enable link does not work 
+   ROL-147 FIXED Nesting bookmark folders 
+   ROL-275 FIXED Newpost in bloggerapi always tries to ping rpc.weblogs.com 
+   ROL-274 FIXED Postgres expects boolean value in queries, not '1' 
+   ROL-299 FIXED Recent entries preview doesn't use _entry page 
+   ROL-289 FIXED Referrer filter not working 
+   ROL-298 FIXED RSS feeds do not support HTTP Conditional GET or Gzip encoding 
+   ROL-282 FIXED roller-index location should be configurable 
+   ROL-308 FIXED Search should list findings in reverse chrono order 
+   ROL-307 FIXED Todays page hits count inaccurate 
+   ROL-279 FIXED User management page needs improvement. 
+   ROL-231 FIXED view of weblog fails 
+   ROL-311 FIXED Want to browse previous and next article 
+   ROL-339 FIXED Weblog calendar not showing all entries 
+   ROL-347 FIXED Where did sign-up link in the main page 
+   ROL-326 FIXED Allow for mime-type override on pages 
+   ROL-233 FIXED Add timezone setting to Website::Settings 
+   ROL-13  FIXED Front page improvements 
+   ROL-297 FIXED Include <guid> elements in default RSS feeds 
+   ROL-235 FIXED Localized SimpleDateFormat fouls up calendar weblog title
+   ROL-224 FIXED Lucene Search Should Display Summary 
+   ROL-142 FIXED Make RollerConfig use database tables rather than xml file. 
+   ROL-168 FIXED Obfuscate email addresses in Comments (and elsewhere?) 
+   ROL-18  FIXED OPML export of bookmarks 
+   ROL-268 FIXED postgres features 
+   ROL-225 FIXED RSS import from other blogs 
+   ROL-288 FIXED Search function should also search the titles 
+   ROL-315 FIXED Send trackback doesn't strip HTML from wiki entries
+   ROL-290 FIXED Some admin config options are never persisted 
+   ROL-286 FIXED Use ResultSet.next() instead of ResultSet.first() 
+   ROL-312 FIXED Add basic FOAF support from current data 
+   ROL-201 FIXED Sample Apache JkMounts for mod-jk 
+   ROL-105 FIXED User can delete Referrers 
+
+--------------------------------------------------------------------------------
+0.9.8.2: Bug fix release 
+
+   Includes a couple of I18N fixes. 
+
+--------------------------------------------------------------------------------
+0.9.8.1: Bug fix release
+
+   ROL-252 FIXED Wrong comments link in RSS       
+   ROL-241 FIXED xml feed uses dc:date instead of pubDate 
+   ROL-258 FIXED Enable comments by default for new blogs 
+   ROL-251 FIXED Roller config changes should be immediately flushed 
+   ROL-171 FIXED comments needs improvement, I get lots of double postings 
+   ROL-249 FIXED Disabling comments doesn't disable the comment form on 
+                    the comment-form-in-page 
+   ROL-246 FIXED Adding a page causes unhandled exception 
+   ROL-232 FIXED &nbsp problems in RSS feed 
+   ROL-212 FIXED Empty blog page 
+   ROL-255 FIXED Theme won't change 
+   ROL-216 FIXED Admin can't delete user. 
+   ROL-242 FIXED Weblogs.com ping sends wrong URL 
+   ROL-259 FIXED Get rid of the FIRST POST! 
+   ROL-237 FIXED Preview Theme doesn't seem to be working 
+   ROL-214 FIXED Category chooser for Currency theme 
+   ROL-202 FIXED Error saving customizations to theme 
+   ROL-238 FIXED Parameters intended for the 'edit website settings' are 
+                    being sent to the logout-redirect.jsp. 
+   ROL-264 FIXED Ping Weblogs.com should be off by default in weblog editor
+   ROL-245 FIXED Mispelling 
+   
+--------------------------------------------------------------------------------
+0.9.8: Performance improvements and bug fixes
+
+Dramatic performance increase due to addition of database indices, proper 
+use of persistence sessions, and new version of OSCache. New features include 
+Weblog.com ping and integrated Lucene weblog search.
+
+   ROL-197 FIXED error inserting null into page.updatetime on register new user 
+   ROL-196 FIXED Blogger/MetaBlog API operations flush entire cache 
+   ROL-187 FIXED Some SQL friendly table and column renames 
+   ROL-206 FIXED Comment links in site-wide RSS feed are wrong 
+   ROL-160 FIXED Theme switcher workflow issues 
+   ROL-172 FIXED index.jsp only contains Home | Login links 
+   ROL-198 FIXED Support accented characters in RSS 
+   ROL-208 FIXED Client-aborts should not be logged as errors 
+   ROL-60  FIXED Encrypt passwords in the DB 
+   ROL-189 FIXED Add macro to set content type of a page 
+   ROL-180 FIXED Use relative URLs in HTML, make RSS URLs configurable 
+   ROL-173 FIXED hsqldb migration script has syntax issues 
+   ROL-179 FIXED Main page not updating list of updated blogs 
+   ROL-183 FIXED Linkback extractor can't handle relative auto-discovery links 
+   ROL-120 FIXED encoding type wrong (freeroller) 
+   ROL-178 FIXED PageCache and RssCache filter timeouts cannot differ 
+   ROL-100 FIXED Resin specific install guide 
+   ROL-181 FIXED Ping weblogs.com when entry changed/entered 
+   ROL-185 FIXED Test page doesn't close JDBC connection 
+   ROL-215 FIXED Anchor links for Currency theme 
+   ROL-209 FIXED Blogger API error messages reversed 
+   ROL-184 FIXED SQL script improvements 
+   ROL-207 FIXED Main page list of popular blogs should be smaller 
+   ROL-205 FIXED dstest.jsp wont compile 
+   ROL-200 FIXED Context XML file for Tomcat 4.1.x 
+
+---------------------------------------------------------------------------------
+0.9.7.3: Bug fix release
+
+Fixes these bugs:
+
+   ROL-196 Blogger/MetaBlog API operations flush entire cache       
+   ROL-193 Trackback URL display should use absolute URL 
+   ROL-192 LinkbackExtract should mind absolute URL config 
+   
+---------------------------------------------------------------------------------
+0.9.7.2: Bug fix release
+
+Fixes these bugs:
+
+   ROL-179 Main page not updating list of updated blogs       
+   ROL-183 Linkback extractor can't handle relative 
+           auto-discovery links 
+   ROL-180 Use relative URLs in HTML, make RSS URLs configurable 
+   ROL-175 Most recent weblog entries on main page not refreshed 
+   ROL-178 PageCache and RssCache filter timeouts cannot differ 
+   ROL-188 Links to "Most recent weblog posts" are always http 
+           (roller running on https)
+           
+For the full details of bug fixes, see Roller's JIRA issue tracking system 
+at the URL below:
+
+   http://opensource.atlassian.com/projects/roller/BrowseProject.jspa
+
+---------------------------------------------------------------------------------
+0.9.7.1: Bug fix release
+
+Fixes these bugs:
+
+   ROL-155 referrer.refpermalink should be allowed to be null.       
+   ROL-167 JavaScript error on delete comments page 
+   ROL-157 Postgres SQL problems 
+   ROL-152 Delete comment page is blank 
+   ROL-166 Add missing <comments> element to RSS output 
+   ROL-161 Comments not always in proper chrono order 
+   ROL-153 Missing DBCP jars needed for Tomcat 4.0.X 
+   ROL-159 Newsfeed display macro(s) broken 
+   ROL-171 comments needs improvement, I get lots of double postings 
+   ROL-162 Comment formatting not preserved when HTML disabled 
+   ROL-156 Remove JSTL to please Resin 
+   ROL-169 Javier's Calendar style improvements 
+   ROL-163 #showRSSAutodiscoveryLink() is not XHTML compliant 
+   ROL-170 Support Mozilla 1.3 Midas Editor 
+   ROL-164 Upgrade to Velocity 1.3.1 
+   ROL-165 Upgrade to Hibernate 2.0 RC1 
+   ROL-154 Missing indices needed for MySQL 4.0 
+   
+For the full details of bug fixes, see Roller's JIRA issue tracking system 
+at the URL below:
+
+   http://opensource.atlassian.com/projects/roller/BrowseProject.jspa   
+   
+---------------------------------------------------------------------------------
+0.9.7: Major new release
+
+Summary of new features:
+
+   Comments, Trackbacks, and Linkbacks
+   * Both in-page and pop-up style comments are supported
+   * Remember-me feature for comments
+   * You can delete comments that you don't like
+   * Support for Movable Type style Trackbacks
+   * Trackbacks are treated as comments
+   * You can send Trackback pings to other weblogs
+   * Support for Mark Pilgrim style "for further reading" Linkbacks
+   * Linkback searches referring sites and RSS feeds for excerpts
+   * Linkbacks can be disabled by Roller administrator
+   * New showDayReferrers() macros displays Linkbacks for day
+   
+   MetaWeblog API
+   * Support for both Blogger API and MetaWeblog API
+   * Allows both titles and categories from w.bloggar and other clients.
+
+   General
+   * Simplified main page is much faster than before
+   * Main page displays most recent posts and most popular blogs
+   * Main page RSS feed aggregates all posts on site   
+   * Remember-me feature for logins
+   * New VelociMacros are replacing old page macros
+   * One click to post as public or post as private 
+   * Spell checker for posts
+      
+For the full list of bug fixes, see Roller's JIRA issue tracking system 
+at the URL below:
+
+   http://opensource.atlassian.com/projects/roller/BrowseProject.jspa
+
+
+---------------------------------------------------------------------------------
+0.9.6: Administration enhancements, new features, bug fixes
+
+Summary of new features:
+
+   Multi-user features:
+   - Admin UI for deleting users
+   - Better start page: pages through users, shows time of last update
+   - Plugin authenticator for JavaLobby integration
+   - Allow users to change their email addresses and passwords
+   
+   Weblog authoring enhancements:
+   - Ekit HTML editor applet is available as an option to users
+   - Option to save weblog entries without publishing them
+   - Better control over weblog entry publish date
+   - Daily referrer and hit tracking
+   
+   New and improved macros:
+   - Protection from recursion in includePage and showWeblogEntries macros   
+   - Big archive calendar macro shows titles for each day
+   - Expand/collapse feature in Bookmark and Newsfeed macros
+   - Users can control number of weblog entries displayed
+   - New macros, including those necessary for RSS templating
+   
+   RSS related features:
+   - Built in support for RSS 2.0
+   - Multiple RSS feeds for each weblog, one for each category
+   - RSS feeds available with full-text or excerpts only
+   - RSS aggregation features may now be disabled
+   - RSS syndication output is now cached
+      
+For the full list of enhancements and bug fixes, see Roller's JIRA issue
+tracking system at the URL below:
+
+   http://opensource.atlassian.com/projects/roller/BrowseProject.jspa
+
+-----------------------------------------------------------------------------
+0.9.5: Enhancements, better database support, bug fixes (August 31, 2002)
+
+This new Roller release includes some enhancements to XHTML support, 
+bookmark management, database support for PostgreSQL and HSQL-DB, and 
+some bug fixes. Thanks to new Roller contributors Lance Lavandowska, 
+Matt Raible, Simon Stewart for their work on this release.
+
+    - Support for XHTML and CSS in generated weblog pages (Matt)
+    - Better Page URLs in the Navigation Bar Tag and PageServlet (Lance)
+    - Support for HSQL and PostgreSQL databases (Lance and Simon)
+    - Export feature for backing up website (Dave)
+    - Bookmark import by file-upload of OPML file (Dave)
+    - Multiple bookmark move and delete on edit-bookmark page (Dave)
+    - Some bug fixes
+
+-----------------------------------------------------------------------------
+0.9.4: Bug fixes (July 6, 2002)
+
+    Fixes for these bugs:
+
+        Bug #576004: Blogger API posts do not flush cache
+        Bug #576719: Calendar in Weblog:Edit page not working
+        Bug #576902: Error in web.xml, rollerdb datasource was omited
+        Bug #576157: RSS feed items are not ordered properly
+        Bug #576731: Database jars should go in common/lib
+
+
+-----------------------------------------------------------------------------
+0.9.3: New features, better configuration, and bug fixes (June 30, 2002)
+
+    - Blogger API Support: You can enable Blogger API and choose which 
+      the category for incoming Blogger API posts on the Website Settings page.
+      You can configure your Blogger API client by using the path 
+      /roller/xmlrpc and your Roller username and password. Blogger API 
+      support was contributed by Shawn Dahlen (dahlen at mitre.org)
+      
+    - Database configuration via JNDI DataSources: Roller now looks up 
+      datasources in JNDI (using java:comp/env/jdbc/rollerdb).
+       
+    - Database connection pooling: if you follow the instructions in the
+      Roller installation guide, Roller will use database connection pooling.
+        
+    - Results caching for weblog pages: Roller now uses OSCache for caching
+      all weblog pages. This results in a dramatic improvement in performance.
+
+    - Three new themes: Roller now includes three new themes, adapted from
+      free themes found on blogskins.com.
+
+    - Lots of bug fixes: too numerous to list.
+
+-----------------------------------------------------------------------------
+0.9.2: Minor bug fixes in user and newsfeed managers 
+
+-----------------------------------------------------------------------------
+0.9.1: Bug fix release April 29, 2002
+
+- BUG #542478 FIXED: Delete category broken
+  Now, if you try to delete a category that is in use you will get a 
+  warning. You will be asked if you would like to move the entries in 
+  that category to another category.
+
+- BUG #542479 FIXED: Delete folder broken
+  Now, if you try to delete a folder that has contents you will get a 
+  warning. You will be asked if you would like to move the contents of 
+  that folder to another folder.
+
+- Changed Castor JDO data member in RollerImpl to transient so that it
+  does not cause an error if the Roller session is serialized.
+
+- Introduced org.roller.business.castor.ManagerBase and made general
+  improvements in database connection usage.
+
+-----------------------------------------------------------------------------
+0.9.0: Initial public release April 6, 2002
+  

Added: incubator/roller/trunk/LICENSE.txt
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/LICENSE.txt?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/LICENSE.txt (added)
+++ incubator/roller/trunk/LICENSE.txt Wed Jun  8 20:18:46 2005
@@ -0,0 +1,46 @@
+
+Roller Software License
+
+Version 1.0
+
+Copyright (c) 2000 David M Johnson. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, 
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this 
+list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, 
+this list of conditions and the following disclaimer in the documentation and/or 
+other materials provided with the distribution.
+
+3. The end-user documentation included with the redistribution, if any, must 
+include the following acknowledgment:
+
+"This product includes software developed by David M Johnson"
+
+Alternately, this acknowledgment may appear in the software itself, if and 
+wherever such third-party acknowledgments normally appear.
+
+4. The names "Roller" and "David M Johnson" must not be used to endorse or 
+promote products derived from this software without prior written permission. 
+For written permission, please contact snoopdave@users.sourceforce.net.
+
+5. Products derived from this software may not be called "Roller", nor may 
+"Roller" appear in their name, without prior written permission of David M Johnson.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, 
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ROLLER
+PROJECT OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGE.
+
+This software consists of voluntary contributions made by many individuals on 
+behalf of the David M Johnson. 
+

Added: incubator/roller/trunk/README.txt
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/README.txt?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/README.txt (added)
+++ incubator/roller/trunk/README.txt Wed Jun  8 20:18:46 2005
@@ -0,0 +1,57 @@
+
+README.txt
+
+   To install Roller, follow the instructions in the Installation Guide:
+   http://www.rollerweblogger.org/wiki/Wiki.jsp?page=InstallGuide
+
+   To use Roller, follow the instructions in the Users Guide:
+   http://www.rollerweblogger.org/wiki/Wiki.jsp?page=UserGuide
+   
+       
+CREDITS AND COPYRIGHT NOTICES
+
+   Roller is Copyright (c) by 
+       David M Johnson
+       Anil Gangolli
+       Mindaguas Idzelis 
+       Lance Lanvandowska 
+       Matt Raible 
+       Jaap Van Der Molen 
+       Henri Yandell
+       Sun Microsystems, Inc
+   	   
+   Roller is licensed under the Apache 1.0 license (s/Apache/Roller)
+
+   Additionally, Roller contains a number of third-party software components
+   and source code from other open source projects with compatible licenses.
+
+   * Roller includes software developed by the Apache Software Foundation
+     Copyright (c) 2001 The Apache Software Foundation. 
+     All rights reserved.
+
+   * Roller includes software developed by The OpenSymphony Group
+     Copyright (c) 2001 The OpenSymphony Group. All rights reserved.
+
+   * Roller includes the Hibernate persistence library, LGPL license
+
+   * Roller includes code from Blojsom
+        Copyright (c) 2003, David A. Czarnecki & Mark Lussier.
+        All rights reserved
+        
+   * Roller includes JDOM
+        Copyright (c) 2000-2002 Brett McLaughlin & Jason Hunter.
+        All rights reserved.
+
+   * Roller includes the Ekit HTML editor by Howard Kistler, LGPL license
+   
+   * Roller includes the Jazzy spellchecker, LGPL license
+   
+   * Roller includes the JSPWiki Wiki Engine, LGPL license
+
+   * Roller includes the Radeox Wiki Engine, LGPL license
+
+   * Roller includes Jython
+     Copyright (c) 2000, Jython Developers
+
+    
+

Added: incubator/roller/trunk/ant.properties
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/ant.properties?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/ant.properties (added)
+++ incubator/roller/trunk/ant.properties Wed Jun  8 20:18:46 2005
@@ -0,0 +1,16 @@
+build.debug=on
+build.deprecation=false
+ro.version=1.2-dev
+ro.build=./build
+ro.tools=./tools
+basedir=.
+custom.dir=./custom
+
+# The following properties (with your own appropriate values)
+# are required if using the deploy-tomcat target.
+#staging=../build/roller
+#webapp.name=roller
+#catalina.home=C:/jakarta-tomcat-5.0.28
+
+# Path to Roller source, needed by our custom Netbeans actions
+project.dir=/Users/dave/roller_main

Added: incubator/roller/trunk/build.bat
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/build.bat?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/build.bat (added)
+++ incubator/roller/trunk/build.bat Wed Jun  8 20:18:46 2005
@@ -0,0 +1,24 @@
+@echo off
+
+REM is this really necessary?
+if not "%JAVA_HOME%" == "" goto gotJavaHome
+echo You must set JAVA_HOME to point to your Java SDK install directory
+goto cleanup
+:gotJavaHome 
+
+set rocp=%JAVA_HOME%\lib\tools.jar
+
+set rocp=%rocp%;.\tools\buildtime\ant-1.6.2\ant.jar
+set rocp=%rocp%;.\tools\buildtime\ant-1.6.2\ant-launcher.jar
+set rocp=%rocp%;.\tools\buildtime\ant-1.6.2\ant-junit.jar
+set rocp=%rocp%;.\tools\buildtime\ant-1.6.2\ant-commons-net.jar
+set rocp=%rocp%;.\tools\buildtime\ant-1.6.2\commons-net-1.2.2.jar
+set rocp=%rocp%;.\tools\buildtime\ant-1.6.2\jakarta-oro-2.0.8.jar
+
+set rocp=%rocp%;.\tools\buildtime\junit-3.8.1.jar
+
+echo %rocp%
+java -classpath %rocp% org.apache.tools.ant.Main %1 %2 %3 %4 %5
+
+
+

Added: incubator/roller/trunk/build.sh
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/build.sh?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/build.sh (added)
+++ incubator/roller/trunk/build.sh Wed Jun  8 20:18:46 2005
@@ -0,0 +1,16 @@
+#!/bin/bash
+if [ "$JAVA_HOME" = "" ] ; then
+	echo You must set JAVA_HOME to point to your Java JDK install directory
+	exit 1
+fi
+
+rocp=${JAVA_HOME}/lib/tools.jar
+rocp=${rocp}:./tools/buildtime/ant-1.6.2/ant.jar
+rocp=${rocp}:./tools/buildtime/ant-1.6.2/ant-launcher.jar
+rocp=${rocp}:./tools/buildtime/ant-1.6.2/ant-junit.jar
+rocp=${rocp}:./tools/buildtime/ant-1.6.2/ant-commons-net.jar
+rocp=${rocp}:./tools/buildtime/ant-1.6.2/commons-net-1.2.2.jar
+rocp=${rocp}:./tools/buildtime/ant-1.6.2/jakarta-oro-2.0.8.jar
+rocp=${rocp}:./tools/buildtime/junit-3.8.1.jar
+
+${JAVA_HOME}/bin/java -Djava.home=${JAVA_HOME} -classpath ${rocp} org.apache.tools.ant.Main $1 $2 $3 $4 $5

Added: incubator/roller/trunk/build.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/build.xml?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/build.xml (added)
+++ incubator/roller/trunk/build.xml Wed Jun  8 20:18:46 2005
@@ -0,0 +1,973 @@
+<?xml version="1.0"?>
+<!DOCTYPE project [
+    <!ENTITY properties         SYSTEM "properties.xmlf"> 
+    <!ENTITY custom-gen-web     SYSTEM "custom/custom-gen-web.xmlf">
+    <!ENTITY custom-gen-beans   SYSTEM "custom/custom-gen-beans.xmlf">
+    <!ENTITY custom-jars        SYSTEM "custom/custom-jars.xmlf">
+    <!ENTITY custom-src-beans   SYSTEM "custom/custom-src-beans.xmlf">
+    <!ENTITY custom-src-web     SYSTEM "custom/custom-src-web.xmlf">
+    <!ENTITY custom-src-tests   SYSTEM "custom/custom-src-tests.xmlf">
+    <!ENTITY custom-web         SYSTEM "custom/custom-web.xmlf">
+    <!ENTITY custom-dbscripts   SYSTEM "custom/custom-dbscripts.xmlf">
+    <!ENTITY custom-pre-dbtest  SYSTEM "custom/custom-pre-dbtest.xmlf">
+    <!ENTITY custom-post-dbtest SYSTEM "custom/custom-post-dbtest.xmlf">
+    <!ENTITY custom-ant         SYSTEM "custom/custom-ant.xmlf"> 
+]>
+<!-- ********************************************************************* -->
+<!-- Ant build script for Roller main branch -->
+<!-- Author: David M Johnson -->
+<!-- ********************************************************************* -->
+<project name="roller" default="usage">
+
+<!-- Bring in properties.xml -->
+&properties;
+
+<!-- Bring in custom properties and targets -->
+&custom-ant;
+
+<target name="usage" description="Print usage for key targets">
+<echo>
+Key Targets:
+             all - Build all: gen code, compile code, stage web directory
+           build - Same as 'all' but no code gen
+         javadoc - Run javadoc against (generated) code
+           clean - Blow away all generated code and all byte code
+         rebuild - Clean and build all
+           usage - Print this help text...
+</echo>
+</target>
+
+<!-- ================================================ -->
+<!-- Meta targets -->
+<!-- ================================================ -->
+<target name="all" depends="generate,stage-web" description="Build all">
+</target>
+
+<target name="build" depends="stage-web" description="Compile only, no code generation">
+</target>
+
+<target name="rebuild" depends="clean,all" description="Clean and build all">
+</target>
+
+<target name="clean" description="Clean out build directory">
+    <delete dir="./build"/>
+</target>
+
+<!-- ********************************************************************* -->
+<!-- XDoclet code generation -->
+<!-- ********************************************************************* -->
+	
+<target name="generate" depends="gen-forms,gen-hibernate,gen-web" >
+</target>
+
+<!-- ============================================== -->
+<!-- generate Struts forms -->
+<target name="gen-forms" description="XDoclet generate form beans">
+
+    <!-- Define the XDoclet xdoclet task -->
+    <taskdef  name="ejbdoclet" classname="xdoclet.modules.ejb.EjbDocletTask"
+        classpathref="xdoclet.path" />
+    <mkdir dir="${build.generated}/src.presentation"/>
+    <mkdir dir="${build.generated}/src.business"/>
+    <mkdir dir="${build.generated}/META-INF"/>
+    <mkdir dir="${ro.build}/junk"/>
+
+    <!-- Use EJBDoclet to generate Struts forms -->
+    <ejbdoclet destdir="${build.generated}/src" excludedtags="@version,@author">
+        <fileset dir="./src" includes="org/roller/pojos/*Data.java" />
+        <fileset dir="./src" includes="org/roller/business/*Data.java" /> 
+        &custom-gen-web;
+     
+        <!-- Generate Struts forms -->
+        <strutsform destdir="${build.generated}/src.presentation"
+            prefixWithPackageStructure="no"
+            templateFile="./metadata/xdoclet/struts_form.xdt">
+
+            <!-- into the org.roller.presentation.forms package -->
+            <packageSubstitution packages="pojos"
+                substituteWith="presentation.forms"/>
+            <packageSubstitution packages="presentation"
+                substituteWith="presentation.forms"/>
+        </strutsform>
+
+        <!-- We are not actually generating data objects, but using the
+             dataobject subtask allows the strutsform subtask to add nice
+             Adds nice constructors and setData methods to Struts forms -->
+        <dataobject destdir="${ro.build}/junk" pattern="{0}" />
+
+    </ejbdoclet>
+
+    <copy todir="./personal/testing">
+        <fileset dir="${build.generated}" includes="mapping.xml"/>
+    </copy>
+
+    <!-- Change Struts form names from *DataForm.java to *Form.java  -->
+    <replace dir="${build.generated}/src.presentation/org/roller/presentation/forms"
+        token="DataForm" value="Form"/>
+    <move todir="${build.generated}/src.presentation/org/roller/presentation/forms">
+        <fileset dir="${build.generated}/src.presentation/org/roller/presentation/forms" >
+            <include name="*DataForm.java"/>
+            <include name="*ConfigForm.java" />
+        </fileset>
+        <mapper type="glob" from="*DataForm.java" to="*Form.java"/>
+    </move>
+
+</target>
+
+<!-- ============================================== -->
+<!-- generate Hibernate mappings -->
+<target name="gen-hibernate" description="XDoclet Generate Hibernate mappings">
+
+    <taskdef name="hibernatedoclet"
+        classname="xdoclet.modules.hibernate.HibernateDocletTask"
+        classpathref="xdoclet.path" />
+
+    <!-- generate hibernate files -->
+    <hibernatedoclet
+        destdir="${build.compile_beans}"
+        mergedir="./metadata/xdoclet"
+        excludedtags="@version,@author"
+        addedtags="@xdoclet-generated at ${TODAY}"
+        force="true">
+        <fileset dir="./src" includes="org/roller/pojos/*Data.java" />
+        <fileset dir="./src" includes="org/roller/pojos/*Assoc.java" />
+        <fileset dir="./src" includes="org/roller/business/*Data.java" />
+        &custom-gen-beans;
+        <hibernate validatexml="true" version="2.0"/>
+    </hibernatedoclet>
+
+</target>
+
+<!-- ============================================== -->
+<!-- Generate web deployment descriptors -->
+<target name="gen-web" description="XDoclet generate web depoyment descriptors">
+
+    <!-- Define the XDoclet webdoclet task -->
+    <taskdef  name="webdoclet" classname="xdoclet.modules.web.WebDocletTask"
+        classpathref="xdoclet.path" />
+
+    <!-- Use WebDoclet to web.xml, struts-config.xml, and TLDs -->
+    <mkdir dir="${build.stage_web}/WEB-INF"/>
+    <mkdir dir="${build.compile_web}/META-INF/tlds"/>
+
+    <webdoclet force="true"
+        destdir="${build.stage_web}/WEB-INF"
+        mergedir="./metadata/xdoclet"
+        excludedtags="@version,@author">
+        
+        <fileset dir="./src">
+            <!-- Speed up XDoclet by limiting number of files it has to process -->
+            <include name="**/*Action.java" />
+            <include name="**/*Filter.java" />
+            <include name="**/*Form.java" />
+            <include name="**/*FormEx.java" />
+            <include name="**/*Servlet.java" />
+            <include name="**/*Tag.java" />
+            <include name="org/roller/presentation/**/actions/*.java" />
+            <include name="org/roller/presentation/RollerContext.java" />
+            <include name="org/roller/presentation/RollerSession.java" />
+            <exclude name="**/IPBanFilter**" />
+            <exclude name="**/LinkTag**" />
+            <exclude name="**/LinkParamTag**" />
+        </fileset>
+        <fileset dir="${build.generated}/src.presentation">
+            <include name="**/*Form.java" />
+        </fileset>
+        &custom-gen-web;
+
+        <deploymentdescriptor servletspec="2.3"
+             destdir="${build.stage_web}/WEB-INF"
+             sessiontimeout="30"
+             displayname="Roller Weblogger">
+        </deploymentdescriptor>
+
+        <jsptaglib jspversion="1.2" filename="roller.tld" shortname="roller"
+            uri="http://www.rollerweblogger.org/tags"
+            destdir="${build.compile_web}/META-INF/tlds"/>
+
+        <strutsconfigxml destdir="${build.stage_web}/WEB-INF"
+            validatexml="true" mergedir="./metadata/xdoclet" version="1.1" />
+        <strutsvalidationxml/>
+
+    </webdoclet>
+
+</target>
+
+<!-- ********************************************************************* -->
+<!-- Compile and jar Business Tier classes -->
+<!-- ********************************************************************* -->
+	
+<target name="build-beans">
+    <mkdir dir="${ro.build}/lib"/>
+    <mkdir dir="${build.compile_beans}"/>
+
+    <tstamp>
+        <format property="ro.buildTime" pattern="yyyyMMddhhmmss" />
+    </tstamp>
+
+    <echo file="${build.compile_beans}/version.properties">
+ro.version=${ro.version}
+ro.buildTime=${ro.buildTime}
+ro.buildUser=${user.name}
+    </echo>
+
+    <javac debug="${build.debug}" destdir="${build.compile_beans}"
+        excludes="org/roller/presentation/**" >
+        <src path="${basedir}/src" />
+        &custom-src-beans;
+        <classpath>
+            <path refid="business.path"/>
+            &custom-jars;
+        </classpath>
+    </javac>
+    <!-- Copy class resources -->
+    <copy todir="${build.compile_beans}/org/roller/model">
+        <fileset dir="${build.generated}/src.business" includes="*.hbm.xml"/>
+    </copy>
+    <!-- Jar up the beans -->
+    <jar basedir="${build.compile_beans}"
+        jarfile="${ro.build}/lib/rollerbeans.jar"/>
+
+</target>
+
+<!-- For versions of Resin before 2.1.9 we have to turn the
+    HttpServletResponseWrapper into a CauchoResponseWrapper. We have
+    to do away with the original or there will be compile errors. -->
+<target name="prepare.resin" if="resinFilters">
+    <echo>Convert HttpServletResponseWrappers to CauchoResponseWrappers</echo>
+    <replace dir="./src"
+        token="extends HttpServletResponseWrapper"
+        value="extends com.caucho.http.filter.CauchoResponseWrapper" />
+    <replace file="${build.stage_web}/WEB-INF/web.xml"
+        token="&lt;!-- RESIN-CACHE --&gt;" >
+        <replacevalue><![CDATA[
+        <init-param>
+            <param-name>handler</param-name>
+            <param-value>CommonsPageCache</param-value>
+        </init-param>
+        ]]></replacevalue>
+    </replace>
+
+</target>
+
+<!-- Now that the compilation is done, undo the damage from prepare.resin -->
+<target name="undo.resin" if="resinFilters">
+    <echo>Convert CauchoResponseWrappers to HttpServletResponseWrappers</echo>
+    <replace dir="./src"
+        value="extends HttpServletResponseWrapper"
+        token="extends com.caucho.http.filter.CauchoResponseWrapper" />
+
+</target>
+
+<!-- ********************************************************************* -->
+<!-- Compile and jar Presentation Tier classes -->
+<!-- ********************************************************************* -->
+	
+<target name="build-web" depends="build-beans" >
+
+    <mkdir dir="${build.compile_web}"/>
+    <antcall target="prepare.resin" />
+    <javac debug="${build.debug}" destdir="${build.compile_web}"
+        includes="org/roller/presentation/**" >
+        <src path="./src"  />
+        <src path="${build.generated}/src.presentation"/>
+        &custom-src-web;
+        <classpath>
+            <path refid="presentation.path"/>
+            <path location="${build.compile_beans}"/>
+            &custom-jars;
+        </classpath>
+    </javac>
+    <copy todir="${build.compile_web}">
+        <fileset dir="./src">
+            <include name="**/*.properties"/>
+            <include name="**/*.tpl"/>
+            <include name="**/*.vm"/>
+        </fileset>
+    </copy>
+    <!-- Generate and compile JSP files (just as an error checking measure)
+    <mkdir dir="${build.jspc}"/>
+    <path id="jspc.classpath">
+        <path refid="presentation.path"/>
+        <path location="${build.compile_beans}"/>
+        <path location="${build.compile_web}"/>
+        <path location="${ro.tools}/lib/ant-1.5.1.jar"/>
+        <path location="${ro.tools}/lib/ant-optional-1.5.1.jar"/>
+        <path location="${ro.tools}/lib/jasper-compiler.jar"/>
+        <path location="${ro.tools}/lib/jasper-runtime.jar"/>
+    </path>
+    <jspc srcdir="./web" destdir="${build.jspc}"
+        classpathref="jspc.classpath">
+    </jspc>
+    <javac srcdir="${build.jspc}" destdir="${build.jspc}"
+        classpathref="jspc.classpath">
+    </javac> -->
+
+    <antcall target="undo.resin" />
+
+</target>
+
+<!-- ********************************************************************* -->
+<!-- Stage web resources: allows us to work on JSP's without restarts      -->
+<!-- ********************************************************************* -->
+	
+<target name="copy-web" description="Stage web app, without jars">
+    <!-- Copy web contents to staging, plus README files. -->
+    <copy todir="${build.stage_web}">
+        <fileset dir="./web">
+            <include name="**/*"/>
+            <exclude name="**/codewright*/**"/>
+            <exclude name="**/CVS/**"/>
+            <exclude name="**/*.bak"/>
+            <exclude name="**/*~"/>
+            <exclude name="**/berkley/**"/> <!-- not ready yet -->
+        </fileset>
+        <fileset dir=".">
+            <include name="README.txt"/>
+            <include name="LICENSE.txt"/>
+            <include name="CHANGES.txt"/>
+        </fileset>
+    </copy>
+	&custom-web;
+ </target>
+
+<!-- ********************************************************************* -->
+<!-- Stage web application -->
+<!-- ********************************************************************* -->
+	
+<target name="stage-web" depends="build-web" description="Stage web app, including jars">
+
+    <mkdir dir="${build.stage_web}/resources"/>
+    <mkdir dir="${build.stage_web}/WEB-INF/lib"/>
+    <mkdir dir="${build.stage_web}/WEB-INF/tlds"/>
+
+    <!-- Jar up web classes -->
+    <jar jarfile="${build.stage_web}/WEB-INF/lib/rollerweb.jar">
+        <fileset dir="${build.compile_web}" excludes="**/tomcat/**"/>
+    </jar>
+
+    <!-- Copy web contents to staging, plus README files. -->
+    <antcall target="copy-web" />
+
+    <!-- Copy database configs to classpath in staging -->
+    <copy todir="${build.stage_web}/WEB-INF/classes">
+        <fileset dir="./metadata/database/hibernate" includes="hibernate.cfg.xml"/>
+        <fileset dir="${ro.tools}/lib" includes="oscache.properties"/>
+    </copy>
+
+    <!-- Copy WEB-INF contents to staging -->
+    <copy todir="${build.stage_web}/WEB-INF">
+        <fileset dir="${build.generated}" includes="mapping.xml"/>
+        <fileset dir="${tools.struts}/lib" includes="validator-rules.xml"/>
+    </copy>
+
+    	<!-- Copy other jars -->
+    <copy todir="${build.stage_web}/WEB-INF/lib">
+
+        <fileset dir="${ro.build}/lib" includes="rollerbeans.jar"/>
+        <fileset refid="base.jars" />
+        <fileset refid="presentation.jars" />
+        <fileset refid="hibernate.jar" />
+        <fileset refid="hibernate.jars" />
+        <fileset refid="commons.jars" />
+        <fileset refid="struts.jars" />
+        <fileset refid="jstl.jars" />
+        <fileset refid="xml.jars" />
+        &custom-jars;
+        <fileset dir="${ro.tools}/lib">
+            <include name="mm.mysql-2.0.14-bin.jar" if="resinServer"/>
+        </fileset>
+    	    <fileset dir="${ro.tools}/buildtime">
+            <include name="xercesImpl-2.3.0.jar"    if="resinServer"/>
+            <include name="xmlParserAPIs-2.3.0.jar" if="resinServer"/>
+        </fileset>
+    </copy>
+    <!-- Copy DTDs and TLDs  -->
+    <copy todir="${build.stage_web}/WEB-INF/tlds">
+        <fileset dir="${ro.tools}/lib" includes="*.tld"/>
+    </copy>
+    <!-- Copy applet jars to root of servlet context -->
+    <copy todir="${build.stage_web}">
+        <fileset dir="${ro.tools}/lib">
+            <include name="ekitapplet.jar"/>
+        </fileset>
+    </copy>
+    <!-- copy database related files -->
+    <antcall target="stage-dbscripts" />
+
+    <ant inheritAll="false" dir="contrib" />
+
+</target>
+
+<!-- ********************************************************************* -->
+<!-- Create different versions of database setup script                    -->
+<!-- With this approach we won't have to expand the script all the time.   -->
+<!-- ********************************************************************* -->
+	
+<target name="stage-dbscripts">
+    <property name="dbscripts" value="${build.stage_web}/WEB-INF/dbscripts"/>
+
+    <!-- Create database creation script directory -->
+    <mkdir dir="${dbscripts}"/>
+    <copy todir="${dbscripts}">
+        <fileset dir="./metadata/database" includes="droptables.sql"/>
+        <fileset dir="./metadata/database" includes="*.sh,*.bat,rollerdb.properties"/>
+    </copy>
+
+    <!-- MYSQL -->
+    <copy toDir="${dbscripts}/mysql">
+    	  &custom-dbscripts;
+      <fileset dir="./metadata/database">
+        <include name="*.sql" />
+        <exclude name="droptables.sql" />
+      </fileset>
+      <filterset>
+        <filtersfile file="./metadata/database/db_mysql.properties"/>
+      </filterset>
+      <mapper type="glob" from="*-raw.sql" to="*.sql" />
+    </copy>
+
+    <!-- POSTGRESQL -->
+    <copy toDir="${dbscripts}/postgresql">
+  	  &custom-dbscripts;
+      <fileset dir="./metadata/database">
+        <include name="*.sql" />
+        <exclude name="droptables.sql" />
+      </fileset>
+      <filterset>
+        <filtersfile file="./metadata/database/db_postgresql.properties"/>
+      </filterset>
+      <mapper type="glob" from="*-raw.sql" to="*.sql" />
+    </copy>
+
+    <!-- HSQL -->
+    <copy toDir="${dbscripts}/hsql">
+  	  &custom-dbscripts;
+      <fileset dir="./metadata/database">
+        <include name="*.sql" />
+        <exclude name="droptables.sql" />
+      </fileset>
+      <filterset>
+        <filtersfile file="./metadata/database/db_hsql.properties"/>
+      </filterset>
+      <mapper type="glob" from="*-raw.sql" to="*.sql" />
+    </copy>
+
+</target>
+
+<!-- ********************************************************************* -->
+<!-- Build extras -->
+<!-- ********************************************************************* -->
+	
+<target name="contrib" depends="stage-web">
+    <ant dir="contrib" />
+</target>
+
+<!-- ********************************************************************* -->
+<!-- Generate Javadocs -->
+<!-- ********************************************************************* -->
+	
+<target name="javadoc">
+    <mkdir dir="${build.javadoc}"/>
+    <javadoc
+        bottom="Copyright (C) David M Johnson"
+        classpathref="javadoc.path"
+        destdir="${build.javadoc}"
+        doctitle="Javadocs: Roller Weblogger ${ro.version}"
+        private="false"
+        version="false"
+        windowtitle="Javadocs: Roller Weblogger ${ro.version}">
+        <sourcepath>
+            <pathelement path="./src"/>
+            <pathelement path="${ro.build}/generated/src.business"/>
+            <pathelement path="${ro.build}/generated/src.presentation"/>
+        </sourcepath>
+        <packageset dir="src" defaultexcludes="yes">
+          <include name="org/roller/**" />
+          <exclude name="org/roller/business/prevayler/**" />
+        </packageset>
+        <link href="http://java.sun.com/j2se/1.4/docs/api/"/>
+        <link href="http://java.sun.com/products/servlet/2.3/javadoc/"/>
+        <link href="http://jakarta.apache.org/struts/doc-1.0.2/api"/>
+        <link href="http://hibernate.bluemars.net/hib_docs/api/"/>
+    </javadoc>
+
+    <antcall target="velocidoc" />
+</target>
+	
+<target name="velocidoc">
+    <mkdir dir="${build.velocidoc}/temp"/>
+    <copy todir="${build.velocidoc}/temp">
+        <fileset dir="./web/WEB-INF/classes/">
+            <include name="bookmarks.vm" />
+            <include name="comments.vm" />
+            <include name="navbar.vm" />
+            <include name="navbar-css.vm" />
+            <include name="referer.vm" />
+            <include name="roller.vm" />
+            <include name="rssmacros.vm" />
+            <include name="user.vm" />
+            <include name="weblog.vm" />
+            <include name="website.vm" />
+        </fileset>
+    </copy>
+    <mkdir dir="${build.velocidoc}/docs"/>
+    <java fork="true" jar="${ro.tools}/buildtime/velocidoc-app.jar">
+        <arg line="-s ${build.velocidocs}/temp -d ${build.velocidoc}/docs"/>
+        <arg line="-ctl ${ro.tools}/buildtime/velocidoc-templates/control.vm"/>
+        <arg line="-src ${ro.tools}/buildtime/velocidoc-templates/"/>
+    </java>
+</target>
+
+<!-- ********************************************************************* -->
+<!-- Create Binary Release -->
+<!-- ********************************************************************* -->
+
+<target name="full-release" depends="binary-release">
+</target>
+
+<target name="binary-release" depends="source-release">
+    <!-- Substitute in resource ref for deployment for standard container -->
+    <replace file="${build.stage_web}/WEB-INF/web.xml"
+            token="&lt;!-- TOMCAT_RESOURCE_REF --&gt;">
+        <replacevalue><![CDATA[
+    <resource-ref>
+    <res-ref-name>jdbc/rollerdb</res-ref-name>
+    <res-type>javax.sql.DataSource</res-type>
+    <res-auth>Container</res-auth>
+    </resource-ref>
+        ]]></replacevalue>
+    </replace>
+    <fixcrlf srcdir="${build.stage_web}/WEB-INF" eol="lf" includes="**/*.xml" />
+   <!-- Tar and GZip the webapp -->
+    <tar tarfile="${ro.build}/roller-${ro.version}.tar"
+        basedir="${ro.build}"
+        includes="roller/**"
+        excludes="roller/article/**,**/*.bak,**/*~" />
+    <gzip zipfile="${ro.build}/roller-${ro.version}.tar.gz"
+             src="${ro.build}/roller-${ro.version}.tar" />
+    <delete>
+        <fileset dir="${ro.build}" includes="*.tar"/>
+    </delete>
+    
+</target>
+
+<!-- ********************************************************************* -->
+<!-- Create Source Release -->
+<!-- ********************************************************************* -->
+	
+<target name="source-release" depends="contrib">
+    <!-- <antcall target="rebuild"/> -->
+    <!-- Tar and GZip the sources -->
+    <tar tarfile="${ro.build}/roller-src-${ro.version}.tar">
+        <tarfileset dir="./src/../..">
+            <include name="roller/metadata/**" />
+            <include name="roller/personal/eclipse/**" />
+            <include name="roller/personal/sample.build.xml" />
+            <include name="roller/custom/**" />
+            <include name="roller/contrib/**" />
+            <include name="roller/src/**" />
+            <include name="roller/tests/**" />
+            <include name="roller/web/**" />
+            <include name="roller/docs/**" />
+            <exclude name="roller/docs/installguide/old/**"/>
+            <exclude name="roller/docs/userguide/old/**"/>
+            <include name="roller/ant.properties" />
+            <include name="roller/build.bat" />
+            <include name="roller/build.sh" />
+            <include name="roller/build.xml" />
+            <include name="roller/properties.xmlf" />
+            <include name="roller/CHANGES.txt" />
+            <include name="roller/LICENSE.txt" />
+            <include name="roller/README.txt" />
+            <exclude name="**/codewright*/**"/>
+            <exclude name="**/CVS/**"/>
+            <exclude name="**/*.bak"/>
+            <exclude name="**/*-hide"/>
+            <exclude name="**/*.diff"/>
+            <exclude name="**/*.patch"/>
+            <exclude name="**/*~"/>
+            <exclude name="**/*.#*"/>
+            <exclude name="**/WS_FTP.LOG"/>
+            <exclude name="**/.nbattrs"/>
+         </tarfileset>
+    </tar>
+    <gzip zipfile="${ro.build}/roller-src-${ro.version}.tar.gz"
+              src="${ro.build}/roller-src-${ro.version}.tar" />
+    <!-- Tar and GZip the tools -->
+    <tar tarfile="${ro.build}/roller-tools-${ro.version}.tar"
+        basedir="./src/../.."
+        includes="roller/tools/**"
+        excludes="**/*.bak,**/*~" />
+    <gzip zipfile="${ro.build}/roller-tools-${ro.version}.tar.gz"
+              src="${ro.build}/roller-tools-${ro.version}.tar" />
+    <delete>
+        <fileset dir="${ro.build}" includes="*.tar"/>
+    </delete>
+
+</target>
+
+<!-- ********************************************************************* -->
+<!-- TEST targets -->
+<!-- ********************************************************************* -->
+	
+<target name="tests" depends="build-test" description="All unit tests" >
+    <antcall target="test-hibernate"/>
+    <antcall target="test-servlets"/>
+    <antcall target="test-utils"/>
+</target>
+
+<target name="build-test" depends="build" description="Build unit tests" >
+
+    <mkdir dir="${build.tests}" />
+    <mkdir dir="${build.tests}/logs" />
+    <mkdir dir="${build.tests}/WEB-INF/classes" />
+    <mkdir dir="${build.tests}/WEB-INF/classes/themes" />
+    
+    <javac srcdir="${basedir}/tests/"
+        destdir="${build.tests}/WEB-INF/classes"
+        includeantruntime="false"
+        debug="true" optimize="false" verbose="false" deprecation="false">
+        &custom-src-tests;
+        <classpath>
+            <path refid="junit.path"/>
+        </classpath>
+    </javac>
+    
+    <!-- register Ant tasks that were just built -->
+    <taskdef name="startdb" classname="org.roller.ant.StartHsqldbTask" 
+        classpath="${basedir}/tools/buildtime/hsqldb.jar;${build.tests}/WEB-INF/classes" />
+    <taskdef name="stopdb" classname="org.roller.ant.StopHsqldbTask" 
+        classpath="${basedir}/tools/buildtime/hsqldb.jar;${build.tests}/WEB-INF/classes" />
+        
+    <!-- 
+    Copy required files to ${build.tests} to make them available for 
+    testing without interfering with the "real" build in ${build.stage_web}
+    -->
+	
+	<copy file="${basedir}/personal/testing/roller.properties"
+        todir="${build.tests}/WEB-INF/classes/"/>
+
+    <copy file="${basedir}/personal/testing/hibernate.cfg.xml"
+        tofile="${build.tests}/WEB-INF/classes/hibernate.cfg.xml" />
+    
+    <copy file="${basedir}/personal/testing/log4j.properties"
+        tofile="${build.tests}/WEB-INF/classes/log4j.properties" />
+        
+    <copy file="${basedir}/personal/testing/bookmarks.opml"
+        tofile="${build.tests}/WEB-INF/classes/bookmarks.opml" />
+
+    <copy file="${basedir}/web/images/rssbadge.gif"
+        tofile="${build.tests}/rssbadge.gif" />
+
+    <copy todir="${build.tests}/WEB-INF/classes">
+        <fileset dir="${basedir}/web/WEB-INF/classes">
+            <include name="App*.properties"/>
+        </fileset>
+    </copy>
+	
+	<copy todir="${build.tests}/WEB-INF/classes">
+        <fileset dir="${basedir}/web/WEB-INF/classes">
+            <include name="**/*.vm"/>
+        </fileset>
+    </copy>
+
+    <copy file="${basedir}/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml"
+	    todir="${build.tests}/WEB-INF/classes/"/>
+
+    <copy file="${basedir}/web/WEB-INF/velocity.properties"
+        tofile="${build.tests}/WEB-INF/velocity.properties" />
+        
+    <copy file="${basedir}/web/WEB-INF/classes/rome.properties"
+        tofile="${build.tests}/WEB-INF/classes/rome.properties" />
+
+    <copy file="${basedir}/web/WEB-INF/toolbox.xml"
+        tofile="${build.tests}/WEB-INF/toolbox.xml" />
+	    
+    <copy file="${basedir}/web/WEB-INF/classes/blacklist.txt"
+        tofile="${build.tests}/WEB-INF/classes/blacklist.txt" />
+        	
+</target>
+
+<target name="clean-tests" description="Removes test build and result artifacts and reports">
+  <delete dir="${ro.build}/tests"/>
+  <delete dir="${ro.build}/build/reports"/>
+</target>
+
+<target name="test-hibernate" depends="build-test" description="Back-end tests">
+
+    <mkdir dir="${build.reports}/hibernate/xml"/>
+    <mkdir dir="${build.reports}/hibernate/html"/>
+
+    <startdb database="${build.tests}/testdb" port="3219" />
+    
+    <sql driver="org.hsqldb.jdbcDriver"
+        url="jdbc:hsqldb:hsql://localhost:3219"
+        userid="sa" password=""
+        src="${ro.build}/roller/WEB-INF/dbscripts/hsql/createdb.sql"
+        classpath="${ro.tools}/buildtime/hsqldb.jar" />
+	
+    &custom-pre-dbtest;
+
+    <junit fork="true" dir="${build.tests}">
+        <classpath>
+            <path refid="junit.path"/>
+        </classpath>
+        <jvmarg value="-Dro.build=${ro.build}"/>
+        <jvmarg value="-Dcatalina.base=${build.tests}"/> <!-- needed to satisfy ref in log4j.properties -->
+        <formatter type="xml"/>
+        <batchtest toDir="${build.reports}/hibernate/xml">
+            <fileset dir="${build.tests}/WEB-INF/classes">
+               <include name="org/roller/business/*Test.class"/>             	
+            </fileset>
+        </batchtest>
+    </junit>
+    <junitreport todir="${build.reports}/hibernate/xml">
+        <fileset dir="${build.reports}/hibernate/xml">
+            <include name="TEST-*.xml"/>
+        </fileset>
+        <report format="noframes" toDir="${build.reports}/hibernate/html"/>
+    </junitreport>
+	
+    &custom-post-dbtest;
+
+    <sql driver="org.hsqldb.jdbcDriver"
+        url="jdbc:hsqldb:hsql://localhost:3219"
+        userid="sa" password=""
+        src="./build/roller/WEB-INF/dbscripts/droptables.sql"
+        classpath="${ro.tools}/buildtime/hsqldb.jar" />
+
+    <stopdb port="3219"/>
+
+    <echo>Suggested: Run "ant consistency-check".</echo>
+</target>
+
+<target name="test-servlets" depends="build-test">
+    <mkdir dir="${build.reports}/servlets/xml"/>
+    <mkdir dir="${build.reports}/servlets/html"/>
+    
+    <startdb database="${build.tests}/testdb" port="3219" />
+    
+    <sql driver="org.hsqldb.jdbcDriver"
+        url="jdbc:hsqldb:hsql://localhost:3219"
+        userid="sa" password=""
+        src="./build/roller/WEB-INF/dbscripts/hsql/createdb.sql"
+        classpath="${ro.tools}/buildtime/hsqldb.jar" />
+
+    <junit fork="true" dir="${build.tests}">
+        <batchtest toDir="${build.reports}/servlets/xml">
+            <fileset dir="${build.tests}/WEB-INF/classes">
+                <include name="org/roller/presentation/**/*Test.class"/> 
+	            <exclude name="**/ApplicationResourcesTest.class"/>
+	            <exclude name="**/ArchiveParserTest.class"/>
+	            <exclude name="**/AtomCollectionTest.class"/>
+	            <exclude name="**/AtomServletTest.class"/>
+	            <exclude name="**/ExportRssTest.class"/>
+	            <exclude name="**/LanguageUtilTest.class"/>            
+            </fileset>
+        </batchtest>
+        <!--arg value="org.roller.presentation.velocity.ExportRssTest"/-->
+        <jvmarg value="-DrollerImpl=hibernate"/>
+        <jvmarg value="-Dro.build=${ro.build}"/>
+        <jvmarg value="-Dcatalina.base=${build.tests}"/> <!-- needed to satisfy ref in log4j.properties -->
+        <formatter type="xml"/>
+        <classpath>
+            <path refid="junit.path"/>
+        </classpath>
+    </junit>
+    
+    <junitreport todir="${build.reports}/servlets/xml">
+       <fileset dir="${build.reports}/servlets/xml">
+          <include name="TEST-*.xml"/>
+       </fileset>
+    <report format="noframes" toDir="${build.reports}/servlets/html"/>
+    </junitreport>
+    
+    <sql driver="org.hsqldb.jdbcDriver"
+         url="jdbc:hsqldb:hsql://localhost:3219"
+         userid="sa" password=""
+         src="./build/roller/WEB-INF/dbscripts/droptables.sql"
+         classpath="${ro.tools}/buildtime/hsqldb.jar" />
+
+    <stopdb port="3219" />
+</target>
+
+<target name="test-utils" depends="build-test" >
+    <mkdir dir="${build.reports}/utils/xml"/>
+    <mkdir dir="${build.reports}/utils/html"/>
+    
+	<junit fork="true" dir="${build.tests}">
+        <batchtest toDir="${build.reports}/utils/xml">
+            <fileset dir="${build.tests}/WEB-INF/classes">
+                <include name="org/roller/util/*Test.class"/>
+            </fileset>
+        </batchtest>
+        <jvmarg value="-DrollerImpl=hibernate"/>
+        <jvmarg value="-Dcatalina.base=."/> <!-- needed to satisfy ref in log4j.properties -->
+        <formatter type="xml"/>
+        <classpath>
+            <path refid="junit.path"/>
+        </classpath>
+    </junit>
+
+	<junitreport todir="${build.reports}/utils/xml">
+      <fileset dir="${build.reports}/utils/xml">
+        <include name="TEST-*.xml"/>
+      </fileset>
+      <report format="noframes" toDir="${build.reports}/utils/html"/>
+    </junitreport>
+
+</target>
+
+<!-- You can specify testClass using -DtestClass=foo -->
+<property name="testClass" value="org.roller.presentation.velocity.plugins.smileys.SmileysTest"/>
+<target name="test-one" depends="build-test">
+    <java classname="junit.textui.TestRunner" fork="yes" failonerror="false">
+        <arg value="${testClass}"/>
+        <classpath>
+            <path refid="junit.path"/>
+        </classpath>
+    </java>
+</target>
+
+<!-- ********************************************************************* -->
+<!-- EXAMPLE targets -->
+<!-- ********************************************************************* -->
+	
+<target name="deploy-tomcat" depends="stage-web" >
+    <ant dir="./personal" target="deploy-tomcat" />
+</target>
+<target name="deploy-resin" depends="stage-web" >
+    <ant dir="./personal" target="deploy-resin" />
+</target>
+<target name="deploy-isp" depends="stage-web" >
+    <ant dir="./personal" target="deploy-isp" />
+</target>
+<target name="clean-isp">
+    <ant dir="./personal" target="clean-isp" />
+</target>
+<target name="official-release" depends="tests,full-release" > 
+    <ant dir="./personal" target="official-release" />
+</target>
+
+<!-- ********************************************************************* -->
+<!-- EXPERIMENTAL targets -->
+<!-- ********************************************************************* -->
+	
+<!-- EXPERIMENTAL: Run ConsistencyCheck. -->
+<target name="consistency-check">
+<echo>Use -Ddelete=1 to delete all orphans.
+Use -Dverbose=1 to get verbose output.
+'delete' and 'verbose' are exclusive, 'delete' wins.
+</echo>
+    <condition property="command" value="-v">
+        <isset property="verbose" />
+    </condition>
+    <condition property="command" value="-purge">
+        <isset property="delete" />
+    </condition>
+    <java classname="org.roller.business.utils.ConsistencyCheck" fork="yes">
+        <arg value="${command}"/>
+        <jvmarg value="-Dusername=roller"/>
+        <jvmarg value="-Dpassword=tiger"/>
+        <classpath>
+            <path refid="base.path"/>
+            <path location="${ro.build}/lib/rollerbeans.jar"/>
+            <path location="${ro.tools}/lib/mm.mysql-2.0.14-bin.jar"/>
+        </classpath>
+    </java>
+</target>
+	
+<target name="findbugs" depends="build">
+    <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" 
+    	    classpathref="findbugs.path" />
+
+    <property name="findbugs.home" value="${ro.tools}/buildtime/findbugs" />
+    <findbugs home="${findbugs.home}"
+              output="xml"
+              outputFile="${findbugs.home}/roller-fb.xml"
+              projectFile="${basedir}/tools/buildtime/findbugs/roller.fb" >
+      <!--
+      <auxClasspath refid="findbugs.path" />
+      <sourcePath path="${basedir}/src/" />
+      <sourcePath path="${basedir}/contrib/plugins/src/" />
+      <sourcePath path="${basedir}/tests/" />
+      <class location="${build.stage_web}/WEB-INF/lib/rollerbeans.jar" />
+      <class location="${build.stage_web}/WEB-INF/lib/rollerweb.jar" />
+      <class location="${build.stage_web}/WEB-INF/lib/rollercontrib.jar" />
+      -->
+    </findbugs>
+</target>
+
+<target name="compile-jsps" depends="stage-web">
+   <path id="jasper.path">
+     <path location="${build.stage_web}/WEB-INF/classes" />
+     <fileset dir="${build.stage_web}/WEB-INF/lib">
+       <include name="**/*.jar"/>
+     </fileset>
+     <fileset dir="${ro.tools}/tomcat-4.1.24">
+       <include name="*.jar"/>
+     </fileset>
+     <fileset dir="${ro.tools}/lib">
+       <include name="servlet-*.jar"/>
+       <include name="ant-*.jar"/>
+     </fileset>
+   </path>
+     <mkdir dir="${ro.build}/jspc"/>
+  <jspc srcdir="${build.stage_web}" destdir="${ro.build}/jspc"
+        package="test" verbose="9">
+      <include name="**/*.jsp" />
+        <classpath refid="jasper.path"/>
+  </jspc>
+     <mkdir dir="${ro.build}/jspc.classes"/>
+    <javac source="1.4" debug="true" srcdir="${ro.build}/jspc"
+        destdir="${ro.build}/jspc.classes" fork="true">
+        <classpath refid="jasper.path"/>
+  </javac>
+
+</target>
+	    
+<!-- ********************************************************************* -->
+<!-- HSQLDB start, init and stop targets -->
+<!-- ********************************************************************* -->
+
+<target name="init-hsqldb" description=
+    "Initializes HSQLDB on port 3219 by running Roller's droptable and createdb scripts">
+    &custom-post-dbtest;
+    <sql driver="org.hsqldb.jdbcDriver"
+         url="jdbc:hsqldb:hsql://localhost:3219"
+         userid="sa" password=""
+         src="./build/roller/WEB-INF/dbscripts/droptables.sql" onerror="continue"
+         classpath="${ro.tools}/buildtime/hsqldb.jar" />    
+    <sql driver="org.hsqldb.jdbcDriver"
+         url="jdbc:hsqldb:hsql://localhost:3219"
+         userid="sa" password=""
+         src="./build/roller/WEB-INF/dbscripts/hsql/createdb.sql"
+         classpath="${ro.tools}/buildtime/hsqldb.jar" />    
+    &custom-pre-dbtest;
+</target>
+
+<target name="start-hsqldb" description="Starts HSQLDB database on port 3219">  
+    <java classname="org.hsqldb.Server" fork="yes" classpath="./tools/buildtime/hsqldb.jar">
+        <arg value="-database"/>
+        <arg value="${build.tests}/testdb"/>
+        <arg value="-port"/>
+        <arg value="3219"/>
+    </java>
+</target>
+        
+<target name="stop-hsqldb" description="Drop tables and stops the HSQLDB database on port 3219">
+    <sql driver="org.hsqldb.jdbcDriver"
+         url="jdbc:hsqldb:hsql://localhost:3219"
+         userid="sa" password=""
+         src="./build/roller/WEB-INF/dbscripts/droptables.sql"
+         classpath="${ro.tools}/buildtime/hsqldb.jar" />
+    <sql driver="org.hsqldb.jdbcDriver"
+         url="jdbc:hsqldb:hsql://localhost:3219"
+         userid="sa" password=""
+         classpath="${ro.tools}/buildtime/hsqldb.jar" >
+         SHUTDOWN
+    </sql>  
+</target>
+
+</project>

Added: incubator/roller/trunk/contrib/ant.properties
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/contrib/ant.properties?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/contrib/ant.properties (added)
+++ incubator/roller/trunk/contrib/ant.properties Wed Jun  8 20:18:46 2005
@@ -0,0 +1,4 @@
+build.debug=on
+build.deprecation=false
+ro.build=../build
+ro.tools=../tools

Added: incubator/roller/trunk/contrib/build.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/contrib/build.xml?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/contrib/build.xml (added)
+++ incubator/roller/trunk/contrib/build.xml Wed Jun  8 20:18:46 2005
@@ -0,0 +1 @@
+<?xml version="1.0"?>
<!DOCTYPE project [
    <!ENTITY properties SYSTEM "file:../properties.xmlf">
]>
<project name="contrib" default="build-contrib">  
 
    <!-- Bring in properties.xml -->
    &properties;
    
    <target name="build-contrib" description="Build Roller contributions">
   
        <echo message="making ${ro.build}/compile_contrib" />
        <mkdir dir="${ro.build}/compile_contrib" />
        
	<ant dir="plugins" inheritAll="false" />
        
        <copy todir="${ro.build}/roller/WEB-INF/lib" flatten="true">
            <fileset dir="./" includes="**/*.jar"/>
        </copy>

        <!-- Jar up web classes -->
        <jar jarfile="${ro.build}/roller/WEB-INF/lib/rollercontrib.jar">
            <fileset dir="${ro.build}/compile_contrib" />
        </jar>
        
    </target>  
</project>
\ No newline at end of file

Added: incubator/roller/trunk/contrib/lib/JSPWiki.jar
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/contrib/lib/JSPWiki.jar?rev=189695&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/roller/trunk/contrib/lib/JSPWiki.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/roller/trunk/contrib/lib/jython.jar
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/contrib/lib/jython.jar?rev=189695&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/roller/trunk/contrib/lib/jython.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/roller/trunk/contrib/lib/radeox.jar
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/contrib/lib/radeox.jar?rev=189695&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/roller/trunk/contrib/lib/radeox.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/roller/trunk/contrib/lib/textile4j-1.20.jar
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/contrib/lib/textile4j-1.20.jar?rev=189695&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/roller/trunk/contrib/lib/textile4j-1.20.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/roller/trunk/contrib/plugins/ant.properties
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/contrib/plugins/ant.properties?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/contrib/plugins/ant.properties (added)
+++ incubator/roller/trunk/contrib/plugins/ant.properties Wed Jun  8 20:18:46 2005
@@ -0,0 +1,4 @@
+build.debug=on
+build.deprecation=false
+ro.build=../../build
+ro.tools=../../tools

Added: incubator/roller/trunk/contrib/plugins/build.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/contrib/plugins/build.xml?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/contrib/plugins/build.xml (added)
+++ incubator/roller/trunk/contrib/plugins/build.xml Wed Jun  8 20:18:46 2005
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!DOCTYPE project [
+    <!ENTITY properties SYSTEM "file:../../properties.xmlf">
+]>
+<project name="plugins" default="plugins">
+ 
+    <!-- Bring in properties.xml -->
+    &properties;
+    
+   <target name="plugins" description="Build Roller Page Plugins">
+       <javac debug="${build.debug}" 
+             srcdir="./src" 
+            destdir="${ro.build}/compile_contrib">
+           <classpath>
+               <path refid="presentation.path"/>
+               <path location="${ro.build}/compile_beans"/>
+               <path location="${ro.build}/compile_web"/>
+               <fileset dir="../lib">
+                  <include name="*.jar"/>
+               </fileset>
+           </classpath>
+       </javac>
+       <copy todir="${ro.build}/compile_contrib">
+           <fileset dir="./src" includes="**/*.properties"/>
+       </copy>
+   </target>
+</project>
\ No newline at end of file

Added: incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/acronyms/AcronymsPlugin.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/acronyms/AcronymsPlugin.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/acronyms/AcronymsPlugin.java (added)
+++ incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/acronyms/AcronymsPlugin.java Wed Jun  8 20:18:46 2005
@@ -0,0 +1,234 @@
+/*
+ * Filename: AcronymsPlugin.java
+ * 
+ * Created on 22-Jun-04
+ */
+package org.roller.presentation.velocity.plugins.acronyms;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.velocity.context.Context;
+import org.roller.RollerException;
+import org.roller.model.RollerFactory;
+import org.roller.model.UserManager;
+import org.roller.pojos.PageData;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.velocity.PagePlugin;
+
+import java.util.Iterator;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Adds full text to pre-defined acronyms.
+ * 
+ * Example: HTML would become &lt;acronym title="Hyper Text Markup Language"&gt;HTML&lt;/acronym&gt; 
+ * 
+ * @author <a href="mailto:molen@mail.com">Jaap van der Molen</a>
+ * @version $Revision: 1.3 $
+ */
+public class AcronymsPlugin implements PagePlugin
+{
+	/**
+	 * Logger
+	 */
+	private static final Log mLogger = LogFactory.getLog(AcronymsPlugin.class);
+
+	/**
+	 * Name of this Plugin.
+	 */
+	protected String name = "Acronyms";
+    protected String description = "Expands acronyms defined in _acronym page. " +
+        "Example: definition 'HTML=Hyper Text Markup Language' " +
+        "becomes &lt;acronym title='Hyper Text Markup Language'&gt;HTML&lt;/acronym&gt;. " +
+        "You must create an " +
+        "<a href='page.do?method=editPages&rmik=tabbedmenu.website.pages'>" +
+        "_acronym page</a> to use Acronyms.";
+    
+	/**
+	 * Constructor
+	 */
+	public AcronymsPlugin()
+	{
+		super();
+        mLogger.debug("AcronymsPlugin instantiated.");
+	}
+
+	/**
+	 * @see org.roller.presentation.velocity.PagePlugin#init(org.roller.presentation.RollerRequest, org.apache.velocity.context.Context)
+	 */
+	public void init(RollerRequest rreq, Context ctx) throws RollerException
+	{
+		if (mLogger.isDebugEnabled()) {
+			mLogger.debug("init( rreq = "+rreq+", ctx = "+ctx+" )");
+		}
+	}
+    
+    /**
+     * Look for any _acronyms Page and parse it into Properties.
+     * @param website
+     * @return
+     * @throws RollerException
+     */
+    private Properties loadAcronyms(WebsiteData website) 
+    {
+        Properties acronyms = new Properties();
+        try
+        {
+            UserManager userMgr = RollerFactory.getRoller().getUserManager();
+            PageData acronymsPage = userMgr.getPageByName(
+                                        website, "_acronyms");
+            if (acronymsPage != null) 
+            {
+                acronyms = parseAcronymPage(acronymsPage, acronyms);
+            }
+        }
+        catch (RollerException e)
+        {
+            // not much we can do about it
+            mLogger.warn(e);
+        }
+        return acronyms;
+    }
+
+    /**
+	 * @see org.roller.presentation.velocity.PagePlugin#render(org.roller.pojos.WeblogEntryData, boolean)
+	 */
+	public String render(WeblogEntryData entry, boolean skipFlag)
+	{
+        String text = entry.getText();
+        
+		if (mLogger.isDebugEnabled()) {
+			mLogger.debug("render( entry = "+entry.getId()+", skipFlag = "+skipFlag+" )");
+		}
+
+        /*
+         * Get acronyms Properties.
+         */
+        Properties acronyms = loadAcronyms(entry.getWebsite());
+        mLogger.debug("acronyms.size()=" + acronyms.size());
+        if (acronyms.size() == 0)
+        {
+            return text;
+        }
+
+        /*
+         * Compile the user's acronyms into RegEx patterns.
+         */
+        Pattern[] acronymPatterns = new Pattern[acronyms.size()];
+        String[] acronymTags = new String[acronyms.size()];
+        int count = 0;
+        for (Iterator iter = acronyms.keySet().iterator(); iter.hasNext();)
+        {
+            String acronym = (String) iter.next();
+            acronymPatterns[count] = Pattern.compile("\\b" + acronym + "\\b");
+            mLogger.debug("match '" + acronym + "'");
+            acronymTags[count] =
+                "<acronym title=\""
+                + acronyms.getProperty(acronym)
+                + "\">"
+                + acronym
+                + "</acronym>";
+            count++;
+        }
+		
+		// check skipper
+        /* I don't think this Plugin should skip. -Lance
+		if (skipFlag)
+		{
+			return text;
+		}
+        */
+        
+        // if there are none, no work to do
+        if (acronymPatterns == null || acronymPatterns.length == 0) {
+            return text;
+        }
+
+        return matchAcronyms(text, acronymPatterns, acronymTags);
+	}
+
+	/**
+     * Without Website cannot lookup _acronyms page.
+	 * @see org.roller.presentation.velocity.PagePlugin#render(java.lang.String)
+	 */
+	public String render(String text)
+	{
+	    return text;
+	}
+
+	/**
+	 * @return this Page Plugin's name
+	 */
+	public String toString()
+	{
+		return name;
+	}
+	
+	/**
+	 * Iterates through the acronym properties and replaces matching 
+	 * acronyms in the entry text with acronym html-tags.
+	 * 
+	 * @param text entry text
+	 * @param acronyms user provided set of acronyms
+	 * @return entry text with acronym explanations
+	 */
+	private String matchAcronyms(String text, Pattern[] acronymPatterns, String[] acronymTags)
+	{
+		if (mLogger.isDebugEnabled()) {
+			mLogger.debug("matchAcronyms("+text+")");
+		}
+
+        Matcher matcher = null;
+		for (int i=0; i<acronymPatterns.length; i++)
+		{
+            matcher = acronymPatterns[i].matcher(text);
+            text = matcher.replaceAll(acronymTags[i]);
+		}
+		return text;
+	}
+
+	/**
+	 * Parse the Template of the provided PageData and turns it
+	 * into a <code>Properties</code> collection.
+	 * 
+	 * @param acronymPage
+	 * @return acronym properties (key = acronym, value= full text), empty if Template is empty
+	 */
+	private Properties parseAcronymPage(PageData acronymPage, Properties acronyms)
+	{
+		String rawAcronyms = acronymPage.getTemplate();
+		
+		if (mLogger.isDebugEnabled()) 
+		{
+			mLogger.debug("parsing _acronyms template: \n'"+rawAcronyms+"'");
+		}
+		
+		String regex = "\n"; // end of line
+		String[] lines = rawAcronyms.split(regex);
+
+		if (lines != null)
+		{
+			for (int i = 0; i < lines.length; i++)
+			{
+				int index = lines[i].indexOf('=');
+				if (index > 0)
+				{
+					String key = lines[i].substring(0, index).trim();
+					String value =
+						lines[i].substring(index + 1, lines[i].length()).trim();
+					acronyms.setProperty(key, value);
+				}
+			}
+		}
+
+		return acronyms;
+	}
+
+    public String getName() { return name; }
+    public String getDescription() { return StringEscapeUtils.escapeJavaScript(description); }
+}

Added: incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/BookmarkPlugin.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/BookmarkPlugin.java?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/BookmarkPlugin.java (added)
+++ incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/BookmarkPlugin.java Wed Jun  8 20:18:46 2005
@@ -0,0 +1,175 @@
+/*
+ * Created on Nov 2, 2003
+ *
+ */
+package org.roller.presentation.velocity.plugins.bookmarks;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.velocity.context.Context;
+import org.roller.RollerException;
+import org.roller.model.BookmarkManager;
+import org.roller.model.RollerFactory;
+import org.roller.pojos.BookmarkData;
+import org.roller.pojos.FolderData;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.velocity.PagePlugin;
+import java.util.regex.PatternSyntaxException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * @author lance
+ * @author Anil Gangolli (significant modifications)
+ */
+public class BookmarkPlugin implements PagePlugin
+{
+    protected String name = "Bookmark Linker";
+    protected String description = "Automatically uses your Bookmarks to " +
+        "create links.  Simply use the Name of a Bookmark and it will be " +
+        "converted into a hyperlink using the Bookmark's URL.";
+
+    private static Log mLogger =
+       LogFactory.getFactory().getInstance(BookmarkPlugin.class);
+
+    public BookmarkPlugin()
+    {
+        mLogger.debug("BookmarkPlugin instantiated.");
+    }
+
+    public String toString() { return name; }
+
+    /* (non-Javadoc)
+     * @see org.roller.presentation.velocity.PagePlugin#init(org.roller.presentation.RollerRequest, org.apache.velocity.context.Context)
+     */
+    public void init(RollerRequest rreq, Context ctx) throws RollerException
+    {
+    }
+
+    /*
+     * Without Website cannot lookup Folders & Bookmarks
+     * (non-Javadoc)
+     * @see org.roller.presentation.velocity.PagePlugin#render(java.lang.String)
+     */
+    public String render(String text)
+    {
+        return text;
+    }
+
+    public String render(WeblogEntryData entry, boolean skipFlag)
+    {
+        String text = entry.getText();        
+        try
+        {
+            BookmarkManager bMgr = RollerFactory.getRoller().getBookmarkManager();
+            FolderData rootFolder = bMgr.getRootFolder(entry.getWebsite());
+            text = matchBookmarks(text, rootFolder);
+            text = lookInFolders(text, rootFolder.getFolders());
+        }
+        catch (RollerException e)
+        {
+            // nothing much I can do, go with default "Weblog" value
+            // could be RollerException or NullPointerException
+            mLogger.warn(e);
+        }
+        return text;
+    }
+
+    /**
+     * Recursively travel down Folder tree, attempting
+     * to match up Bookmarks in each Folder.
+     *
+     * @param text
+     * @param folders
+     * @return
+     */
+    private String lookInFolders(String text, Collection folders)
+    {
+        Iterator it = folders.iterator();
+        while (it.hasNext())
+        {
+            FolderData folder = (FolderData)it.next();
+            text = matchBookmarks(text, folder);
+
+            try
+            {
+                if (!folder.getFolders().isEmpty())
+                {
+                    lookInFolders(text, folder.getFolders());
+                }
+            }
+            catch (RollerException e)
+            {
+                mLogger.error("Error getting child Folders");
+            }
+        }
+        return text;
+    }
+
+    private String matchBookmarks(String text, FolderData folder)
+    {
+        Iterator bookmarks = folder.getBookmarks().iterator();
+        String workingText = text;
+        while (bookmarks.hasNext())
+        {
+            BookmarkData bookmark = (BookmarkData)bookmarks.next();
+            String bkDescription = bookmark.getDescription();
+            if (bkDescription == null) bkDescription = "";
+            String bookmarkLink = "<a href=\"" +
+                bookmark.getUrl() + "\" title=\"" +
+                bkDescription + "\">" +
+                bookmark.getName() + "</a>";
+            try
+            {
+                // Replace all occurrences of bookmark name that don't occur within the bounds of an anchor tag
+                // Notes:
+                // - use reluctant quantifiers on the tags to avoid gobbling more than desired
+                // - use non-capturing groups for boundaries to avoid replacing the boundary as well as the bookmark name.
+                // - we depend on the numbering of the specific groups in this expression in the replacement code below.
+                // TODO: should escape the bookmark name
+                String regEx = "(<a(?:\\s.*?)??/>)|(<a(?:\\s.*?)??>)|(</a(?:\\s.*?)??>)|(?:\\b)(" + bookmark.getName() + ")(?:\\b)";
+                Matcher m = Pattern.compile(regEx).matcher(workingText);
+                StringBuffer textBuf = new StringBuffer(workingText.length());
+                int inLink = 0;
+                while (m.find())
+                {
+                    if (m.group(1) != null)
+                    {
+                        // self-closed anchor tag <a  ... /> -- ignore
+                    }
+                    else if (m.group(2) != null)
+                    {
+                        // matched opening anchor tag <a ...>
+                        inLink++;
+                    }
+                    else if (m.group(3) != null)
+                    {
+                        // closing anchor tag </a>, but ignore nonmatching ones
+                        if (inLink > 0) inLink--;
+                    }
+                    else if (m.group(4) != null)
+                    {
+                        // matched the bookmark -- replace, but only if not within a link tag.
+                        if (inLink == 0) m.appendReplacement(textBuf, bookmarkLink);
+                    }
+                    // Any remaining case indicates a bug.  One could add an else with assertion here.  Conservatively don't substitute.
+                }
+                m.appendTail(textBuf);
+                workingText = textBuf.toString();
+            }
+            catch (PatternSyntaxException e)
+            {
+                // Can happen since we don't escape pattern the bookmark name to protect pattern characters.
+                mLogger.warn("Failed to substitute for bookmark [" + bookmark.getName() + "] due to regular expression characters.");
+            }
+        }
+        return workingText.toString();
+    }
+
+    public String getName() { return name; }
+    public String getDescription() { return StringEscapeUtils.escapeJavaScript(description); }
+}

Added: incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/package.html?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/package.html (added)
+++ incubator/roller/trunk/contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/package.html Wed Jun  8 20:18:46 2005
@@ -0,0 +1,9 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title></title>
+</head>
+<body>
+PagePlugin: Bookmark substitution in weblog entries.<br>
+</body>
+</html>