印表機冒號檔案 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之字串屬性的選定部分。 選取準則由型樣 "...@..."定義。 選取型樣由三個部分組成:
如果字串屬性的值是空值,則不會擷取任何字串。 如果字首或字尾正規表示式不是空值,且在屬性值字串中沒有對應的相符項,則不會擷取任何字串。 附註: 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 推送至堆疊。 常數是十進位值,可以是正數或負數。 |
內部變數:
內部變數 A 至 Z 是供 %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 表示條件及 b1、 b2、 b3、 b4 表示主體。 例如, %?%{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! 指定應該使用空字串作為主要管線。 |
指令行旗標:
項目 | 描述子 |
---|---|
% Cy | 如果在指令行上指定旗標 y ,則會將值 1 (true) 推送至堆疊。 否則,會將值 0 (false) 推送至堆疊。 |
%Fxy 或 %F [...] | %? %Cy%t-x %I_y%;的速記。 如果在指令行上指定 y 旗標,則會產生 -x 亞爾格,其中 亞爾格 是指定給 y 旗標的引數。 如果 ! 指定給 x,將不會產生 -x 。 如果 亞爾格 包含未受保護 (前面沒有奇數反斜線) 的單引號或雙引號,則會發出錯誤訊息,並終止列印工作。 如果要使用 Fxy (%F)指定多個旗標,且每一個旗標的 x 和 y 值都相同,則可以在方括弧中指定旗標字母清單。 例如, %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 指令在指令行上指定時拒絕旗標。 |