Author: xavier
Date: Tue Mar 27 00:08:50 2007
New Revision: 522796

URL: http://svn.apache.org/viewvc?view=rev&rev=522796
Log:
review release management:
- extract in a separate build file (build-release.xml)
- upgrade xooki version (featuring batch generation)
- include doc batch generation
- review what is packaged in distributions (src and bin)

Added:
    incubator/ivy/core/trunk/build-release.xml
Modified:
    incubator/ivy/core/trunk/build.properties
    incubator/ivy/core/trunk/build.xml
    incubator/ivy/core/trunk/doc/toc.json
    incubator/ivy/core/trunk/doc/xooki/xooki.js

Added: incubator/ivy/core/trunk/build-release.xml
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/build-release.xml?view=auto&rev=522796
==============================================================================
--- incubator/ivy/core/trunk/build-release.xml (added)
+++ incubator/ivy/core/trunk/build-release.xml Tue Mar 27 00:08:50 2007
@@ -0,0 +1,134 @@
+<project name="IvyRelease" default="snapshot" 
xmlns:ivy="antlib:fr.jayasoft.ivy.ant">
+       <import file="build.xml"/>
+
+       <target name="generate-doc">
+               <!-- requires java 6 jdk in path and Apache Ant 1.7 -->
+        <copy todir="${doc.build.dir}">
+               <fileset dir="${doc.src.dir}" 
includes="images/**,style/**,samples/**" />
+        </copy>
+        <script language="javascript"><![CDATA[
+          importClass(java.io.File);
+        
+             fs = project.createDataType("fileset");
+             fs.setDir( new File(project.getProperty("doc.src.dir")) );
+             fs.setIncludes("**/*.html");
+             fs.setExcludes("template.html,"
+                                       +"*Template.html,"
+                                       +"conflict-solving-algo.html,"
+                                       +"doc/use.html,"
+                                       +"doc/reference.html,"
+                                       +"samples/**,"
+                                       +"reports/**,"
+                                       +"xooki/**,"
+                                       +"presentations/**,"
+                                       +"test/**");
+       
+             // Get the files (array) of that fileset
+             ds = fs.getDirectoryScanner(project);
+             srcFiles = ds.getIncludedFiles();
+       
+             // iterate over that array
+             for (i=0; i<srcFiles.length; i++) {
+       
+               // get the values via Java API
+               var file = new File(fs.getDir(project), srcFiles[i]);
+               
+                       var basedir = file.getParent();
+                       var filename = file.getName();
+                       var filepath = srcFiles[i].substring(0, 
srcFiles[i].lastIndexOf(project.getProperty("file.separator"))+1);
+        
+               exec = project.createTask("exec");
+               exec.setDir(new File(basedir));
+               exec.setExecutable("jrunscript");
+               
exec.createArg().setValue(project.getProperty("doc.src.dir")+"/xooki/xooki.js");
+               exec.createArg().setValue("-noddtree");
+               exec.createArg().setValue(filename);
+               
exec.createArg().setValue(project.getProperty("doc.build.dir")+"/"+filepath);
+               exec.perform();
+                 }
+        ]]></script>
+       </target>
+
+       <target name="all-doc" depends="javadoc, generate-doc" />
+       
+       <target name="snapshot-src" depends="default-version,all-doc">
+               <mkdir dir="${distrib.dir}"/>
+               <zip destfile="${distrib.dir}/ivy-${build.version}-src.zip">
+                       <zipfileset dir="${doc.build.dir}" 
prefix="ivy-${build.version}/doc"/>
+                       <zipfileset dir="${src.dir}" 
prefix="ivy-${build.version}/src/java"/>
+                       <zipfileset dir="${basedir}/src/example" 
prefix="ivy-${build.version}/src/example"/>
+                       <zipfileset dir="${test.dir}" 
prefix="ivy-${build.version}/test/java"/>
+                       <zipfileset dir="${basedir}/test/repositories" 
prefix="ivy-${build.version}/test/repositories"/>
+                       <zipfileset dir="${basedir}/test/buildlist" 
prefix="ivy-${build.version}/test/buildlist"/>
+                       <zipfileset dir="${basedir}/test/triggers" 
prefix="ivy-${build.version}/test/triggers"/>
+                       <zipfileset dir="${basedir}/test/xsl" 
prefix="ivy-${build.version}/test/xsl"/>
+                       <zipfileset 
dir="${src.dir}/org/apache/ivy/plugins/parser/xml" includes="ivy.xsd" 
fullpath="ivy-${build.version}/ivy.xsd"/>
+                       <zipfileset dir="${basedir}" includes="DISCLAIMER" 
fullpath="ivy-${build.version}/DISCLAIMER"/>
+                       <zipfileset dir="${basedir}" includes="LICENSE" 
fullpath="ivy-${build.version}/LICENSE"/>
+                       <zipfileset dir="${basedir}" includes="CHANGES.txt" 
fullpath="ivy-${build.version}/CHANGES.txt"/>
+                       <zipfileset dir="${basedir}" includes="RELEASE_NOTES" 
fullpath="ivy-${build.version}/RELEASE_NOTES"/>
+                       <zipfileset dir="${basedir}" includes="ivysettings.xml" 
fullpath="ivy-${build.version}/ivysettings.xml"/>
+                       <zipfileset dir="${basedir}" 
includes="build.properties" fullpath="ivy-${build.version}/build.properties"/>
+                       <zipfileset dir="${basedir}" includes="ivy.xml" 
fullpath="ivy-${build.version}/ivy.xml"/>
+
+                       <zipfileset dir="${basedir}" includes="build.xml" 
fullpath="ivy-${build.version}/build.xml"/>
+               </zip>
+       </target>
+
+       <target name="snapshot-bin" depends="default-version, jar, all-doc">
+               <mkdir dir="${distrib.dir}"/>
+               <ivy:deliver 
+                       deliverpattern="${distrib.dir}/ivy.xml" 
+                       pubrevision="${build.version}" 
+                       pubdate="${pubdate}"
+                   status="${status}"/>
+               <zip destfile="${distrib.dir}/ivy-${build.version}-bin.zip">
+                       <zipfileset dir="${doc.build.dir}" 
prefix="ivy-${build.version}/doc"/>
+                       <zipfileset dir="${basedir}/src/example" 
prefix="ivy-${build.version}/src/example"/>
+                       <zipfileset dir="${basedir}" includes="DISCLAIMER" 
fullpath="ivy-${build.version}/DISCLAIMER"/>
+                       <zipfileset dir="${basedir}" includes="LICENSE" 
fullpath="ivy-${build.version}/LICENSE"/>
+                       <zipfileset dir="${basedir}" includes="CHANGES.txt" 
fullpath="ivy-${build.version}/CHANGES.txt"/>
+                       <zipfileset dir="${basedir}" includes="RELEASE_NOTES" 
fullpath="ivy-${build.version}/RELEASE_NOTES"/>
+                       <zipfileset 
dir="${src.dir}/org/apache/ivy/plugins/parser/xml" includes="ivy.xsd" 
fullpath="ivy-${build.version}/ivy.xsd"/>
+                       <zipfileset dir="${distrib.dir}" includes="ivy.xml" 
fullpath="ivy-${build.version}/ivy.xml"/>
+
+                       <zipfileset dir="${artifacts.build.dir}" 
includes="${final.name}" 
fullpath="ivy-${build.version}/ivy-${build.version}.jar"/>
+                       <zipfileset dir="${artifacts.build.dir}" 
includes="${final.core.name}" 
fullpath="ivy-${build.version}/ivy-core-${build.version}.jar"/>
+               </zip>
+               <copy file="${basedir}/DISCLAIMER" todir="${distrib.dir}" />
+               <copy file="${basedir}/LICENSE" todir="${distrib.dir}" />
+               <copy file="${basedir}/CHANGES.txt" todir="${distrib.dir}" />
+               <copy file="${basedir}/RELEASE_NOTES" todir="${distrib.dir}" />
+               <copy file="${artifacts.build.dir}/${final.name}" 
todir="${distrib.dir}" />
+               <copy file="${artifacts.build.dir}/${final.core.name}" 
todir="${distrib.dir}" />
+               <copy 
file="${src.dir}/org/apache/ivy/plugins/parser/xml/ivy.xsd" 
todir="${distrib.dir}" />
+       </target>
+       
+       <target name="snapshot-version">
+               <property name="version.prefix" 
value="${target.ivy.version}-dev-"/>
+       </target>
+       
+       <target name="release-version">
+               <input message="please enter version: " 
addproperty="build.version"/>
+               <input message="please enter status: 
(integration,milestone,release)" addproperty="status"/>
+       </target>
+       
+       <target name="snapshot" depends="clean, snapshot-version, 
coverage-report, snapshot-src, snapshot-bin" description="used for nightly and 
integration builds"/>
+       <target name="release" depends="release-version, snapshot" 
description="make a new release of Ivy"/>
+
+       <!-- 
+               publication on ivy web site
+               requires to be logged in on people.apache.org 
+       -->
+       <available property="loggedin" 
file="/www/incubator.apache.org/ivy/index.html"/>
+       <target name="publish-latest" if="loggedin" description="publishes the 
last snapshot done to ivy web site">
+          <property name="html.dir" 
value="/www/incubator.apache.org/ivy/downloads/latest/"/>
+          <delete>
+              <fileset dir="${html.dir}"/>
+          </delete>
+          <copy todir="${html.dir}">
+              <fileset dir="${distrib.dir}"/>
+          </copy>
+       </target>
+
+</project>
\ No newline at end of file

Modified: incubator/ivy/core/trunk/build.properties
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/build.properties?view=diff&rev=522796&r1=522795&r2=522796
==============================================================================
--- incubator/ivy/core/trunk/build.properties (original)
+++ incubator/ivy/core/trunk/build.properties Tue Mar 27 00:08:50 2007
@@ -24,13 +24,13 @@
 test.build.dir=${basedir}/build/test
 artifacts.build.dir=${basedir}/build/artifact
 distrib.dir=${basedir}/build/distrib
-doc.build.dir=${basedir}/doc/reports
+doc.build.dir=${basedir}/build/doc
+reports.dir=${doc.build.dir}/reports
 test.xml.dir=${build.dir}/test-report
-test.report.dir=${doc.build.dir}/test
-javadoc.build.dir=${doc.build.dir}/api
-doc.src.dir=${basedir}/src/doc
-dxml.doc.file=${doc.src.dir}/ivy-book.xml
-raw.dxml.doc.file=${doc.src.dir}/ivy-raw-book.xml
+test.report.dir=${reports.dir}/test
+coverage.report.dir=${reports.dir}/coverage
+javadoc.build.dir=${reports.dir}/api
+doc.src.dir=${basedir}/doc
 
 ivy.minimum.javaversion=1.4
 debug.mode=on

Modified: incubator/ivy/core/trunk/build.xml
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/build.xml?view=diff&rev=522796&r1=522795&r2=522796
==============================================================================
--- incubator/ivy/core/trunk/build.xml (original)
+++ incubator/ivy/core/trunk/build.xml Tue Mar 27 00:08:50 2007
@@ -110,6 +110,13 @@
                <property name="offline" value="true" />
        </target>
        
+       <target name="default-version">
+               <tstamp> 
+                       <format property="pubdate" pattern="yyyyMMddHHmmss"/>  
+               </tstamp>
+               <property name="version.prefix" 
value="${target.ivy.version}-local-"/>
+               <property name="build.version" 
value="${version.prefix}${pubdate}"/>
+       </target>
 
     <!-- =================================================================
                DEPENDENCY MNGT, COMPILATION AND JAR
@@ -291,15 +298,15 @@
        
        <target name="coverage-report" depends="emma, test-report"  
unless="skip.test"
                        description="run tests with instrumentation and 
generate coverage report">
-               <mkdir dir="${doc.build.dir}/coverage" />
+               <mkdir dir="${coverage.report.dir}" />
                <emma>
                    <report sourcepath="${src.dir}" >
                        <fileset dir="${coverage.dir}" >
                          <include name="*.emma" />
                        </fileset>
 
-                       <txt outfile="${doc.build.dir}/coverage/coverage.txt" />
-                       <html outfile="${doc.build.dir}/coverage/coverage.html" 
/>
+                       <txt outfile="${coverage.report.dir}/coverage.txt" />
+                       <html outfile="${coverage.report.dir}/coverage.html" />
                     </report>
                 </emma>
        </target>
@@ -308,97 +315,6 @@
                <javadoc destdir="${javadoc.build.dir}">
                        <fileset dir="${src.dir}"/>
                </javadoc>
-       </target>
-       
-    <!-- =================================================================
-               DISTRIBUTION
-         ================================================================= -->
-       <target name="zip-doc" depends="default-version" description="zip the 
documentation">
-               <zip basedir="${basedir}/doc" 
destfile="${distrib.dir}/ivy-${build.version}-doc.zip"/>
-       </target>
-
-       <target name="snapshot-src" depends="default-version">
-               <mkdir dir="${distrib.dir}"/>
-               <zip destfile="${distrib.dir}/ivy-${build.version}-src.zip">
-                       <zipfileset dir="${src.dir}" 
prefix="ivy-${build.version}/src/java"/>
-                       <zipfileset dir="${basedir}/src/example" 
prefix="ivy-${build.version}/src/example"/>
-                       <zipfileset dir="${test.dir}" 
prefix="ivy-${build.version}/test/java"/>
-                       <zipfileset dir="${basedir}/test/repositories" 
prefix="ivy-${build.version}/test/repositories"/>
-                       <zipfileset dir="${basedir}/test/buildlist" 
prefix="ivy-${build.version}/test/buildlist"/>
-                       <zipfileset dir="${basedir}/test/triggers" 
prefix="ivy-${build.version}/test/triggers"/>
-                       <zipfileset dir="${basedir}/test/xsl" 
prefix="ivy-${build.version}/test/xsl"/>
-                       <zipfileset 
dir="${src.dir}/org/apache/ivy/plugins/parser/xml" includes="ivy.xsd" 
fullpath="ivy-${build.version}/ivy.xsd"/>
-                       <zipfileset dir="${basedir}" includes="DISCLAIMER" 
fullpath="ivy-${build.version}/DISCLAIMER"/>
-                       <zipfileset dir="${basedir}" includes="LICENSE" 
fullpath="ivy-${build.version}/LICENSE"/>
-                       <zipfileset dir="${basedir}" includes="CHANGES.txt" 
fullpath="ivy-${build.version}/CHANGES.txt"/>
-                       <zipfileset dir="${basedir}" includes="ivysettings.xml" 
fullpath="ivy-${build.version}/ivysettings.xml"/>
-                       <zipfileset dir="${basedir}" 
includes="build.properties" fullpath="ivy-${build.version}/build.properties"/>
-                       <zipfileset dir="${basedir}" includes="ivy.xml" 
fullpath="ivy-${build.version}/ivy.xml"/>
-
-                       <zipfileset dir="${basedir}" includes="build.xml" 
fullpath="ivy-${build.version}/build.xml"/>
-               </zip>
-       </target>
-
-       <target name="snapshot-bin" depends="default-version, jar">
-               <mkdir dir="${distrib.dir}"/>
-               <ivy:deliver 
-                       deliverpattern="${distrib.dir}/ivy.xml" 
-                       pubrevision="${build.version}" 
-                       pubdate="${pubdate}"
-                   status="${status}"/>
-               <zip destfile="${distrib.dir}/ivy-${build.version}-bin.zip">
-                       <zipfileset dir="${basedir}/src/example" 
prefix="ivy-${build.version}/src/example"/>
-                       <zipfileset dir="${basedir}" includes="DISCLAIMER" 
fullpath="ivy-${build.version}/DISCLAIMER"/>
-                       <zipfileset dir="${basedir}" includes="LICENSE" 
fullpath="ivy-${build.version}/LICENSE"/>
-                       <zipfileset dir="${basedir}" includes="CHANGES.txt" 
fullpath="ivy-${build.version}/CHANGES.txt"/>
-                       <zipfileset 
dir="${src.dir}/org/apache/ivy/plugins/parser/xml" includes="ivy.xsd" 
fullpath="ivy-${build.version}/ivy.xsd"/>
-                       <zipfileset dir="${distrib.dir}" includes="ivy.xml" 
fullpath="ivy-${build.version}/ivy.xml"/>
-
-                       <zipfileset dir="${lib.dir}" 
prefix="ivy-${build.version}/lib" excludes="junit*.jar,ant*.jar" />
-                       <zipfileset dir="${artifacts.build.dir}" 
includes="${final.name}" 
fullpath="ivy-${build.version}/ivy-${build.version}.jar"/>
-                       <zipfileset dir="${artifacts.build.dir}" 
includes="${final.core.name}" 
fullpath="ivy-${build.version}/ivy-core-${build.version}.jar"/>
-               </zip>
-               <copy file="${basedir}/DISCLAIMER" todir="${distrib.dir}" />
-               <copy file="${basedir}/LICENSE" todir="${distrib.dir}" />
-               <copy file="${basedir}/CHANGES.txt" todir="${distrib.dir}" />
-               <copy file="${artifacts.build.dir}/${final.name}" 
todir="${distrib.dir}" />
-               <copy file="${artifacts.build.dir}/${final.core.name}" 
todir="${distrib.dir}" />
-               <copy 
file="${src.dir}/org/apache/ivy/plugins/parser/xml/ivy.xsd" 
todir="${distrib.dir}" />
-       </target>
-       
-       <target name="default-version">
-               <tstamp> 
-                       <format property="pubdate" pattern="yyyyMMddHHmmss"/>  
-               </tstamp>
-               <property name="version.prefix" 
value="${target.ivy.version}-local-"/>
-               <property name="build.version" 
value="${version.prefix}${pubdate}"/>
-       </target>
-       
-       <target name="snapshot-version">
-               <property name="version.prefix" 
value="${target.ivy.version}-dev-"/>
-       </target>
-       
-       <target name="release-version">
-               <input message="please enter version: " 
addproperty="build.version"/>
-               <input message="please enter status: 
(integration,milestone,release)" addproperty="status"/>
-       </target>
-       
-       <target name="snapshot" depends="clean, snapshot-version, 
coverage-report, snapshot-src, snapshot-bin, javadoc, zip-doc" 
description="used for nightly and integration builds"/>
-       <target name="release" depends="release-version, snapshot" 
description="make a new release of Ivy"/>
-
-       <!-- 
-               publication on ivy web site
-               requires to be logged in on people.apache.org 
-       -->
-       <available property="loggedin" 
file="/www/incubator.apache.org/ivy/index.html"/>
-       <target name="publish-latest" if="loggedin" description="publishes the 
last snapshot done to ivy web site">
-          <property name="html.dir" 
value="/www/incubator.apache.org/ivy/downloads/latest/"/>
-          <delete>
-              <fileset dir="${html.dir}"/>
-          </delete>
-          <copy todir="${html.dir}">
-              <fileset dir="${distrib.dir}"/>
-          </copy>
        </target>
 
 

Modified: incubator/ivy/core/trunk/doc/toc.json
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/doc/toc.json?view=diff&rev=522796&r1=522795&r2=522796
==============================================================================
--- incubator/ivy/core/trunk/doc/toc.json (original)
+++ incubator/ivy/core/trunk/doc/toc.json Tue Mar 27 00:08:50 2007
@@ -130,7 +130,7 @@
             {
               "id":"doc/releasenotes/older",
               "title":"older versions",
-              "abstract":true,
+              "isAbstract":true,
               "children": [
                   {
                     "id":"doc/releasenotes/1.1",

Modified: incubator/ivy/core/trunk/doc/xooki/xooki.js
URL: 
http://svn.apache.org/viewvc/incubator/ivy/core/trunk/doc/xooki/xooki.js?view=diff&rev=522796&r1=522795&r2=522796
==============================================================================
--- incubator/ivy/core/trunk/doc/xooki/xooki.js (original)
+++ incubator/ivy/core/trunk/doc/xooki/xooki.js Tue Mar 27 00:08:50 2007
@@ -17,8 +17,19 @@
        Some code is largely inspired by code found in the dojo toolkit, 
        see http://dojotoolkit.org/ for more information.
 */
+
+/*
+This script can be either embedded in a xooki page for in browser processing, 
or used in batch using rhino or java 6 javascript tool:
+jrunscript path/to/xooki.js [-noddtree] inputFileFromXookiSite.html 
[path/to/dir/to/put/generated/file]
+
+Be sure to be in the directory where the html input to process is when running 
this command.
+ */
+var batchMode = (typeof arguments != 'undefined');
+
 var xooki = {};
 xooki.console = ""; // used for debugging purpose only, and only when the 
debug div is not yet created
+xooki.config = {};
+xooki.c = xooki.config;
 
 function t(msg) {
     // returns the internationalized version of the message, or the message if 
no translation is available
@@ -47,7 +58,11 @@
 function u(path) {
   // convert a path relative to the root to a full URL
   // u stands for Url
-  return xooki.c.root + path;
+  if (batchMode) {
+       return xooki.c.relativeRoot+path;
+  } else {
+       return xooki.c.root + path;
+  }
 }
 function cu(urlCfgProp) {
   // get a path from a configuration path and convert it to an URL
@@ -161,13 +176,13 @@
             document.write('<' + 'script');
             document.write(' language="javascript"');
             document.write(' type="text/javascript"');
-            document.write(' src="' + script_filename + '">');
+            document.write(' src="' + xooki.u(script_filename) + '">');
             document.write('</' + 'script' + '>');
         },
 
         action: function(action) {        
             // returns the url for an action on the same page
-            loc = window.location.toString();
+            loc = batchMode?'':xooki.pageURL;
             if (loc.indexOf("#") != -1) {
                 loc = loc.substring(0, loc.indexOf("#"));
             }
@@ -363,7 +378,7 @@
 }
 
 xooki.debug = function(message) {
-    var console = document.getElementById('xooki-console');
+    var console = typeof document == 'undefined' ? false : 
document.getElementById('xooki-console');
     if (console) {
         console.value += message + "\n";
     } else {
@@ -372,7 +387,7 @@
 }
 
 xooki.debugShowDetail = function (message) {
-    var detail = document.getElementById('xooki-debug-detail');
+    var detail = typeof document == 'undefined' ? false : 
document.getElementById('xooki-debug-detail');
     if (detail) {
         detail.value=message;
     } else {
@@ -391,12 +406,22 @@
     },
     
     pageLink: function(page) {
-       if (page.abstract) {
+       if (page.isAbstract) {
                return page.title;
        } else {
                return '<a href="'+pu(page.id)+'" '+(page.id == 
xooki.page.id?'class="current"':'')+'>'+page.title+'</a>';
        }
-    }
+    },
+       
+       // insert  the given  header in the html head
+       // can be used only when the browser is still in the head !
+       addHeader: function(/* string */ head) {
+               document.write(head);
+       },
+       
+       setBody: function( /* string */ body) {
+               document.body.innerHTML = body;
+       }
 };
 
 xooki.component = {
@@ -421,14 +446,16 @@
                        menu += '<li 
id="xooki-'+page.children[i].id+'">'+xooki.html.pageLink(page.children[i]);
                        smenu = arguments.callee(page.children[i]);
                        if (smenu != '') {
-                               menu += '<ul ';
                                if 
(smenu.indexOf('id="xooki-'+xooki.page.id+'"') != -1 
                                        || page.children[i].id == 
xooki.page.id) {
                                        // either a descendant or the node 
processed is the current page node
                                        // we specify that the menu must be 
opened by default
-                                       menu += 'rel="open"';
-                               }
-                               menu += '>'+smenu+'</ul>';
+                                       menu += '<ul rel="open"';
+                                       menu += '>'+smenu+'</ul>';
+                               } else if (xooki.c.useddtree) {
+                                               menu += '<ul ';
+                                       menu += '>'+smenu+'</ul>';
+                                       }
                        } 
                        menu += '</li>';
                }
@@ -534,12 +561,14 @@
             + xooki.c.debugPanel;
     }
 
-    document.body.innerHTML = 
xooki.string.processTemplate(xooki.template.body, xooki.c);
+    xooki.html.setBody(xooki.string.processTemplate(xooki.template.body, 
xooki.c));
     
     xooki.input.applyChanges();
     
-    // enable dynamic tree menu 
-       ddtreemenu.createTree(css("treemenu"), false);
+       if (xooki.c.useddtree) {
+           // enable dynamic tree menu 
+               ddtreemenu.createTree(css("treemenu"), false);
+       }
 };
 
 xooki.render.main = function() {
@@ -554,7 +583,7 @@
 
 xooki.input = {
     source: function() {
-        if (document.getElementById('xooki-source') != null) {
+        if (typeof document != 'undefined' && 
document.getElementById('xooki-source') != null) {
             this._source = document.getElementById('xooki-source').value;
         }
         return this._source;
@@ -582,6 +611,7 @@
             }
             filters = this.getInputFilters(format);
             for (var i in filters) {
+                               xooki.debug('processing filter '+filters[i]);
                 f = xooki.input.filters[filters[i]];
                 if (typeof f == "function") {
                        try {
@@ -718,6 +748,131 @@
        window.onkeypress = keyCtrl;
 };
 
+
+if (typeof xooki.io == "undefined") {
+    xooki.io = {};
+}
+
+if (batchMode) {
+       importPackage(java.io);
+       
+       xooki.io.loadFile = function( url ) {
+         var str = '';
+      var r = new BufferedReader(new FileReader(url));
+         line = r.readLine();
+         while (line != null) {
+               str += line + '\n';
+               line = r.readLine();
+         }
+         r.close();
+         return str;
+    };
+       
+       xooki.io.saveFile = function (fileUrl, content) {
+               p = new File(fileUrl).getParentFile();
+               if (p != null) {
+                       p.mkdirs();
+               }
+               pw = new PrintWriter(new FileWriter(fileUrl));
+               pw.write(content);
+               pw.close();
+               return true;
+       }
+
+    xooki.url.loadURL = function( url ) {
+               return xooki.io.loadFile(url);
+       };
+       
+       xooki.html.addHeader = function (head) {
+               xooki.pageContent = xooki.pageContent.replace(/<\/head>/, 
head+'\n</head>');
+       };
+       
+       xooki.html.setBody = function(body) {
+               xooki.pageContent = 
xooki.pageContent.replace(/<body>(.|[^,])*<\/body>/gm, '<body>'+body+'</body>');
+       }
+       
+       xooki.url.include = function(script_filename) {
+               xooki.html.addHeader('<script language="javascript" 
type="text/javascript" 
src="'+xooki.c.relativeRoot+'xooki/'+script_filename+'"></script>');
+       };
+       
+       xooki.input.source = function() {
+               if (typeof this._source == 'undefined') {
+                       xooki.debug('searching source');
+                       var beg = xooki.pageContent.indexOf('<textarea 
id="xooki-source">');
+                       beg += '<textarea id="xooki-source">'.length;
+                       var end = xooki.pageContent.lastIndexOf('</textarea>');
+                       this._source = xooki.pageContent.substring(beg, end);
+                       xooki.debug('source found');
+               }
+               return this._source;
+       }
+       
+       xooki.render.page = function() {
+           // realize all components available
+               xooki.debug('realizing components');
+           for (var k in xooki.component) {
+               xooki.c[k] = xooki.component[k]();
+           }
+           
+               xooki.debug('processing body');
+               xooki.c.body = xooki.input.processed();
+
+               xooki.debug('updating body');
+               var body = xooki.string.processTemplate(xooki.template.body, 
xooki.c);
+               if (xooki.c.useddtree) {
+                       body += '<script language="javascript" 
type="text/javascript">ddtreemenu.createTree("'+css("treemenu")+'", 
false);</script>';
+               }
+           xooki.html.setBody(body);
+       };
+
+       xooki.display = function(message, background) {
+               print(message);
+       };
+       
+       xooki.debug = function (message) {
+               if (xooki.c.debug) {
+                       print(message+'\n');
+               }
+       };
+       var i=0;
+       if (arguments.length > i && arguments[0] == '-noddtree') {
+               xooki.c.useddtree = false;
+               i++;
+       }
+       
+       if (arguments.length > i && arguments[0] == '-debug') {
+               xooki.c.debug = true;
+               i++;
+       } else {
+               xooki.c.debug = false;
+       }
+       
+       var file = 'index.html';
+       if (arguments.length > i) {
+               file = arguments[i];
+               i++;
+       }
+       var generateToDir = "gen";
+       if (arguments.length > i) {
+               generateToDir = arguments[i];
+               i++;
+       }
+       
+       print('processing '+file+'...\n');
+       xooki.pageContent = xooki.io.loadFile(file);
+       
+       var m = /var xookiConfig = {.*};/.exec(xooki.pageContent);
+       if (typeof m != 'undefined' && m != null) {
+               eval(m[0]);
+       }
+}
+
+if (batchMode) {
+       xooki.pageURL = new File(file).toURL().toExternalForm();
+} else {
+       xooki.pageURL = window.location.toString();
+}
+
 // init xooki engine
 (function() {
     
////////////////////////////////////////////////////////////////////////////
@@ -734,19 +889,26 @@
             }
         }
     };
-    xooki.config = {};
-    xooki.c = xooki.config;
     if (typeof xookiConfig != "undefined") {xooki.util.mix(xookiConfig, 
xooki.config);}
     xooki.c.initProperty = initConfigProperty;
     xooki.c.initProperty("level", 0);
     xooki.c.initProperty("root", function() {
-       root = window.location.toString();
+       root = xooki.pageURL;
        // remove trailing parts of the URL to go the root depending on level
        for (var i=0; i < xooki.c.level + 1; i++) {
                root = root.substring(0, root.lastIndexOf('/'));
        }
        return root + '/';
     });
+    xooki.c.initProperty("relativeRoot", function() {
+       relativeRoot = '';
+       for (var i=0; i < xooki.c.level; i++) {
+               relativeRoot += '../';
+       }
+       return relativeRoot;
+    });
+
+    xooki.c.initProperty("useddtree", true);
 
     var globalConfig = xooki.json.loadURL(u("config.json"));
     if (globalConfig != null) {
@@ -755,7 +917,7 @@
 
     xooki.c.initProperty("defaultInputFormat", "xooki");
     xooki.c.initProperty("xookiInputFormat", ["xooki"]);
-    xooki.c.initProperty("allowEdit", document.location.toString().substr(0,5) 
== "file:");
+    xooki.c.initProperty("allowEdit", !batchMode && xooki.pageURL.substr(0,5) 
== "file:");
     
     xooki.input.format.define("xooki", ["code", "shortcuts", "url", 
"xookiLinks", "jira", "lineBreak"]);
     
@@ -772,13 +934,15 @@
     xooki.c.css = (typeof xooki.c.css != "undefined")?xooki.c.css:{};    
         
     xooki.c.messages = xooki.json.loadURL(cu("messages")); 
-    xooki.c.browser = {
-        NS: (window.Event) ? 1 : 0
-    };
-    
-    // action
-    // TODO: better handle action extraction
-    xooki.c.action = window.location.search == 
'?action=print'?'print':xooki.c.action;
+       if (!batchMode) {
+           xooki.c.browser = {
+               NS: (window.Event) ? 1 : 0
+           };
+    
+           // action
+           // TODO: better handle action extraction
+               xooki.c.action = window.location.search == 
'?action=print'?'print':xooki.c.action;
+       }
     
     
////////////////////////////////////////////////////////////////////////////
     ////////////////// TOC init
@@ -833,7 +997,7 @@
                }
     };
        
-       var match = new 
RegExp("^.*\\/((?:.*\\/){"+xooki.config.level+"}[^\\/]*)(?:\\.\\w+)(?:\\?.+)?$",
 "g").exec(window.location.toString());
+       var match = new 
RegExp("^.*\\/((?:.*\\/){"+xooki.config.level+"}[^\\/]*)(?:\\.\\w+)(?:\\?.+)?$",
 "g").exec(xooki.pageURL);
        var curPageId;
        if (match == null || match[1] == '') {
                curPageId = "index";
@@ -858,26 +1022,30 @@
     xooki.template.source = xooki.url.loadURL(xooki.c.action == 
"print"?cu("printTemplate"):cu("template"));
        if(xooki.template.source != null) {
                xooki.template.head = 
xooki.template.source.match(/<head>([^§]*)<\/head>/im)[1];
+               var root = batchMode?xooki.c.relativeRoot:xooki.c.root;
                
         var head = xooki.string.processTemplate(xooki.template.head, 
xooki.config);
-               head = head.replace(/href="([^\\$:"]+)"/g, 
'href="'+xooki.c.root+'$1"');
-               document.write(head);
+               head = head.replace(/href="([^\\$:"]+)"/g, 'href="'+root+'$1"');
+               xooki.html.addHeader(head);
 
                var body = 
xooki.template.source.match(/<body>([^§]*)<\/body>/im)[1];
-               body = body.replace(/href="([^\\$:"]+)"/g, 
'href="'+xooki.c.root+'$1"');
-               xooki.template.body = body.replace(/src="([^\\$:"]+)"/g, 
'src="'+xooki.c.root+'$1"');           
+               body = body.replace(/href="([^\\$:"]+)"/g, 'href="'+root+'$1"');
+               xooki.template.body = body.replace(/src="([^\\$:"]+)"/g, 
'src="'+root+'$1"');           
        }
        
 
     
////////////////////////////////////////////////////////////////////////////
     ////////////////// includes
     
////////////////////////////////////////////////////////////////////////////
-    xooki.url.include(xooki.u("tree/simpletreemenu.js"));
+       if (batchMode) {
+               xooki.html.addHeader('<script language="javascript" 
type="text/javascript">xooki = {u: function(url) {return 
"'+xooki.c.relativeRoot+'xooki/"+url;}};</script>');
+       }
+    xooki.url.include("tree/simpletreemenu.js");
     if (xooki.c.useTrimPath) {
-        xooki.url.include(xooki.u("trimpath/template.js"));
+        xooki.url.include("trimpath/template.js");
     }
     if (xooki.c.allowEdit) {
-        xooki.url.include(xooki.u("xookiEdit.js"));
+        xooki.url.include("xookiEdit.js");
     }
 
     for (var k in xooki.c) {
@@ -920,3 +1088,13 @@
                return false;
        }
 }
+
+if (batchMode) {       
+       xooki.pageContent = xooki.pageContent.replace(/<script 
type="text\/javascript" src="[^"]*xooki.js"><\/script>/g, '');
+       
+       xooki.render.page();
+
+       print('generating to '+generateToDir+'/'+file);
+       xooki.io.saveFile(generateToDir+'/'+file, xooki.pageContent);
+}
+


Reply via email to