<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/manual4eclipse/
ant/sandbox/antlibs/manual4eclipse/src/main/org/apache/ant/manual4eclipse/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/manual4eclipse/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/manual4eclipse/Manual4EclipseTask.java
(added)
+++
ant/sandbox/antlibs/manual4eclipse/src/main/org/apache/ant/manual4eclipse/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/manual4eclipse/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]