Curtis d'Entremont, 10/30/2006
This document describes the new set of API that was added to
org.eclipse.help
in 3.3 to allow Eclipse to read help content
in any format. It allows you to plug-in Java classes that will be called on at
appropriate times to provide the following types of content:
The extender of help would typically supply an adapter plug-in that contributes one provider for each type of content (listed above), and exposes new extension points to accept any type of file.
For example, if you want to write your help content in format XYZ, you can
provide an adapter plug-in, say org.xyz.adapter
, that exposes new
extension points for XYZ content, reads the XYZ files then converts them into
content that Eclipse help understands, and provides the content to Help using
the new providers API.
Providers are contributed via extension points. However there aren't any new
extension points; a new element was added alongside the existing extension
points where an element was used to supply the XML file. For example, to plug-in
a TOC (table of contents) provider, use the new tocProvider
element of the org.eclipse.help.toc
extension point. The two
exceptions are org.eclipse.help.contentProducer
extension point
for providing html/xhtml documents, and
org.eclipse.help.base.luceneSearchParticipants
, both of which
already existed prior to 3.3 and have not changed.
Here is an example of a TOC provider extension:
<extension point="org.eclipse.help.toc"> <tocProvider class="org.myproject.MyTocProvider"> </tocProvider> </extension>
And the implementation:
/* * A simple provider that contributes a single book to the * table of contents named "Hello, World". */ public class MyTocProvider extends AbstractTocProvider { public ITocContribution[] getTocContributions(String locale) { ITocContribution contribution = new ITocContribution() { public String getId() { // a way to identify our book return "org.myplugin.contribution.helloworld"; } public String getCategoryId() { // our book does not belong to any category of books return null; } public boolean isPrimary() { // this is a primary, top-level contribution (a book) return true; } public IToc getToc() { return new IToc() { public String getLabel() { return "Hello, world"; } public String getHref() { return "/mydocs/helloworld.html"; } }; } public String getLocale() { // this provider only provides content for the en_US locale return "en_US"; } public String[] getExtraDocuments() { // there are no extra documents associated with this book return new String[0]; } public String getLinkTo() { // this book does not link into any other book return null; } }; return new ITocContribution[] { contribution }; } }
Upon opening Help, you will see a single new static book in the table of contents with the label "Hello, World".
As you may have noticed, an ITocContribution
is equivalent to
(or as powerful as) a toc file extension. That is, anything you can do with
a toc XML file contributed via extension can be done with an
ITocContribution
. This is generally the pattern with the providers
API. In fact, the XML files are not treated in any special way by the help
system; they are parsed and contributed by a provider in
org.eclipse.help
.