What does <whinemode/> mean? Jan
>-----Ursprüngliche Nachricht----- >Von: Peter Reilly [mailto:[EMAIL PROTECTED] >Gesendet: Donnerstag, 1. März 2007 10:02 >An: Ant Developers List >Betreff: Re: svn commit: r513191 - in >/ant/sandbox/antlibs/manual4eclipse: ./ docs/ src/ src/main/ >src/main/org/ src/main/org/apache/ src/main/org/apache/ant/ >src/main/org/apache/ant/manual4eclipse/ > ><whinemode> > >On 3/1/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: >> Author: jhm >> Date: Wed Feb 28 22:44:52 2007 >> New Revision: 513191 >> >> URL: http://svn.apache.org/viewvc?view=rev&rev=513191 >> Log: >> Initial commit. (Have to convert into AntLib and try >svn:external the common directory...) And docs ;-) >> >> Added: >> ant/sandbox/antlibs/manual4eclipse/ (with props) >> ant/sandbox/antlibs/manual4eclipse/NOTICE (with props) >> ant/sandbox/antlibs/manual4eclipse/build.xml (with props) >> ant/sandbox/antlibs/manual4eclipse/docs/ >> ant/sandbox/antlibs/manual4eclipse/libraries.properties > (with props) >> ant/sandbox/antlibs/manual4eclipse/src/ >> ant/sandbox/antlibs/manual4eclipse/src/main/ >> ant/sandbox/antlibs/manual4eclipse/src/main/org/ >> ant/sandbox/antlibs/manual4eclipse/src/main/org/apache/ >> ant/sandbox/antlibs/manual4eclipse/src/main/org/apache/ant/ >> >ant/sandbox/antlibs/manual4eclipse/src/main/org/apache/ant/manu >al4eclipse/ >> >ant/sandbox/antlibs/manual4eclipse/src/main/org/apache/ant/manu >al4eclipse/Manual4EclipseTask.java (with props) >> >> Propchange: ant/sandbox/antlibs/manual4eclipse/ >> >--------------------------------------------------------------- >--------------- >> --- svn:externals (added) >> +++ svn:externals Wed Feb 28 22:44:52 2007 >> @@ -0,0 +1 @@ >> +common >http://svn.apache.org/repos/asf/ant/antlibs/common/trunk >> >> Added: ant/sandbox/antlibs/manual4eclipse/NOTICE >> URL: >http://svn.apache.org/viewvc/ant/sandbox/antlibs/manual4eclipse >/NOTICE?view=auto&rev=513191 >> >=============================================================== >=============== >> --- ant/sandbox/antlibs/manual4eclipse/NOTICE (added) >> +++ ant/sandbox/antlibs/manual4eclipse/NOTICE Wed Feb 28 >22:44:52 2007 >> @@ -0,0 +1,11 @@ >> + >=============================================================== >========== >> + == NOTICE file corresponding to the section 4 d of > == >> + == the Apache License, Version 2.0 > == >> + >=============================================================== >========== >> + >> + Apache HTTP Ant Library >> + Copyright 2001-2006 The Apache Software Foundation >> + >> + This product includes software developed by >> + The Apache Software Foundation (http://www.apache.org/). >> + >> >> Propchange: ant/sandbox/antlibs/manual4eclipse/NOTICE >> >--------------------------------------------------------------- >--------------- >> svn:eol-style = native >> >> Added: ant/sandbox/antlibs/manual4eclipse/build.xml >> URL: >http://svn.apache.org/viewvc/ant/sandbox/antlibs/manual4eclipse >/build.xml?view=auto&rev=513191 >> >=============================================================== >=============== >> --- ant/sandbox/antlibs/manual4eclipse/build.xml (added) >> +++ ant/sandbox/antlibs/manual4eclipse/build.xml Wed Feb 28 >22:44:52 2007 >> @@ -0,0 +1,22 @@ >> +<?xml version="1.0"?> >> +<!-- >> +Licensed to the Apache Software Foundation (ASF) under one >> +or more contributor license agreements. See the NOTICE file >> +distributed with this work for additional information >> +regarding copyright ownership. The ASF licenses this file >> +to you under the Apache License, Version 2.0 (the >> +"License"); you may not use this file except in compliance >> +with the License. You may obtain a copy of the License at >> + >> +http://www.apache.org/licenses/LICENSE-2.0 >> + >> +Unless required by applicable law or agreed to in writing, >> +software distributed under the License is distributed on an >> +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY >> +KIND, either express or implied. See the License for the >> +specific language governing permissions and limitations >> +under the License. >> +--> >> +<project default="dist" name="http"> >> + <import file="common/build.xml"/> >> +</project> >> \ No newline at end of file >> >> Propchange: ant/sandbox/antlibs/manual4eclipse/build.xml >> >--------------------------------------------------------------- >--------------- >> svn:eol-style = native >> >> Added: ant/sandbox/antlibs/manual4eclipse/libraries.properties >> URL: >http://svn.apache.org/viewvc/ant/sandbox/antlibs/manual4eclipse >/libraries.properties?view=auto&rev=513191 >> >=============================================================== >=============== >> --- ant/sandbox/antlibs/manual4eclipse/libraries.properties (added) >> +++ ant/sandbox/antlibs/manual4eclipse/libraries.properties >Wed Feb 28 22:44:52 2007 >> @@ -0,0 +1 @@ >> +artifact.version=1.0-alpha-SNAPSHOT >> \ No newline at end of file >> >> Propchange: ant/sandbox/antlibs/manual4eclipse/libraries.properties >> >--------------------------------------------------------------- >--------------- >> svn:eol-style = native >> >> Added: >ant/sandbox/antlibs/manual4eclipse/src/main/org/apache/ant/manu >al4eclipse/Manual4EclipseTask.java >> URL: >http://svn.apache.org/viewvc/ant/sandbox/antlibs/manual4eclipse >/src/main/org/apache/ant/manual4eclipse/Manual4EclipseTask.java >?view=auto&rev=513191 >> >=============================================================== >=============== >> --- >ant/sandbox/antlibs/manual4eclipse/src/main/org/apache/ant/manu >al4eclipse/Manual4EclipseTask.java (added) >> +++ >ant/sandbox/antlibs/manual4eclipse/src/main/org/apache/ant/manu >al4eclipse/Manual4EclipseTask.java Wed Feb 28 22:44:52 2007 >> @@ -0,0 +1,306 @@ >> +package org.apache.ant.manual4eclipse; >> + >> +/* >> + * Licensed to the Apache Software Foundation (ASF) under >one or more >> + * contributor license agreements. See the NOTICE file >distributed with >> + * this work for additional information regarding >copyright ownership. >> + * The ASF licenses this file to You under the Apache >License, Version 2.0 >> + * (the "License"); you may not use this file except in >compliance with >> + * the License. You may obtain a copy of the License at >> + * >> + * http://www.apache.org/licenses/LICENSE-2.0 >> + * >> + * Unless required by applicable law or agreed to in >writing, software >> + * distributed under the License is distributed on an "AS >IS" BASIS, >> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either >express or implied. >> + * See the License for the specific language governing >permissions and >> + * limitations under the License. >> + * >> + */ >> + >> +import java.io.File; >> +import java.io.FileWriter; >> +import java.io.IOException; >> +import java.util.ArrayList; >> +import java.util.List; >> + >> +import org.apache.tools.ant.BuildException; >> +import org.apache.tools.ant.Project; >> +import org.apache.tools.ant.Task; >> +import org.apache.tools.ant.util.JAXPUtils; >> +import org.w3c.dom.Document; >> +import org.w3c.dom.Element; >> +import org.w3c.dom.Node; >> +import org.w3c.dom.NodeList; >> +import org.xml.sax.SAXException; >> + >> + >> +/** >> + * This task creates the files needed for generating an >Eclipse Help PlugIn >> + * from Ant's manual. Mainly the toc.xml and the plugin.xml. >> + */ >> +public class Manual4EclipseTask extends Task { >> + >> + >> + /** Line Separator. */ >> + String BR = System.getProperty("line.separator"); >Should be private static final > >> + >> + /** Ant Property: The output directory for generated >files. */ >> + private File dir; >> + >> + /** Ant Property: The directory where the Ant manual >(sources) is. */ >> + private File manualDir; >> + >> + >All the following fields should be private: >> + /** List of files which are already processed. */ >> + List<File> processedFiles = new ArrayList<File>(); >> + >> + /** List of Link references <tt><a href="LINK"></tt> >to ignore. */ >> + List<String> ignoreLinks = new ArrayList<String>(); >> + >> + /** List of Link references <tt><a href="LINK"></tt> >to ignore. */ >> + List<String> ignoreTargets = new ArrayList<String>(); >> + >> + /** List of Link references <tt><a href="LINK"></tt> >to ignore. */ >> + List<String> ignoreText = new ArrayList<String>(); >> + >> + >Javadoc! >> + public Manual4EclipseTask() { >> + ignoreLinks.add("api/index.html"); >> + ignoreTargets.add("_main"); >> + ignoreText.add("Ant API"); >> + ignoreText.add("Table of Contents"); >> + } >> + >> + >> + @Override >> + public void execute() throws BuildException { >> + log("Generate Eclipse plugin files"); >> + try { >> + createToc(new File(manualDir, "toc.html")); >> + createPluginXml(); >> + } catch (Exception e) { >> + throw new BuildException(e, getLocation()); >> + } >> + } >> + >> + >> + private void createPluginXml() throws IOException { >> + log("generating plugin.xml", Project.MSG_INFO); >> + StringBuffer sb = new StringBuffer(); >> + sb.append("<?xml version=\"1.0\" >encoding=\"ISO-8859-1\"?>").append(BR); >> + sb.append("<?eclipse version=\"3.2\"?>").append(BR); >> + sb.append("<plugin>").append(BR); >> + sb.append(" <extension >point=\"org.eclipse.help.toc\">").append(BR); >> + sb.append(" <toc file=\"toc.xml\" >primary=\"true\" />").append(BR); >> + sb.append(" <index >path=\"index\"/>").append(BR); >> + sb.append(" </extension>").append(BR); >> + sb.append(" <extension >point=\"org.eclipse.help.base.luceneSearchParticipants\">").append(BR); >> + sb.append(" <binding >participantId=\"org.eclipse.help.base.xhtml\"/>").append(BR); >> + sb.append(" </extension>").append(BR); >> + sb.append("</plugin>").append(BR); >> + write(sb, new File(dir, "plugin.xml")); >> + } >> + >> + >> + >> + private void createToc(File listHtml) throws >IOException, SAXException { >> + log("generating toc.xml", Project.MSG_INFO); >> + StringBuffer toc = new StringBuffer(); >> + toc.append("<?xml version=\"1.0\" >encoding=\"ISO-8859-1\"?>").append(BR); >> + toc.append("<?NLS >TYPE=\"org.eclipse.help.toc\"?>").append(BR); >> + toc.append("<toc label=\"Ant Manual\" >topic=\"cover.html\">").append(BR); >> + createTopic(toc, listHtml); >> + toc.append("</toc>").append(BR); >> + write(toc, new File(dir, "toc.xml")); >> + } >> + >> + >> + >> + private void createTopic(StringBuffer toc, File listHtml) >> + throws SAXException, IOException { >> + if (processedFiles.contains(listHtml)) { >> + return; >> + } >> + log("Processing " + listHtml, Project.MSG_VERBOSE); >> + processedFiles.add(listHtml); >> + Document document = >JAXPUtils.getDocumentBuilder().parse(listHtml); >> + NodeList tagsA = document.getElementsByTagName("a"); >> + for (int i = 0; i < tagsA.getLength(); i++) { >> + Topic topic = new Topic(tagsA.item(i)); >> + if (topic.isIgnorable()) continue; >> + >> + if (topic.hasNestedTopics()) { >> + // start recursion >> + >toc.append("<").append(topic).append(">").append(BR); >> + if >("anttaskslist.html".equals(topic.href)) { >> + >createTopic4TaskOverview(toc); >> + } else { >> + createTopic(toc, new >File(manualDir, topic.href)); >> + } >> + toc.append("</topic>").append(BR); >> + } else { >> + >toc.append("<").append(topic).append("/>").append(BR); >> + } >> + } >> + } >> + >> + >> + >> + /** >> + * Generate topics for the core and optional tasks. >> + * Because the task lists (overview, core, optional) >have a TOC-header, >> + * the generic recursion-algorithm does not work. So >we have to deal >> + * with that. >> + * @param toc StringBuffer with the toc.xml in progress >> + * @param label Label for the root node >> + * @throws IOException >> + * @throws SAXException >> + * @throws BuildException >> + */ >> + private void createTopic4TaskOverview(StringBuffer >toc) throws BuildException, SAXException, IOException { >> + File taskListFile = new File(manualDir, >"anttaskslist.html"); >> + File coreTaskFile = new File(manualDir, >"coretasklist.html"); >> + File optionalTask = new File(manualDir, >"optionaltasklist.html"); >> + processedFiles.add(taskListFile); >> + processedFiles.add(coreTaskFile); >> + processedFiles.add(optionalTask); >> + >> + log("Using hard coded TOC-structure instead >of " + taskListFile, Project.MSG_VERBOSE); >> + >> + toc.append("<topic label=\"Overview of Ant >Tasks\" href=\"tasksoverview.html\"/>").append(BR); >> + toc.append("<topic label=\"Core >Tasks\">").append(BR); >> + // Core Tasks >> + createTopics4TaskList(toc, coreTaskFile); >> + toc.append("</topic>").append(BR); >> + toc.append("<topic label=\"Optional >Tasks\">").append(BR); >> + // Optional Tasks >> + toc.append("<topic label=\"Library >Dependencies\" >href=\"install.html#librarydependencies\"/>").append(BR); >> + createTopics4TaskList(toc, optionalTask); >> + toc.append("</topic>").append(BR); >> + } >> + >> + >> + >> + /** >> + * Creates a <topic> element (with nested) for Task list. >> + * The task lists are placed after a <h3> header >and there are >> + * <a> tags before that. So we have to do more >work and search >> + * for the right are. >> + * @param toc StringBuffer with the toc.xml in progress >> + * @param file The file with the task list >> + * @throws BuildException >> + * @throws SAXException >> + * @throws IOException >> + */ >> + private void createTopics4TaskList(StringBuffer toc, >File file) throws BuildException, SAXException, IOException { >> + log("Processing " + file, Project.MSG_VERBOSE); >> + Document doc = >JAXPUtils.getDocumentBuilder().parse(file); >> + // Access to the HTML root element >> + Element html = doc.getDocumentElement(); >> + // search for the <body> element >> + Element body = null; >> + NodeList childNodes = html.getChildNodes(); >> + for (int i=0; i<childNodes.getLength(); i++) { >> + Node n = childNodes.item(i); >> + if >(n.getNodeName().equalsIgnoreCase("body")) { >> + body = (Element)n; >> + } >> + } >> + // search in the body for the task listing >> + childNodes = body.getChildNodes(); >> + boolean needSection = false; >> + for (int i=0; i<childNodes.getLength(); i++) { >> + Node n = childNodes.item(i); >> + // After the H3-section we'll get >the task listing >> + if (needSection) { >> + if >(n.getNodeName().equalsIgnoreCase("a")) { >> + Topic t = new Topic(n); >> + >toc.append("<").append(t.toString()).append("/>").append(BR); >> + } >> + } >> + if (n.getNodeName().equalsIgnoreCase("h3")) { >> + needSection = true; >> + } >> + } >> + } >> + >> + >> + >> + >> + /** >> + * Writes a StringBuffer to file. >> + * @param sb The StringBuffer to write >> + * @param file The file to write into >> + * @throws IOException if writing throws an IOException >> + */ >> + private void write(StringBuffer sb, File file) >throws IOException { >> + FileWriter out = new FileWriter(file); >> + out.write(sb.toString()); >> + out.close(); >> + } >> + >> + >> + >Javadoc: >> + public void setDir(File dir) { >> + this.dir = dir; >> + } >> + >Javadoc: >> + public void setManualDir(File manualDir) { >> + this.manualDir = manualDir; >> + } >> + >> + >> + >> + >> + /** >> + * This class encapsulates the information of a ><tt><a></tt> tag from a >> + * toc-listing from the Ant manual. >> + */ >> + public class Topic { >> + /** <topic>s label attribute gets the value >from <a>s text content. */ >> + String label; >> + /** Internal value coming from <a>s >target attribute. */ >> + String target; >> + /** <topic>s href attribute gets the value >from <a>s href attribute. */ >> + String href; >> + >> + /** >> + * Constructor analyzes a DOMNode and >creates a Topic object. >> + * @param n the DOMNode >> + */ >> + public Topic(Node n) { >> + Node item = >n.getAttributes().getNamedItem("href"); >> + href = (item!=null) ? >item.getTextContent() : ""; >> + item = >n.getAttributes().getNamedItem("target"); >> + target = (item!=null) ? >item.getTextContent() : ""; >> + label = n.getTextContent().trim(); >> + } >> + /** >> + * Checks the data against the three ignore-lists. >> + * @return <i>true</i> if one (or more) of >the lists matches >> + */ >> + public boolean isIgnorable() { >> + return ignoreLinks.contains(href) >> + || ignoreTargets.contains(target) >> + || ignoreText.contains(label); >> + } >> + /** >> + * You have to create nested <topic> >elements if the link-target >> + * would open the linked page in the >navigation frame. This method >> + * does the check. >> + * @return <i>true</i> if nestd <topic> >elements could come. >> + */ >> + public boolean hasNestedTopics() { >> + return "navFrame".equals(target); >> + } >> + @Override >> + public String toString() { >> + StringBuffer rv = new StringBuffer("topic"); >> + if (label.length()>0) rv.append(" >label=\"").append(label).append("\""); >> + if (href.length()>0 && >!hasNestedTopics()) rv.append(" href=\"").append(href).append("\""); >> + return rv.toString().replaceAll("&", >"&"); >> + } >> + } >> + >> +} >> >> Propchange: >ant/sandbox/antlibs/manual4eclipse/src/main/org/apache/ant/manu >al4eclipse/Manual4EclipseTask.java >> >--------------------------------------------------------------- >--------------- >> svn:eol-style = native >> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > ></whinemode> > >Cheers, >Peter > >--------------------------------------------------------------------- >To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]