ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebCenter Contentのマネージング
11g リリース1 (11.1.1)
B72426-04
  ドキュメント・ライブラリへ移動
ライブラリ
目次へ移動
目次

前
 
次
 

33 スクリプト・テンプレートの管理

この章では、動的変換用のスクリプト・テンプレートについて説明します。また、このスクリプト・テンプレートの使用方法についても説明します。

この章の内容は、次のとおりです。

33.1 スクリプト・テンプレートについて

スクリプト・テンプレートとは、主に前バージョンのDynamic Converterで使用されていた、テキスト・ベースの変換テンプレートです。これらはプレーンテキスト・ファイルであり、要素、索引、マクロ、プラグマおよびIdoc Scriptを使用するコードを手入力する必要があります。このテンプレートは、引き続きDynamic Converterで使用できますが、クラシックHTML変換テンプレート(第30章を参照)の大部分はスクリプト・テンプレートに置き換えられています。


注意:

Idocスクリプトの詳細は、『Oracle Fusion Middleware Oracle WebCenter Contentでの開発』を参照してください。


次に、簡単なサンプル・テンプレートのコードを示します。

{## unit}{## header}
<html>
<body>
{## /header}
<p>Here is the document you requested.
{## insert element=property.title} by
{## insert element=property.author}</p>

<p>Below is the document itself</p>
{## insert element=body}

{## footer}
</body>
</html>
{## /footer}{## /unit}

{##unit}、{##/unit}、{##header}、{##/header}、{##footer}および{##/footer}マクロは、今のところ無視してかまいません。これらの用途は、「マクロ」で説明します。

ファイルの残りの部分は、{##insert element=xxx}書式の3つのマクロを除いて、通常のHTMLコードです。Dynamic Converterは、このテンプレートとソースファイルを使用して出力を作成します。これを実行するために、Dynamic Converterはテンプレート・ファイルを読み込んで、そのテンプレートで文字マッピングが実行されない場合は、バイトごとに出力ファイルに書き出します。これは、適切に書式化されたマクロがテンプレートに含まれるまで続きます。Dynamic Converterは、マクロを読み込むと、そのマクロのコマンドを実行します。通常、これにより、ソースファイル内のHTMLバージョンのなんらかの要素を出力ファイルに挿入することになります。Dynamic Converterは、テンプレート・ファイルの終端に達するまで、テンプレートの読込みとマクロの実行を続行します。

前述の例では、最初の{##insert}マクロで要素構文(「要素の挿入: {## INSERT}」を参照)を使用して、ドキュメントのタイトルを挿入します。2番目のマクロでは、ドキュメントの作成者を挿入し、3番目のマクロではドキュメントの本体全体を挿入します。その結果としてのHTMLは、次のようになります(このHTMLは、マクロの結果を太字で示しています)。

<html>
<body>
<p>Here is the document you requested.
A Poem by
Phil Boutros</p>

<p>Below is the document itself</p>
<p>Roses are red</p>
<p>Violets are blue</p>
<p>I'm a programmer</p>
<p>and so are you</p>

</body>
</html>

33.2 要素

この項の内容は次のとおりです。

33.2.1 要素ツリー

Dynamic Converterでは、要素ツリーの概念を採用することで、ソース・ファイルの様々な部分や属性を、スクリプト・テンプレート内から個別にアドレス指定できるようにします。

要素ツリーのノードは、特定の要素へのパスを生成するために使用されます。このパスでは、ピリオドを使用してノードを区切ります。たとえば、ドキュメントの作者プロパティのパスは、Property.Authorになります。

利便性を考慮して、要素パス内の特定のノードは、明白なデフォルト動作を表しているために省略されることがあります。これらのノードには、Sectionsノード(Sections.Current.Body.TitleとBody.Titleは同等です)や、BodyノードとContentsノード(Body.Contents.Headings.1.BodyとHeadings.1.Bodyは同等です)などがあります。


重要:

これらのノードがパス内の最後のノードになる場合は省略できません(Heading.1.Bodyは、Headings.1と同等ではありません)。


要素ツリーには、リーフ要素と反復可能要素の2つのタイプの要素があります(それぞれ、第33.2.2項第33.2.3項を参照)。

図33-1 要素ツリーの例

要素ツリーの例

33.2.2 リーフ要素

リーフ要素とは、作成者のプロパティ(Property.Author)やドキュメントの前書き(Body.Contents.Preface)など、ソース・ファイルに含まれる単独の識別可能な部分です。このタイプの要素は、{##INSERT}、{##F}および{##LINK...}マクロを使用する挿入、テストおよびリンクの有効なターゲットです。このタイプのパスの最後のノードは、ドキュメント・ツリー内の有効なリーフ・ノードにする必要があります。有効なリーフ・ノードは、「要素ツリー」の例に示した要素ツリーでは斜体で示されています。

33.2.3 反復可能要素

反復可能要素には、ドキュメントの脚注(Sections.1.Footnotes)のように、複数のインスタンスが関連付けられています。このタイプの要素は、直接挿入、テストまたはリンクはできませんが、そのインスタンスを{##REPEAT}マクロを使用してループできます。このタイプのパスの最終ノードは、ドキュメント・ツリー内で有効な反復可能ノードにする必要があります。有効な反復可能ノードは、「要素ツリー」の例に示した要素ツリーでは太字で示されています。

一部のテンプレートでは、{##REPEAT}ループを使用して、反復可能要素ごとに1つの出力ファイルを生成します。たとえば、あるテンプレートでは、1つのプレゼンテーション・ファイルを出力ファイルのグループ(スライドごとに1つの出力ファイル)としてレンダリングします。入力ファイルに非常に多くのセクションが含まれていると、オペレーティング・システムのファイル・ハンドルが使い果たされてしまうことがあります。オープン・ファイルの使用可能ハンドル数については、オペレーティング・システムのマニュアルを参照するか、システム管理者に問い合わせてください。この非常にまれな問題を回避するには、{##REPEAT}マクロのmaxreps属性の値を設定するか、もっと多くのファイル・ハンドルを使用できるようにオペレーティング・システムを構成します。

33.2.4 要素の定義

次の表は、サポートされているすべての要素と、それぞれの要素の簡単な説明を示しています。(xの有効値については、第33.3項を参照してください。)

要素 タイプ 説明

Property.Author

リーフ

ソース・ファイルのAuthorプロパティ。

Property.Title

リーフ

ソース・ファイルのTitleプロパティ。

Property.Subject

リーフ

ソース・ファイルのSubjectプロパティ。

Property.Keywords

リーフ

ソース・ファイルのKeywordsプロパティ。

Property.Comments

リーフ

ソース・ファイルのCommentsプロパティ。

Property.Others

反復可能

これにより、前述のプロパティ要素で具体的にアクセスできないすべてのプロパティ(NameとBodyのプロパティを含む)にアクセスできるようになります。サポートされるOtherプロパティは、ファイル形式に応じて異なります。一部のファイル形式では、ユーザー定義可能な追加のプロパティに対しても有効です。

テキストのプロパティにのみアクセスできます。Yes/No、数値および日付などのプロパティはサポートされていません。

Property.Others.x.Name

リーフ

プロパティについての説明的な名前。

Property.Others.x.Body

リーフ

プロパティのテキスト。

Sheets

反復可能

次の、Sectionsを参照してください。

Slides

反復可能

次の、Sectionsを参照してください。

Sections

反復可能

Sectionsは、ソース・ファイルでの最上位レベルの抽象化を表します。通常、ワード・プロセッサ・ドキュメントのセクションは1つのみになります。このセクションはドキュメントそのものです。スプレッドシートは、各シートまたは各グラフが1つのセクションになります。プレゼンテーションは、各スライドが1つのセクションです。グラフィックは、通常は1つのセクションになりますが、複数ページのTIFFなどは複数のセクションを含むことがあります。

SheetsとSlidesはSectionsと同じ意味になります。これは、利便性と読みやすさを考慮したものです。

Sections.x.Body

リーフ

この要素は、ソース・ファイルのメインのテキスト領域を表します。

ワード・プロセッサで作成したドキュメントの場合は、これにドキュメント全体が含まれますが、脚注、文末脚注、ヘッダー、フッターおよび注釈は含まれません。(脚注/文末脚注の参照は、必ず自動的に本体に組み込まれます。テンプレートに脚注/文末脚注が含まれている場合、それらの参照は、その注記へのリンクを提供します。注釈の参照は、テンプレートに注釈が含まれていないかぎり、本体には配置されません。注釈が含まれている場合は、注釈の参照が注釈へのリンクを提供します。)

スプレッドシートの場合は、シート全体が含まれます。

グラフィックの場合は、そのファイル形式で実際にはテキストとして表示されるテキストが含まれます。

Sections.x.Body.Title

リーフ

ワード・プロセッサで作成したドキュメントの場合、この要素は、タイトル・スタイルのマークが付いたテキストになります。これは、Property.Titleと異なることがあります。それ以外のタイプの場合、この要素はセクションの名前になります。たとえば、ソース・ファイルがスプレッドシートの場合、この要素は、スプレッドシート・アプリケーションのナビゲーション・タブに表示されるシートの名前になります。

Sections.x.Body.Contents

リーフ

ワード・プロセッサで作成したドキュメントの場合、これはSections.x.Bodyと同じになります。

それ以外のドキュメント・タイプの場合、これは本体からタイトルを除外したものと同じになります(タイトルがある場合)。

Sections.x.Body.Contents. Preface

リーフ

本体の先頭と最初の見出しとの間のテキスト。

Sections.x.Body.Contents. Headings

反復可能

見出しは、ドキュメントを構造化するために作者が挿入したワード・プロセッサ・ドキュメント内のラベルです。見出しの詳細は、第33.7項を参照してください。Dynamic Converterは、この構造を読み取って、Headings要素を使用することで、その構造にアクセスできるようにします。

Sections.x.Body.Contents. Headings.x.Body.

下位に複数のリーフと反復可能があるリーフ

各見出しの下には、Body以下の完全なドキュメントの構造が繰り返されます。これらの要素が、どのようにドキュメントの各部分にマップされているかについての明確な説明は、第33.7項を参照してください。

Sections.x.Body.Contents. Headings.x.Footnotes

下位に複数のリーフがある反復可能

この見出しに含まれた脚注のみ。

Sections.x.Body.Contents. Headings.x.Endnotes

下位に複数のリーフがある反復可能

この見出しに含まれた文末脚注のみ。

Sections.x.Body.Contents. Headings.x.Annotations

下位に複数のリーフがある反復可能

この見出しに含まれた注釈のみ。

Sections.x.Grids

反復可能

スプレッドシート形式およびデータベース形式にのみ有効です。これにより、スプレッドシートのセクション(シート)またはデータベース・ファイルのグリッドにアクセスできます。

Sections.x.Grids.x.Body

反復可能

スプレッドシート形式およびデータベース形式にのみ有効です。これにより、スプレッドシートのセクション(シート)またはデータベース・ファイルのグリッドにアクセスできます。

Sections.x.Image

リーフ

この要素は、セクションのコンテンツのグラフィック・イメージを表します。これは、ビットマップ、図形、チャートおよびプレゼンテーションのセクションにのみ有効です。

Sections.x.BodyOrImage

リーフ

この要素は、ある範囲のセクション・タイプを処理するテンプレートの作成を簡単にするために存在します。ワード・プロセッサで作成したドキュメント、スプレッドシートおよびデータベースのセクションでは、BodyOrImageはBodyと同じ意味になります。ビットマップ、図形、チャートおよびプレゼンテーションのセクションでは、BodyOrImageはImageと同じ意味になります。

Sections.x.Title

リーフ

Sections.x.Body.Titleと同じです。ワード・プロセッサで作成したドキュメントの場合、この要素は、タイトル・スタイルのマークが付いたテキストになります。これは、Property.Titleと異なることがあります。それ以外のタイプの場合、この要素はセクションの名前になります。たとえば、ソース・ファイルがスプレッドシートの場合、この要素は、スプレッドシート・アプリケーションのナビゲーション・タブに表示されるシートの名前になります。

Sections.x.Type

リーフ

この要素は、問合せのためにのみ存在します。これは、{##IF...}マクロのELEMENTでのみ有効です。

この要素は、通常は問合せ目的にのみ使用しますが、その他の要素と同様に挿入することもできます。これを{##IF}マクロで使用する方法の詳細は、第33.4.4項を参照してください。

Sections.x.Footnotes

反復可能

すべての脚注。

Sections.x.Footnotes.x.Body

リーフ

完全な脚注の参照とコンテンツ・テキスト。

Sections.x.Footnotes.x. Reference

リーフ

脚注の参照番号。

Sections.x.Footnotes.x. コンテンツ

リーフ

脚注のコンテンツ・テキスト。

Sections.x.Footnotes

反復可能

すべての脚注。

Sections.x.Endnotes.x.Body

下位に複数のリーフがある反復可能

完全な文末脚注の参照とコンテンツ・テキスト。

Sections.x.Endnotes.x. Reference

下位に複数のリーフがある反復可能

文末脚注の参照番号。

Sections.x.Endnotes.x. コンテンツ

下位に複数のリーフがある反復可能

文末脚注のコンテンツ・テキスト。

Sections.x.Annotations

反復可能

すべての注釈。

Sections.x.Annotations.x. Body

リーフ

完全な注釈の参照とコンテンツ・テキスト。

Sections.x.Annotations.x. Reference

リーフ

注釈の参照テキスト。

Sections.x.Annotations.x. コンテンツ

リーフ

注釈のコンテンツ・テキスト。

Sections.x.Slidenotes

反復可能

すべてのスライド・ノート。

PowerPointファイルの場合は、スライド・ノートを変換すると、変換処理の速度が低下することがあります。

Sections.x.Slidenotes.x.Body

リーフ

現行スライドのノート。

パフォーマンスを維持するために、スライド・ノートは出力ファイルの最後に書き込むことをお薦めします(PowerPointファイルではスライド・ノートが、各スライドの次に保持されるのではなく、ファイルの最後に保持されます)。このようにしていないと、このテクノロジは入力ファイルの膨大なシーク操作の実行を強制されるため、変換速度が低下します。

Sections.x.Headers

反復可能

すべてのヘッダー。

Sections.x.Headers.x.Body

リーフ

ヘッダーのテキスト。

Sections.x.Footers

反復可能

すべてのフッター。

Sections.x.Footers.x.Body

リーフ

フッターのテキスト。

Pragma.Charset

リーフ

Dynamic Converterが生成する文字の文字セットに関連付けられたHTMLテキスト文字列。Dynamic Converterで生成するHTMLにキャラクタ・セットを正しくコード化するために、次に示すように{##INSERT}マクロを使用して、すべてのテンプレートにMETAタグを組み込む必要があります。

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset={## INSERT ELEMENT=pragma.charset}">

この行がテンプレートに組み込まれていないと、ユーザーはブラウザで正しい文字セットを手動で選択することになります。

Pragma.SourceFileName

リーフ

変換対象のソース・ドキュメントの名前。これには、パス名は含めません。

Pragma.CSSFile

リーフ

この要素は、Cascading Style Sheet (CSS)ファイルの名前をHTMLドキュメントに挿入するために使用します。通常、この名前は、HTMLの<LINK>タグとともに使用して、Dynamic Converterで生成されたCSSファイルに含まれるスタイルを参照します。

{##INSERT}マクロで使用すると、このプラグマは作成されるCSSファイルのURLを生成します。このマクロは、ソース・ファイルのコンテンツを挿入するすべてのテンプレート・ファイル内で、選択したHTMLフレーバがCSSをサポートしている場合に、{##INSERT}とともに使用する必要があります。CSSファイルは、選択したHTMLフレーバでCSSがサポートされている場合にのみ作成されます。

{##IF}マクロで使用する場合は、選択したHTMLフレーバでCascading Style Sheetがサポートされていれば、条件はtrueになります。

出力にCSSが必要になる場合は、{##IF element=pragma.embeddedcss}または{##IF element=pragma.cssfile}を使用します。ただし、この2つはDynamic Converterでは区別されないため、埋込みCSSと外部のCSSのどちらを使用するかは作成者が選択できます。また、この2つを出力に混在させることもできます。

このプラグマの使用例を次に示します。この例は、HTMLのCSSフレーバまたは非CSSフレーバのどちらをエクスポートするときにも機能します。

{## IF ELEMENT=Pragma.CSSFile}
 <LINK REL=STYLESHEET
 HREF="{## INSERT
 ELEMENT=Pragma.CSSFile}">
 </LINK>
{## /IF}

Pragma.EmbeddedCSS

リーフ

この要素は、ドキュメントの<HEAD>に単一ブロックでCSSスタイルの定義を挿入するために使用します。

{##INSERT}マクロで使用する場合、このプラグマにより、ファイルで後から使用するために必要なCSSスタイル定義のブロックが挿入されます。このマクロは、ドキュメント・コンテンツを挿入するために{##INSERT}を使用している各出力HTMLファイルで使用する必要があります。

{##IF}マクロで使用する場合は、選択したHTMLフレーバでCSSがサポートされていれば、条件はtrueになります。

出力にCSSが必要になる場合は、{##IF element=pragma.embeddedcss}または{##IF element=pragma.cssfile}を使用します。ただし、この2つはDynamic Converterでは区別されないため、埋込みCSSと外部のCSSのどちらを使用するかは作成者が選択できます。また、この2つを出力に混在させることもできます。

入力ドキュメントでスタイルが使用されている場合、そのスタイルは、入力ファイルごとに生成されるすべての出力HTMLファイル用に生成される埋込みCSS内に示されます。出力を複数のHTMLファイルに分割するテンプレートがあるとします。この例では、入力ファイルにMyStyleスタイルが含まれています。変換中に実際にMyStyleスタイルを参照する出力HTMLファイルが1つのみでも問題ありません。MyStyleスタイルの定義は、このスタイルを参照することのないファイルも含めたすべての出力ファイルの埋込みCSS内に示されます。

Pragma.JsFile

リーフ

この要素は、JavaScriptファイルの名前をHTMLドキュメントに挿入するために使用します。通常、この名前は、HTMLの<SCRIPT>タグとともに使用して、HTML Exportで生成された.jsファイルに含まれるJavaScriptを参照します。

{##INSERT}マクロで使用すると、このプラグマは作成されるJavaScriptファイルのURLを生成します。このマクロは、ソース・ファイルのコンテンツを挿入するすべてのテンプレート・ファイル内で、次の場合に{##INSERT}で使用する必要があります。

  • 選択したHTMLフレーバでJavaScriptがサポートされている。

  • javaScriptTabsオプションがtrueに設定されている。

JavaScriptファイルは、選択したHTMLフレーバでJavaScriptがサポートされている場合にのみ作成されます。

{##IF}マクロで使用する場合、選択したHTMLフレーバでJavaScriptがサポートされているかどうかによって、条件は異なります。


33.3 索引

反復可能ノードには、エクスポート処理の任意のどの時点でも現行の値を持つ索引変数が関連付けられています。パスの一部として反復可能ノードが含まれる要素の場合、反復可能要素のインスタンスは、数値または索引変数キーワードの1つを使用して指定する必要があります。

この項の内容は次のとおりです。

33.3.1 索引変数キーワード

この索引に使用できる値(第33.2.4項の要素定義で、xと表記された値)は、次のとおりです。

33.3.1.1 整数

数値の場合は、その数を単にパス内の別のノードとして挿入します。


注意:

Dynamic Converterの索引は、1からカウントが開始されます(0からではありません)。


たとえば、Slides.1.Imageでは、プレゼンテーション内の最初のスライドを参照し、Footnotes.2.Bodyでは、ドキュメント内の2番目の脚注を参照します。

テンプレートを適用するドキュメント内に要素があることが保証できない場合は、明示的に要素を参照しないでください。たとえば、Sections.4.Bodyを参照すると、セクション数が4つ未満のドキュメントで予期しない動作が発生することがあります。

存在しない要素をリクエストしても、Dynamic Converterでエラーが発生することはありません。単に挿入が無視されます。ただし、挿入の周囲の他のHTMLが挿入の結果に依存する場合は、無効なHTMLが出力される可能性があります。

33.3.1.2 Current、Next、Previous、FirstおよびLast

キーワードのcurrent、next、previous、firstおよびlastは、その名前が示すとおりに機能します。スクリプト・テンプレートが処理されるときに、これらの変数は該当する索引値に置き換えられます。たとえば、Slides.Current.Imageは現在のスライドを参照し、その次のスライドはSlides.Next.Imageで参照します。

nextとpreviousは、索引の値を変更しません。これは、以前のバージョンのDynamic Converterと同じです。そのため、索引が変更される場所は、{##REPEAT}ループの内側と、{##LINK}文の結果にかぎられます。

{## REPEAT…}

通常、索引変数の初期値は、どの反復可能要素も1になります。{##REPEAT}ループの場合、索引の値は反復ごとに増加します。{##REPEAT}ループが終了すると、カウンタは初期値にリセットされます。実際には、索引のスコープは繰返しループになると表現するほうが正確です。

次に示すテンプレートのフラグメントでは、繰返しループにcurrentを使用しています。このループでは、ソース・ファイル内のすべての脚注を出力します。

{## REPEAT element=footnotes}
{## INSERT element=footnotes.current.body}
{## /REPEAT}

繰返し文を含むテンプレートが、繰返し要素として使用される要素を指定する{##link}文のターゲットの場合、索引の初期値は{##LINK}処理によって決定されます。

{## LINK…}

{##LINK}文は、現在のテンプレートのコンテキストでは索引変数に影響を与えません。{##LINK}文は、要素とテンプレートの両方が指定されているときにのみ索引変数に影響を与えます。この場合、指定した要素のターゲット内の索引変数にのみ影響します。

{##LINK}で指定された要素にnextまたはpreviousキーワードが含まれている場合は、ターゲット・ファイル内のcurrentの値が影響を受けます。ターゲット内のcurrentの初期値は、nextの場合は(ソースのcurrent)+1の値になります。同様に、previousには、currentの値を減らす効果があります。

次の例では、1つのテンプレート・ファイルと、1組のHTMLファイル(プレゼンテーション内のスライドごとに1つのファイル)を作成する{##link}マクロを使用します。{##link}は、HTMLファイルの生成を促し、ナビゲーションのためにnextリンクを提供するという2つのジョブを実行します。次のスライドがあるかどうかを確認する{##if}マクロ内のnextキーワードの使用に注意してください。

{## unit}
<html>
<body>
<!-- insert the current slide -->
{## insert element=slides.current.image width=300}
<hr />
<!-- Is there a next slide? -->
{## if element=slides.next.image}
 <!-- If yes, generate a URL to an HTML file containing
 the next slide. The HTML file is generated using
 the current template (because there is no template
 attribute). While generating the new HTML file, the
 value of the index on slides will be its current
 value plus 1 once control returns to this template,
 the value of the index on slides is unchanged. -->
 <p><a href="{## link element=
 slides.next.image}">Next</a></p>
{## else}
 <!-- If no, create a link to the HTML containing the
 first slide. -->
 <p><a href="{## link element=
 slides.1.image}">First</a></p>
{## /if}
</body>
</html>
{## /unit}

33.3.1.3 Up、Down、LeftおよびRight

反復可能グリッド要素には、索引変数キーワードのCurrent、Next、Previous、FirstおよびLastのほかにも4つのキーワードがあります。

  • Up

  • Down

  • Left

  • Right

これらのキーワードは、ドキュメント・ツリーのGridsノードの直後にのみ現れます。たとえば、Grids.Up.Bodyは有効ですが、Sections.Left.Grids.1.Bodyは無効です。これらのキーワードのそれ以外の使用方法は、その名前のとおりになります。

個々のグリッドは、相互に相対するアドレス指定のみが可能であることにも注意してください。つまり、上グリッドは指定できますが、任意のグリッドの直接指定("5, 7"など)はできません。

33.3.2 プレゼンテーションのスライドごとのHTMLファイル・セットの作成

次の例では、1つのスクリプト・テンプレート・ファイルと、1組のHTMLファイル(プレゼンテーション内のスライドごとに1つのファイル)を作成する{##LINK...}マクロを使用しています。{##LINK...}は、HTMLファイルの生成を促し、ナビゲーションのためにnextリンクを提供するという2つのジョブを実行します。次のスライドがあるかどうかを確認する{##IF...}マクロ内のNextキーワードの使用に注意してください。

<html>
<body>
<!-- Insert the current slide -->
{## INSERT ELEMENT=Slides.Current.Image WIDTH=300}
<hr />
<!-- Is there a next slide? -->
{## IF ELEMENT=Slides.Next.Image}
<!-- If yes, generate a URL to an HTML file containing the next slide. The HTML file is generated using the current template (because there is no TEMPLATE attribute). While generating the new HTML file, the value of the index on Slides is its current value plus 1 once control returns to this template, the value of the index on Slides is unchanged. -->
<p><a href="{## LINK ELEMENT=Slides.Next.Image}">Next</a></p>
{## ELSE}
<!-- If no, create a link to the HTML containing the first slide. -->
<p><a href="{## LINK ELEMENT=Slides.1.Image}">First</a></p>
{## /IF}
</body>
</html>

33.4 マクロ

この項の内容は次のとおりです。

33.4.1 マクロについて

マクロとは、スクリプト・テンプレート内でDynamic Converterに向けるコマンドです。HTMLタグに似ていますが、通常、HTMLファイル内でタグに適用されるルールには拘束されません。マクロは、スクリプト・テンプレート・ファイル内のどこにでも記述できますが、別のマクロ内には記述できません。

このドキュメントや例に示すマクロ部分は、どれも空白で区切られています。ただし、セミコロンで区切ることもできます。このオプションは、特定のHTMLエディタに対応するために追加されています。一部のエディタでは、引用符で囲んでいない空白を含むURLをダイアログ・ボックスに入力できないことがあります。そのため、このような状況では、{##LINK}マクロの使用が困難または不可能になっていました。

たとえば、{##INSERT ELEMENT=Sections.1.Body}は、{##;INSERT;ELEMENT=Sections.1.Body}と記述することもできます。

テンプレートのマクロ文字列のパラメータとオプションは、sprintfスタイルのエスケープ文字をサポートしています。つまり、\x22\r%%のような文字がサポートされます。また、大部分のテンプレート属性値は引用符で囲めます。ただし、テンプレート要素文字列は、現時点では引用符で囲めません。

次に例を示します。

{## ANCHOR aref="next" format="<a href=\"%url\">Next</a><br/>\r\n"}

33.4.2 単位: {## UNIT}、{## HEADER}および{## FOOTER}

テンプレート・ファイルで{##UNIT}マクロを使用する場合、このマクロは、そのテンプレート・ファイル内で最初のマクロにする必要があります。これは、各単位の初めと終わりを区切ります。単位の境界は、コンテンツのサイズに基づいて分割するときに、ドキュメントを分割する箇所を決定する際に使用されます(第33.8項を参照)。

1単位は、1つのヘッダー、1つのフッター(どちらもオプション)および1つの本体(空でもかまいません)で構成されます。必ずヘッダーがテンプレート内の最初のアイテムになり、フッターが最後のアイテムになるように、{##UNIT}タグと{##HEADER}タグの間のテキストと、{##/FOOTER}タグと{##/UNIT}タグの間のテキストは、空白も含め無視されます。ある単位のヘッダーとフッターは、その単位を含むすべてのページに出力されます。ヘッダーとフッターで、特定のページに収まる単位の本体部分を囲みます。テンプレート全体が1つの単位であり、この単位には別の単位を含めることもできます。

構文

{## UNIT [BREAK]}
 [{##HEADER}
 any HTML
 {##/HEADER}]

 any HTML

 [{##FOOTER}
 any HTML
 {##/FOOTER}]
{## /UNIT}
Attributes
BREAK
属性 説明

BREAK

このオプション属性は、単位のコンテンツを挿入する前に改ページを強制します。このようにしないと、最初のページの本体は空になります。この属性が役立つ状況としては、ドキュメントの各セクション間で改ページを強制する場合(1ページごとに1つのプレゼンテーション・スライドを作成する)などがあげられます。

{##UNIT}マクロとそのBREAK属性は、SCCOPT_EX_PAGESIZEpagesizeがゼロに設定されている場合、無視されます。

同一ページ上に配置するテキストの中央で、改ページが行われないようにすることが重要な場合があります。このような改ページを防止するには、同一ページに配置するテキストを、ネストされた{##UNIT}{## HEADER}ペアの内側に囲みます。たとえば、リンクの作成中の改ページ防止する場合、テンプレートの作成者は、次のように記述します。

{## unit}{## header}
<a href="{## link element=sections.current.body}">Link</a>
{## /header}{## /unit}

33.4.3 要素の挿入: {## INSERT}

このマクロは、ソース・ファイルの要素を出力ファイルの現在の場所に挿入します。

構文

{## INSERT [ELEMENT=element [WIDTH=width] [HEIGHT=height] [SUPPRESS=suppress] [TRUNCATE=truncate]] |[NUMBER=number] [URLENCODE]}
属性 説明

ELEMENT

この属性では、出力ファイルのマクロの場所に、ソース・ファイルのどの部分を配置するかを指定します。この属性に指定できる値については、第33.2.4項を参照してください。この属性の値が要素ツリーに存在しないと、Dynamic Converterはその要素をカスタム要素であるとみなして、EX_CALLBACK_ID_PROCESSELEMENTSTRコールバックをコールします。

例: {##INSERT ELEMENT=Sections.1.Body}

WIDTH

このオプション属性では、挿入される要素の幅をピクセル単位で定義します。現時点では、Image要素に対してのみ有効です。WIDTH属性を指定していないときにHEIGHT属性を指定すると、イメージの幅は要素の形状に基づいて自動的に計算されます。WIDTH属性とHEIGHT属性のどちらも指定しないと、イメージの元の寸法が使用されます。イメージの元の寸法が不明の場合、HEIGHTとWIDTHはデフォルトで200とみなされます。

例: {##INSERT ELEMENT=Slides.1.Image WIDTH=400}

HEIGHT

このオプション属性では、挿入される要素の高さをピクセル単位で定義します。現時点では、Image要素に対してのみ有効です。HEIGHT属性を指定していないときにWIDTH属性を指定すると、イメージの高さは要素の形状に基づいて自動的に計算されます。

例: {##INSERT ELEMENT=Slides.1.Image HEIGHT=400}

SUPPRESS

このオプション属性を使用すると、特定の内容が出力されないようになります。これは、HTMLが適切でない状況(JavaアプレットやActiveXコントロールに情報を渡す場合や、フォームの部品に値を移入する場合など)で、要素を挿入する必要があるときに非常に役に立ちます。次の値があります。

TAGS: 要素の出力からHTMLタグがすべて削除されますが、&quot;や&#123;のようなHTML文字コードがテキストに残されたままになる可能性があります。

プレゼンテーションやグラフィックのファイルなどの埋込みでないグラフィックの場合、変換済グラフィックのURLは抑止されません。ただし、通常はURLを囲む<img>タグは抑止されます。

ワード・プロセッサで作成したセクションやスプレッド・シートに含まれているような埋込みグラフィックの場合は、URLと<IMG>タグの両方が抑止されます。変換結果の埋込みグラフィックにはアクセスできなくなるため、グラフィックの変換は行われません。

例:

<form method="POST">
<input type="text" size="20" name="Author"
value="{## INSERT ELEMENT=Property.Author SUPPRESS=TAGS}">
</form>

BOOKMARKS: 挿入されたセクション内のすべてのブックマークを無効にします。ブックマークは、別のテンプレート要素がリンクできるように、挿入された多くの要素の前に自動的に配置されます。SUPPRESS=BOOKMARKSは、ネストされた<a>タグによる問題を防止するために用意されています。これは、SUPPRESS=TAGSによって発生する抑止動作のサブセットを意味します。

INVALIDXMLTAGCHARS: 出力から、XMLタグ名に使用できないすべての文字を削除します。これは、テンプレートの作成者が、山形カッコ(<と>)の内側にカスタム・ドキュメント・プロパティ名を{##INSERT}で挿入して、XMLタグを作成できるようにするためのものです。Unicodeの大部分の文字およびそのサブセットの文字セットは、XMLタグ名の一部として使用できます。無効な文字には、行送りや改行などの制御文字が含まれます。さらに、どの文字をタグ名の最初の文字にできるかという特別なルールもあります。

例:

{## REPEAT Sections.Property.Others}
<{## INSERT ELEMENT=Property.Others.Current.Name SUPPRESS=InvalidXMLTagChars}>
<{## INSERT ELEMENT=Property.Others.Current.Body SUPPRESS=InvalidXMLTagChars}>
</{## INSERT ELEMENT=Property.Others.Current.Name
SUPPRESS=InvalidXMLTagChars}>
{/## REPEAT}

これは、次のような結果になります。

<MyProperty>PropertyValue</MyProperty>

TRUNCATE

この属性を設定すると、挿入される要素に対して文字の最大長が適用されます。これにより、ページ・サイズ・オプションが使用されている場合、ページをまたいで要素を分割するのではなく、切り捨てることができます。切り捨てられた要素は、切捨て識別子である3つのピリオド(…)で終了します。切捨て値のある要素はすべて、切捨て識別子の長さを含めて、指定した文字数以下の長さになります。Dynamic Converterでは、切捨てサイズが指定されていない場合、要素は完全な状態で挿入されます。この属性の値は、5文字以上にする必要があります。

要素の切捨てが役立つ状況の例としては、目次の作成時にエントリのサイズを制限する場合があります。

TRUNCATE属性は、挿入のタグが抑止されることを意味します。また、挿入に対してソースの書式設定なしのオプションが自動的に適用されます。

TRUNCATE属性は、カスタム要素と一緒には使用できないことに注意してください。これは、カスタム要素定義では、{##INSERT}に対するその他の属性が排除されるからです。

TRUNCATE属性には、グリッドが挿入されるときの動作に3つの特別な面があります。

切捨てが有効な場合、切捨てサイズは、各セル内のコンテンツの文字数になり、グリッド全体の文字数にはなりません。

通常の切捨てでは、すべてのマークアップ・タグが抑止されますが、グリッドを使用しているときには表タグは保持されます(出力フレーバが表をサポートしている場合)。

ユーザーは、挿入されるスプレッド・シートまたはデータベースごとに、選択できるグリッド・サイズが1つであることを認識する必要があります。グリッドの一方または両方の次元が指定されていないときに、SCCOPT_EX_PAGESIZEオプションを使用している場合、グリッドのサイズは、部分的にTRUNCATE値に基づいて決まります。この場合、1つのシートのグリッドがテンプレート内の複数箇所に挿入され、TRUNCATE値が異なっていると、グリッドの次元は指定された最大のTRUNCATE値に基づいて決まります。

NUMBER

この属性を使用すると、開発者は、任意の反復可能要素のインスタンスの合計数または現在の索引値を取得できます。これは、JavaScript、BasicScriptなどを作成するときに非常に役立ちます。2つの特別なキーワードは、要素ツリーには表示されませんが、次の特別な場合には、ノードとして使用できます。

CountおよびCountB0: 繰返し要素に追加してNUMBER属性とともに使用すると、開発者はこれらのノードで指定した反復可能要素のインスタンス数のテキスト表現を挿入できるようになります。Countは最初の索引を1と想定したカウントを示し、CountB0は最初の索引を0と想定したカウントを示します。

例: プレゼンテーションに3つのスライドがある場合のテンプレート・フラグメント

<P>{## INSERT NUMBER=Slides.Count}
<P>{## INSERT NUMBER=Slides.CountB0}

次のテキストが生成されます。

<P>3
<P>2

ValueおよびValueB0: 繰返し要素に追加してNUMBER属性とともに使用すると、開発者はこれらのノードを使用して、指定した反復可能要素の現在の索引値のテキスト表現を挿入できるようになります。Valueは最初の索引を1と想定したカウントを示し、ValueB0は最初の索引を0と想定したカウントを示します。

例: スライド上の索引の現在値が2の場合のテンプレート・フラグメント

<P>{## INSERT NUMBER=Slides.Current.Value}
<P>{## INSERT NUMBER=Slides.Current.ValueB0}

次のテキストが生成されます。

<P>2
<P>1

URLENCODE

このオプション属性により、挿入された要素はURLエンコードされます。ファイル名を含む挿入の一部として指定されていない場合は無視されます。次の要素はURLエンコード可能です。

  • pragma.sourcefilename

  • pragma.cssfile

  • pragma.embeddedcss

  • pragma.jsfile

また、次の要素は、セクション・タイプがArchiveまたはARの場合にURLエンコードされます。

  • sections.x.fullname

  • sections.x.basename

  • sections.x.body

  • sections.x.title

  • sections.x.reflink

その他の{##INSERT}タグはすべて、この属性が無視されます。そのため、Dynamic Converterでは、変換される入力ドキュメントから得られるURLは変更されないことに注意する必要があります。これらのURLは、引き続きそのままの状態でパス・スルーされます。この属性は、URLがEX_CALLBACK_ID_CREATENEWFILEコールバックを使用して作成された場合も無視されます。このようなURLは、すでにURLエンコード済だとみなされます。


プロパティの挿入

プロパティはドキュメント内で特別に扱われるため、プロパティ文字列は、その他の{##INSERT}マクロの機能とは多少異なる方法で出力HTMLに挿入されます。

プロパティは、常に、SCCOPT_NO_SOURCEFORMATTINGオプションが設定されているものとして挿入されます。これにより、改行などの書式設定文字がプロパティ文字列に干渉することを防ぎます。

プロパティは、常に、スクリプト・テンプレートでSuppress=Tagsが指定されているものとして挿入されます。これにより、プロパティ文字列がどのように表示されるかを最大限制御できます。

33.4.4 条件: {## IF...}、{## ELSEIF...}および{## ELSE}

このマクロを使用すると、ソース・ファイルの要素に関する情報に基づいて、スクリプト・テンプレートの1つの領域を使用できるようになります。

構文

{## IF ELEMENT=element [CONDITION=Exists|NotExists]
[VALUE=value]}
 any HTML
{## /IF}

または

{## IF ELEMENT=element [[CONDITION=Exists|NotExists] |
[VALUE=value]]}
 any HTML
{## ELSE}
 any HTML
{## /IF}

または

{## IF ELEMENT=element [[CONDITION=Exists|NotExists] |
[VALUE=value]]}
 any HTML
{## ELSEIF ELEMENT=element [[CONDITION=Exists|NotExists] |
[VALUE=value]]}}
 any HTML
{## ELSE}
 any HTML
{## /IF}

注意:

{##IF}の後には、複数の{##ELSEIF}文を使用できます。また、{##ELSEIF}を使用する場合、{##ELSE}は不要です。


属性 説明

ELEMENT

この属性では、ソース・ファイルのテストする部分を指定ます。この属性に指定できる値については、第33.2.4項を参照してください。CONDITION属性とVALUE属性のどちらも存在しない場合、要素の存在がテストされます。

CONDITION

要素に対してテストする条件を定義します。指定可能な値はEXISTSとNOTEXISTSです。

VALUE

要素に対してテストする値を定義します。ソース・ファイルのセクションのタイプのテストについて、VALUE属性は、現時点ではSections.x.Type要素に対してのみ有効です。

有効な値は、次のとおりです。

  • ar = アーカイブ

  • bm = ビットマップ

  • ch = チャート

  • db = データベース

  • dr = 図面

  • mm = マルチメディア

  • pr = プレゼンテーション

  • ss = スプレッドシート

  • wp =ワード・プロセッサ・ドキュメント

例:

{## if element=property.comment}
 <p><b>Comment property exists</b></p>
{## else}
 <p><i>Comment property does not exist</i></p>
{## /if}
{## if element=sections.1.type value=wp}
 <p><b>The source file is a word processor file</b></p>
{## /if}
{## if element=sections.1.type value=ss}
 <p>Spreadsheet</p>
{## elseif element=sections.1.type value=ar}
 <p>Archive</p>
{## elseif element=sections.1.type value=ch}
 <p>Chart</p>
{## else}
 <p>Not ss, ar, or ch</p>
{## /if}
{## if element=sections.current.type value=pr
 condition=notexists}
 <p>We can do something here for all document types
 other than presentations.</p>
{## else}
 <p>This is used only for presentations.</p>
{## /if}

33.4.5 ループ: {## REPEAT}

このコマンドを使用すると、要素が出現するびにスクリプト・テンプレートの1つの領域を1回繰り返せるようになります。

構文

{## REPEAT ELEMENT=element [MAXREPS=maxreps] [SORT=sort]}
 any HTML
{## /REPEAT}
属性 説明

ELEMENT

この属性では、ソース・ファイルの繰り返す部分を指定します。これは、反復可能要素にする必要があります。この属性に指定できる値については、第33.2.4項を参照してください。

{##REPEAT... }マクロと、それを閉じる{##/REPEAT}マクロの間に、任意のHTMLを定義できます。このHTMLは、指定した要素のインスタンスごとに1回繰り返されます。さらに、Currentの語は、繰り返される要素の要素索引として他の{##}タグ内で使用できます。たとえば、テンプレート内の次のHTMLは、ドキュメント内の脚注のリストを作成します。

例:

<HTML>
<BODY>
<P>Here are the footnotes
{## REPEAT ELEMENT=Footnotes}
<P>{## INSERT ELEMENT=Footnotes.Current.Body}
{## /REP}
<P>No more footnotes
</BODY>
</HTML>

同様に、テンプレート内の次のHTMLは、アーカイブ内のすべてのアイテムの名前を挿入します。

{## repeat element=sections}
 {##insert element=sections.current.fullname}
{## /repeat}

MAXREPS

この属性では、指定した値に対して繰返し文が実行するループの合計数を制限します。これは、非常に大きいドキュメントで、過剰な量の出力が生成されないようにするために役立ちます。

SORT

このオプション属性では、出力をソートするかどうかを定義します。入力ファイルがarctypeファイルのアーカイブ・ファイルではない場合、この属性は無視されます。すべてのソートは、入力ファイル内の値の文字エンコーディングに基づいて実行されます。この時点では、ソートで大/小文字の区別もされます。ソート属性の有効値は次のとおりです。

  • fullname: Sections.Current.FullNameでソート

  • basename: Sections.Current.BaseNameでソート

  • none: ソートを実行しません。これがデフォルトです。


33.4.6 構造化ブレークとのリンク: {## LINK}

このマクロは、Dynamic Converterによって作成されたドキュメントの一部分への相対URLを生成します。通常、このURLは、リンクを作成するHTMLアンカー・タグを使用してテンプレートでカプセル化されます。{##LINK}は、{##REPEAT}ループ内で使用すると、特に効果的です。

構文

{## LINK ELEMENT=element [TOP]}

または

{## LINK TEMPLATE=template}

または

{## LINK ELEMENT=element TEMPLATE=template [TOP]}
属性 説明

ELEMENT

リンクのターゲットにする要素を定義します。{##LINK...}マクロで生成されるURLは、出力ファイル内のこの要素の最初のインスタンスを指します。この属性が存在しない場合、生成されたURLは、指定したスクリプト・テンプレートで作成された出力ファイルにリンクします。そのようなファイルが存在しない場合、指定したスクリプト・テンプレートがファイルの生成に使用されます。

各要素には1つ以上の索引値があり、それらが変数の可能性もあることに注意してください。このタイプの索引変数の一例として、Sections.Current.Bodyのcurrentがあげられます。{##LINK}を使用すると、それらの索引変数の値に影響を及ぼし、リンクされたテンプレート・ファイルの動作に原因のわかりにくい副作用が発生することがあります。

挿入された要素に{##LINK}がどのような影響を与えるかについては、第33.3項を参照してください。

TEMPLATE

元のテンプレート・ファイルと同じディレクトリに存在する必要のあるテンプレート・ファイルの名前。この属性が存在しない場合、現行テンプレートが使用されます。{##LINK}で要素が指定された場合、テンプレートにはその要素を使用する{##INSERT}文が含まれている必要があります。

テンプレートの言語では、通常、大/小文字は区別されませんが、ここで指定されたテンプレート・ファイル名では大/小文字の区別が重要になることに注意してください。テンプレートに指定されたファイル名は、オペレーティング・システムにそのまま渡されます。UNIXなどのオペレーティング・システムでは、テンプレート・ファイル名の大/小文字を間違えて指定すると、テンプレート・ファイルが見つからないためにエラーが返されます。

TOP

この属性は、要素が{##LINK}コマンドで指定された場合にのみ意味を持ちます。この属性が存在すると、生成されるURLにはブックマーク含まれなくなります。そのため、生成されるリンクのジャンプ先は、常に指定された要素を含むHTMLファイルの先頭になります。これは、スクリプト・テンプレートの先頭に、開発者がユーザーに表示しようとするナビゲーションなどの情報がある場合に役立ちます。


33.4.6.1 {## LINK}の使用シナリオ

この項の冒頭に示した最初の構文を使用すると、要素ブックマークのURLがドキュメントに挿入されます。通常、この構文は、ナビゲーションを円滑にするドキュメント内のリンクを作成するために使用されます。この例では、ドキュメントの次のセクションへのリンクを作成します。

2番目の構文では、指定したテンプレートで生成された出力ファイルにURLが作成されます。このテンプレートは、同じソース・ドキュメントに対して実行されますが、ドキュメントの異なる部分を抽出します。通常、この構文では、メインのテンプレートには、2番目のHTMLファイルへのリンクが含まれます。この2番目のファイルは、{##LINK}コマンドで指定したテンプレートを使用して生成され、別のドキュメント要素を含みます。この例として、メインのテンプレートで、ドキュメントの本体と2番目のHTMLファイル(脚注と文末脚注を含む)へのリンクを含むファイルを作成できます。

3番目の最も強力な構文でも、指定したテンプレートで生成されたファイルのURLが作成されます。このテンプレートには、指定した要素の挿入が含まれていると想定されます。通常、この構文は、反復可能要素とともに使用されます。これにより、作成者はドキュメントの連続する部分で複数の出力ファイルを生成できます。これにより、大きなドキュメントを小さく読みやすい部分に分割する方法が得られます。この構文が使用される例は、1つのHTMLファイルで目次(別のHTMLフレーム)を生成するテンプレートです。目次内のエントリは、別々のテンプレートで生成された他のHTMLファイルへのリンクになります。

テンプレートを指定する{##LINK}文では、必ずしも新しいファイルが作成される結果にはならないことに注意してください。新しいファイルは、リンクのターゲットがまだ存在しない場合にのみ作成されます。そのため、たとえば、2つの{##LINK}文で同じ要素とテンプレートを指定すると、作成されるHTMLファイルは1つのみになり、両方の{##LINK}文で同じURLが使用されるようになります。

33.4.6.2 {## LINK}アーカイブ・ファイルの例

次のテンプレートでは、ソース・アーカイブ・ファイル(次の例では、decompressedFileで表されています)から抽出して変換されたすべてのファイルへのリンクのリストが生成されます。

{## repeat element=sections}
 <p><a href="{## link element=sections.current.decompressedFile}">
 {##insert Element=sections.current.fullname}</a></p>
{## /repeat}

33.4.6.3 {## LINK}プレゼンテーション・ファイルの例

次の例(template.htm)では、最初の構文を使用してHTMLファイルのセット(プレゼンテーション内のスライドごとに1つのファイル)を生成します。各スライドには、前と次のスライドへのリンクおよび最初のスライドへのリンクが含まれます。最初と最後のスライドにそれぞれPreviousとNextのリンクが付かないように、{##IF}マクロが使用されていることに注意してください。

template.htm
 <html>
 <body>
 {##insert element=slides.current.image width=300}
 <hr />
 {##if element=slides.previous.image}
 <p><a href={## link element=slides.previous.image}>
 previous</a></p>
 {##/if}
 {##if element=slides.next.image}
 <p><a href={## link element=
 slides.next.image}>Next</a></p>
 {##/if}
 </body>
 </html>

要素属性を使用する{##LINK}の副作用により、各{##LINK}が処理されるときに、current、previousおよびnextの値の内容が、わかりにくくなることがあります。このテンプレートがどのように機能するかについて、よりわかりやすく説明するために、3つのスライドを含むプレゼンテーションに対して実行する場合を考えてみます。

最初の出力ファイル

{##LINK}文ではテンプレートが指定されていないため、template.htmがすべての{##LINK}文用のテンプレートとして使用(再使用)されます。最初のスライドの場合、slides.nextが出現するまで、関心を引くことは何も起こりません。この場合、slides.currentが1であるため、slides.nextslides.2を参照し、{##LINK}はslides.2.imageで実行されます。この{##LINK}は、アンカー・タグに2番目のスライドを含む出力ファイルのURLを埋め込みます。slides.2を含むファイルがないため、{##LINK}は新しいファイルを開きます。

2番目の出力ファイル

2番目のスライドに対して、テンプレートが再実行されます。ここでは、slides.currentslides.2を参照し、slides.previousslides.1を参照し、slides.nextslides.3を参照します。{##INSERT}文では、2番目のスライドを挿入します。

slides.previousを参照する{##IF}文は成功します。slides.1を含むファイルがすでに存在するため、追加のファイルは作成されません。アンカー・タグには、最初の出力ファイルのURLが埋め込まれます。

slides.nextを参照する{##IF}文も成功し、アンカー・タグには、3番目のスライドを含む出力ファイルのURLが埋め込まれます。slides.3を含むファイルがないため、{##LINK}は新しいファイルを開きます。

3番目の出力ファイル

3番目のスライドに対して、テンプレートが再実行されます。ここでは、slides.currentslides.3を参照し、slides.previousslides.2を参照します。slides.nextは存在しないslides.4を参照します。{##INSERT}文では、3番目のスライドを挿入します。

slides.previousを参照する{##IF}文は成功します。slides.2を含むファイルがすでに存在するため、追加のファイルは作成されません。アンカー・タグには、2番目の出力ファイルのURLが埋め込まれます。

slides.nextを参照する{##IF}文は失敗します。この時点で、処理は実質的に完了します。

33.4.7 コンテンツ・サイズ・ブレークとのリンク: {## ANCHOR}

このマクロは、コンテンツ・サイズに基づいたドキュメント分割の実行中に、Dynamic Converterで作成されたドキュメントの一部分への相対URLを生成します。

構文

{## ANCHOR AREF=type [STEP=stepval] FORMAT="anchorfmt" [ALTLINK="element"] [ALTTEXT="text"]}
属性 説明

AREF

現行ファイルに対するリンクのターゲットの関係を示します。この属性に指定できる値は、次のとおりです。

  • InsertStart: 挿入された要素の最初のページへのリンク

  • InsertEnd: 挿入された要素の最後のページへのリンク

  • Next: 挿入された要素内の次のページへのリンク

  • Prev: 挿入された要素内の前のページへのリンク

  • FirstFile: ドキュメント全体用に作成された最初のページへのリンク

  • LastFile: ドキュメント全体用に作成された最後のページへのリンク

STEP

この属性は、出力ページ間での早送り/早戻しのリンクを挿入するために使用されます。この属性は、AREFがnextまたはprevの場合にのみ使用できます。ゼロ以外の正の整数として指定します。たとえば、ドキュメント内で5ページ先にスキップするリンクを挿入するには、次の文を使用します。

{## unit aref="next" step="5" format="<p><a href=\"%url\">Next</a></p>"}

指定を省略すると、STEP属性のデフォルト値は1になります。これは次/前のページに対応します。この属性は、arefがinsertstart、insertend、firstfileまたはlastfileに相当する場合は、無意味になります。

FORMAT

これは、テキストをリンクとして出力するように指定する、sprintfスタイル形式の文字列です。Dynamic Converterは、%url形式の指定子を書式文字列内でターゲットURLに置換します。次に例を示します。

{## anchor aref="next" format="<a href=\"%url\">Next</a><br/>\r\n"}

ALTLINK

アンカーのターゲットをアンカー・タイプに基づいて解決できない場合に、そのターゲットの指定に使用される属性です。たとえば、分割可能な要素の最終ファイルには、その次のファイルがないため解決先がありません。ただし、altlink属性を指定すると、指定した要素が含まれている最初に見つかったファイルへのURLを使用して、アンカーが生成されます。

{##ANCHOR}文でEX_CALLBACK_ID_ALTLINK属性が指定されていると、EX_CALLBACK_ID_ALTLINKコールバックは行われなくなります。

次に例を示します。

{## anchor aref=next format="<a href=\"%url\">Next</a>" altlink=headings.next.body}

ALTTEXT

アンカーを解決できない場合の出力テキスト。この属性を指定しないと、アンカー・ターゲットが存在しない場合のテキストは出力されません。次に例を示します。

{## anchor aref=next format="<a href=\"%url\">Next</a>" alttext="Next"}


33.4.8 出力ファイルに挿入するコメント: {## IGNORE}

このマクロにより、テンプレート・ファイルのある領域内の{##}文が、テンプレート・パーサーに無視されます。{##IGNORE}タグと{##/IGNORE}タグの間のテキストは、出力ファイルにそのまま書き込まれます。このマクロを使用すると、テンプレートのある領域内の{##}文を、デバッグ目的でコメント・アウトしたり、実際に別の{##}マクロのテキストを書いたりできます。ただし、ブラウザでは、無視されるブロック内のHTMLタグが解析され、それに応じてテキストが書式設定されます。このマクロでは、{##/IGNORE}マクロを除くすべての{##}マクロを無視できます。このために、エスケープ・シーケンスは実装されていません。結果として、{##IGNORE}文はネストできません。ネストすると、ランタイム・テンプレート・パーサーのエラーが発生します。

構文

{## IGNORE}
 any HTML or other {##}macros
{## /IGNORE}

注意:

スクリプト・テンプレートの1つのセクションを完全にコメント・アウトするには、次に示すように、##IGNORE文をHTMLのコメントで囲みます。

<!--{## Ignore} (この部分と最後のHTMLコメントの間のすべてがコメントアウトされます) {##/Ignore}-->


33.4.9 出力ファイルに挿入しないコメント: {## COMMENT}

{##COMMENT}マクロを使用すると、テンプレート作成者は、最終的な出力ファイルには含まれないコメントをテンプレートに入れることができます。{##COMMENT}には{##ignore}の機能がありますが、{##COMMENT}ブロック内のテキストは出力ファイルにレンダリングされないためページ・サイズの計算には含まれません。{##IGNORE}と同様に、{##COMMENT}マクロはネストできません。

構文

{## COMMENT}
 any HTML or other {##}macros
{## /COMMENT}

33.4.10 別のテンプレートの組込み: {## INCLUDE}

このコマンドを使用すると、別のテンプレートを現行のテンプレートに挿入できます。これは、C/C++の#includeディレクティブと同様に機能します。

構文

{## INCLUDE TEMPLATE=template}
属性 説明

TEMPLATE

この属性には、挿入するテンプレートの名前を指定します。


33.4.11 テンプレート内でのオプションの設定: {## OPTION}

このマクロは、オプションを指定された値に設定します。すべての{##OPTION}文は、出現順に実行されます。このテンプレート・マクロを使用する場合は、どのテンプレートでも{##UNIT}タグを最初のテンプレート・マクロにする必要があることに留意してください。

テンプレートで設定されたオプションは、テンプレートがスコープになります。つまり、たとえば{##LINK}マクロが別のテンプレートを参照する場合、参照されるテンプレート内のオプションは、親テンプレートのオプション設定の影響は受けません。同様に、アーカイブ・ファイルに含まれているファイルが変換されるときには、そのアーカイブ内の子ドキュメントのエクスポートを実行するために、Exportは自身を再帰的に呼び出します。各子ドキュメントは、親テンプレートのコピーを使用して変換されますが、そのコピーは親テンプレートのオプション値を継承しません。

{##OPTION}を使用してテンプレート内で設定されたオプションは、アーカイブ内のファイルに対して実行される動的変換では継承されません。各子変換では、すべてのオプション値の新しいコピーをDASetOptionで最初に設定されたままの状態で受け取ります。

前述したように、テンプレートでオプションを設定すると、アプリケーションで設定されたすべてのオプション値はテンプレートのスコープ内でオーバーライドされます。

構文

{## OPTION OPTION=value}
属性 説明

OPTION

サポートされているオプションとその値は、次の表を参照してください。


サポートされるオプションと値

オプション 説明

SCCOPT_GRAPHIC_TYPE

このオプションでは、Dynamic Converterでドキュメントの埋込みグラフィックを変換するときに作成されるグラフィックの形式を設定します。

サポートされている値は次のとおりです。

  • FI_GIF: GIFグラフィック

  • FI_JPEGFIF: JPEGグラフィック

  • FI_PNG: PNGグラフィック

  • FI_NONE: グラフィック変換なし

デフォルトは、FI_JPEGFIFです。

SCCOPT_GIF_INTERLACED

このオプションでは、GIF出力をインタレースにするか、非インタレースにするかを指定します。インタレースGIFグラフィックは、低速のインターネット接続でグラフィックをダウンロードするときに役立ちます。それらを使用すると、ブラウザはグラフィックの低解像度表示のレンダリングをすぐに開始して、グラフィックの受信に応じてイメージの品質を向上します。インタレースのグラフィックを使用しても、実質的な不利益はありません。

サポートされている値は次のとおりです。

  • 0またはFALSE (非インタレース)

  • 1またはTRUE (インタレース)

SCCOPT_JPEG_QUALITY

このオプションでは、JPEG圧縮の損失度を設定します。これは、1から100 (パーセント)の値に設定します。100は最高品質になりますが圧縮率は最低になります。1は最低品質になりますが圧縮率は最高になります。

SCCOPT_GRAPHIC_SIZEMETHOD

このオプションでは、グラフィックのサイズ変更に使用する方法を指定します。次の3つの方法から選択できますが、どの方法も変換後のイメージ品質および変換速度が多少犠牲になります。

  • SCCGRAPHIC_QUICKSIZING

  • SCCGRAPHIC_SMOOTHSIZING

  • SCCGRAPHIC_SMOOTHGRAYSCALESIZING

クイック・サイジング・オプションを使用すると、カラー・グラフィックの変換は最も速くなりますが、変換されたグラフィックの品質はいくらか低下します。

スムーズ・サイジング・オプションでは、アンチエイリアスを使用して、元のグラフィックがより正確に表現されます。アンチエイリアスを行ったイメージは、より滑らかに表示されるため読み取りやすくなりますが、このオプションを設定するとレンダリングの処理時間が長くなります。

スムーズ・サイジング・オプションは、幅または高さが4,096ピクセルを超えるイメージに対しては機能しません。注意してください。

「グレースケールのみ」オプションもアンチエイリアスを使用しますが、グレースケール・グラフィック専用であり、カラー・グラフィックには、クイック・サイジング・オプションを使用します。

SCCOPT_GRAPHIC_OUTPUTDPI

このオプションでは、出力グラフィック・デバイスの解像度を1インチ当たりのドット数(dpi)で指定します。このオプションは、サイズが物理単位(in/cm)で指定されているイメージにのみ適用されます。たとえば、1平方インチ、100-dpiのグラフィックを、50-dpiのデバイス(このオプションを50に設定)にレンダリングするとします。この場合、生成されるWBMP、TIFF、BMP、JPEG、GIFまたはPNGのサイズは、50×50ピクセルになります。

有効値は、0から2400 (dpi)の任意の整数です。

SCCOPT_GRAPHIC_SIZELIMIT

このオプションでは、エクスポートされたグラフィックの最大サイズ(ピクセル単位)を設定します。これは、異常に大きいグラフィックが同等の扱いにくい出力ファイルに変換されることを防止するために使用します。これにより、帯域幅を節約できます。

このオプションは、変換されたグラフィックのサイズに影響する他のすべてのオプションや設定よりも優先されます。

SCCOPT_GRAPHIC_WIDTHLIMIT

このオプションを使用すると、変換されたグラフィックの幅(ピクセル単位)に厳しい制限を設定できます。この制限より幅が広いイメージは、制限に合わせてサイズが変更されます。SCCOPT_GRAPHIC_HEIGHTLIMITオプションが設定されているかどうかに関係なく、サイズが変更されたイメージは、元の縦横比が維持されることに注意してください。この幅より小さいイメージは、このオプションを使用していても拡大されません。

SCCOPT_GRAPHIC_HEIGHTLIMIT

このオプションを使用すると、変換されたグラフィックの高さ(ピクセル単位)に厳しい制限を設定できます。この制限より高さが大きいイメージは、制限に合わせてサイズが変更されます。SCCOPT_GRAPHIC_WIDTHLIMITオプションが設定されているかどうかに関係なく、サイズが変更されたイメージは、元の縦横比が維持されることに注意してください。この高さより小さいイメージは、このオプションを使用していても拡大されません。

SCCOPT_EX_FONTFLAGS

このオプションは、指定されたフォント関連のマークアップを出力で無効にするために使用します。当然のことですが、指定したタイプのマークアップが、要求された出力フレーバや、その他のオプション設定で記述されない場合に、このオプションを使用してそれを再び有効にすることはできません。ただし、ビット単位のOR演算と、このオプションのフラグの適切な組合せを併用すると、文字のサイズ、色および書体の指定をすべて抑止できます。

  • SUPPRESS_SIZE

  • SUPPRESS_COLOR

  • SUPPRESS_SIZECOLOR

  • SUPPRESS_FACE

  • SUPPRESS_SIZEFACE

  • SUPPRESS_COLORFACE

  • SUPPRESS_ALL

  • SUPPRESS_NONE

SCCOPT_EX_GRIDROWS

このオプションでは、各テンプレートのグリッドに含める行数を指定します(スプレッドシートまたはデータベースのファイルにのみ該当)。

このオプションをゼロ(0)に設定すると、グリッドの行数は制限がなくなります。

SCCOPT_EX_GRIDCOLS

このオプションでは、各テンプレートのグリッドに含める列数を指定します(スプレッドシートまたはデータベースのファイルにのみ該当)。

このオプションをゼロ(0)に設定すると、グリッドの列数は制限されなくなります。

SCCOPT_EX_GRIDADVANCE

このオプションでは、グリッド間でpreviousとnextの関係がどのように機能するかを指定します。

  • ACROSS: 入力スプレッドシートまたはデータベースを行単位で移動します。

  • DOWN: 入力スプレッドシートまたはデータベースを列単位で移動します。

このオプションには、up/downまたはleft/rightのナビゲーションに対する影響はありません。

SCCOPT_EX_GRIDWRAP

このオプションでは、スプレッドシートまたはデータベースの両端のグリッド間で、previousとnextの関係がどのように機能するかを指定します。

HTML Exportにより、グリッドが次のように9つに分割されてたスプレッドシートがあるとします。

9つのグリッドに分割されたスプレッドシートの例

このオプションをTRUEに設定すると、Grid 3の後のGrids.Next.Body値はGrid 4になります。同様にGrid 4の前のGrids.Previous.Body値はGrid 3になります。

このオプションをFALSEに設定すると、Grid 3の後のGrids.Next.Bodyは、テンプレートのナビゲーションについていえば存在しないことになります。同様に、Grid 4の前のGrids.Previous.Bodyは、テンプレートのナビゲーションについていえば存在しないことになります。

つまり、このオプションでは、スプレッドシートまたはデータベースの両端で、previousとnextの関係がラップするかどうかを指定します。


33.4.12 ファイルのコピー: {## COPY}

{##COPY}マクロは、出力ディレクトリに、変換済ドキュメントの出力とともに、追加の静的ファイルをコピーするために使用します。たとえば、元の入力ドキュメントにはなかった会社のロゴを追加した場合、{##COPY}を使用して、そのロゴを変換された出力ドキュメントの一部として含めることができます。その他の例としては、ナビゲーション用のボタンを示すために使用するグラフィック、外部のCSSファイルまたは実行されるJavaコードの一部などがあります。

構文

{## COPY FILE=file}
属性 説明

FILE

これは、コピーされるファイルの名前です。ファイルの一部として相対パス名を指定する場合は、ルート・テンプレート・ファイルを含むディレクトリを基準にする必要があります。

次に例を示します。

{## COPY FILE=uparrow.gif}


{##COPY}マクロは、テンプレートのどこにでも使用できます。{##COPY}が{##IF}内にある場合、{##COPY}は、条件がTRUEの場合にのみ実行されます。{##REPEAT}ループ内では、{##COPY}は、ループが1回以上実行された場合にのみ実行されます。さらに、{##REPEAT}が複数回ループする場合、Dynamic Converterはこれを検出して、{##COPY}を1回のみ実行します。

名前が示すように、{##COPY}マクロは純粋なファイル・コピーです。そのため、コピーの一環として変換は実行されません。たとえば、グラフィックの形式やグラフィックのサイズが変更されることはありません。テンプレートの作成者は、グラフィックおよびその他のファイルをコピーするときに、テキスト・バッファ・サイズの計算で外部グラフィック用の領域が作成されるようにするために、{##GRAPHIC}を使用することにも考慮する必要があります。

Dynamic Converterは、リクエストされたファイルをコピーするというアクションのみを実行するため、コピーしたファイルをテンプレートの別の場所で利用するかどうかは、テンプレート作成者に任せられています。たとえば、グラフィック・ファイルがコピーされていると、テンプレートではコピーされたグラフィックを参照する<img>タグが使用できます。次のテンプレート・コードのスニペットでは、これを実行します。

{## copy FILE=Picture.JPG
{## graphic PATH=Picture.JPG}
<img src="Picture.JPG">

注意:

ファイルのコピーが失敗しても、Dynamic Converterは処理を続行します。エラーは報告されません。


33.4.13 非推奨のテンプレート・マクロ

Dynamic Converterの旧リリースでは、テンプレート・マクロが{##}はなく{Inso}で始まる別のマクロ構文を使用していました。さらに、以前は略されていた単語も、現在は略さずに表記する必要があります(insではなくinsert)。しばらくは、古い構文も引き続きサポートされます。ただし、これは非推奨です。

古いInsoマクロと、それに対応する新しいマクロは、次のとおりです。

  • {insoins}: 現在は{##insert}

  • {insoif} ... {/insoif}: 現在は{##if} ... {##/if}

  • {insoelseif} ... {/insoelseif}: 現在は{##elseif} ... {##/elseif}

  • {insoelse} ... {/insoelse}: 現在は{##else} ... {##/else}

  • {insoignore} ... {/insoignore}: 現在は{##ignore} ... {##/ignore}

  • {insolink}: 現在は{##link}

  • {insorep} ... {/insorep}: 現在は{##repeat} ... {##/repeat}

同じテンプレートに、旧スタイルのInsoマクロと新しいスタイルの{##}マクロを混在させることはできません。

Dynamic Converterに含まれる新機能または今後の機能は、古い構文をサポートしません。そのため、たとえば、古い構文は、新しい{##UNIT}マクロをサポートするよう拡張されていません。

33.5 プラグマ

プラグマは、論理的には要素ツリーの一部ではない特定のドキュメント要素へのアクセスを可能にします。サポートされているプラグマは、次のとおりです。

33.5.1 Pragma.Charset

このプラグマは、Dynamic Converterが生成する文字の文字セットと関連付けられたHTMLテキスト文字列を表します。Dynamic Converterで生成するHTMLにキャラクタ・セットを正しくコード化するために、次に示すように{##INSERT}マクロを使用して、すべてのテンプレートにMETAタグを組み込む必要があります。

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset={## INSERT ELEMENT=pragma.charset}">

この行がテンプレートに組み込まれていないと、ユーザーはブラウザで正しい文字セットを手動で選択することになります。

33.5.2 Pragma.CSSFile

このプラグマは、Cascading Style Sheet (CSS)ファイルの名前をHTMLドキュメントに挿入するために使用します。通常、この名前は、HTMLの<LINK>タグとともに使用して、Dynamic Converterで生成されたCSSファイルに含まれるスタイルを参照します。

{##INSERT}マクロで使用すると、このプラグマは作成されるCSSファイルのURLを生成します。このマクロは、ソース・ファイルのコンテンツを挿入するすべてのテンプレート・ファイル内で、選択したHTMLフレーバがCSSをサポートしている場合に、{##INSERT}とともに使用する必要があります。CSSファイルは、選択したHTMLフレーバでCSSがサポートされている場合にのみ作成されます。

{##IF}マクロで使用する場合は、選択したHTMLフレーバでCascading Style Sheetがサポートされていれば、条件はtrueになります。

出力にCSSが必要になる場合は、{##IF element=pragma.embeddedcss}または{##IF element=pragma.cssfile}を使用します。ただし、この2つはDynamic Converterでは区別されないため、埋込みCSSと外部のCSSのどちらを使用するかは作成者が選択できます。また、この2つを出力に混在させることもできます。

このプラグマの使用例を次に示します。この例は、HTMLのCSSフレーバまたは非CSSフレーバのどちらをエクスポートするときにも機能します。

{## IF ELEMENT=Pragma.CSSFile}
 <LINK REL=STYLESHEET
 HREF="{## INSERT
 ELEMENT=Pragma.CSSFile}">
 </LINK>
{## /IF}

33.5.3 Pragma.EmbeddedCSS

このプラグマは、ドキュメントの<HEAD>に単一のブロックでCSSスタイルの定義を挿入するために使用します。

{##INSERT}マクロで使用する場合、このプラグマにより、ファイルで後から使用するために必要なCSSスタイル定義のブロックが挿入されます。このマクロは、ドキュメント・コンテンツを挿入するために{##INSERT}を使用している各出力HTMLファイルで使用する必要があります。

{##IF}マクロで使用する場合は、選択したHTMLフレーバでCSSがサポートされていれば、条件はtrueになります。

出力にCSSが必要になる場合は、{##IF element=pragma.embeddedcss}または{##IF element=pragma.cssfile}を使用します。ただし、この2つはDynamic Converterでは区別されないため、埋込みCSSと外部のCSSのどちらを使用するかは作成者が選択できます。また、この2つを出力に混在させることもできます。

入力ドキュメントでスタイルが使用されている場合、そのスタイルは、入力ファイルごとに生成されるすべての出力HTMLファイル用に生成される埋込みCSS内に示されます。出力を複数のHTMLファイルに分割するテンプレートがあるとします。この例では、入力ファイルにMyStyleスタイルが含まれています。変換中に実際にMyStyleスタイルを参照する出力HTMLファイルが1つのみでも問題ありません。MyStyleスタイルの定義は、このスタイルを参照することのないファイルも含めたすべての出力ファイルの埋込みCSS内に示されます。

33.5.4 Pragma.JsFile

このプラグマは、JavaScriptファイルの名前をHTMLドキュメントに挿入するために使用します。通常、この名前は、HTMLの<SCRIPT>タグとともに使用して、HTML Exportで生成された.jsファイルに含まれるJavaScriptを参照します。

{##INSERT}マクロで使用すると、このプラグマは作成されるJavaScriptファイルのURLを生成します。このマクロは、ソース・ファイルのコンテンツを挿入するすべてのテンプレート・ファイル内で、次の場合に{##INSERT}とともに使用する必要があります。

  1. 選択したHTMLフレーバでJavaScriptがサポートされている。

  2. javaScriptTabsオプションがtrueに設定されている。

JavaScriptファイルは、選択したHTMLフレーバでJavaScriptがサポートされている場合にのみ作成されます。

{##IF}マクロで使用する場合、選択したHTMLフレーバでJavaScriptがサポートされているかどうかによって、条件は異なります。

33.5.5 Pragma.SourceFileName

このプラグマは、変換されるソース・ドキュメントの名前を表します。


注意:

Pragma.SourceFileNameプラグマには、パス名を含めないでください


33.6 スクリプト・テンプレートの書式設定オプションの設定

スクリプト・テンプレートの書式設定オプションは、「Dynamic Converterの構成」ページの「スクリプト・テンプレートの変換の構成」設定を編集することで制御できます。

変更できる設定は、次のとおりです。

33.6.1 変換済グラフィックに使用される形式の変更

変換済グラフィックに使用する形式を変更する場合は、次のオプションを編集します。

# SCCOPT_GRAPHIC_TYPE
#
# Determines what graphic format will be used for exported graphics.
# Setting this to "none" disables graphic output.
#
graphictype gif
#graphictype jpeg
#graphictype png
#graphictype none

#で始まる行は、コメントアウトされています。そのため、前述の例では、.gif形式が選択されたデフォルト設定を示しています。そのかわりに.jpeg形式を使用するには、次に示すように、単に1行目をコメント化し、2行目のコメント化を解除します。

#graphictype gif
graphictype jpeg
#graphictype png
#graphictype none

33.6.2 リストの行頭文字と番号の生成

HTMLリスト・タグのかわりにリストの行頭文字と番号を生成する場合は、次のオプションを編集します。

# SCCOPT_GENBULLETSANDNUMS

#
# Generate Bullets and Numbers. Bullets and numbers will be generated for
# lists instead of using HTML list tags (<ol>, <ul>, <li>, etc.) when
# rendering lists in a document.
#
genbulletsandnums no
#genbulletsandnums yes

前述のように、一方の行をコメント化し、もう一方の行のコメント化を解除します。

#genbulletsandnums no
genbulletsandnums yes

33.7 構造によるドキュメントの分割

テンプレート・アーキテクチャの最も強力な機能の1つは、長いワード・プロセッサ・ドキュメントを論理的な要素に分割し、それらにアクセスするための強力なナビゲーション支援機能を作成する能力です。

これがどのように行われるかを理解するには、まずワード・プロセッサ・ドキュメントに関連するドキュメント・ツリーを理解する必要があります。後述のやや複雑な図は、ツリー内の要素が、実際のドキュメントとどのような関係にあるかを示したものです(後述の図を参照)。

次のいくつかの例は、前述のイメージで示したドキュメントに対して実行したときに作成される要素とデータを示しています。2番目の2つの例では、デフォルト・ノードのbodycontentsを省略しています。

body.contents.headings.2.body.title

"Present Day"が生成されます。

body.contents.headings.2.body.contents.headings.1.body.title

"Commercial"が生成されます。

body.contents.preface

"The History of Flight"と、その下のテキスト("Introduction"の直前まで)が生成されます。

headings.2.headings.1.headings.3.title

"McDonnell-Douglas"が生成されます。

headings.2.headings.1.headings.3.contents

"McDonnell-Douglas"の下から"Military"の上までのテキストが生成されます。

図33-2 構造によるドキュメントの分割

構造によるドキュメントの分割例

ドキュメントを分割するには、Dynamic Converterは、ドキュメントの構造の論理区分を認識する必要があります。現在のところ、Dynamic Converterに明白な方法でこの情報を提供できるのは、Microsoft Word 95以上とWordPerfect 6.0以上の形式のみです。これらの形式では、作成者がドキュメント内に目次情報を配置すると、分割情報を使用できます。この情報を含めるために必要な手順については、該当するソフトウェアのマニュアルを参照してください。これは、ドキュメントには目次が必要だということではなく、目次を作成するための情報が必要というだけです。

Microsoft Word 2002 (XP)など、一部の文書処理の形式では、ユーザーが様々な方法でTOCエントリを指定できます。Dynamic Converterでは、次の方法のうち2つのみをサポートしています。

TOC指定する方法 Dynamic Converterでのサポート

適用された見出しスタイル

はい

アウトライン・レベルを持つカスタム・スタイル

はい

段落属性として適用されたアウトライン・レベル

いいえ

TOCエントリ

いいえ


また、元のドキュメントで表内のテキストに見出しスタイルが適用されている場合、Dynamic Converterではその見出しでの分割は行われません。これは、Dynamic Converterでは表内を分割しないためです。

索引と構造ベースの分割

すべての反復可能ノードには、変換処理の任意の時点での現行値を持つ索引変数が関連付けられています。パスの一部として反復可能ノードが含まれる要素の場合、反復可能要素のインスタンスは、数値またはいくつかの索引変数キーワードの1つを使用して指定する必要があります。索引変数に指定できる値の詳細は、第33.3.1項を参照してください。

33.8 コンテンツ・サイズによるドキュメントの分割

構造によるドキュメントの分割(第33.6項を参照)に加えて、Dynamic Converterでは、各出力ファイル(つまりページ)に配置されるコンテンツの量に基づいたドキュメントの分割もサポートしています。ドキュメントは、その構造コンテンツ・サイズの両方に基づいて分割することもできます。

コンテンツ・サイズでドキュメントを分割するには、次の2つのことを実行しておく必要があります。まず、SCCOPT_EX_PAGESIZEpageSizeオプションを設定する必要があります(第33.4.11項を参照)。次に、使用するテンプレートを{##UNIT}構造にする必要があります(第33.4.2項を参照)。

単位テンプレート構造の背景にある基本的な考えは、すべてのページで繰り返す必要のあるもの、および一度のみ表示する必要のある部分を、Dynamic Converterに伝えることです。つまり、単位テンプレート構造が、テンプレート・テキストとドキュメント要素をグループ化するメカニズムを提供するということです。単位境界は、ドキュメントが複数ページにまたがるとき、どこで分割するかを決める場合に使用します。

テンプレート作成者がすべてのページに表示させるものとして、次の例があげられます。

すべてのページでは表示しないものの典型的な例は次のとおりです。

単位は、1つのヘッダー、1つのフッター(どちらもオプション)と1つの本体で構成されています。すべての単位の先頭または末尾で繰り返されるアイテムは、それぞれヘッダーまたはフッターに配置する必要があります。

単位は{##UNIT}テンプレート・マクロによって区切られます。同様に、{##HEADER}および{##FOOTER}テンプレート・マクロは、それぞれヘッダーおよびフッターを区切ります。本体は、ヘッダーとフッターの間の残りのすべての部分です。{##UNIT}マクロは、テンプレートの最初のマクロにする必要があります。多くの場合、本体にはネストされた単位が含まれます。本体は空の場合もあります。

必ずヘッダーがテンプレート内の最初のアイテムになり、フッターが最後のアイテムになるように、{##UNIT}タグと{##HEADER}タグの間のテキストと、{##/FOOTER}タグと{##/UNIT}タグの間のテキストは、空白も含め無視されます。ある単位のヘッダーとフッターは、その単位を含むすべてのページに出力されます。ヘッダーとフッターで、特定のページに収まる単位の本体部分を囲みます。テンプレート全体が1つの単位であり、この単位には別の単位を含めることもできます。

33.8.1 サイズ分割テンプレートのサンプル

例として、「スクリプト・テンプレートについて」の非常に単純なテンプレートを再検討します。さらに興味深くするために、<meta>タグで文字セットをテンプレートに挿入してみます。ページ間の移動を円滑にするために、より効率的なナビゲーションも挿入します。変更したバージョンのテンプレートは、次のようになります。

{## unit}{## header}
<html><head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html;
charset={## insert element=pragma.charset}" /></head>
<body>
{## anchor aref="prev" format="<p><a href=\"%url\">Prev</a></p>"}
{## /header}
<p>Here is the document you requested.
{## insert element=property.title} by
{## insert element=property.author}</p>

<p>Below is the document itself</p>
{## insert element=body}
{## footer}
{## anchor aref="next" format="<p><a href=\"%url\">Next</a></p>"}
</body>
</html>
{## /footer}{## /unit}

ページ・サイズ・オプションには、非常に小さな値(約20文字)を使用しています。その結果としてのHTMLは、次のようになります(このHTMLは、マクロの結果を太字で示しています)。

file1.htm

<html><head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ASCII"/></head>
<body>
<p>Here is the document you requested.</p>
<p>A Poem by Phil Boutros</p>
<p><a href="file2.htm">Next</a></p>
</body>
</html>

file2.htm

<html><head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ASCII" /></head>
<body>
<p><a href="file1.htm">Next</a></p>
<p>Below is the document itself</p>
<p>Roses are red</p>
<p>Violets are blue</p>
<p><a href="file3.htm">Prev</a></p>
</body>
</html>

file3.htm

<html><head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ASCII" /></head>
<body>
<p><a href="file2.htm">Prev</a></p>
<p>I'm a programmer</p>
<p>and so are you</p>
</body>
</html>

注意すべき点がいくつかあります。

  • ページ・サイズ・オプション値は、テンプレートのテキストに適用されるのではなく、ソース・ドキュメントから挿入されたテキストにのみ適用されます。各ページには、約20文字の目に見える入力ドキュメント・テキストが含まれます。

  • キャラクタ・セットの{##INSERT}は{##HEADER}の一部であるため、すべての出力ページに挿入されます。

  • 単位の本体のテキストは、順次挿入されます。そのため、<p>Below is the document itself</p>行のような、そのままのテンプレート・テキストは一度のみ挿入されます。

  • {##ANCHOR}タグでは、前/次のページへのリンク(実際に前/次のページがある場合)のみを挿入します。そのため、最初のページには、存在することのない前のページへのリンクは含まれません。

33.8.2 {## UNIT}マクロのないテンプレート

{##UNIT}マクロは、SCCOPT_EX_PAGESIZEpageSizeオプションを使用してサイズに基づいたページ分割を行うためのテンプレートにのみ必要になります。サイズベースの分割を実行しないテンプレートの例として、HTMLの<FRAME>を定義して、ドキュメントのコンテンツを含まないテンプレートがあげられます。サイズベースの分割が行われない例には、目次ページもあります。これは、目次ページにドキュメント・コンテンツが含まれている場合でも同じです。

{##UNIT}形式に準拠しないテンプレートは、サイズベース分割のテンプレートではありません。このタイプのテンプレートのサポートは、今後も継続されます。最初に出現するマクロ・タグが{##UNIT}以外の場合、そのテンプレートはサイズベース分割のテンプレートにはならないと考えられます。つまり、そのテンプレート内では、その後に{##UNIT}、{##HEADER}または{##FOOTER}のいずれのマクロも存在しないということです。SCCOPT_EX_PAGESIZEpageSizeオプションの値は、このタイプのテンプレートでは無視されます。

33.8.3 索引とサイズベースの分割

前述のように、すべての反復可能ノードには、関連付けられている索引変数があります。NextやLastなどの索引変数キーワードの使用方法の詳細は、第33.3.1項を参照してください。

33.9 スプレッドシートおよびデータベース・ファイルをナビゲートするためのグリッドの使用

スプレッドシート(および、特殊な場合として、データベース・ファイル)をサポートするために、グリッドと呼ばれるテンプレートベースのナビゲーション概念を利用できます。グリッドは、スプレッドシートまたはデータベースを直観的で矛盾なくナビゲートする方法を提供します。

グリッドを使用すると、大きなスプレッドシートの出力を小さい部分で表現するため、スクロールの必要性が少なくなります。また、HTMLバージョンの巨大なスプレッドシートが、ブラウザの能力を超えて、ブラウザが動かなくなる可能性をなくすためにも使用できます。さらに、グリッドは、CPU時間を過剰に浪費する前に、大きなスプレッドシートの処理を停止するためにも使用できます。

グリッドを使用するには、新しいグリッド・テンプレート要素を使用する必要があります(第33.2.4項を参照)。グリッドは、{##UNIT}テンプレート・マクロが有効になっているテンプレートでのみ使用できます。グリッド関連のオプションを設定することも重要です(第33.4.11項を参照)。

グリッド・サポートには、いくつか重要な制限があります。

  1. 出力ファイル形式とフレーバでは、表をサポートすることが望まれます。ただし、これは必須ではありません。

  2. グリッドは、スプレッドシートとデータベース入力ファイルの変換時にのみ使用されます。現時点では、ワード・プロセッサで作成したファイルには使用できません。

  3. サイズに制限があるため、グリッド・サポートは、入力ファイル内のセルのコンテンツに多くの書式設定(太字、特殊フォント、テキストの色など)が使用されていない場合に、最も効果を発揮します。

グリッド・システムを詳しく説明するために、一例として複数シートのスプレッドシート・ワークブックについて考えてみます。このスプレッドシート・ワークブック内の各シートは、多数のグリッドのコレクションに分割されます。各グリッドは、最大サイズが一定であり、スプレッドシートの長方形の部分になります。グリッドのサイズは、スプレッドシートのセルの数として指定します。たとえば、図33-3の7×10のスプレッドシートについて考えてみます。

図33-3 7×10のスプレッドシートの例

7×10のスプレッドシートの例

これを3×4のグリッドに分割すると、図33-4に示すように、9つのグリッドが作成されます。

図33-4 3×4のグリッドに分割された7×10のスプレッドシートの例

3×4のグリッドに分割された7×10のスプレッドシートの例

通常、すべてのグリッドには同数のセルが含まれます。その例外は、スプレッドシートの右端と一番下のグリッドで、標準のサイズより小さくなります。グリッドは、要求されたサイズより大きくなることはありません。このため、グリッドは、up、down、leftあるいはrightを使用して、簡単にナビゲートできます。グリッドで唯一できないことは、スプレッドシート内の個々のセルへのアドレス指定です(グリッドのサイズが1×1の場合は除きます)。

Dynamic Converterでは、各グリッド間でのデッキ/ページ分割は強制されません。そのため、テンプレート作成者が、各デッキ/ページのグリッドを1つにのみ制限する場合は、テンプレート内で分割を強制する必要があります。

表がない場合のグリッド・サポート

Dynamic Converterでサポートされているすべての出力フレーバが、表の作成をサポートしているわけではありません。出力フレーバが表をサポートしていない場合でも、Dynamic Converterではグリッドをサポートします。ただし、Dynamic Converterの通常の表以外の出力は、グリッド形式で表現されます。たとえば、[A1]がセルA1のコンテンツを表しているとして、次のものを(2×2)のサイズのグリッド用にエクスポートするとします。

grids.1.bodyが、次の内容だとします。

[A1]
[A2]
[B1]
[B2]

この場合、grids.right.bodyの内容は次のようになります。

[C1]
[C2]
[D1]
[D2]

また、grids.down.bodyの内容は、次のようになります。

[A3]
[A4]
[B3]
[B4]