エディターには、多くの場合、対応するコンテンツ・アウトライナーがあります。コンテンツ・アウトライナーは、エディターの内容を構造化して表示し、エディターの内容をナビゲートする支援を行います。
ワークベンチは、この目的のために標準の「アウトライン」ビューを備えています。ワークベンチのユーザーは、「ウィンドウ」>「ビューの表示」メニューを使用してこのビューを可視にする時点をコントロールします。
汎用の 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();
}
}
}