| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <title>Help content providers API (3.3)</title> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
| </head> |
| <body> |
| |
| <h1> |
| Help content providers API (3.3) |
| </h1> |
| |
| <p> |
| Curtis d'Entremont, 10/30/2006 |
| </p> |
| |
| <h2> |
| Overview |
| </h2> |
| |
| <p> |
| This document describes the new set of API that was added to |
| <code>org.eclipse.help</code> 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: |
| </p> |
| |
| <ul> |
| <li>Table of contents</li> |
| <li>Keyword index</li> |
| <li>Context-sensitive help</li> |
| <li>Help topics (html/xhtml)</li> |
| <li>Topic extensions (contributions into anchors, element replacements)</li> |
| <li>Search results</li> |
| </ul> |
| |
| <p> |
| 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. |
| </p> |
| |
| <p> |
| For example, if you want to write your help content in format XYZ, you can |
| provide an adapter plug-in, say <code>org.xyz.adapter</code>, 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. |
| </p> |
| |
| <h2> |
| Details |
| </h2> |
| |
| <p> |
| 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 <code>tocProvider</code> |
| element of the <code>org.eclipse.help.toc</code> extension point. The two |
| exceptions are <code>org.eclipse.help.contentProducer</code> extension point |
| for providing html/xhtml documents, and |
| <code>org.eclipse.help.base.luceneSearchParticipants</code>, both of which |
| already existed prior to 3.3 and have not changed. |
| </p> |
| |
| <h3> |
| Table of contents example |
| </h3> |
| |
| <p> |
| Here is an example of a TOC provider extension: |
| </p> |
| |
| <p> |
| <pre> |
| <extension |
| point="org.eclipse.help.toc"> |
| <tocProvider |
| class="org.myproject.MyTocProvider"> |
| </tocProvider> |
| </extension> |
| </pre> |
| </p> |
| |
| <p> |
| And the implementation: |
| </p> |
| |
| <p> |
| <pre> |
| /* |
| * 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 }; |
| } |
| } |
| </pre> |
| </p> |
| |
| <p> |
| Upon opening Help, you will see a single new static book in the table of |
| contents with the label "Hello, World". |
| </p> |
| |
| <p> |
| As you may have noticed, an <code>ITocContribution</code> 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 |
| <code>ITocContribution</code>. 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 |
| <code>org.eclipse.help</code>. |
| </p> |
| |
| |
| </body> |
| </html> |