(57)【特許請求の範囲】
【請求項１】
記憶手段に記憶されている印刷設定の禁則を含む機能情報に基づいて印刷設定の禁則処理を行うコアドライバにプラグインの追加が可能なプリンタドライバであって、
前記コアドライバは、
前記コアドライバに対応した基本機能情報であって、前記コアドライバに含まれる基本機能を示す機能情報の子の階層に、該機能情報で示される前記基本機能が選択可能な設定値を示す設定値情報と、該機能情報で示される前記基本機能についての禁則処理を示す禁則情報とが記述された前記基本機能情報を、該基本機能情報の階層関係を維持した第１の階層情報としてメモリ上に展開し、
前記プラグインに対応したプラグイン機能情報であって、前記プラグインに含まれる拡張機能を示す機能情報の子の階層に、該機能情報で示される前記拡張機能が選択可能な設定値を示す設定値情報が記述され、該設定値情報と同じ階層に、前記コアドライバに含まれる前記基本機能についての禁則処理を示す禁則情報が記述され、前記禁則情報の親の階層に、該禁則情報で示される禁則処理が適用される前記基本機能を指定する結合情報が記述された前記プラグイン機能情報が、前記記憶手段に記憶されている場合、前記プラグイン機能情報を、該プラグイン機能情報の階層関係を維持した第２の階層情報として前記メモリ上に展開し、
前記基本機能情報から展開した前記第１の階層情報に、前記プラグイン機能情報から展開した前記第２の階層情報を、前記プラグイン機能情報に記述された前記結合情報の子以下の階層の情報が、前記基本機能情報に記述された前記機能情報であって、前記結合情報で指定された前記基本機能を示す前記機能情報の子以下の階層の情報となるように結合し、
前記第２の階層情報が結合された前記第１の階層情報に基づいて、印刷設定の禁則処理を行う
ことを特徴とするプリンタドライバ。
【請求項２】
前記基本機能情報は、前記禁則情報の子の階層に、該禁則情報で示される禁則処理が行われる条件を示す条件情報が記述され、
前記プラグイン機能情報は、前記禁則情報の子の階層に、該禁則情報で示される禁則処理が行われる条件であって、前記プラグインに含まれる前記拡張機能に関連する条件を示す条件情報が記述されていることを特徴とする請求項１に記載のプリンタドライバ。
【請求項３】
前記コアドライバは、
前記第２の階層情報が結合された前記第１の階層情報において、子の階層自身が有する情報および／またはその子の階層から受けた情報を親の階層に提供できるソフトウェアコンポーネント群を生成する設定管理手段を備え、
前記ソフトウェアコンポーネント群の中で、前記第２の階層情報が結合された前記第１の階層情報において最上位の階層に位置し、かつ、コアドライバを構成する他のモジュールとのインターフェースとなる管理部が、その子となる各ソフトウェアコンポーネントから得られる情報を基に、印刷設定の禁則処理を行う
ことを特徴とする請求項１または２に記載のプリンタドライバ。
【請求項４】
前記基本機能情報および前記プラグイン機能情報は、別個のファイルとして前記記憶手段に保存され利用されることを特徴とする請求項１〜３のいずれか一項に記載のプリンタドライバ。
【請求項５】
記憶手段に記憶されている印刷設定の禁則を含む機能情報に基づいて印刷設定の禁則処理を行うコアドライバにプラグインの追加が可能なプリンタドライバがインストールされた情報処理装置において、
前記コアドライバは、
前記コアドライバに対応した基本機能情報であって、前記コアドライバに含まれる基本機能を示す機能情報の子の階層に、該機能情報で示される前記基本機能が選択可能な設定値を示す設定値情報と、該機能情報で示される前記基本機能についての禁則処理を示す禁則情報とが記述された前記基本機能情報を、該基本機能情報の階層関係を維持した第１の階層情報としてメモリ上に展開し、
前記プラグインに対応したプラグイン機能情報であって、前記プラグインに含まれる拡張機能を示す機能情報の子の階層に、該機能情報で示される前記拡張機能が選択可能な設定値を示す設定値情報が記述され、該設定値情報と同じ階層に、前記コアドライバに含まれる前記基本機能についての禁則処理を示す禁則情報が記述され、前記禁則情報の親の階層に、該禁則情報で示される禁則処理が適用される前記基本機能を指定する結合情報が記述された前記プラグイン機能情報が、前記記憶手段に記憶されている場合、前記プラグイン機能情報を、該プラグイン機能情報の階層関係を維持した第２の階層情報として前記メモリ上に展開し、
前記基本機能情報から展開した前記第１の階層情報に、前記プラグイン機能情報から展開した前記第２の階層情報を、前記プラグイン機能情報に記述された前記結合情報の子以下の階層の情報が、前記基本機能情報に記述された前記機能情報であって、前記結合情報で指定された前記基本機能を示す前記機能情報の子以下の階層の情報となるように結合し、
前記第２の階層情報が結合された前記第１の階層情報に基づいて、印刷設定の禁則処理を行う
ことを特徴とする情報処理装置。
【請求項６】
前記基本機能情報は、前記禁則情報の子の階層に、該禁則情報で示される禁則処理が行われる条件を示す条件情報が記述され、
前記プラグイン機能情報は、前記禁則情報の子の階層に、該禁則情報で示される禁則処理が行われる条件であって、前記プラグインに含まれる前記拡張機能に関連する条件を示す条件情報が記述されていることを特徴とする請求項５に記載の情報処理装置。
【請求項７】
前記コアドライバは、
前記第２の階層情報が結合された前記第１の階層情報において、子の階層自身が有する情報および／またはその子の階層から受けた情報を親の階層に提供できるソフトウェアコンポーネント群を生成する設定管理手段を備え、
前記ソフトウェアコンポーネント群の中で、前記第２の階層情報が結合された前記第１の階層情報において最上位の階層に位置し、かつ、コアドライバを構成する他のモジュールとのインターフェースとなる管理部が、その子となる各ソフトウェアコンポーネントから得られる情報を基に、印刷設定の禁則処理を行う
ことを特徴とする請求項５または６に記載の情報処理装置。
【請求項８】
前記基本機能情報および前記プラグイン機能情報は、別個のファイルとして前記記憶手段に保存され利用されることを特徴とする請求項５〜７のいずれか一項に記載の情報処理装置。
【請求項９】
請求項１から請求項４のいずれか１項に記載のプリンタドライバを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コアドライバにプラグインを追加することにより機能拡張できる、プリンタドライバ、情報処理装置、およびプリンタドライバを記録したコンピュータ読み取り可能な記録媒体に関する。
【背景技術】
【０００２】
プリンタやＭＦＰ（複合機）などの画像形成装置は、様々なオフィス環境で利用されるため、現在では、必要な機能のみ利用可能となるようにカスタマイズできることが求められている。そこで、追加機能を後で追加できるプリンタなどが開発されている。このように追加機能をプリンタに追加する場合、プリンタを制御するプリンタドライバに対しても、追加した機能を使えるように機能拡張する必要がある。
【０００３】
一方、プリンタ自体に追加機能を追加しない場合でも、プリンタドライバ単体に対して、機能拡張のニーズが存在する。
【０００４】
しかしながら、プリンタドライバの機能を拡張する場合、通常は機能拡張したプリンタドライバをメーカー側で作成し、このドライバを顧客のコンピュータ環境に再インストールしてもらう必要がある。
【０００５】
そこで、プリンタドライバの機能を拡張するために、メーカー側での機能拡張したプリンタドライバの作成や、ユーザによるプリンタドライバの再インストールを行うことなく、拡張される機能部分にのみ対応したプログラムをプラグインとしてプリンタドライバに付加することによって、プリンタドライバに機能を追加する技術が提案されている。
【０００６】
例えば、特許文献１には、デバイスドライバにプラグインの追加を検知する手段を持たせ、検知したプラグインに、オペレーティングシステムからのイベント通知を転送しプラグインを機能させることで、機能拡張をする技術が開示されている。これにより、デバイスドライバの再インストールの必要なく動的拡張を可能としている。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、プリンタドライバ等のドライバの核となるコアドライバと機能を追加するための各プラグインは開発時期が異なるため、お互いに必要な禁則（同時に設定することが許されない設定についての制約など、各種設定間の禁則）を自由に設けることができないという問題がある。つまり、開発時期が早いコアドライバにプラグインに対する禁則を追加したり、開発時期の早いプラグインに開発時期の遅いプラグインに対する禁則を追加することができない。
【０００８】
本発明は、上記に鑑みてなされたものであって、コアドライバおよび各プラグインの開発時期に依らず、コアドライバおよび各プラグインに、それらがもつ機能・設定について、自由に禁則を設けること可能としたプリンタドライバ、情報処理装置、およびプリンタドライバを記録したコンピュータ読み取り可能な記録媒体を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明のプリンタドライバは、記憶手段に記憶されている印刷設定の禁則を含む機能情報に基づいて印刷設定の禁則処理を行うコアドライバにプラグインの追加が可能なプリンタドライバであって、前記コアドライバは、前記コアドライバに対応した基本機能情報であって、前記コアドライバに含まれる基本機能を示す機能情報の子の階層に、該機能情報で示される前記基本機能が選択可能な設定値を示す設定値情報と、該機能情報で示される前記基本機能についての禁則処理を示す禁則情報とが記述された前記基本機能情報を、該基本機能情報の階層関係を維持した第１の階層情報としてメモリ上に展開し、前記プラグインに対応したプラグイン機能情報であって、前記プラグインに含まれる拡張機能を示す機能情報の子の階層に、該機能情報で示される前記拡張機能が選択可能な設定値を示す設定値情報が記述され、該設定値情報と同じ階層に、前記コアドライバに含まれる前記基本機能についての禁則処理を示す禁則情報が記述され、前記禁則情報の親の階層に、該禁則情報で示される禁則処理が適用される前記基本機能を指定する結合情報が記述された前記プラグイン機能情報が、前記記憶手段に記憶されている場合、前記プラグイン機能情報を、該プラグイン機能情報の階層関係を維持した第２の階層情報として前記メモリ上に展開し、前記基本機能情報から展開した前記第１の階層情報に、前記プラグイン機能情報から展開した前記第２の階層情報を、前記プラグイン機能情報に記述された前記結合情報の子以下の階層の情報が、前記基本機能情報に記述された前記機能情報であって、前記結合情報で指定された前記基本機能を示す前記機能情報の子以下の階層の情報となるように結合し、前記第２の階層情報が結合された前記第１の階層情報に基づいて、印刷設定の禁則処理を行うことを特徴とする。
【００１０】
また、本発明は、記憶手段に記憶されている印刷設定の禁則を含む機能情報に基づいて印刷設定の禁則処理を行うコアドライバにプラグインの追加が可能なプリンタドライバがインストールされた情報処理装置において、前記コアドライバは、前記コアドライバに対応した基本機能情報であって、前記コアドライバに含まれる基本機能を示す機能情報の子の階層に、該機能情報で示される前記基本機能が選択可能な設定値を示す設定値情報と、該機能情報で示される前記基本機能についての禁則処理を示す禁則情報とが記述された前記基本機能情報を、該基本機能情報の階層関係を維持した第１の階層情報としてメモリ上に展開し、前記プラグインに対応したプラグイン機能情報であって、前記プラグインに含まれる拡張機能を示す機能情報の子の階層に、該機能情報で示される前記拡張機能が選択可能な設定値を示す設定値情報が記述され、該設定値情報と同じ階層に、前記コアドライバに含まれる前記基本機能についての禁則処理を示す禁則情報が記述され、前記禁則情報の親の階層に、該禁則情報で示される禁則処理が適用される前記基本機能を指定する結合情報が記述された前記プラグイン機能情報が、前記記憶手段に記憶されている場合、前記プラグイン機能情報を、該プラグイン機能情報の階層関係を維持した第２の階層情報として前記メモリ上に展開し、前記基本機能情報から展開した前記第１の階層情報に、前記プラグイン機能情報から展開した前記第２の階層情報を、前記プラグイン機能情報に記述された前記結合情報の子以下の階層の情報が、前記基本機能情報に記述された前記機能情報であって、前記結合情報で指定された前記基本機能を示す前記機能情報の子以下の階層の情報となるように結合し、前記第２の階層情報が結合された前記第１の階層情報に基づいて、印刷設定の禁則処理を行うことを特徴とする。
【００１１】
また、本発明は、上記プリンタドライバを記録したコンピュータ読み取り可能な記録媒体である。
【発明の効果】
【００１２】
本発明によれば、コアドライバおよび各プラグインの開発時期に依らず、コアドライバおよび各プラグインに、それらがもつ機能・設定について、自由に禁則を設けることが可能となる。また、コアドライバの機能情報および各プラグインの機能情報を別個のファイルとして保存することにより、アンインストールも容易になる。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の一実施の形態にかかるプリンタシステムの全体構成図を示した図である。
【図２】図２は、同実施形態におけるＰＣの構成を示すブロック図である。
【図３】図３は、レイアウト情報の一例を示した図である。
【図４】図４は、図３のレイアウト情報に基づいた印刷設定画面の例を示した図である。
【図５】図５は、コアドライバの保存先情報（一部分のみ）を例示した図である。
【図６】図６は、コアドライバの機能情報の一例を示した図である。
【図７】図７は、拡張集約プラグインの機能情報の一例を示した図である。
【図８】図８は、エコモードプラグインの機能情報の一例を示した図である。
【図９】図９は、拡張集約プラグインとエコモードプラグインを追加した後のプラグイン情報を示した図である。
【図１０】図１０は、拡張集約プラグインをインストールするための拡張集約プラグインインストーラの構成を示したブロック図である。
【図１１】図１１は、拡張集約プラグインインストーラの動作を示すフローチャートである。
【図１２】図１２は、コアドライバ１１１の機能情報（図６）に対応するＤＯＭツリーを示した図である。
【図１３】図１３は、プラグインが追加されていない初期状態のコアドライバの設定管理部の構成を示す図である。
【図１４】図１４は、拡張集約プラグインの機能情報（図７）に対応するＤＯＭツリーを示した図である。
【図１５】図１５は、エコモードプラグインの機能情報（図８）に対応するＤＯＭツリーを示した図である。
【図１６】図１６は、図１３に示したコアドライバの機能情報に対応するＤＯＭツリーＡに、図１４に示した拡張集約プラグインの機能情報に対応するＤＯＭツリーＢをマージした結果のＤＯＭツリーを示した図である。
【図１７】図１７は、図１６のＤＯＭツリーに、エコモードプラグインの機能情報に対応するＤＯＭツリーＣをさらにマージしたＤＯＭツリーを示した図である。
【図１８】図１８は、設定管理部として生成される各コンポーネントを示した図である。
【図１９】図１９は、コアドライバの設定管理部のコンポーネント生成処理を示すフローチャートである。
【図２０】図２０は、他のモジュールからの印刷設定等の要求に対し、設定管理部の各コンポーネントが行う動作を示すシーケンス図である。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、この発明にかかるプリンタシステムの一実施の形態を詳細に説明する。
【００１５】
（プリンタシステムの全体構成）
図１は、本発明の一実施の形態にかかるプリンタシステムの全体構成図を示した図である。図１に示すように、本実施の形態ではＰＣ１００とプリンタ１５０とがネットワーク１６０を介して接続されているものとする。そして、ＰＣ１００からの印刷要求に応じて、プリンタ１５０が印刷処理を行う。
【００１６】
（ＰＣ１００の構成）
図２は、ＰＣ１００の構成を示すブロック図である。図２に示すように、ＰＣ１００は、処理部１０１と、記憶部１０２と、通信部１０３とを備えている。処理部１０１は、図示しない制御手段としてのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、ＲＯＭおよびメインメモリとなるＲＡＭを有するメモリ群とを含んで構成されている。ＰＣ１００の起動・実行時には、ＲＯＭおよび記憶部１０２からアプリケーション１０４と、ＯＳ１０５と、各種ドライバ（図２においては、プリンタドライバ１０６のみ記載）が、メインメモリ上にロードされ展開されて、これらがＣＰＵにより実行される。なお、ＰＣ１００は、キーボードやマウスなどの入力装置やディスプレイなどの出力装置等を備える通常のコンピュータを利用したハードウェア構成を有するが、図２においては説明の簡単のため省略している。
【００１７】
図２に示すプリンタドライバ１０６内の機能ブロックは、プリンタ１５０の制御を実現するための機能又は手段である。特に、コアドライバ１１１は、プリンタドライバ１０６の核となる部分であり、プリンタドライバとしての基本的な機能を有する。これに対し、各プラグイン（図２では、拡張集約プラグインおよびエコモードプラグインのみ例示）は、コアドライバ１１１のみからなるプリンタドライバ１０６に対してその機能を拡張するためのプログラムであり、コアドライバ１１１と組み合わさって（機能拡張された）プリンタドライバ１０６を構成する（詳細は後述）。
【００１８】
通信部１０３は、ネットワーク１６０を介して接続されたプリンタ１５０と情報の送受信を行う。
【００１９】
アプリケーション１０４は、ユーザが印刷指示をすることができるソフトウェアとする。ユーザはアプリケーション１０４で編集したデータを印刷したい場合、アプリケーション１０４が、ユーザによる印刷指示を受け付ける。この場合、アプリケーション１０４は、単体でプリンタ１５０に対する印刷データの生成を行わず、上記印刷指示に応じた印刷要求と共に、印刷対象の情報をＯＳ１０５に渡す。
【００２０】
ＯＳ１０５は、ＰＣ１００のハードウェアとソフトウェアとを管理するプログラムである。ＯＳ１０５は、プログラムの起動、情報の読み込みや保存の制御等を行う。ＯＳのうち代表的なものとしては、ＭＳ  Ｗｉｎｄｏｗｓ（登録商標）やＵＮＩＸ（登録商標）等が知られている。
【００２１】
また、ＯＳ１０５は、アプリケーション１０４から渡された印刷要求と共に、印刷対象の情報（ドキュメントデータ、画像データ等）を、プリンタドライバ１０６に渡す。
【００２２】
記憶部１０２は、様々な情報を記憶する記憶手段である。具体的にはＨＤＤ等である。記憶される情報には、コアドライバ１１１や各プラグインが有する所定の機能（例えば、拡張集約や、エコモードなど）を実現するための部分的な処理に関する情報（処理に用いる設定値や、設定値の変更をするための表示情報など、処理に必要なあらゆる情報）を定義した設定情報がある。この設定情報の例としては、レイアウト情報、保存先情報、機能情報、及びプラグイン情報等が挙げられる。
【００２３】
レイアウト情報は、設定画面に表示されるＧＵＩコンポーネントのレイアウトが記述された情報である。保存先情報は、各設定の保存場所についての情報が記述された情報である。機能情報は、各設定値の設定可能な範囲や各設定間の禁則が記述された情報である。これらの情報についての詳細は後述する。プラグイン情報は、追加されたプラグインに関して記述された情報である。
【００２４】
プリンタドライバ１０６は、コアドライバ１１１と、インターフェース部１１２と、プラグインとして、拡張集約プラグイン１１３と、エコモードプラグイン１１４とを備えている。もちろん、図２の例は一例であって、プラグインは任意に追加することができる。
【００２５】
コアドライバ１１１は、プリンタドライバ１０６としての標準機能を有する。また、コアドライバ１１１は、プリンタドライバ１０６としての機能を果たすためのモジュール群として、画面表示部１２１、設定保存部１２２、設定管理部１２３、および描画部１２４を備える。このコアドライバ１１１の画面表示部１２１、設定保存部１２２、及び設定管理部１２３は、インストールされたプラグインを確認する際に、上記プラグイン情報を参照する。これにより、コアドライバ１１１は、インストールされているプラグインを確認できる。
【００２６】
また、コアドライバ１１１に含まれる上記モジュール群は、標準的な印刷処理のみならず、インストールされたプラグインに含まれるモジュールではできない部分的な処理を、上述した設定情報（レイアウト情報、保存先情報、機能情報、プラグイン情報）に従って代行する。そして、記憶部１０２に記憶される設定情報が、プラグインのインストーラにより書き込まれ、コアドライバ１１１の画面表示部１２１、設定保存部１２２、設定管理部１２３、及び描画部１２４が、書き込まれた設定情報を参照することで、代行することを可能としている。なお、レイアウト情報、保存先情報、プラグイン情報については、各プラグインについての各情報がコアドライバ１１１のレイアウト情報、保存先情報、プラグイン情報に追記され、機能情報については、コアドライバ１１１および各プラグイン用の機能情報が、独立したファイルとして記憶部１０２に記憶される。なお、コアドライバ１１１の基本情報およびプラグインの機能情報はそれぞれ、基本機能情報およびプラグイン機能情報と略称される。
【００２７】
画面表示部１２１は、ユーザに対する印刷設定のためのＧＵＩとなる印刷設定画面を表示する。本実施形態にかかる画面表示部１２１は、記憶部１０２に記憶されたレイアウト情報に基づいて印刷設定画面等を表示する。
【００２８】
設定保存部１２２は、設定管理部１２３で管理されている各設定値を、ＤｅｖｍｏｄｅやＯＳ１０５のレジストリ等のデータ保存領域に保存する。その際、記憶部１０２に記憶された保存先情報を参照し、保存先を決定する。なお、Ｄｅｖｍｏｄｅとは、印刷に関する様々な設定を保持するために、ＯＳ１０５が提供する構造体である。
【００２９】
設定管理部１２３は、記憶部１０２に記憶されたコアドライバ１１１の機能情報および各プラグインの機能情報に基づいて、印刷処理に用いられる設定（設定値や各設定間の禁則など）を管理する。本実施形態では、特に、設定管理部１２３が、コアドライバ１１１の持つ各設定に関する情報が記述されたＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）形式の機能情報から生成されるＤＯＭ（Ｄｏｃｕｍｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）ツリーに、各プラグインが保持する機能情報から生成されるＤＯＭツリーをマージし、マージ後のＤＯＭツリーに従って、設定値や各設定間の禁則等を管理するようにしている（詳細は後述）。また、設定管理部１２３は、記憶部１０２に記憶された保存先情報を参照し、設定保存部１２２により各保存先に保存された各設定値を読み出して、印刷処理に必要な設定を行う。
【００３０】
描画部１２４は、アプリケーション１０４から印刷を要求されたデータをプリンタが解釈可能な印刷命令に変換する。そして変換された印刷命令を、通信部１０３を介して、プリンタ１５０に送信する。
【００３１】
インターフェース（Ｉ／Ｆ）部１１２は、プラグインの追加を受け付けるインターフェースである。プリンタドライバ１０６にプラグインが追加された場合、コアドライバ１１１は、当該インターフェース部１１２を介して、追加されたプラグインの各モジュールを呼び出すことができる。また、追加されたプラグインも、当該インターフェース部１１２を介して、コアドライバ１１１の各モジュールを呼び出すことが可能となる。
【００３２】
図中破線１３０で囲まれた拡張集約プラグイン１１３、及びエコモードプラグイン１１４は、コアドライバ１１１に機能を追加するダイナミック・リンク・ライブラリとして構成されたプラグインとする。これらのプラグインは、所定の機能を実現するために、一つ以上のモジュールで構成されている。同図に示すプラグインは、画面表示部及び描画部を備えたものとなっているが、一般的にはその構成は任意である。
【００３３】
そして、プラグインの画面表示部（１３１，１４１）は、インターフェース部１１２を介して行われたコアドライバ１１１の画面表示部１２１からの表示命令に従って、プラグインが有する機能についての設定画面を表示する。一方、プラグインの描画部（１３２，１４２）は、インターフェース部１１２を介して行われたコアドライバ１１１の描画部１２４からの描画命令に従って、プラグインが有する機能を用いてなされる描画機能を実行する。
【００３４】
つまり、コアドライバ１１１の画面表示部１２１の拡張部分がプラグインの画面表示部となる。そして、コアドライバ１１１の描画部１２４の拡張部分がプラグインの描画部となる。
【００３５】
また、追加するプラグインによっては、コアドライバ１１１のモジュール（画面表示部１２１、描画部１２４）の機能を利用することで、すなわち、コアドライバ１１１が機能代行することで、プラグインに全てのモジュールを作成する必要がなくなった。これにより、プラグインの開発負担を軽減できる。
【００３６】
プラグインに必要な機能の一部をコアドライバ１１１のモジュールに代行させるために、コアドライバ１１１の各モジュールが参照する外部ファイルを更新する必要がある。つまり、プラグインは、コアドライバ１１１にはない機能を有する当該プラグインに固有のモジュールの追加と、コアドライバ１１１の各モジュールが参照する設定情報を更新するだけで、プラグインとして動作することができる。
【００３７】
なお、本実施形態にかかるプリンタドライバ１０６に対するプラグインの追加は、プラグイン自身のダイナミック・リンク・ライブラリの追加と、さらに、レイアウト情報、保存先情報、及びプラグイン情報のいずれか一つ以上に対する記述の追加ならびに機能情報の追加をすることで行う。これにより、ＰＣ１００にインストール済みのプリンタドライバ１０６に対して、プラグインの追加を容易に行うことが可能となる。つまり、ユーザはプリンタドライバ自体の再インストールをする必要がなくなる。なお、プラグインの追加に伴い追加される機能情報に対する処理は、本実施形態における特徴的部分であり、後に詳述する。
【００３８】
次に、上記設定情報（レイアウト情報、保存先情報、機能情報、プラグイン情報）の具体例を挙げ説明する。
【００３９】
（レイアウト情報）
図３は、レイアウト情報の一例を示した図である。図３に示すレイアウト情報は、コアドライバ１１１のレイアウト情報であって、その一部分のみを例示している。なお、プラグインが追加されると、このレイアウト情報には、追加されたプラグインに関する記述が追記される。また、図３に示すレイアウト情報は、ＪＳＯＮ形式で記述しているが他の形式でも良い。
【００４０】
図３に示すように、レイアウト情報には、印刷設定画面に表示するＧＵＩコンポーネント毎のレイアウトデータが記述されている。このレイアウトデータは、属性としてｔｙｐｅ，ｎａｍｅ，ａｘｉｓを有している。
【００４１】
ｔｙｐｅは、ＧＵＩコンポーネントの種類を表している。ｔｙｐｅの値であるＣｏｍｂｏＢｏｘはコンボボックスコンポーネントで表示することを示している。また、ＣｈｅｃｋＢｏｘは、チェックボックスコンポーネントで表示することを示している。図示しないが、その他にもＳｐｉｎＢｏｘやＥｄｉｔＢｏｘなどを記述することにより、スピンボックスコンポーネントやエディットボックスコンポーネント等でＧＵＩコンポーネントを表示することもできる。
【００４２】
ｎａｍｅは、設定の名前を表している。ｎａｍｅの値のうち、ｌａｙｏｕｔは、集約設定であることを指定している。また、ｂｏｏｋｌｅｔは、製本設定（中綴じ設定）であることを示している。図示しないが、ｐａｐｅｒｓｉｚｅやｃｏｐｉｅｓなどを記述することにより、用紙サイズ設定や部数設定等を指定することもできる。
【００４３】
ａｘｉｓは、ＧＵＩコンポーネントの表示位置の座標を表している。ａｘｉｓの属性である、ｘはダイアログボックスの左上原点からの水平方向座標を示し、ｙはダイアログボックスの左上原点からの垂直方向座標を示している。例えば、図３に示す集約設定のａｘｉｓ３０１には、属性ｔｙｐｅで指定されたコンボボックスコンポーネントを水平位置２５、垂直位置３０に表示することが記述されている。
【００４４】
そして、画面表示部１２１は、記憶部１０２からレイアウト情報を読み込み、読み込んだレイアウト情報に従って設定画面を生成し、ＰＣ１００の表示装置（図示せず）に生成した設定画面を表示する。なお、このとき、レイアウト情報に記述されている各ＧＵＩコンポーネントのうち、後述の機能情報を基に設定管理部１２３で管理されている設定可能な項目のみを表示する。
【００４５】
図４は、図３のレイアウト情報を読み込んだ場合に、コアドライバ１１１の画面表示部１２１が表示する印刷設定画面の例を示した図である。図４に示すように、集約設定用に表示名“Ｌａｙｏｕｔ”と共にコンボボックスコンポーネントが配置され、製本設定用に表示名“Ｂｏｏｋｌｅｔ”と共にチェックボックスコンポーネントが配置されている。なお、図４に示す、ＯＫボタンは、変更された印刷設定を保存するボタンであり、Ｃａｎｃｅｌボタンは、変更をキャンセルするボタンである。
【００４６】
（保存先情報）
保存先情報は、各設定の保存場所についての情報が記述されている。図５は、コアドライバ１１１の保存先情報であって、その一部分のみを例示している。なお、プラグインが追加されると、この保存先情報には、追加されたプラグインに関する記述が追記される。また、図５に示す例では、保存先情報はＪＳＯＮ形式で記述されているが他の形式であっても良い。
【００４７】
保存先情報のＤｅｖｍｏｄｅとｒｅｇｉｓｔｏｒｙというキー内に記述された各設定名は、機能情報およびレイアウト情報に記述されている各設定名と対応関係を有している。そして、Ｄｅｖｍｏｄｅというキー内に記述された各設定名で示された設定は、Ｄｅｖｍｏｄｅ構造体に保存される。一方、ｒｅｇｉｓｔｏｒｙというキー内に記述された各設定名で示される設定は、レジストリに保存される。保存される各設定は、設定管理部１２３で管理されている設定値である。
【００４８】
（コアドライバの機能情報）
図６は、コアドライバ１１１の機能情報の一例を示した図である。図６では、説明の簡単のため、集約設定（ｌａｙｏｕｔ）と製本設定（ｂｏｏｋｌｅｔ）のみ例示するが、機能情報は各設定値の設定可能な範囲や各設定間の禁則が記述された情報であって、実際には、用紙サイズ設定や部数設定など印刷に係わる種々の設定について記述される。なお、図６に示す機能情報は、ＸＭＬ形式で記述するが他の形式（例えば、ＪＳＯＮ等）でも良い。
【００４９】
図６に示す機能情報の例では、各設定の情報を、ｉｔｅｍタグ毎に定義している。このｉｔｅｍタグは、ｎａｍｅとｐｒｉｏｒｉｔｙの属性を持っている。もちろん、図６に示す例は一例であって、その他の属性を定義し利用することができる。
【００５０】
属性ｎａｍｅは、設定の名前であり、レイアウト情報のｎａｍｅと対応している。図６の例では、属性ｎａｍｅの値であるｌａｙｏｕｔは集約設定であることを、ｂｏｏｋｌｅｔは製本設定であることを指定している。また、属性ｐｒｉｏｒｉｔｙは、禁則評価の優先順位を指定するものであり、このｐｒｉｏｒｉｔｙの値が小さい順に各設定に対する禁則評価を行う。
【００５１】
ｉｔｅｍタグで囲まれる部分には、図６に示す製本設定５０１のようにｃｏｎｓｔｒａｉｎｔタグを記述することができる。このｃｏｎｓｔｒａｉｎｔタグを用いて記述された部分は、親タグであるｉｔｅｍタグの設定についての禁則情報である。ｃｏｎｓｔｒａｉｎｔタグ内の属性であるｆｉｘｖａｌｕｅは、ｃｏｎｓｔｒａｉｎｔタグに禁則条件が合致している場合に強制的に変更される設定値を表している。
【００５２】
また、ｃｏｎｓｔｒａｉｎｔタグで囲まれる部分には、図６の製本設定（ｂｏｏｋｌｅｔ）のようにｃｏｎｄｉｔｉｏｎタグを記述することができる。ｃｏｎｄｉｔｉｏｎタグは親タグであるｃｏｎｓｔｒａｉｎｔタグの禁則条件を表しており、属性であるｅｘｐｒｅｓｓｉｏｎで、その条件を指定している。
【００５３】
図６に例示する製本設定においては、例えば、ｌａｙｏｕｔ（集約設定）がｏｆｆ以外の場合に禁則条件に合致し、ｂｏｏｋｌｅｔ（製本設定）の設定値がｏｆｆに強制的に変更される。
【００５４】
ｐｉｃｋｏｎｅタグは、選択可能な設定値を表すものであり、ｐｉｃｋｏｎｅタグ内の属性ｎａｍｅで、設定値が設定されている。また、図６には示していないが、ｐｉｃｋｏｎｅタグに対しても、このタグで囲まれる部分にｃｏｎｓｔｒａｉｎｔタグを記述することができ、ｐｉｃｋｏｎｅタグ自体、すなわち選択肢自身も禁則情報を持つことができる。
【００５５】
ｐｉｃｋｏｎｅの属性であるｎａｍｅの値は、集約設定においては、ｏｆｆが機能オフ、２ｉｎ１が２イン１印刷、４ｉｎ１が４イン１印刷を表している。また、製本設定においては、ｏｆｆが機能オフ、ｏｎが機能オンを表している。
【００５６】
（拡張集約プラグインの機能情報）
続いて、図７に、拡張集約プラグインの機能情報の一例を示す。この拡張集約プラグインは、「集約」の機能を拡張させる機能を有している。図７に示す、ｒｏｏｔタグの直下にあるｉｔｅｍタグ以下は、上記コアドライバ１１１の機能情報として示したｉｔｅｍタグ以下と同様の意味をもち、各属性の意味は、基本的に上記コアドライバ１１１の機能情報の場合と同様である（他のプラグインにおいても同様である）。
【００５７】
図７に示すｎａｍｅ属性のｅｘｔｅｎｄｅｄ＿ｌａｙｏｕｔは拡張集約設定であることを表している。この拡張集約設定には「ｏｆｆ」と「９ｉｎ１」という選択肢がある。この「９ｉｎ１」という選択肢をもつこのプラグインによって９イン１印刷を行えるようにする。ｍｅｒｇｅタグは、既存のタグ（ＸＭＬノード）に対して、このｍｅｒｇｅタグで囲まれた部分の内容を追加（マージ）することを意味しているタグである。その属性のｔｘｐａｔｈは周知のＸＰＡＴＨで書かれており、例えば、一つめのｍｅｒｇｅタグの”／ｉｔｅｍ［＠ｎａｍｅ＝ｌａｙｏｕｔ］”はｎａｍｅ属性がｌａｙｏｕｔのｉｔｅｍに対してｃｏｎｓｔｒａｉｎｔタグで囲まれた部分を子ノードとして追加するということを意味している。つまり、集約設定に「拡張集約設定が、ｏｆｆ以外のときにｏｆｆになる」という禁則を追加することを意味している。同様に、２つめのｍｅｒｇｅタグは、製本設定に対して「拡張集約設定がｏｆｆ以外のときにｏｆｆになる」という禁則を追加することを意味している。このような禁則を設けるのは、拡張集約設定が「ｏｆｆ」以外のときには、集約設定や製本設定はｏｆｆになっている必要があるためである。
【００５８】
（エコモードプラグインの機能情報）
続いて、図８に、エコモードプラグインの機能情報の一例を示す。このエコモードプラグインは、紙やトナーの削減を推進する機能をプリンタドライバ１０６に付加するものである。
【００５９】
図８に示すｎａｍｅ属性のｅｃｏ＿ｍｏｄｅはエコモード設定を表している。エコモードは、紙やトナーの削減を推進する機能である。図８に示すエコモード設定には「ｏｆｆ」「削減」「より削減」という選択肢があり、同図のｎｏｒｍａｌは「削減」を表わし、ｍｏｒｅは「より削減」を表している。
【００６０】
また、＜ｃｏｎｄｉｔｉｏｎ  ｅｘｐｒｅｓｓｉｏｎ＝“ｅｘｔｅｎｄｅｄ＿ｌａｙｏｕｔ  ｉｓ  ｎｏｔｈｉｎｇ”／＞、は拡張集約設定という設定自体がないときに、条件に合致することを表している。また、同図のエコモード設定に示すようなｐｉｃｋｏｎｅタグの下にｃｏｎｓｔｒａｉｎｔタグ及びｃｏｎｄｉｔｉｏｎタグが付属しているものは、禁則に合致した場合にその選択肢が選択できない（設定表示において表示がされないあるいはグレー表示にする）という動作を行う。
【００６１】
エコモードでは、「削減」が選択されているときは、集約設定が「４ｉｎ１」となるとともに使われるトナーの量が削減される。そのため、禁則として、集約設定は「４ｉｎ１」となる必要がある。また、「より削減」が選択されているときは、拡張集約設定が「９ｉｎ１」となるとともに使われるトナーの量が削減される。そのため、禁則として、拡張集約設定は「９ｉｎ１」となる必要がある。一方、拡張集約設定がない場合（拡張集約プラグインがインストールされていない場合）は、「９ｉｎ１」の選択肢がないので、「より削減」は選択できないようにする必要がある。
【００６２】
従って、図８に示すように、１つめのｍｅｒｇｅタグで囲まれた部分の記述により、集約設定に対して「エコモード設定が、削減のときに４ｉｎ１になる」という禁則と、さらに「エコモード設定が、より削減のときにｏｆｆになる」という禁則を追加する。また、２つめのｍｅｒｇｅタグで囲まれた部分の記述により、拡張集約設定に対して「エコモード設定が、より削減のときに９ｉｎ１になる」という禁則を追加する。
【００６３】
以上のように、コアドライバ１１１、機能拡張プラグイン１１３およびエコモードプラグイン１１４の、設定情報の１つである機能情報の各々が構成される。本実施形態においては、各プラグインは、コアドライバ１１１が作成された後に開発されていると仮定している。そのため、コアドライバ１１１の機能情報には各プラグインに関する情報は一切含まれていない。また、プラグインの作成時期は、拡張集約プラグイン、エコモードプラグインの順で開発されていると仮定している。そのため拡張集約プラグインの機能情報には、エコモードプラグインに関する情報は一切含まれていない。その他の設定情報（レイアウト情報、保存先情報）についても同様である。
【００６４】
以上のように、機能情報には、印刷に関する各設定に対するコアドライバ１１１の設定管理部１２３の行うべき管理のための情報が記述されている。コアドライバ１１１の機能情報および各プラグインの機能情報はそれぞれ別個のＸＭＬファイルとして記憶部１０２に記憶される。
【００６５】
ところで、ＸＭＬファイルを一般にＤＯＭパーサーと呼ばれるソフトウェアで読み込んだ場合、Ｄｏｍツリーというデータ構造がメモリ上に生成される。本実施形態のプリンタドライバ１０６は、機能情報（ＸＭＬファイル）をＤＯＭパーサーによって解析させ、ＤＯＭツリーを生成させる。そして、生成したＤＯＭツリーをマージする（詳細は後述）。その後、マージ後のＤＯＭツリーにアクセスすることによって、メモリ上に、機能情報により規定された禁則を各設定に適用する禁則処理に必要なソフトウェアコンポーネントを生成する。そして、生成されたソフトウェアコンポーネントからなる設定管理部１２３が、設定値に対する禁則処理を行い、印刷処理に関する設定を決定することになる。
【００６６】
（プラグイン情報）
図９は、拡張集約プラグイン１１３とエコモードプラグイン１１４を追加した後のプラグイン情報を示した図である。当該プラグイン情報の記述は、いずれの形式でも良いが、本実施の形態では“ｉｎｉ”形式を用いている。
【００６７】
図９に示すプラグイン情報は、画面表示部に対応する“ｕｉ＿ｐｌｕｇｉｎ”と、 描画部に対応する“ｇｒａｐｈｉｃ＿ｐｌｕｇｉｎ”の２つのスコープを持っている。
【００６８】
“ｕｉ＿ｐｌｕｇｉｎ”は、画面表示部を有する各プラグインの名称と、各プラグインの画面表示部の実体であるダイナミック・リンク・ライブラリ（ＤＬＬ）のファイル名とを対応付けて保持する。この“ｕｉ＿ｐｌｕｇｉｎ”に記述された各プラグインのファイル名を用いて、コアドライバ１１１などの画面表示部１２１から、各プラグインの画面表示部を呼び出すことができる。つまり、プラグインの画面表示部は、コアドライバ１１１の画面表示部１２１によってのみ呼び出される。
【００６９】
“ｇｒａｐｈｉｃ＿ｐｌｕｇｉｎ”は、描画部を有する各プラグインの名称と、各プラグインの描画部の実体であるＤＬＬのファイル名とを対応付けて保持する。この“ｇｒａｐｈｉｃ＿ｐｌｕｇｉｎ”に記述された各プラグインのファイル名を指定することで、コアドライバ１１１の描画部１２４から、各プラグインの描画部を呼び出すことができる。つまり、プラグインの描画部は、コアドライバ１１１の描画部１２４によってのみ呼び出される。
【００７０】
図９に示すプラグイン情報の例では、拡張集約プラグイン１１３の各モジュールの実体となるＤＬＬについて、同一のＤＬＬファイルを指定しているが、プラグインが複数のＤＬＬから構成される場合は、その構成に応じて別々のＤＬＬが指定される。
【００７１】
（プラグインインストーラ）
次に、プラグインを追加するインストーラについて説明する。図１０は、拡張集約プラグイン１１３をインストールするための拡張集約プラグインインストーラ１０００の構成を示したブロック図である。図１０に示すように、拡張集約プラグインインストーラ１０００は、拡張集約プラグイン１１３と、追加レイアウト情報１００１と、追加保存先情報１００２と、追加機能情報１００３と、起動部１００４とを備えている。
【００７２】
追加レイアウト情報１００１は、拡張集約プラグイン１１３の機能を実現するために、記憶部１０２のレイアウト情報に対して追加する情報が格納されている。追加保存先情報１００２は、拡張集約プラグイン１１３の機能を実現するために、記憶部１０２の保存先情報に対して追加する情報が格納されている。追加機能情報１００３は、拡張集約プラグイン１１３についての機能情報であり、追加レイアウト情報１００１や追加保存先情報１００２とは異なり、インストール後も独立したファイルとして管理される。なお、追加レイアウト情報１００１および追加保存先情報１００２はそれぞれ、コアドライバ１１１のレイアウト情報および保存先情報と同様の形式（例えば、ＪＳＯＮ形式）で記述され、機能情報１００３は、コアドライバ１１１の機能情報と同様の形式（例えば、ＸＭＬ形式）で記述される。
【００７３】
起動部１００４は、追加部１０１１と、登録部１０１２を備え、プラグインのインストールを制御する。具体的には、起動部１００４は、ユーザにより拡張集約プラグインインストーラ１０００が起動された場合に、拡張集約プラグインを、プリンタドライバ１０６に追加する。
【００７４】
追加部１０１１は、追加情報（追加レイアウト情報、追加保存先情報、追加機能情報）を、記憶部１０２に記憶された各設定情報（レイアウト情報、保存先情報、機能情報）に追加する処理を行う。
【００７５】
登録部１０１２は、追加するプラグインのモジュールを示すファイル名を、記憶部１０２のプラグイン情報の各スコープに登録する。
【００７６】
上述した例では、拡張集約プラグインインストーラ１０００の場合について説明したが、他のプラグインのインストーラも同様に、プラグイン本体と、追加する情報と、起動部とをもつ構成となる。
【００７７】
（プラグインのインストール処理）
次に、本実施の形態にかかる拡張集約プラグインインストーラ１０００を用いたプラグインのインストール処理について、図１１に示すフローチャートを用いて説明する。図１１は、本実施の形態にかかるＰＣ１００における拡張集約プラグインインストーラ１０００の動作を示すフローチャートである。
【００７８】
まずは、ユーザからの操作に従って、拡張集約プラグインインストーラ１０００が実行されると、起動部１００３が起動する（ステップＳ１１０１）。
【００７９】
次に、起動部１００３が、プリンタドライバ１０６のインターフェース部１１２を呼び出す（ステップＳ１１０２）。そして、インターフェース部１１２が、インストールＯＫである旨を、拡張集約プラグインインストーラ１０００に出力する（ステップＳ１１０３）。
【００８０】
そして、拡張集約プラグインインストーラ１０００は、プラグインの追加対象となるドライバが保存されているインストールディレクトリに、当該プラグインの画面表示部１３１及び描画部１３２に相当するモジュールをインストール（コピー）する（ステップＳ１１０４）。
【００８１】
その後、拡張集約プラグインインストーラ１０００の追加部１０１１が、プリンタドライバ１０６のコアドライバ１１１が参照するレイアウト情報および保存先情報にそれぞれ、拡張集約プラグインの追加レイアウト情報１００１および追加保存先情報１００２を追加（追記）する（ステップＳ１１０５）。
【００８２】
さらに、追加部１０１１は、拡張集約プラグイン１１３の追加機能情報１００３を１つのファイルからなる機能情報として、コアドライバ１１１の機能情報が保存してある記憶部１０２の所定の保存先に保存する（ステップＳ１１０６）。
【００８３】
その後、登録部１０１２が、プリンタドライバ１０６のコアドライバ１１１が参照するプラグイン情報に、拡張集約プラグイン１１３の画面表示部１３１及び描画部１３２に相当するＤＬＬのファイル名を各スコープに登録する（ステップＳ１１０７）。
【００８４】
上述した処理手順により、拡張集約プラグイン１１３のインストールが終了する。なお、上記手順は一例であって、処理の順序等、上記手順に限定するものではない。
【００８５】
次に、コアドライバ１１１の設定管理部１２３の構成とそのコンポーネントの生成について、前述した機能情報に対応させて説明する。
【００８６】
本実施形態では、ＸＭＬ形式の機能情報をＤＯＭパーサと呼ばれるソフトウェアで読み込むことによりメモリ上にＤＯＭツリーと呼ばれるデータ構造を生成させる。そして、生成したＤＯＭツリーをマージし、マージ後のＤＯＭツリーを基に、禁則処理に必要な設定管理部１２３の各コンポーネントをメモリ上に生成する。
【００８７】
（ＤＯＭツリー）
図１２に、コアドライバ１１１の機能情報（図６）に対応するＤＯＭツリーを示す。この図に示すように、ＸＭＬ形式の機能情報の各タグに対応してＤＯＭツリーの各ノードが生成される。すなわち、ｒｏｏｔタグからはｒｏｏｔノードが生成され、ｉｔｅｍタグからはｉｔｅｍノードが、ｐｉｃｋｏｎｅタグからはｐｉｃｋｏｎｅノードが、ｃｏｎｓｔｒａｉｎｔタグからはｃｏｎｓｔｒａｉｎｔノードが、ｃｏｎｄｉｔｉｏｎタグからはｃｏｎｄｉｔｉｏｎノードが生成される。
【００８８】
図１３に、プラグインが追加されていない初期状態のコアドライバ１１１の設定管理部１２３の構成を示す。管理部は、各Ｉｔｅｍコンポーネントを管理するコンポーネントで、１つだけ生成される。また、他のモジュール（画面表示部１２１、設定保存部１２２、描画部１２４）とのインターフェースとしての役割を果たす。
【００８９】
ｉｔｅｍコンポーネントは、ｉｔｅｍノードから生成されるコンポーネントである。自身の設定名と現在値と禁則状態を保持している。ｉｔｅｍコンポーネントは、その下にｐｉｃｋｏｎｅコンポーネントとｃｏｎｓｔｒａｉｎｔコンポーネントを持つことができる。ｉｔｅｍコンポーネントの下の、子となるｐｉｃｋｏｎｅコンポーネントの名前は、このｉｔｅｍコンポーネントのとりうる値（選択肢）である。一方ｃｏｎｓｔｒａｉｎｔコンポーネントの値は、このｉｔｅｍコンポーネント自身に係る禁則についての情報（修正値：ｆｉｘｖａｌｕｅ）である。
【００９０】
ｐｉｃｋｏｎｅコンポーネントは、ｐｉｃｋｏｎｅノードから生成されるコンポーネントである。自身の名前と禁則状態を保持している。同図には示さないが、その下にｃｏｎｓｔｒａｉｎｔコンポーネントをもつことができる。このｃｏｎｓｔｒａｉｎｔコンポーネントのデータは、このｐｉｃｋｏｎｅコンポーネント自身に係る禁則についての情報である。
【００９１】
ｃｏｎｓｔｒａｉｎｔコンポーネントは、ｃｏｎｓｔｒａｉｎｔノードから生成されるコンポーネントである。自身がもつ禁則が合致した場合（すなわち、子のｃｏｎｄｉｔｉｏｎコンポーネントで規定される条件が満たされた場合）に、親であるｉｔｅｍコンポーネントが持つべき値を保持している。
【００９２】
ｃｏｎｄｉｔｉｏｎコンポーネントは、禁則の基となる条件式（禁則条件）を有している。ｃｏｎｓｔｒａｉｎｔコンポーネントは、このｃｏｎｄｉｔｉｏｎコンポーネントが持つ条件が満たされた場合に、禁則状態である（ｏｎ）、という情報をｉｔｅｍコンポーネントもしくはｐｉｃｋｏｎｅコンポーネントに返す。これに応じて、各コンポーネントの禁則状態が変更される。なお、各ｉｔｅｍコンポーネントおよびｐｉｃｋｏｎｅコンポーネントがもつ禁則状態は、禁則処理が行われる前は初期値（ｏｆｆ）をとるものとする。
【００９３】
図１４に、拡張集約プラグインの機能情報（図７）に対応するＤＯＭツリーを示し、図１５に、エコモードプラグインの機能情報（図８）に対応するＤＯＭツリーを示す。これらのＤＯＭツリーには、上述のコアドライバ１１１の機能情報に対応するＤＯＭツリー（図６）と同様に、ｉｔｅｍノード、ｐｉｃｋｏｎｅノード、ｃｏｎｓｔｒａｉｎｔノードおよびｃｏｎｄｉｔｉｏｎノードを有しているが、さらにｍｅｒｇｅタグに対応してｍｅｒｇｅノードが生成されている。
【００９４】
（ＤＯＭツリーのマージ）
図１３に示したコアドライバ１１１の機能情報に対応するＤＯＭツリーＡに、図１４に示した拡張集約プラグインの機能情報に対応するＤＯＭツリーＢをマージすると、図１６に示すＤＯＭツリーとなる（破線で囲まれた部分がＤＯＭツリーＢにあったノードである）。ＤＯＭツリーＢのｉｔｅｍノードはｒｏｏｔノードに結合されるが、ｍｅｒｇｅノードの下のノードは、同図に示すように名前が“ｌａｙｏｕｔ”のｉｔｅｍノードおよび“ｂｏｏｋｌｅｔ”のｉｔｅｍノードの下に、それぞれに対応するノードが結合される。
【００９５】
上記のようにしてマージされたＤＯＭツリーに、エコモードプラグインの機能情報に対応するＤＯＭツリーＣをさらにマージすると図１７に示すＤＯＭツリーとなる（破線で囲まれた部分がＤＯＭツリーＣにあったノードである）。ＤＯＭツリーＣのｉｔｅｍノードはｒｏｏｔノードに結合されるが、ｍｅｒｇｅノードの下のノードは、同図に示すように名前が“ｌａｙｏｕｔ”のｉｔｅｍノードおよび“ｅｘｔｅｎｄｅｄ＿ｌａｙｏｕｔ”のｉｔｅｍノードの下に、それぞれに対応するノードが結合される。
【００９６】
以上のように生成されたＤＯＭツリーを基に、図１８に示す設定管理部１２３の各コンポーネントがクラスインスタンスとして生成される。なお、各コンポーネントの役割は前述したとおりである。
【００９７】
もともとコアドライバ１１１の機能である集約と製本に対するコンポーネント群に、各プラグインの機能に対するｃｏｎｓｔｒａｉｎｔコンポーネントが追加されている。このため、集約と製本は、各プラグインの機能からの禁則を受けることができる。また、先に開発された拡張集約プラグインの機能に対しても、これに対するコンポーネント群に後から開発されたエコモードプラグインの機能に対するｃｏｎｓｔｒａｉｎｔコンポーネントが追加されているため、拡張集約は、エコモードプラグインの機能からの禁則を受けることができる。
【００９８】
（設定管理部１２３のコンポーネント生成）
次に、コアドライバ１１１の設定管理部１２３のコンポーネント生成処理について、図１９を用いて説明する。
【００９９】
はじめに、コアドライバ１１１の機能により、設定管理部１２３の管理部となるクラスインスタンスを生成する（ステップＳ１９０１）。このとき管理部の初期化も行われる。
【０１００】
次に、ステップＳ１９０１で生成された管理部は、コアドライバ１１１の機能情報を読み込む（ステップＳ１９０２）。
【０１０１】
続いて、管理部は、ステップＳ１９０２で読み込んだコアドライバ１１１の機能情報を、ＤＯＭパーサを利用して解析（パース）し、解析結果としてメモリ上にＤＯＭツリーを生成する（ステップＳ１９０３）。
【０１０２】
続いて、管理部は、読み込んでいないプラグインの機能情報があるか判断をし、読み込んでいないプラグインの機能情報がある場合（ステップＳ１９０４でＹｅｓの場合）はステップＳ１９０５に移行し、無い場合（ステップＳ１９０４でＮｏの場合）はステップＳ１９０８に移行する。
【０１０３】
ステップＳ１９０５では、管理部は、未だ読み込んでいないプラグインであってその中で作成日が最も古いものの機能情報を読み込む。
【０１０４】
そして、ステップＳ１９０５で読み込んだプラグインの機能情報を、ＤＯＭパーサを利用して解析（パース）し、解析結果としてメモリ上にＤＯＭツリーを生成する（ステップＳ１９０６）。
【０１０５】
続いて、管理部は、ステップＳ１９０６で生成したＤＯＭツリーを、すでにあるＤＯＭツリーにマージする（ステップＳ１９０７）。なお、ここで「すでにあるＤＯＭツリー」とは、本ステップＳ１９０７の直前に生成されているＤＯＭツリーのことである。すなわち、本ステップにおいて最初の処理では、ステップＳ１９０３で生成したＤＯＭツリーのことであり、以降の処理では、本ステップの前回処理でマージ後のＤＯＭツリーのことである。
【０１０６】
一方、ステップＳ１９０８では、管理部は、コアドライバ１１１の機能情報に対応するＤＯＭツリーおよびすべてのプラグインの機能情報に対応するＤＯＭツリーをマージした結果のＤＯＭツリーから、その情報を基に、クラスインスタンスとして設定管理部１２３の各コンポーネントを生成する。このとき、各コンポーネントは、マージ完了後のＤＯＭツリーで示される親子関係を有するコンポーネント（クラスインスタンス）として生成される。
【０１０７】
以上のようにして、コアドライバ１１１の設定管理部１２３の各コンポーネントが生成される。
【０１０８】
（設定管理部１２３の動作）
続いて、コアドライバ１１１の設定管理部１２３による禁則処理について、すなわち設定管理部１２３の各コンポーネントの動作を、図２０を用いて説明する。図２０は、他のモジュールからの印刷設定等の要求に対し、設定管理部１２３の各コンポーネントが行う動作を示すシーケンス図である。
【０１０９】
はじめに、他のモジュールとのインターフェースとなる管理部に対して、他のモジュール（例えば、画面表示部１２１）から、印刷設定の値がセットされる（ｔ１）。
【０１１０】
続いて、管理部は、他のモジュールから受け取った印刷設定の値を各ｉｔｅｍコンポーネントにセットする（ｔ２）。
【０１１１】
続いて、管理部は、属性Ｐｒｉｏｒｉｔｙで示される値の順番で（本実施形態では、値が小さい順に）、各ｉｔｅｍコンポーネントにその禁則状態を更新させるための要求をする（ｔ３）。
【０１１２】
各ｉｔｅｍコンポーネントは、自身の子であるｐｉｃｋｏｎｅコンポーネントの禁則状態を更新させるための要求をする（ｔ４）。
【０１１３】
続いて、ｐｉｃｋｏｎｅコンポーネントは、ｃｏｎｓｔｒａｉｎｔコンポーネントに対し禁則判定情報（値が、禁則に合致しているか否かの情報）の取得要求をする（ｔ５）。
【０１１４】
この要求を受けて、ｃｏｎｓｔｒａｉｎｔコンポーネントは、子のｃｏｎｄｉｔｉｏｎコンポーネントに、ｉｔｅｍコンポーネントの値（設定値）が、ｃｏｎｄｉｔｉｏｎコンポーネントにて規定されている条件を満たしているか問い合わせをする（ｔ６）。
【０１１５】
この問い合わせに対し、ｃｏｎｄｉｔｉｏｎコンポーネントは、自身の持つ条件について判別をするために必要なｉｔｅｍコンポーネントの値を取得するための要求を該当のｉｔｅｍコンポーネントにする（ｔ７）。このとき、直系の親子関係にないｉｔｅｍコンポーネントに対しては管理部を介して該当ｉｔｅｍコンポーネントに要求がなされる。
【０１１６】
上記要求に応じて、該当のｉｔｅｍコンポーネントは、その値を、（管理部を介して要求を受けた場合は管理部を介して）要求を受けたｃｏｎｄｉｔｉｏｎコンポーネントに返す（ｔ８）。
【０１１７】
ｃｏｎｄｉｔｉｏｎコンポーネントは、ｉｔｅｍコンポーネントから返された値が、自身の持つ条件を満たしているかどうかを判定し、判定結果を、判定の要求をしたｃｏｎｓｔｒａｉｎｔコンポーネントに返す（ｔ９）。
【０１１８】
ｃｏｎｓｔｒａｉｎｔコンポーネントは、ｃｏｎｄｉｔｉｏｎコンポーネントからの判定結果に従って、禁則の条件に合致しているという情報（禁則状態：ｏｎに相当）および修正値（ｆｉｘｖａｌｕｅ）を、または、禁則の条件に合致していないという情報（禁則状態：ｏｆｆに相当）を、すなわち禁則判定情報をｐｉｃｋｏｎｅコンポーネントに返す（ｔ１０）。
【０１１９】
禁則判定情報を受けたｐｉｃｋｏｎｅコンポーネントは、ｃｏｎｓｔｒａｉｎｔコンポーネントからの禁則判定情報に従って自身の禁則状態を更新し（ｔ１１）、次いで、自身の禁則状態を親のｉｔｅｍコンポーネントに返す（ｔ１２）。
【０１２０】
一方、図１３に示した名前が“ｂｏｏｋｌｅｔ”のｉｔｅｍコンポーネントのように、ｃｏｎｓｔｒａｉｎｔコンポーネントを子にもつｉｔｅｍコンポーネントは、子のｃｏｎｓｔｒａｉｎｔコンポーネントに対し禁則判定情報の取得命令をする（ｔ１３）。
【０１２１】
この命令を受けて、ｃｏｎｓｔｒａｉｎｔコンポーネントは、子のｃｏｎｄｉｔｉｏｎコンポーネントに、親のｉｔｅｍコンポーネントの値がｃｏｎｄｉｔｉｏｎコンポーネントにて規定されている条件を満たしているか問い合わせをする（ｔ１４）。
【０１２２】
この問い合わせに対し、ｃｏｎｄｉｔｉｏｎコンポーネントは、自身の持つ条件について判定をするために必要なｉｔｅｍコンポーネントの値を取得するための要求を、該当のｉｔｅｍコンポーネントにする（ｔ１５）。このとき、直系の親子関係にないｉｔｅｍコンポーネントに対しては管理部を介して該当ｉｔｅｍコンポーネントに要求がなされる。
【０１２３】
上記要求に応じて、該当のｉｔｅｍコンポーネントは、その値を、（管理部を介して要求を受けた場合は管理部を介して）返す（ｔ１６）。
【０１２４】
ｃｏｎｄｔｉｏｎコンポーネントは、ｉｔｅｍコンポーネントから返された値が、自身の持つ条件を満たしているかどうかを判定し、判定結果を、判定の要求をしたｃｏｎｓｔｒａｉｎｔコンポーネントに返す（ｔ１７）。
【０１２５】
ｃｏｎｓｔｒａｉｎｔコンポーネントは、ｃｏｎｄｉｔｉｏｎコンポーネントからの判定結果に従って、禁則に合致しているという情報（禁則状態：ｏｎ）および修正値を、または、条件に合致していないという情報（禁則状態：ｏｆｆ）を、すなわち禁則判定情報を親のｉｔｅｍコンポーネントに返す（ｔ１８）。
【０１２６】
以上の過程を経て、ｉｔｅｍコンポーネントは、子のｐｉｃｋｏｎｅコンポーネントの禁則状態、および、子のｃｏｎｓｔｒａｉｎｔコンポーネントからの禁則判定情報に基づいて、自身の禁則状態を更新し（ｔ１９）、自身の値（現在値）を更新する（ｔ２０）。
【０１２７】
次いで、他のモジュールから管理部に、各印刷設定値の取得要求がなされると（ｔ２１）、管理部は、各ｉｔｅｍコンポーネントに対しその値の取得要求をする（ｔ２２）。
【０１２８】
上記要求を受けたｉｔｅｍコンポーネントは自身の値を管理部に返し（ｔ２３）、管理部は、各ｉｔｅｍコンポーネントから返された値を印刷設定値として他のモジュールに返す（ｔ２４）。
【０１２９】
また、管理部は、他のモジュール（例えば、画面表示部１２１）から、各印刷設定と選択肢の禁則状態の取得要求を受けると（ｔ２５）、各ｉｔｅｍコンポーネントに対し、印刷設定とその選択肢の禁則状態の取得要求をする（ｔ２６）。
【０１３０】
管理部から上記要求を受けた各ｉｔｅｍコンポーネントは、子の各ｐｉｃｋｏｎｅコンポーネントに対し、その禁則状態の取得要求をする（ｔ２７）。
【０１３１】
上記要求に応じて、各ｐｉｃｋｏｎｅコンポーネントは、自身の禁則状態を親のｉｔｅｍコンポーネントに返す（ｔ２８）。
【０１３２】
子のｐｉｃｋｏｎｅコンポーネントからその禁則状態を受けた各ｉｔｅｍコンポーネントは、管理部に、印刷設定とその選択肢の禁則状態を返す（ｔ２９）。
【０１３３】
管理部は、各ｉｔｅｍコンポーネントから受けたそれらの印刷設定とその選択肢の禁則状態を、その取得の要求をした他のモジュールに返す（ｔ３０）。例えば、他のモジュールの１つである画面表示部１２１は、この情報を利用して、禁則状態に応じたＧＵＩの表示を行うことができる。なお、図２０に示すシーケンスは各コンポーネント間の動作を説明するための一例であって、これに限られるものではない。
【０１３４】
以上説明したように、本実施形態のプリンタドライバ１０６（コアドライバ１１１およびプラグイン）では、コアドライバ１１１および各プラグインの開発時期に依らず、コアドライバ１１１および各プラグインに、それらがもつ機能・設定について、自由に禁則を追加することが可能となる。また、前述のように用いられるコアドライバ１１１の機能情報および各プラグインの機能情報は、独立したファイルとして保存・管理されるので、禁則が複雑に絡み合う機能情報であっても、プラグインのアンイストールの際は、ファイル単位でこれらを削除すればよく、アンインストールも容易に行うことができる。
【０１３５】
なお、上述した実施形態のコアドライバやプラグインのプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
【０１３６】
また、これらのプログラムは、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。
【符号の説明】
【０１３７】
１００…ＰＣ
１０１…処理部
１０２…記憶部
１０３…通信部
１０４…アプリケーション
１０５…ＯＳ
１０６…プリンタドライバ
１１１…コアドライバ
１１２…インターフェース部
１１３…拡張集約プラグイン
１１４…エコモードプラグイン
１２１…画面表示部
１２２…設定保存部
１２３…設定管理部
１２４…描画部
１３１…画面表示部
１３２…描画部
１４１…画面表示部
１４２…描画部
１５０…プリンタ
１６０…ネットワーク
【先行技術文献】
【特許文献】
【０１３８】
【特許文献１】特開２００４−００５６０８号公報
【図１】
0005446625.tif 000002
【図２】
0005446625.tif 000003
【図３】
0005446625.tif 000004
【図４】
0005446625.tif 000005
【図５】
0005446625.tif 000006
【図６】
0005446625.tif 000007
【図７】
0005446625.tif 000008
【図８】
0005446625.tif 000009
【図９】
0005446625.tif 000010
【図１０】
0005446625.tif 000011
【図１１】
0005446625.tif 000012
【図１２】
0005446625.tif 000013
【図１３】
0005446625.tif 000014
【図１４】
0005446625.tif 000015
【図１５】
0005446625.tif 000016
【図１６】
0005446625.tif 000017
【図１７】
0005446625.tif 000018
【図１８】
0005446625.tif 000019
【図１９】
0005446625.tif 000020
【図２０】
0005446625.tif 000021