印表機冒號檔案 ESC 序列

印表機後端資料庫冒號檔案中屬性值的內嵌參照及邏輯,是以位於屬性字串中適當位置的 ESC 序列來定義。

這些 ESC 序列不會與印表機 ESC 序列混淆。 每一個 ESC 序列的第一個字元一律是 % (百分比符號) 字元,指出 ESC 序列的開頭。 第二個字元 (有時是後續字元) 定義要執行的作業。 Escape 序列中的其餘字元 (如果有的話) 是用來執行指定作業的運算元。

由 ESC 序列執行的計算可以使用堆疊來保留整數或要操作之字串的指標,並且可以 A 透過 Z 使用內部變數來儲存整數值以供稍後使用。

因為使用 % 字元來定義 ESC 序列的開頭,所以在資料庫中,作為資料一部分的 % 字元必須以兩個相鄰 % 字元 (%%) 來表示。 在建構的字串中只會出現一個 % 字元。

下表列出並說明可在屬性字串中指定的 ESC 序列。 它們基於終端機的 terminfo 檔案 ESC 序列,已針對印表機修改及延伸。

Esc. 循序 說明
%% 產生 % (百分比符號) 字元。

堆疊中的 ASCII 輸出:

堆疊中的 ASCII 輸出:

項目 描述子
%d 從堆疊蹦現一個整數值,並將它轉換成 ASCII ,不含前導零。 產生足以容納 ASCII 數字的欄位寬度。 類似於具有 printf 子常式的 %d
% [1-9] d 從堆疊中蹦現整數值,並將它轉換為 ASCII。 結果長度為 1 到 9 個字元,視 之前指定的數字而定。 如果該值未填入指定的欄位寬度,則會在其左側填補零。 如果該值無法放入欄位中,則會捨棄多餘的高順序數字。 例如,如果堆疊中的值為 243 ,則 %4d 會產生 0243 ,而 %2d 會產生 43。 堆疊值 -243 會導致 %5d 產生 -0243

堆疊中的二進位輸出:

堆疊中的二進位輸出:

項目 描述子
%c 從堆疊中蹦現一個整數值,並捨棄低順序位元組以外的所有位元組。
%h 從堆疊中蹦現一個整數值,並捨棄兩個低順序位元組以外的所有位元組。
%a %h類似,除了堆疊中的兩個位元組採用替代順序: 低順序位元組,然後高順序位元組。

輸入字串:

輸入字串:

項目 描述子
%Ixx 包括名稱為 xx. %I 且可遞迴使用的字串屬性; 亦即,所包括的字串也可以包含 %I。 請注意,併入的字串不會繼承現行堆疊。 相反地,它會獲指派新的堆疊。
%I [....] 如果要執行多個連續併入項目,則可以用逗點區隔屬性名稱,並以方括弧括住。 例如,字串 %Icp %Icc%IeW 可以指定為 %I [cp , cc ,eW]
%Dxx xx 屬性指定其完整路徑名稱的檔案內容下載至印表機。 列印工作必須具有檔案的讀取權。 此運算子的主要用途是將字型下載至印表機。
% "sss" 將指標推送至堆疊上的 SSS 字串常數。 可以對字串指標執行的唯一作業是使用 %= 來比較字串與另一個字串 (其指標也在堆疊上)。
% ` xx xx 屬性指定的指令字串傳遞至 Shell 時所產生的標準輸出插入。 請注意, ` 是抑音符號字元。
%' "字串 " 將引號內的字串當作指令傳遞至子 Shell。 引號內字串中的任何雙引號都必須以反引號括住,以防止將內部引號當作字串的定界字元來讀取。 請注意, ` 是抑音符號字元。

輸入整數至堆疊

輸入整數至堆疊:

項目 描述子
%#xx"..@.." 擷取名稱為 xx之字串屬性的選定部分。 選取準則由型樣 "...@..."定義。 選取型樣由三個部分組成:
  1. 緊接在要擷取之字串之前的字串。 如果遺漏字首正規表示式,則擷取的字串由字尾正規表示式所指定型樣之前的整個字串組成。
  2. 擷取的字串會取代 %#xx"..@.." 目前正在處理的屬性中的作業順序。
  3. 緊接在要擷取之字串後面的字串。 如果遺漏字尾正規表示式,則擷取的字串由字首正規表示式所指定型樣後面的整個字串組成。

如果字串屬性的值是空值,則不會擷取任何字串。 如果字首或字尾正規表示式不是空值,且在屬性值字串中沒有對應的相符項,則不會擷取任何字串。

附註: The ampersand (@) and quote ( " ) characters need to be surrounded with a separate pair of quotes if their meaning is to be taken literally. 否則,程式會將這些符號讀取為定界字元。

When embedding a %# operator within a regular expression portion of another %# operator, the ampersand ( @ ) and quote ( ) characters cannot be used for their literal meaning. 若要避免此狀況,請將內嵌的 %# 運算子置於個別屬性值中,並將新屬性併入外部 %# 運算子的正規表示式中。

%Gxx 取得名稱為 xx 的整數屬性,並將它推送至堆疊。 如果屬性是字串而非整數,則會假設該字串是 ASCII 整數。 它會使用 阿託伊 子常式轉換成二進位整數,並推送至堆疊。
%' c' 將字元常數 c 推送至堆疊,其中會變成整數值的低階位元組。 高順序位元組會設為 0 (零)。
%{nn} 將整數常數 nn 推送至堆疊。 常數是十進位值,可以是正數或負數。

內部變數:

內部變數 AZ 是供 %P%Z%g使用的整數變數。 它們會起始設定為零,且只有在 %P%Z 變更它們時,它們的值才會變更。 這些變數有兩個獨立集: 一個集由 piobe 指令用來建置管線,另一個集則由格式製作程式專用。 在格式製作程式處理期間,會維護格式製作程式集的值。

內部變數:

項目 描述子
%P [a-z] 從堆疊中蹦現一個整數值,並將它儲存在指定的內部變數中。 例如, %Pf 會將堆疊中的整數值移至變數 f
%Z [a-z] 將指定的內部變數歸零。 例如, %Zg 會將值 0 儲存在變數 g中。
%g[a-z] 將指定內部變數的值推送至堆疊。 內部變數的值不變。 例如, %gB 會讀取變數 b 中的整數值,並將它推送至堆疊。

算術運算子

算術運算子:

項目 描述子
% +%-% *%/%m 將結果推送至堆疊。
%+ 將從堆疊中蹦現的前兩個值相加。 例如, %{5}%{6}%+ 會將值 11 推送至堆疊。
%- 從堆疊中取出的第二個值減去從堆疊中取出的第一個值。 例如, %{12}%{3}%- 會將值 9 推送至堆疊。
%* 將從堆疊中蹦現的前兩個值相乘。 例如, %{2}%{3}%* 會將值 6 推送至堆疊。
%/ 將從堆疊蹦現的第一個值除以從堆疊蹦現的第二個值。 例如, %{6}%{2}%/ 會將值 3 推送至堆疊。
%m (模數) 類似於 %/,但會將餘數 (而非商數) 推送至堆疊。 例如, %{17}%{9}%m 會將值 8 推送至堆疊。
附註: 要從堆疊蹦現的第一個值是最後一個要推送至堆疊的值,而要從堆疊蹦現的第二個值是最先推送至堆疊的值。

關聯式和邏輯運算子:

關聯式和邏輯運算子:

項目 描述子
%= %> %< %! 如果為 true ,則將值 1; 如果為 false ,則將值 0 推送至堆疊。
%= 從堆疊中取出的前兩個值是否相等? 例如, %{2}%{2}%= 會將值 1 (true) 推送至堆疊,而 %{2}%{3}%= 會將值 0 (false) 推送至堆疊。
%> 從堆疊蹦現的第二個值是否大於從堆疊蹦現的第一個值? 例如, %{2}%{3}%> 會將值 0 (false) 推送至堆疊。
%< 從堆疊蹦現的第二個值是否小於從堆疊蹦現的第一個值? 例如, %{2}%{3}%< 會將值 1 (true) 推送至堆疊。
%! 使從堆疊中蹦現的值無效,並將結果推送至堆疊: 非零值至 0; 0 值至 1。 例如, %{0}%! 將值 1 (true) 推送至堆疊, %{1}%! 將值 0 (false) 推送至堆疊,並且 %{2}%! 將值 0 (false) 推送至堆疊。
附註: 要從堆疊蹦現的第一個值是最後一個要推送至堆疊的值,而要從堆疊蹦現的第二個值是最先推送至堆疊的值。

位元邏輯運算子:

位元邏輯運算子:

項目 描述子
%& %| %^ %~ 將結果推送至堆疊。
%& AND 會從堆疊中蹦現前兩個值。 例如, %{6}%{3}%& 會將值 2 推送至堆疊。
%| OR 前兩個值從堆疊中蹦現。 例如, %{6}%{3}%| 會將值 7 推送至堆疊。
%^ EXCLUSIVE OR 會從堆疊中蹦現前兩個值。 例如, %{6}%{3}%^ 會將值 5 推送至堆疊。
%~ ONE ' S COMPLEMENTs 從堆疊中蹦現第一個值,並反轉每一個位元的值。 例如, %{-1}%~ 會將值 0 (所有位元皆關閉) 推送至堆疊 (假設 2 的補數表示法代表 -1)。

條件式 (if-then-else) 運算子:

條件式 (if-then-else) 運算子:

項目 描述子
%? expr %t thenpart %e elsepart%; %t 會從堆疊中蹦現一個值,並測試它。 如果值為 (非零) ,則會執行 滕帕特 。 否則,會執行 elsepart (如果有的話)。

else-if 建構

%? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e b4 %;

其中 c1 c2 c3 表示條件及 b1b2b3b4 表示主體。 例如, %?%{1}%t%{2}%e%{3}%; 會將值 2 推送至堆疊,且如果內部變數 x 的值為 6 ,則 %gx%{6}%?% = %t%{2}%e%{3}%;%d 會輸出值 2。 如果 x 的值不是 6 ,則會輸出值 3。

在開發複雜邏輯時,有時以結構化形式顯示它會很有用。 前述範例 (結構化形式) 可能如下所示:
項目 描述子
%gX x 的值推送至堆疊
%{6} 將值 6 推送至堆疊
%?% = %t 如果堆疊值等於
%{2} 將值 2 推送至堆疊
%e else
%{3} 將值 3 推送至堆疊
%; endif
%d 以 ASCII 格式輸出值
透通:

透通:

項目 描述子
%x (僅限 piocmdout 子常式呼叫。 如需相關資訊,請參閱 piocmdout 子常式。) 從輸入傳遞至 piocmdout 子常式,以將 透通 引數指定的位元組數輸出至子常式。 如需相關資訊,請參閱 piocmdout 子常式的 透通 引數。
迴圈

迴圈:

項目 描述子
%wx While 迴圈。 每當達到相符 %; 時,內部變數 x (x 可以 A Z) 的值會減 1。 如果結果大於 0 ,則會將執行傳送至 %wx之後的字元。
模式:
項目 描述子
%o 開始只使用資料庫中的原始預設值,而不使用可能已從指令行更新的值 (或在格式製作程式處理期間)。
%r 回到使用 %o之前正在使用的值。
管線置換:
項目 描述子
%p 指出在主要管線中內嵌字首過濾器管線的位置。 如果不存在,則假設它位於主要管線的開頭。 如果屬性名稱的第一個字元不是 (亦即,它不是主要管線) ,則會忽略。
%z 指出在主要管線中內嵌 pioout 字串 (裝置驅動程式介面常式) 的位置。 如果不存在,則會假設它位於主要管線的結尾。 如果屬性名稱的第一個字元不是 (亦即,它不是主要管線) ,則會忽略它。
%iX 只能在字首過濾器字串中指定 (亦即,屬性的兩個字元名稱的第一個字元是 f)。 x 變數代表管線 ID 字元。 %iX 變數指定主要管線的屬性名稱應該是 ix 而非 國際,其中 y 是針對 -d 旗標指定 (或預設) 的參數。 作為特殊案例 %i! 指定應該使用空字串作為主要管線。

指令行旗標:

這些運算子通常用於管線定義中,這些運算子會套用至列印工作提交者指定的旗標。 如果在格式製作程式使用的屬性字串中指定,則它們會套用至傳遞至格式製作程式的旗標。 有效的旗標字母為 AZAZ以及 09
項目 描述子
% Cy 如果在指令行上指定旗標 y ,則會將值 1 (true) 推送至堆疊。 否則,會將值 0 (false) 推送至堆疊。
%Fxy 或 %F [...] %? %Cy%t-x %I_y%;的速記。 如果在指令行上指定 y 旗標,則會產生 -x 亞爾格,其中 亞爾格 是指定給 y 旗標的引數。 如果 ! 指定給 x,將不會產生 -x 。 如果 亞爾格 包含未受保護 (前面沒有奇數反斜線) 的單引號或雙引號,則會發出錯誤訊息,並終止列印工作。

如果要使用 Fxy (%F)指定多個旗標,且每一個旗標的 xy 值都相同,則可以在方括弧中指定旗標字母清單。 例如, %Faa %Fbb% Fcc 可以指定為 %F [abc]

y [ . . . ] 所參照的值具有屬性名稱,其第一個字元是 _ (底線) ,第二個字元是 y 或字串中的字元 [ . . . ]

%fxy%f[ . . . ] Fxy (%F)%F [....]類似,除非引數是空字串,否則旗標名稱和引數之間沒有空格。
%vxy%v [...] 類似於 %fxy%f[.... ],但僅用於 pioout 指令 (「裝置驅動程式介面程式」) 的指令字串中,以針對 piobe 指令「列印工作管理程式」指定的置換值產生旗標及引數。 當旗標的引數等於預先定義的預設值時,不會產生旗標。

%v中, y[ . . . ] 所參照的值具有屬性名稱,其第一個字元是 @ (at 符號) ,第二個字元是 y 或字串 [ . . . ]中的字元。

% Ux%U [....] piobe 指令指出 x 旗標 (或字串 中的每一個旗標)。 .]) 實際上會被參照,即使管線未參照它; 例如,印表機指令可能會參照 x 旗標,而不是管線中的過濾器。 這可防止 piobe 指令在指令行上指定時拒絕旗標。