You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by an...@apache.org on 2008/12/01 15:14:18 UTC
svn commit: r722077 - in
/tapestry/tapestry5/trunk/tapestry-component-report/src:
main/java/org/apache/tapestry/mojo/ test/conf/ test/java/ test/java/org/
test/java/org/apache/ test/java/org/apache/tapestry/
test/java/org/apache/tapestry/mojo/
Author: andyhot
Date: Mon Dec 1 06:14:16 2008
New Revision: 722077
URL: http://svn.apache.org/viewvc?rev=722077&view=rev
Log:
TAP5-390: Output links to javadoc in generated description text.
Added:
tapestry/tapestry5/trunk/tapestry-component-report/src/test/conf/testng.xml
tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/
tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/
tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/
tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/
tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/
tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/ComponentReportTest.java
tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/DoxiaXhtmlSinkDecorator.java
Modified:
tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ComponentReport.java
Modified: tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ComponentReport.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ComponentReport.java?rev=722077&r1=722076&r2=722077&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ComponentReport.java (original)
+++ tapestry/tapestry5/trunk/tapestry-component-report/src/main/java/org/apache/tapestry/mojo/ComponentReport.java Mon Dec 1 06:14:16 2008
@@ -37,6 +37,8 @@
import java.io.*;
import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* The component report generates documentation about components and parameters within the current project.
@@ -56,6 +58,7 @@
private final static String[] PARAMETER_HEADERS = {"Name", "Type", "Flags", "Default", "Default Prefix",
"Description"};
+ private static final Pattern TAPESTRY5_PATTERN = Pattern.compile("(org\\.apache\\.tapestry5[#_\\w\\.]*)");
/**
* Identifies the application root package.
@@ -118,6 +121,18 @@
*/
private String apidocs;
+ /**
+ * Where to find tapestry javadocs. This is used for generating documentation links
+ * for each parameter type.
+ *
+ * By default, this is set to "http://tapestry.apache.org/tapestry5/apidocs". A relative
+ * path can also be supplied (a sensible value would be 'apidocs') and is resolved
+ * from the documentation root.
+ *
+ * @parameter default-value="http://tapestry.apache.org/tapestry5/apidocs"
+ */
+ private String tapestryJavadoc;
+
@Override
protected String getOutputDirectory()
{
@@ -222,7 +237,7 @@
sink.listItem();
- sink.link(toPath(className) + ".html");
+ sink.link(toHtml(toPath(className)));
sink.text(className);
sink.link_();
@@ -250,6 +265,24 @@
return className.replace('.', '/');
}
+ private String toHtml(String filename)
+ {
+ int pos = filename.lastIndexOf("#");
+ if (pos<0)
+ return filename + ".html";
+ else
+ {
+ return filename.substring(0, pos) + ".html" + filename.substring(pos);
+ }
+ }
+
+ private String extractSimpleName(String className)
+ {
+ int dotx = className.lastIndexOf(".");
+
+ return className.substring(dotx+1);
+ }
+
private String extractSubpackage(String className)
{
int dotx = className.indexOf(".", rootPackage.length() + 1);
@@ -261,7 +294,7 @@
return className.substring(rootPackage.length() + 1, dotx);
}
- private List<File> createDocSearchPath()
+ protected List<File> createDocSearchPath()
{
List<File> result = CollectionFactory.newList();
@@ -326,8 +359,6 @@
Element section = addSection(body, className);
- addChild(section, "p", cd.getDescription());
-
StringBuilder javadocURL = new StringBuilder(200);
@@ -341,7 +372,16 @@
String pathToRefRoot = javadocURL.toString();
- javadocURL.append("../").append(apidocs).append("/").append(toPath(className)).append(".html");
+ javadocURL.append("../");
+
+ if (!tapestryJavadoc.contains("://"))
+ {
+ tapestryJavadoc = javadocURL.toString() + tapestryJavadoc;
+ }
+
+ javadocURL.append(apidocs).append("/").append(toHtml(toPath(className)));
+
+ addChildWithJavadocs(section, "p", cd.getDescription());
addLink(addChild(section, "p"), javadocURL.toString(), "[JavaDoc]");
@@ -357,7 +397,7 @@
Element li = addChild(ul, "li");
- addLink(li, name + ".html", name);
+ addLink(li, toHtml(name), name);
container = li;
}
@@ -398,11 +438,11 @@
table.appendChild(row);
addChild(row, "td", pd.getName());
- addChild(row, "td", pd.getType());
+ addChildWithJavadocs(row, "td", pd.getType());
addChild(row, "td", InternalUtils.join(flags));
addChild(row, "td", pd.getDefaultValue());
addChild(row, "td", pd.getDefaultPrefix());
- addChild(row, "td", pd.getDescription());
+ addChildWithJavadocs(row, "td", pd.getDescription());
}
}
@@ -513,7 +553,7 @@
}
- private Map<String, ClassDescription> runJavadoc() throws MavenReportException
+ protected Map<String, ClassDescription> runJavadoc() throws MavenReportException
{
getLog().info("Running JavaDoc to collect component parameter data ...");
@@ -845,4 +885,73 @@
return child;
}
+
+ private Element addChildWithJavadocs(Element container, String elementName, String text)
+ {
+ final String[] parts = splitWithGroup(TAPESTRY5_PATTERN, text);
+ if (parts.length<=1)
+ {
+ return addChild(container, elementName, text);
+ }
+
+ final Element element = addChild(container, elementName);
+
+ for (int i = 0; i < parts.length; i++)
+ {
+ String part = parts[i];
+ element.appendChild(part);
+ i++;
+ if (i<parts.length)
+ {
+ part = parts[i];
+ if (part.endsWith("."))
+ {
+ part = part.substring(0, part.length()-1);
+ addLink(element, tapestryJavadoc + "/" + toHtml(toPath(part)), extractSimpleName(part));
+ element.appendChild(".");
+ }
+ else
+ {
+ addLink(element, tapestryJavadoc + "/" + toHtml(toPath(part)), extractSimpleName(part));
+ }
+ }
+ }
+ return element;
+ }
+
+ /**
+ * Splits a {@link CharSequence} using the given pattern while including
+ * after each part the matched group.<p/>
+ * Mostly copied from {@link Pattern#split(CharSequence)}.
+ */
+ private String[] splitWithGroup(Pattern pattern, CharSequence input)
+ {
+ int index = 0;
+ List<String> matchList = newList();
+ Matcher m = pattern.matcher(input);
+
+ // Add segments before each match found
+ while(m.find())
+ {
+ String match = input.subSequence(index, m.start()).toString();
+ String group = input.subSequence(m.start(), m.end()).toString();
+ matchList.add(match);
+ matchList.add(group);
+ index = m.end();
+ }
+
+ // If no match was found, return this
+ if (index == 0)
+ return new String[] {input.toString()};
+
+ // Add remaining segment
+ matchList.add(input.subSequence(index, input.length()).toString());
+
+ // Construct result
+ int resultSize = matchList.size();
+ while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
+ resultSize--;
+ String[] result = new String[resultSize];
+ return matchList.subList(0, resultSize).toArray(result);
+ }
}
Added: tapestry/tapestry5/trunk/tapestry-component-report/src/test/conf/testng.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-component-report/src/test/conf/testng.xml?rev=722077&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-component-report/src/test/conf/testng.xml (added)
+++ tapestry/tapestry5/trunk/tapestry-component-report/src/test/conf/testng.xml Mon Dec 1 06:14:16 2008
@@ -0,0 +1,24 @@
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
+<!--
+ Copyright 2008 The Apache Software Foundation
+
+ Licensed 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.
+-->
+
+<suite name="Tapestry Component Report" annotations="1.5" verbose="10">
+ <test name="Internals">
+ <packages>
+ <package name="org.apache.tapestry.mojo"/>
+ </packages>
+ </test>
+</suite>
Added: tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/ComponentReportTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/ComponentReportTest.java?rev=722077&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/ComponentReportTest.java (added)
+++ tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/ComponentReportTest.java Mon Dec 1 06:14:16 2008
@@ -0,0 +1,171 @@
+// Copyright 2008 The Apache Software Foundation
+//
+// Licensed 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.
+
+package org.apache.tapestry.mojo;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.model.Model;
+import org.apache.maven.reporting.MavenReportException;
+import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext;
+import org.apache.maven.doxia.module.xhtml.XhtmlSink;
+import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newMap;
+import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newList;
+import org.testng.annotations.Test;
+import org.testng.annotations.DataProvider;
+import org.testng.Assert;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.lang.reflect.Field;
+
+/**
+ * Tests {@link ComponentReport}.
+ */
+public class ComponentReportTest extends Assert
+{
+ @Test(dataProvider = "docData")
+ public void doc_generation(final Map<String, ClassDescription> javadocResults, String createdFile,
+ String[] expectedSummaryParts, String[] expectedFileParts)
+ throws MojoExecutionException, IOException, MavenReportException
+ {
+ String tempDir = System.getProperty("java.io.tmpdir");
+ final File tempFolder = new File(tempDir, "t5_tests");
+ tempFolder.mkdir();
+
+ ComponentReport report = new ComponentReport()
+ {
+ @Override
+ protected String getOutputDirectory()
+ {
+ return tempFolder.toString();
+ }
+
+ @Override
+ protected MavenProject getProject()
+ {
+ return new MavenProject(new Model());
+ }
+
+ @Override
+ protected Map<String, ClassDescription> runJavadoc() throws MavenReportException
+ {
+ return javadocResults;
+ }
+
+ @Override
+ protected List<File> createDocSearchPath()
+ {
+ return newList();
+ }
+ };
+ try
+ {
+ initializeMojo(report, ComponentReport.class,
+ "rootPackage", "org.apache.tapestry5.corelib",
+ "apidocs", "apidocs",
+ "tapestryJavadoc", "http://tapestry.apache.org/tapestry5/apidocs",
+ "generatedDocsDirectory", tempFolder
+ );
+ }
+ catch (NoSuchFieldException e)
+ {
+ fail("Cannot initialize mojo");
+ }
+ catch (IllegalAccessException e)
+ {
+ fail("Cannot initialize mojo");
+ }
+
+ StringWriter writer = new StringWriter();
+
+ RenderingContext context = new RenderingContext(tempFolder, "test.html");
+ XhtmlSink sink = new XhtmlSink(writer, context, newMap());
+
+ report.generate(new DoxiaXhtmlSinkDecorator(sink), Locale.US);
+
+ String summaryOutput = writer.toString();
+ for (String summaryPart : expectedSummaryParts)
+ {
+ assertTrue(summaryOutput.contains(summaryPart));
+ }
+
+ File formReport = new File(tempFolder, createdFile);
+ String formOutput = FileUtils.fileRead(formReport);
+
+ for (String filePart : expectedFileParts)
+ {
+ assertTrue(formOutput.contains(filePart));
+ }
+
+ FileUtils.forceDeleteOnExit(tempFolder);
+ }
+
+ private void initializeMojo(Object mojo, Class clazz, Object... propertyValues)
+ throws NoSuchFieldException, IllegalAccessException
+ {
+ for (int i = 0; i < propertyValues.length; i++)
+ {
+ String property = (String) propertyValues[i++];
+ Object value = propertyValues[i];
+
+ Field field = clazz.getDeclaredField(property);
+ field.setAccessible(true);
+
+ field.set(mojo, value);
+ }
+ }
+
+ @DataProvider(name = "docData")
+ private Object[][] testData() {
+ return new Object[][] {
+ {
+ javadocDescriptionForForm(),
+ "ref/org/apache/tapestry5/corelib/components/Form.xml",
+ new String[]{"org.apache.tapestry5.corelib.components.Form"},
+ new String[]{"<title>Component Reference: org.apache.tapestry5.corelib.components.Form</title>",
+ "<a href=\"http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/EventConstants.html#PREPARE\">"}
+ },
+ };
+ }
+
+ private Map<String, ClassDescription> javadocDescriptionForForm()
+ {
+ Map<String, ClassDescription> results = newMap();
+ ClassDescription classDesc = new ClassDescription(
+ "org.apache.tapestry5.corelib.components.Form",
+ "java.lang.Object",
+ "When it renders, it fires a org.apache.tapestry5.EventConstants#PREPARE_FOR_RENDER\n" +
+ " notification, followed by a org.apache.tapestry5.EventConstants#PREPARE",
+ false
+ );
+
+ ParameterDescription paramDesc = new ParameterDescription(
+ "validationId", "String", "", "prop", false, false, true,
+ "Prefix value used when searching for validation messages and constraints. " +
+ "The default is the Form component's\n" +
+ " id. This is overriden by org.apache.tapestry5.corelib.components.BeanEditForm."
+ );
+ classDesc.getParameters().put(paramDesc.getName(), paramDesc);
+
+ results.put(classDesc.getClassName(), classDesc);
+
+ return results;
+ }
+}
Added: tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/DoxiaXhtmlSinkDecorator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/DoxiaXhtmlSinkDecorator.java?rev=722077&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/DoxiaXhtmlSinkDecorator.java (added)
+++ tapestry/tapestry5/trunk/tapestry-component-report/src/test/java/org/apache/tapestry/mojo/DoxiaXhtmlSinkDecorator.java Mon Dec 1 06:14:16 2008
@@ -0,0 +1,408 @@
+// Copyright 2008 The Apache Software Foundation
+//
+// Licensed 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.
+
+package org.apache.tapestry.mojo;
+
+import org.codehaus.doxia.sink.Sink;
+import org.apache.maven.doxia.module.xhtml.XhtmlSink;
+
+/**
+ * Decorates an {@link XhtmlSink} so that it can be used in place of a
+ * {@link Sink}.<p/>
+ * Since {@link Sink} is currently deprecated, this decoratar may not be
+ * needed in the future - this will happen when the signature of
+ * org.apache.maven.reporting.MavenReport#generate(org.codehaus.doxia.sink.Sink, java.util.Locale)
+ * (from the org.apache.maven.reporting:maven-reporting-impl artifact) changes to
+ * org.apache.maven.reporting.MavenReport#generate(org.apache.maven.doxia.Sink, java.util.Locale)
+ */
+public class DoxiaXhtmlSinkDecorator implements Sink {
+ private XhtmlSink _xhtmlSink;
+
+ public DoxiaXhtmlSinkDecorator(XhtmlSink xhtmlSink) {
+ _xhtmlSink = xhtmlSink;
+ }
+
+ public void head() {
+ _xhtmlSink.head();
+ }
+
+ public void head_() {
+ _xhtmlSink.head_();
+ }
+
+ public void title() {
+ _xhtmlSink.title();
+ }
+
+ public void title_() {
+ _xhtmlSink.title_();
+ }
+
+ public void author_() {
+ _xhtmlSink.author_();
+ }
+
+ public void date_() {
+ _xhtmlSink.date_();
+ }
+
+ public void body() {
+ _xhtmlSink.body();
+ }
+
+ public void body_() {
+ _xhtmlSink.body_();
+ }
+
+ public void section1() {
+ _xhtmlSink.section1();
+ }
+
+ public void section2() {
+ _xhtmlSink.section2();
+ }
+
+ public void section3() {
+ _xhtmlSink.section3();
+ }
+
+ public void section4() {
+ _xhtmlSink.section4();
+ }
+
+ public void section5() {
+ _xhtmlSink.section5();
+ }
+
+ public void section1_() {
+ _xhtmlSink.section1_();
+ }
+
+ public void section2_() {
+ _xhtmlSink.section2_();
+ }
+
+ public void section3_() {
+ _xhtmlSink.section3_();
+ }
+
+ public void section4_() {
+ _xhtmlSink.section4_();
+ }
+
+ public void section5_() {
+ _xhtmlSink.section5_();
+ }
+
+ public void sectionTitle1() {
+ _xhtmlSink.sectionTitle1();
+ }
+
+ public void sectionTitle1_() {
+ _xhtmlSink.sectionTitle1_();
+ }
+
+ public void sectionTitle2() {
+ _xhtmlSink.sectionTitle2();
+ }
+
+ public void sectionTitle2_() {
+ _xhtmlSink.sectionTitle2_();
+ }
+
+ public void sectionTitle3() {
+ _xhtmlSink.sectionTitle3();
+ }
+
+ public void sectionTitle3_() {
+ _xhtmlSink.sectionTitle3_();
+ }
+
+ public void sectionTitle4() {
+ _xhtmlSink.sectionTitle4();
+ }
+
+ public void sectionTitle4_() {
+ _xhtmlSink.sectionTitle4_();
+ }
+
+ public void sectionTitle5() {
+ _xhtmlSink.sectionTitle5();
+ }
+
+ public void sectionTitle5_() {
+ _xhtmlSink.sectionTitle5_();
+ }
+
+ public void list() {
+ _xhtmlSink.list();
+ }
+
+ public void list_() {
+ _xhtmlSink.list_();
+ }
+
+ public void listItem() {
+ _xhtmlSink.listItem();
+ }
+
+ public void listItem_() {
+ _xhtmlSink.listItem_();
+ }
+
+ public void numberedList(int i) {
+ _xhtmlSink.numberedList(i);
+ }
+
+ public void numberedList_() {
+ _xhtmlSink.numberedList_();
+ }
+
+ public void numberedListItem() {
+ _xhtmlSink.numberedListItem();
+ }
+
+ public void numberedListItem_() {
+ _xhtmlSink.numberedListItem_();
+ }
+
+ public void definitionList() {
+ _xhtmlSink.definitionList();
+ }
+
+ public void definitionList_() {
+ _xhtmlSink.definitionList_();
+ }
+
+ public void definedTerm() {
+ _xhtmlSink.definedTerm();
+ }
+
+ public void definedTerm_() {
+ _xhtmlSink.definedTerm_();
+ }
+
+ public void definition() {
+ _xhtmlSink.definition();
+ }
+
+ public void definition_() {
+ _xhtmlSink.definition_();
+ }
+
+ public void paragraph() {
+ _xhtmlSink.paragraph();
+ }
+
+ public void paragraph_() {
+ _xhtmlSink.paragraph_();
+ }
+
+ public void verbatim(boolean b) {
+ _xhtmlSink.verbatim(b);
+ }
+
+ public void verbatim_() {
+ _xhtmlSink.verbatim_();
+ }
+
+ public void horizontalRule() {
+ _xhtmlSink.horizontalRule();
+ }
+
+ public void table() {
+ _xhtmlSink.table();
+ }
+
+ public void table_() {
+ _xhtmlSink.table_();
+ }
+
+ public void tableRows(int[] ints, boolean b) {
+ _xhtmlSink.tableRows(ints, b);
+ }
+
+ public void tableRows_() {
+ _xhtmlSink.tableRows_();
+ }
+
+ public void tableRow() {
+ _xhtmlSink.tableRow();
+ }
+
+ public void tableRow_() {
+ _xhtmlSink.tableRow_();
+ }
+
+ public void tableCell() {
+ _xhtmlSink.tableCell();
+ }
+
+ public void tableHeaderCell() {
+ _xhtmlSink.tableHeaderCell();
+ }
+
+ public void tableCell(boolean b) {
+ _xhtmlSink.tableCell(b);
+ }
+
+ public void tableCell(String s) {
+ _xhtmlSink.tableCell(s);
+ }
+
+ public void tableHeaderCell(String s) {
+ _xhtmlSink.tableHeaderCell(s);
+ }
+
+ public void tableCell(boolean b, String s) {
+ _xhtmlSink.tableCell(b, s);
+ }
+
+ public void tableCell_() {
+ _xhtmlSink.tableCell_();
+ }
+
+ public void tableHeaderCell_() {
+ _xhtmlSink.tableHeaderCell_();
+ }
+
+ public void tableCell_(boolean b) {
+ _xhtmlSink.tableCell_(b);
+ }
+
+ public void tableCaption() {
+ _xhtmlSink.tableCaption();
+ }
+
+ public void tableCaption_() {
+ _xhtmlSink.tableCaption_();
+ }
+
+ public void figure() {
+ _xhtmlSink.figure();
+ }
+
+ public void figure_() {
+ _xhtmlSink.figure_();
+ }
+
+ public void figureCaption() {
+ _xhtmlSink.figureCaption();
+ }
+
+ public void figureCaption_() {
+ _xhtmlSink.figureCaption_();
+ }
+
+ public void figureGraphics(String s) {
+ _xhtmlSink.figureGraphics(s);
+ }
+
+ public void anchor(String s) {
+ _xhtmlSink.anchor(s);
+ }
+
+ public void anchor_() {
+ _xhtmlSink.anchor_();
+ }
+
+ public void link(String s) {
+ _xhtmlSink.link(s);
+ }
+
+ public void link(String s, String s1) {
+ _xhtmlSink.link(s, s1);
+ }
+
+ public void link_() {
+ _xhtmlSink.rawText("</a>");
+ //_xhtmlSink.link_();
+ }
+
+ public void italic() {
+ _xhtmlSink.italic();
+ }
+
+ public void italic_() {
+ _xhtmlSink.italic_();
+ }
+
+ public void bold() {
+ _xhtmlSink.bold();
+ }
+
+ public void bold_() {
+ _xhtmlSink.bold_();
+ }
+
+ public void monospaced() {
+ _xhtmlSink.monospaced();
+ }
+
+ public void monospaced_() {
+ _xhtmlSink.monospaced_();
+ }
+
+ public void lineBreak() {
+ _xhtmlSink.lineBreak();
+ }
+
+ public void nonBreakingSpace() {
+ _xhtmlSink.nonBreakingSpace();
+ }
+
+ public void text(String s) {
+ _xhtmlSink.text(s);
+ }
+
+ public void rawText(String s) {
+ _xhtmlSink.rawText(s);
+ }
+
+ public void flush() {
+ _xhtmlSink.flush();
+ }
+
+ public void close() {
+ _xhtmlSink.close();
+ }
+
+ public void definitionListItem() {
+ _xhtmlSink.definitionListItem();
+ }
+
+ public void definitionListItem_() {
+ _xhtmlSink.definitionListItem_();
+ }
+
+ public void author() {
+ _xhtmlSink.author();
+ }
+
+ public void date() {
+ _xhtmlSink.date();
+ }
+
+ public void sectionTitle() {
+ _xhtmlSink.sectionTitle();
+ }
+
+ public void sectionTitle_() {
+ _xhtmlSink.sectionTitle_();
+ }
+
+ public void pageBreak() {
+ _xhtmlSink.pageBreak();
+ }
+}