조건문
GPD 언어는 일부 프린터 특성이 프린터 구성에 가질 수 있는 종속성을 설명할 수 있는 C와 유사한 조건문을 제공합니다. 예를 들어 페이지의 여백 및 커서 원본은 페이지의 방향에 따라 달라질 수 있습니다. *Switch 및 *Case 문을 사용하면 이러한 종속성을 표현할 수 있습니다. 이러한 문의 형식은 다음과 같습니다.
| * Switch FeatureName { *Case Option1_Name { } *Case Option2_Name { } 등. *Case OptionN_Name { } *Default { } } |
FeatureName 은 *기능 항목이 있는 GPD 파일 내에 지정된 기능 의 이름이어야 합니다. 사용되는 옵션 이름은 지정된 기능과 연결된 옵션이어야 합니다.
페이지 여백과 커서 원본이 페이지 방향에 종속되는 경우를 표현하기 위해 다음 항목을 사용할 수 있습니다.
*Feature: Orientation
{
*DefaultOption: Portrait
*Option: Portrait
{
*Name: "Portrait"
*rcIconID: =RC_ICON_PORTRAIT
}
*Option: LANDSCAPE_CC90
{
*Name: "Landscape"
*rcIconID: =RC_ICON_LANDSCAPE
}
}
*Feature: PaperSize
{
*DefaultOption: Letter
*Option: Letter
{
*Name: "Letter 8.5 x 11 inch"
*switch: Orientation
{
*case: Portrait
{
*PrintableArea: PAIR(4800, 6324)
*PrintableOrigin: PAIR(150, 150)
*CursorOrigin: PAIR(150,100)
}
*case: LANDSCAPE_CC90
{
*PrintableArea: PAIR(4860, 6360)
*PrintableOrigin: PAIR(120, 120)
*CursorOrigin: PAIR(100,6480)
}
}
}
}
이 예제에서는 프린터의 PaperSize 기능에 대한 옵션은 프린터 방향 기능에 대해 선택한 옵션에 따라 달라집니다.
기능의 모든 옵션을 *Case 문 인수로 나열하지 않으면 C 언어와 마찬가지로 *Default 문을 포함할 수 있습니다. 모든 옵션을 포함하지 않고 *Default 문을 포함하지 않는 경우 GPD 파일의 다른 곳에서 관련 특성(예: *PrintableArea, *PrintableOrigin 및 *CursorOrigin)을 평가해야 합니다.
여러 종속성 지정
*Case 및 *Default 문 내에 *Switch 문을 포함할 수 있습니다. 이렇게 하면 다음과 같이 여러 종속성을 지정할 수 있습니다.
*Feature: feature1 {*Option: optionA {...} *Option: optionB {...}}
*Feature: feature2 {*Option: optionC {...} *Option: optionD {...}}
*Feature: feature3
{*Option: optionE
{*Switch: feature1
{*Case: optionA
{*Switch: feature2
{*Case: optionD
{AttributeX: ValueX}
*Default
{AttributeX: ValueY}
}
}
*Default
{AttributeX: ValueZ}
}
}
*Option: optionF {...}
}
이 예제에서는 feature3의 optionE에 속하는 AttributeX가 feature1과 feature2 모두에 종속됩니다.
사용자가 feature1에 대해 optionA, feature2의 경우 optionD, feature3의 경우 optionE를 선택한 경우 attributeX는 ValueX로 설정됩니다.
사용자가 feature1의 경우 optionA, feature2의 경우 optionC, feature3의 경우 optionE를 선택한 경우 attributeX는 ValueY로 설정됩니다.
사용자가 feature1에 대해 optionB를 선택하고 feature3에 대한 optionE를 선택한 경우 attributeX는 ValueZ로 설정됩니다. Feature2에 대한 설정은 관련이 없습니다.
다음 규칙은 여러 종속성을 지정할 때 적용됩니다.
단일 *스위치 항목의 범위 내에서 여러 종속성을 지정해야 합니다. 예를 들어 이 예제에서는 *스위치 항목을 사용하여 feature3이 feature1에 종속되었음을 나타내고, 이후 중첩되지 않은 *Switch 문에서는 feature3이 feature2에 종속됨을 나타낼 수 없습니다.
각 중첩 *스위치 항목 내에서 동일한 기능을 두 번 이상 지정할 수 없습니다.
*Switch 문을 배치할 위치
GPD 파일 내의 다음 위치에 *Switch 문을 배치할 수 있습니다.
*Option 문 내부
*Feature 문 내부
*Case 문 내부
*Default 문 내부
파일의 최상위 수준(즉, 중괄호 집합 내에 없음)
*Switch, *Case 및 *Default 문 안에 배치할 내용
*스위치 항목 내에서 *사례 및 *기본 항목만 배치할 수 있습니다.
*사례 또는 *기본 항목 내에 배치할 수 있는 GPD 파일 항목을 재배치 가능한 항목이라고 합니다. 다음과 같은 유형의 GPD 항목을 재배치할 수 있습니다.
루트 수준 전용 특성을 제외한 대부분의 프린터 특성입니다. *스위치 항목이 중괄호가 아닌 루트 수준에 있지 않으면 일반 특성 앞에 EXTERN_GLOBAL 합니다.
여러 종속성을 지정할 수 있는 중첩 *스위치 항목입니다.
*명령 항목입니다.
*TTFSEnabled?- 글꼴 대체를 사용하도록 설정합니다.
다음 유형의 GPD 항목은 재배치할 수 없습니다.
루트 수준 전용 특성입니다.
*대체 글꼴을 지정하기 위한 TTFS 항목입니다.
*Constraints, *InvalidCombination, *InvalidInstallableCombination, *NotInstalledConstraints 항목은 옵션 제약 조건에 설명된 대로 잘못된 옵션 조합을 정의 합니다.
*Case 문 내에 항목이 올바르게 배치되었는지 여부를 확인하는 한 가지 방법은 *Switch 및 *Case 문을 모두 제거하는 것입니다. *Case 문 안의 항목이 올바른 경우 *Switch 및 *Case 문이 제거된 후에도 올바른 항목입니다.
클래스 드라이버에서 파생된 V4 인쇄 드라이버의 switch 문 순서 지정
파생 v4 프린터 드라이버의 GPD 파일은 기본 클래스 드라이버와 동일한 순서를 따라야 합니다.
다음 시나리오를 생각해 보세요. *-manifest.ini 파일에서 RequiredClass 를 클래스 드라이버로 설정하여 v4 클래스 드라이버에서 파생된 v4 프린터 드라이버가 있습니다.
클래스 드라이버의 GPD 파일에는 다음과 같은 스위치 트리가 있습니다.
* Option: A4
1. Switch: Resolution
* Option: Letter
1. Switch: Resolution
2. Switch: InputBin
파생 v4 프린터 드라이버는 MarginSetting 스위치를 추가하려고 하므로 GPD 파일에는 다음과 같은 스위치 트리가 있습니다.
* Option: A4
1. Switch: Resolution
2. Switch: InputBin
3. Switch: MarginSetting
* Option: Letter
1. Switch: Resolution
2. Switch: InputBin
3. Switch: MarginSetting
해결 방법은 파생 GPD의 InputBin 앞에 설정되고 MarginSetting은 둘 다 뒤에 설정됩니다. 파생 v4 프린터 드라이버의 GPD 파일은 기본 클래스 드라이버와 동일한 순서를 따르고 MarginSetting을 추가합니다 .
예를 들어 잘못 파생된 GPD 파일은 다음과 같을 수 있습니다.
* Option: A4
1. Switch: MarginSetting
2. Switch: InputBin
3. Switch: Resolution
* Option: Letter
1. Switch: MarginSetting
2. Switch: InputBin
3. Switch: Resolution