エディターには、多くの場合、対応するコンテンツ・アウトライナーがあります。 コンテンツ・アウトライナーは、エディターの内容を構造化して表示し、エディターの内容をナビゲートする支援を行います。
ワークベンチは、この目的のために標準の「アウトライン」ビューを備えています。 ワークベンチのユーザーは、「ウィンドウ」>「ビューの表示」メニューを使用してこのビューを可視にする時点をコントロールします。
汎用の TextEditor は、 そのテキストの構造については何も認識しないので、 興味を持たせるような「アウトライン」ビューの振る舞いを与えることができません。 したがって、以下に示すデフォルトの「アウトライン」ビューでできることはあまりありません。

テキスト・フレームワーク内のエディターは、独自のコンテンツ・アウトライナー・ページを「アウトライン」ビューに 提供することができます。 エディターのアウトライナーは、ワークベンチが IContentOutlinePage 型の アダプターを要求したときに指定されます。
public Object getAdapter(Class required) {
if (IContentOutlinePage.class.equals(required)) {
if (fOutlinePage == null) {
fOutlinePage= new JavaContentOutlinePage(getDocumentProvider(), this);
if (getEditorInput() != null)
fOutlinePage.setInput(getEditorInput());
}
return fOutlinePage;
}
return super.getAdapter(required);
}
コンテンツ・アウトライナー・ページは、 IContentOutlinePage を インプリメントしていなければなりません。 このインターフェースは、選択変更リスナーに通知する機能 (ISelectionProvider) と ビューでページとなる動作 (IPage) を組み合わせます。 コンテンツ・アウトライナーは通常、JFace ビューアーでインプリメントされています。 コンテンツ・アウトライナーのデフォルト・インプリメンテーション (ContentOutlinePage) は、 JFace ツリー・ビューアーを使用して、アウトラインの階層表記を表示します。 この表記は、JavaContentOutlinePage を含む多くの構造化アウトライナーに適しています。
ページのインプリメンテーションを調べてみましょう。 上の断片でアウトライン・ページがエディターによって作成されると、その入力エレメントはエディターの入力エレメントに設定されます。 この入力は、多くの場合、以下で示すように、アウトライン・ページのビューアーに直接渡すことができます。
public void createControl(Composite parent) {
super.createControl(parent);
TreeViewer viewer= getTreeViewer();
viewer.setContentProvider(new ContentProvider());
viewer.setLabelProvider(new LabelProvider());
viewer.addSelectionChangedListener(this);
if (fInput != null)
viewer.setInput(fInput);
}
ツリー・ビューアー作成は ContentOutlinePage から 継承されます。 標準ラベル・プロバイダーが使用されます。 コンテンツ・プロバイダーは、JavaContentOutlinePage 内に指定され、個々のセグメントへのエディター入力が変更されたときに構文解析を行います。
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
...
if (newInput != null) {
IDocument document= fDocumentProvider.getDocument(newInput);
if (document != null) {
document.addPositionCategory(SEGMENTS);
document.addPositionUpdater(fPositionUpdater);
parse(document);
}
}
}
文書内で、テキストはセグメントと呼ばれる 2 つの範囲に構文解析されます。 これらのセグメントは、「アウトライン」ビューで名前ごとに表示されます。

選択が変更されると、選択されたセグメントが検索されます。 エディターの強調表示範囲を設定するため、そのオフセットが使用されます。
public void selectionChanged(SelectionChangedEvent event) {
super.selectionChanged(event);
ISelection selection= event.getSelection();
if (selection.isEmpty())
fTextEditor.resetHighlightRange();
else {
Segment segment= (Segment) ((IStructuredSelection) selection).getFirstElement();
int start= segment.position.getOffset();
int length= segment.position.getLength();
try {
fTextEditor.setHighlightRange(start, length, true);
} catch (IllegalArgumentException x) {
fTextEditor.resetHighlightRange();
}
}
}