ヘッダーをスキップ
Oracle® WebCenter Content Dynamic Converter管理者ガイド
11gリリース1 (11.1.1)
B66698-01
  ドキュメント・ライブラリへ移動
ライブラリ
目次へ移動
目次
索引へ移動
索引

前
 
次
 

7 スクリプト・テンプレート

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

7.1 スクリプト・テンプレートの概要

スクリプト・テンプレートは、テキストベースの変換テンプレートで、主に旧リリースのDynamic Converterで使用されていました。プレーンテキスト・ファイルであるため、要素、索引、マクロ、プラグマ、Idoc Scriptを使用して手動でコード化する必要があります。このテンプレート・フォーマットは引き続きDynamic Converterで使用できますが、クラシックHTML変換テンプレート(第5章「HTML変換テンプレート」を参照)の大部分はスクリプト・テンプレートで置き換えられています。


注意:

Idoc Scriptの詳細は、Content Serverの開発者ドキュメントを参照してください。

次の例は、非常に単純なスクリプト・テンプレートのコードです。

{## 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>

7.2 要素

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

7.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つのタイプの要素があります(それぞれ「リーフ要素」および「反復可能要素」を参照)。

図7-1 要素ツリーの例

要素ツリーの例

7.2.2 リーフ要素

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

7.2.3 反復可能要素

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

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

7.2.4 要素定義

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

要素 タイプ 説明
Property.Author リーフ ソース・ファイルの作成者プロパティ。
Property.Title リーフ ソース・ファイルのタイトル・プロパティ。
Property.Subject リーフ ソース・ファイルのサブジェクト・プロパティ。
Property.Keywords リーフ ソース・ファイルのキーワード・プロパティ。
Property.Comments リーフ ソース・ファイルのコメント・プロパティ。
Property.Others 反復可能 これにより、特に前述のプロパティ要素を介してアクセスできないすべてのプロパティへのアクセスが可能になります。また、これにはプロパティのNameとBodyの両方が含まれます。どのOtherプロパティがサポートされているかは、ファイル形式により異なります。一部のファイル形式では、ユーザーが定義できる追加のプロパティも使用できます。

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

Property.Others.x.Name リーフ プロパティの説明的な名前。
Property.Others.x.Body リーフ プロパティのテキスト。
Sheets 反復可能 後述のSectionsを参照。
Slides 反復可能 後述の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 反復可能 ヘッダーは、ドキュメント構造を示すために作成者によって挿入されたワード・プロセッサ文書内のラベルです。ヘッダーの詳細は、「構造によるドキュメントの分割」を参照してください。Dynamic Converterではこの構造を読み取り、Headings要素を使用することで、アクセスできるようにします。
Sections.x.Body.Contents. Headings.x.Body. 下に複数のリーフおよび反復可能要素を持つリーフ 各ヘッダーの下で、Bodyから下の完全なドキュメントの構造が繰り返されます。これらの要素がドキュメントの各部分にどのようにマップされるかは、「構造によるドキュメントの分割」を参照してください。
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}マクロで使用する方法の詳細は、「条件: {## IF...}、{## ELSEIF...}および{## ELSE}」を参照してください。

Sections.x.Footnotes 反復可能 すべての脚注。
Sections.x.Footnotes.x.Body リーフ 完全な脚注参照とコンテンツ・テキスト。
Sections.x.Footnotes.x. Reference リーフ 脚注の参照番号。
Sections.x.Footnotes.x. Content リーフ 脚注のコンテンツ・テキスト。
Sections.x.Footnotes 反復可能 すべての脚注。
Sections.x.Endnotes.x.Body 下に複数のリーフを持つ反復可能 完全なエンドノート参照とコンテンツ・テキスト。
Sections.x.Endnotes.x. Reference 下に複数のリーフを持つ反復可能 エンドノートの参照番号。
Sections.x.Endnotes.x. Content 下に複数のリーフを持つ反復可能 エンドノートのコンテンツ・テキスト。
Sections.x.Annotations 反復可能 すべての注釈。
Sections.x.Annotations.x. Body リーフ 完全な注釈参照とコンテンツ・テキスト。
Sections.x.Annotations.x. Reference リーフ 注釈の参照テキスト。
Sections.x.Annotations.x. Content リーフ 注釈のコンテンツ・テキスト。
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ドキュメントに挿入するために使用します。この名前は、通常、Dynamic Converterで生成されるCSSファイルに含まれるスタイルを参照するために、HTMLの<LINK>タグとともに使用されます。

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

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

CSSが出力に必要な場合、{## IF element=pragma.embeddedcss}または{## IF element=pragma.cssfile}を使用します。しかし、Dynamic Converterでは2つの区別をしません。埋込み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}を使用します。しかし、Dynamic Converterでは2つの区別をしません。埋込みCSSを使用するか外部のCSSを使用するかは作成者が選択でき、出力で2つを混在させることもできるからです。

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

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

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

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

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

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

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


7.3 索引

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

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

7.3.1 索引変数キーワード

この索引に使用可能な値(要素定義(「要素の定義」を参照)ではxとして参照)は、次のとおりです。

7.3.1.1 整数

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


注意:

Dynamic Converterの索引は、1(0ではない)からカウントが始まります。

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

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

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

7.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の値を減らす効果があります。

次の例では、単一のテンプレート・ファイルと、一連の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}

7.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は無効です。これらのキーワードのそれ以外の使用方法は見た目のとおりです。

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

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

次の例では、単一のスクリプト・テンプレート・ファイルと、一連の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>

7.4 マクロ

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

7.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"}

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

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

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}

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

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

構文

{## INSERT [ELEMENT=element [WIDTH=width] [HEIGHT=height] [SUPPRESS=suppress] [TRUNCATE=truncate]] | [NUMBER=number] [URLENCODE]}
属性 説明
ELEMENT この属性は、ソース・ファイルのどの部分が、マクロの場所で出力ファイルに配置されるかを説明します。この属性に指定できる値については、「要素の定義」を参照してください。この属性の値が要素ツリーにない場合、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属性は、カスタム要素と一緒には使用できないことに注意してください。これは、カスタム要素定義では、{## NSERT}に対するその他の属性が排除されるからです。

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

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

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

ユーザーは、挿入されるスプレッド・シートまたはデータベースごとに、1つしかグリッド・サイズを選択できない点を注意されます。グリッドの寸法の1つまたは両方が指定されておらず、SCCOPT_EX_PAGESIZEオプションが使用されている場合、グリッドのサイズは、部分的にTRUNCATE値に基づいて決まります。この場合に、単一シートのグリッドがテンプレート内の複数箇所に挿入され、異なる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が指定されたかのように挿入されます。これにより、プロパティ文字列がどのように表示されるかを最大限制御できます。

7.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}

注意:

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

属性 説明
ELEMENT この属性は、ソース・ファイルのどの部分がテストされるかを説明します。この属性に指定できる値については、「要素の定義」を参照してください。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}

7.4.5 ループ: {## REPEAT}

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

構文

{## REPEAT ELEMENT=element [MAXREPS=maxreps] [SORT=sort]}
    any HTML
{## /REPEAT}
属性 説明
ELEMENT この属性は、ソース・ファイルのどの部分が繰り返されるかを説明します。その部分は、反復可能要素であることが必要です。この属性に指定できる値については、「要素の定義」を参照してください。

どのHTMLも、{## REPEAT... }マクロとその終了{## /REPEAT}マクロの間で定義できます。この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: ソートなし。これがデフォルトです。


7.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}が挿入された要素にどのように影響を与えるかについては、「索引」を参照してください。

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

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

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

7.4.6.1 {## LINK}の使用状況

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

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

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

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

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

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

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

7.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.nextはslides.2を参照し、{## LINK}はslides.2.imageで実行されます。この{## LINK}は、アンカー・タグに2番目のスライドを含む出力ファイルのURLを埋め込みます。slides.2を含むファイルがないため、{## LINK}は新しいファイルを開きます。

2番目の出力ファイル

2番目のスライドの場合、テンプレートが再実行されます。今度はslides.currentがslides.2を、slides.previousがslides.1を、slides.nextがslides.3を参照します。{## INSERT}文は、2番目のスライドを挿入します。

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

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

3番目の出力ファイル

3番目のスライドの場合、テンプレートが再実行されます。今度はslides.currentがslides.3を、slides.previousがslides.2を参照します。slides.nextは、存在しないslides.4を参照します。{## INSERT}文は、3番目のスライドを挿入します。

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

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

7.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"}


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

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

構文

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

注意:

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

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


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

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

構文

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

7.4.10 その他のテンプレートの組込み: {## INCLUDE}

このコマンドを使用すると、他のテンプレートを現行テンプレートに挿入できます。これは、C/C++の# includeディレクティブのような働きをします。

構文

{## INCLUDE TEMPLATE=template}
属性 説明
TEMPLATE この属性は、挿入するテンプレートの名前を指定します。

7.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は、画像が低速のインターネット接続でダウンロードされるときに役立ちます。インタレースGIFを使用すると、ブラウザでは画像の低解像度ビューのレンダリングをただちに開始し、その後で画像品質を受信した品質まで向上します。インタレースの画像を使用しても、実際には不利はありません。

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

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

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

SCCOPT_JPEG_QUALITY このオプションは、JPEG圧縮の損失の大きさを設定します。これは1〜100 (パーセント)の値に設定します。100は最高品質で圧縮率が最も低く、1は最低品質で圧縮率が最も高くなります。
SCCOPT_GRAPHIC_SIZEMETHOD このオプションは、画像のサイズを設定するために使用するメソッドを指定します。次の3つのメソッドから選択できます。各メソッドでは、最終的な画像品質と変換スピードの間である程度のトレードオフが行われます。
  • SCCGRAPHIC_QUICKSIZING

  • SCCGRAPHIC_SMOOTHSIZING

  • SCCGRAPHIC_SMOOTHGRAYSCALESIZING

quick sizingオプションを使用すると、カラー画像の変換は最も速くなりますが、変換された画像の品質はいくらか低下します。

smooth sizingオプションでは、アンチエイリアスを使用して、元の画像がより正確に表現されます。アンチエイリアスを行った画像は、より滑らかに見え、読み取りやすくなりますが、このオプションを設定した場合のレンダリングの処理時間は長くなります。

smooth sizingオプションは、幅または高さが4,096ピクセルを超えるイメージに対しては機能しないので注意してください。

grayscale-onlyオプションもアンチエイリアスを使用しますが、グレースケール画像専用で、カラー画像に対してはquick sizingオプションを使用します。

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: 入力スプレッドシートまたはデータベースを列単位で横断します。

このオプションには、上/下または左/右のナビゲーションに対する影響はありません。

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

HTML Exportによりグリッドが次のように9つに分割されているスプレッドシートについて考えてみます。

周辺のテキストはgrid_flag.gifについて説明しています。

このオプションを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の関係がラップされるかどうかを指定します。


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

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

構文

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

次に例を示します。

{## COPY FILE=uparrow.gif}


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

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

Dynamic Converterのアクションは、リクエストされたファイルをコピーすることのみであるため、テンプレート作成者はテンプレートの別の場所でコピーしたファイルを利用する必要があります。たとえば、画像ファイルをコピーすると、テンプレートではコピーした画像を参照する<img>タグを使用できます。次のテンプレート・コードのスニペットでは、これを実行します。

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

注意:

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

7.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}マクロをサポートするよう拡張されていません。

7.5 プラグマ

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

7.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}">

テンプレートにこの行が含まれていない場合、ユーザーがブラウザで正しいキャラクタ・セットを手動で選択する必要があります。

7.5.2 Pragma.CSSFile

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

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

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

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

HTMLのCSSまたは非CSSフレーバのいずれかをエクスポートするときに機能するこのプラグマの使用例は、次のようになります。

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

7.5.3 Pragma.EmbeddedCSS

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

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

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

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

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

7.5.4 Pragma.JsFile

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

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

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

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

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

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

7.5.5 Pragma.SourceFileName

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


注意:

Pragma.SourceFileNameプラグマには、パス名は含まれません

7.6 サンプル・スクリプト・テンプレート

Dynamic Converterには、多数のサンプル・スクリプト・テンプレートが付属しており、これをContent Serverにチェックインして、ただちに使用を開始できます。サンプル・スクリプト・テンプレートは、/ucm/Distribution/DynamicConverterSamplesディレクトリにあります。

次のレイアウト・テンプレートを使用できます。

これらのサンプル・スクリプト・テンプレートは、Hypertext Content Server Template (HCST)ファイルとして提供されています。

7.6.1 Basic

図7-2に、Basicスクリプト・テンプレートの例を示します。

図7-2 Basicスクリプト・テンプレートの例

Basicスクリプト・テンプレートの例
「図7-2 Basicスクリプト・テンプレートの例」の説明

Basicサンプル・スクリプト・テンプレートには、次のコードが含まれています。

<html>
<head>
{## if element=property.title}
    <title>{## insert element=property.title suppress=tags}</title>
{## else}
    <title>Converted {## insert element=pragma.sourcefilename}</title>
{## /if}

{## if element=pragma.cssfile}
    <link rel="stylesheet" href="{## insert element=pragma.cssfile}"</link>
{## /if}

<$defaultPageTitle="Converted Content"$>
<$include std_html_head_declarations$>
</head>

<$include body_def$>
<$include std_page_begin$>
<$include std_header$>

<table border="0" cellpadding="0" cellspacing="0" width="550">
<tr><td>

{## repeat element=sections}
    <p align="center">{## insert element=sections.current.bodyorimage width=500}</p>
    <hr size="3"></hr>
{## /repeat}

</td></tr>
</table>

<$include std_page_end$>
</body>
</html>

7.6.2 Elements

図7-3に、Elementsスクリプト・テンプレートの例を示します。

図7-3 Elementsスクリプト・テンプレートの例

Elementsスクリプト・テンプレートの例
「図7-3 Elementsスクリプト・テンプレートの例」の説明

Elementsテンプレートの詳細は、付録E「Elementsスクリプト・テンプレート」を参照してください。

7.6.3 Plain

Plainサンプル・スクリプト・テンプレートには、次のコードが含まれています。

<html>
<head>
{## if element=property.title}
    <title>{## insert element=property.title suppress=tags}</title>
{## else}
     <title>Converted {## insert element=pragma.sourcefilename}</title>
{## /if}

{## if element=pragma.cssfile}
     <link rel="stylesheet" href="{## insert element=pragma.cssfile}"</link>
{## /if}

<$defaultPageTitle="Converted Content"$>
<$include std_html_head_declarations$>
</head>

<$include body_def$>
<$include std_page_begin$>
<$include std_header$>

<table border="0" cellpadding="0" cellspacing="0" width="550">
<tr><td>
{## repeat element=sections}
    {## if element=sections.current.type value=wp}
        {## insert element=sections.current.bodyorimage width=500}

        {## if element=sections.current.footnotes.1.body}
        <br></br>
        {## repeat element=sections.current.footnotes}
        {## insert element=sections.current.footnotes.current.body}
        <br></br>
        {## /repeat}
    {## /if}

        {## if element=sections.current.endnotes.1.body}
            <br><br>
            {## repeat element=sections.current.endnotes}
            {## insert element=sections.current.endnotes.current.body}
            <br></br>
        {## /repeat}
        {## /if}
    {## else}
    <h1>{## insert element=sections.current.body.title suppress=tags}</h1>
    {## insert element=sections.current.bodyorimage width=500}
    <br></br><hr></hr><br></br>
    {## /if}
{## /repeat}

</td></tr>
</table>

<$include std_page_end$>
</body>
</html>

7.6.4 SimpleToc

図7-4に、SimpleTOCスクリプト・テンプレートの例を示します。

図7-4 SimpleTOCスクリプト・テンプレートの例

SimpleTOCスクリプト・テンプレートの例
「図7-4 SimpleTOCスクリプト・テンプレートの例」の説明

SimpleTocサンプル・スクリプト・テンプレートには、次のコードが含まれています。

<html>
<head>
{## if element=property.title}
    <title>{## insert element=property.title suppress=tags}</title>
{## else}
    <title>Converted {## insert element=pragma.sourcefilename}</title>
{## /if}

{## if element=pragma.cssfile}
    <link rel="stylesheet" href="{## insert element=pragma.cssfile}"</link>
{## /if}

<$defaultPageTitle="Converted Content"$>
<$include std_html_head_declarations$>
</head>

<$include body_def$>
<$include std_page_begin$>
<$include std_header$>

<table border="0" cellpadding="0" cellspacing="0" width="550">
<tr><td>
    {## repeat element=sections}
    {## if element=sections.current.title}
        <a href="{## link element=sections.current.bodyorimage}">
          {## insert element=sections.current.title suppress=tags}
        </a>
        <br></br>
    {## /if}

    {## if element=sections.current.type value=wp}
        {## if element=sections.current.headings.1.body}
        {## repeat element=sections.current.headings}
        <a href="{## link element=sections.current.headings.current.body}">
          {## insert element=sections.current.headings.current.title suppress=tags}
        </a>
     <br></br>

    {## if element=sections.current.headings.current.headings.1.body}
     {## repeat element=sections.current.headings.current.headings}
      &#160;&#160;&#160;&#160;&#160;
      <a href="{## link element=sections.current.headings.current.headings.current.body}">
      {## insert element=sections.current.headings.current.headings.current.title suppress=tags}
      </a>
   <br></br>
{## /repeat}
{## /if}
{## /repeat}
{## /if}
{## /if}
{## /repeat}

    <hr size="3"></hr>
    {## repeat element=sections}
    {## insert element=sections.current.bodyorimage width=500}
    <hr size="3"></hr>
    {## /repeat}

    {## if element=property.author}
      <p><b>Author:</b><br></br>
        {## insert element=property.author suppress=tags}
      </p>
    {## /if}
    <br></br>
    {## if element=property.title}
       <p><b>Title:</b><br></br>{## insert element=property.title suppress=tags}</p>
    {## /if}
    <br></br>
    {## if element=property.subject}
       <p><b>Subject:</b><br></br>{## insert element=property.subject suppress=tags}</p>
    {## /if}
    <br></br>
    {## if element=property.keywords}
      <p><b>Keywords:</b><br></br>{## insert element=property.keywords suppress=tags}</p>
    {## /if}
    <br></br>
    {## if element=property.comment}
      <p><b>Comment:</b><br></br>{## insert element=property.comment suppress=tags}</p>
    {## /if}
    <br></br>
</td></tr>
</table>

<$include std_page_end$>
</body>
</html>

7.6.5 Slideshow、SlideshowbおよびSlideshowc

スライドショー・テンプレートは、PowerPointプレゼンテーションを変換するために使用できます。「PowerPointプレゼンテーション用スライドショー・テンプレート・ファイルの構成」を参照してください。

Slideshow

Slideshowサンプル・スクリプト・テンプレートには、次のコードが含まれています。

<html>
<head>
{## if element=property.title}
    <title>{## insert element=property.title suppress=tags}</title>
{## else}
    <title>Converted {## insert element=pragma.sourcefilename}</title>
{## /if}

{## if element=pragma.cssfile}
     <link rel="stylesheet" href="{## insert element=pragma.cssfile}"</link>
{## /if}

<$defaultPageTitle="Converted Content"$>
<$include std_html_head_declarations$>
</head>

<$include body_def$>
<$include std_page_begin$>
<$include std_header$>

<script language="JavaScript"><!--
if (document.images)
{
    {## repeat element=sections}
    thumb{## insert number=sections.current.value} = new Image;
    thumb{## insert number=sections.current.value}.src = "{## insert element=sections.current.image width=400 suppress=tags}";
    {## /repeat}
}

function swapem(iname,gname)
{
    if (document.images)
     {
      document.images[iname].src = eval(gname + ".src");
     }
}

function openawindow( pageToLoad, winName, width, height, center)
{
/* Opens a new window on the users desktop.
   Arguments:
   pageToLoad - The URL of a page to load in the browser window.
                This can be a relative URL or fully qualified.
   winName -    Name of the new window.
   width   -    The horizontal size of the new window.
   height  -    The vertical size of the new window.
   center  -    toggle centering on 4.0 browsers.
                1=centered window 0=no centering

    Values in the "args" section below can all be toggled in the
      same fashion as the center toggle.  Just modify the appropriate
    value in the args section to be either 0 or 1.

    A call to this function might look like this:
    &lt;a href="javascript:openAWindow('ice.html','ice',375,250,1)"&gt;Ice&lt;/a&gt;

    Created by Glenn Davis of Project Cool, Inc. for general use.  If
    you use this routine please leave all comments in place so that
    others may benefit as well.


*/
   if ((parseInt(navigator.appVersion)) < 4){swidth = 640} else {swidth = (screen.width-10)}
   if ((parseInt(navigator.appVersion)) < 4){sheight = 480} else {sheight = (screen.height-60)}

   args = "width=" + swidth + ","
   + "height=" + sheight + ","
   + "location=0,"
   + "menubar=0,"
   + "resizable=1,"
   + "scrollbars=0,"
   + "status=0,"
   + "titlebar=0,"
   + "toolbar=0,"
   + "hotkeys=0,"
   + "screenx=" + 0  + ","  //NN Only
   + "screeny=" + 0  + ","  //NN Only
   + "left=" + 0  + ","     //IE Only
   + "top=" + 0 ;           //IE Only

     window.open( pageToLoad,winName,args );
}

// --></script><div align="center"><center>

<table border="0" cellpadding="0" cellspacing="0" width="550">
<tr><td>

{## if element=property.title}
    <p><h3>{## insert element=property.title suppress=tags}</h3></p>
{## /if}

{## if element=property.subject}
    <p><h3>{## insert element=property.subject suppress=tags}</h3></p>
{## /if}

<p><h3>{## insert number=sections.count} slides by {## insert element=property.author suppress=tags}</p>

<table border="0" cellpadding="0" cellspacing="0" width="550">
    <tr>

    <td valign="top">
    <table>
        {## repeat element=sections}
          <tr><td>
         <a href="javascript:openawindow('{## link element=sections.current.bodyorimage template=slideshowbtemplate.hcst}','bigslide', 640,480,1)" onMouseOver="swapem('thumbimg','thumb{## insert number=sections.current.value}')">
       <font size="1">{## insert element=sections.current.body.title suppress=tags}</font>
       </a>
       </td></tr>
       {## /repeat}
     </td></tr>
   </table>
   </td>

   <td>
   <img src="<$HttpWebRoot$>images/space.gif" border="0" width="50"></img>
   </td>

   <td valign="top">
     <img name="thumbimg" src="{## insert element=sections.1.image width=400 suppress=tags}"></img>
   </td>
   </tr>
</table>

</td></tr>
</table>

<$include std_page_end$>
</body>
</html>

Slideshowb

Slideshowbサンプル・スクリプト・テンプレートには、次のコードが含まれています。

<html>

<head>
{## if element=property.title}
    <title>{## insert element=property.title suppress=tags}</title>
{## else}
    <title>converted {## insert element=pragma.sourcefilename}</title>
{## /if}
{## if element=pragma.cssfile}<link rel="stylesheet" href="{## insert element=pragma.cssfile}"></link>{## /if}
</head>

<body bgcolor="BLACK" topmargin="0" leftmargin="0" scroll="No">

<p><center>
<a href="{## if element=sections.next.bodyorimage}{## link element=sections.next.image}{## else}{## link template=slideshowctemplate.hcst}{## /if}">
<img border="0" src="{## insert element=sections.current.image width=640 height=480 suppress=tags}" width="100%" height="100%"></img></a></center></p>
</body>
</html>

Slideshowc

Slideshowcサンプル・スクリプト・テンプレートには、次のコードが含まれています。

<html>
<head>
{## if element=property.title}
    <title>{## insert element=property.title suppress=tags}</title>
{## else}
    <title>converted {## insert element=pragma.sourcefilename}</title>
{## /if}
{## if element=pragma.cssfile}<link rel="stylesheet" href="{## insert element=pragma.cssfile}"></link>{## /if}
</head>
<body bgcolor="black">
<font color="white" size="+5">

<center>This is the end of the presentation.
<p><a href="{## link element=sections.1.bodyorimage template=slideshowbtemplate.hcst}">Return to start of presentation.</a></p>
</center>

</font>
</body></html>

7.6.6 Textout

Textoutサンプル・スクリプト・テンプレートには、次のコードが含まれています。

<html>
<head>
{## if element=property.title}
   <title>{## insert element=property.title suppress=tags}</title>
{## else}
   <title>Converted {## insert element=pragma.sourcefilename}</title>
{## /if}

{## if element=pragma.cssfile}
   <link rel="stylesheet" href="{## insert element=pragma.cssfile}"</link>
{## /if}

<$defaultPageTitle="Converted Content"$>
<$include std_html_head_declarations$>
</head>

<$include body_def$>
<$include std_page_begin$>
<$include std_header$>

<table border="0" cellpadding="0" cellspacing="0" width="550">
<tr><td>
   
<h1><font color="0000FF">Document Body</font></h1>
{## repeat element=sections}
   <h2><font color="0000FF">Section </font>{## insert number=sections.current.value}</h2>
   
   {## if element=sections.current.type value=ss}
      <p>
      <font color="0000FF"><b>Section Type</b>=&quot;</font>spreadsheet<font color="0000FF">&quot;</font>
      </p>
      <p>
      <font color="0000FF"><b>Title</b>=&quot;</font>
      {## insert element=sections.current.title}<font color="0000FF">&quot;</font>
      </p>
      {## insert element=sections.current.bodyorimage width=500}
      {## elseif element=sections.current.type value=pr}
      <p>
      <font color="0000FF"><b>Section Type</b>=&quot;</font>presentation<font color="0000FF">&quot;</font>
      </p>
      <h3><font color="0000FF">Image</font></h3>
      {## if element=sections.current.image}
         {## insert element=sections.current.image width=500}
      {## else}
         <p><font color="0000FF">Image is empty</font></p>
      {## /if}
      <h3><font color="0000FF">Image Text</font></h3>
      {## if element=sections.current.body}
         {## insert element=sections.current.body}
      {## else}
         <p><font color="0000FF">Image text is empty</font></p>
      {## /if}
      {## elseif element=sections.current.type value=dr}
      <p>
      <font color="0000FF"><b>Section Type</b>=&quot;</font>vector graphic drawing<font color="0000FF">&quot;</font>
      </p>
      <h3><font color="0000FF">Image</font></h3>
      {## if element=sections.current.image}
         {## insert element=sections.current.image width=500}
      {## else}
         <p><font color="0000FF">Image is empty</font></p>
      {## /if}
      <h3><font color="0000FF">Image Text</font></h3>
      {## if element=sections.current.body}
         {## insert element=sections.current.body}
      {## else}
         <p><font color="0000FF">Image text is empty</font></p>
      {## /if}
      {## elseif element=sections.current.type value=bm}
      <p>
      <font color="0000FF"><b>Section Type</b>=&quot;</font>bitmap<font color="0000FF">&quot;</font>
      </p>
      <h3><font color="0000FF">Image</font></h3>
      {## if element=sections.current.image}
         {## insert element=sections.current.image width=500}
      {## else}
         <p><font color="0000FF">Image is empty</font></p>
      {## /if}
      <h3><font color="0000FF">Image Text</font></h3>
      {## if element=sections.current.body}
         {## insert element=sections.current.body}
      {## else}
         <p><font color="0000FF">Image text is empty</font></p>
      {## /if}
      {## elseif element=sections.current.type value=wp}
      <p>
      <font color="0000FF"><b>Section Type</b>=&quot;</font>bitmap<font color="0000FF">&quot;</font>
      </p>
      <h2><font color="0000FF">Section Body</font></h2>
      {## insert element=sections.current.contents width=500}
      {## elseif element=sections.current.type value=ar}
      <p>
      <font color="0000FF"><b>Section Type</b>=&quot;</font>archive<font color="0000FF">&quot;</font>
      </p>
      {## insert element=sections.current.bodyorimage width=500}
      {## elseif element=sections.current.type value=db}
      <p>
      <font color="0000FF"><b>Section Type</b>=&quot;</font>database<font color="0000FF">&quot;</font>
      </p>
      {## insert element=sections.current.bodyorimage width=500}
      {## elseif element=sections.current.type value=ch}
      <p>
      <font color="0000FF"><b>Section Type</b>=&quot;</font>chart<font color="0000FF">&quot;</font>
      </p>
      <h3><font color="0000FF">Image</font></h3>
      {## if element=sections.current.image}
         {## insert element=sections.current.image width=500}
      {## else}
         <p><font color="0000FF">Image is empty</font></p>
      {## /if}
      <h3><font color="0000FF">Image Text</font></h3>
      {## if element=sections.current.body}
         {## insert element=sections.current.body}
      {## else}
         <p><font color="0000FF">Image text is empty</font></p>
      {## /if}
   {## else}
      <p>
      <font color="0000FF"><b>Section Type</b> is not one of wp, ss, pr, dr, bm, db, ch, or ar<font></p>
      </p>
      {## insert element=sections.current.bodyorimage width=500}
   {## /if}
{## /repeat}

</td></tr>
</table>

<$include std_page_end$>
</body>
</html>

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

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

変更できる設定には、次のものがあります。

7.7.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

7.7.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

再度、1行をコメント化し、もう1行のコメント化を解除して、次のようにします。

#genbulletsandnums  no
genbulletsandnums   yes

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

テンプレート・アーキテクチャの最も強力な機能の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の上までのテキストが生成されます。

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

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

ドキュメントを分割するには、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つを使用して指定します。索引変数に指定できる値の詳細は、「索引変数キーワード」を参照してください。

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

構造によるドキュメントの分割(「スクリプト・テンプレートの書式設定オプションの設定」を参照)に加えて、Dynamic Converterでは、各出力ファイル(つまりページ)に配置されるコンテンツの量に基づいたドキュメントの分割もサポートしています。ドキュメントは、その構造コンテンツ・サイズの両方に基づいて分割することもできます。

コンテンツ・サイズによりドキュメントを分割するには、次の2つのことを実行する必要があります。まず、SCCOPT_EX_PAGESIZEpageSizeオプションを設定する必要があります(「テンプレート内でのオプションの設定: {## OPTION}」を参照)。次に、使用するテンプレートを{## UNIT}構成にする必要があります(「単位: {## UNIT}、{## HEADER}および{## FOOTER}」を参照)。

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

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

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

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

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

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

7.9.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}タグは、前/次のページへのリンク(実際に前/次のページがある場合)を挿入するのみです。したがって、最初のページには、存在しない前のページへのリンクはありません。

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

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

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

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

前述のように、反復可能ノードはすべて、索引変数に関連付けられています。NextやLastなどの索引変数キーワードの使用については、「索引変数キーワード」を参照してください。

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

スプレッドシート(および、一般的ではありませんが、データベース・ファイル)をサポートするために、グリッドとして知られるテンプレートベースのナビゲーション概念を利用できます。グリッドは、スプレッドシートまたはデータベースを直観的に確実にナビゲートする方法を提供します。

グリッドを使用すると、大きなスプレッドシートを小さい要素に分けて出力でき、その結果、スクロールの必要性が減ります。グリッドは、大きなスプレッドシートのHTMLバージョンがブラウザの表示能力を超えて、場合によっては動かなくなるようなことがないようにするためにも使用できます。グリッドは、CPU時間を浪費しすぎる前に、大きなスプレッドシートの処理を停止するためにも使用できます。

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

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

  1. 出力ファイル形式およびフレーバは、必須ではありませんが、表をサポートすることが期待されます。

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

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

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

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

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

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

図7-7 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]