【PL/I学習|実務向け】COBOLの「T」「I」「R」属性を読み解く:レガシーなオーバープリント制御の現代的移行術

導入

メインフレームの帳票開発において、特に古いソースコードを保守していると、PICTURE句に見慣れない「T」「I」「R」といった属性を目にすることがあります。これらはインパクトプリンタ時代の遺産であり、印字ヘッドを制御して「文字を重ね打ち」するためのものです。現代のPDFやWeb帳票への移行において、これらの属性が持つ「本来の意図」を理解し、適切に変換することは、帳票の品質を維持するために不可欠な課題です。

基礎知識

インパクトプリンタ(ドットインパクト式)では、紙送りを行わずに印字ヘッドを同じ位置に戻すことで、文字を重ねて印字することが可能でした。これをCOBOLのデータ宣言レベルで制御していたのが「オーバープリント属性」です。
T (Transparent/Overprint): 印字後に改行や紙送りを行わず、次のデータを重ねるための制御コードを挿入します。
I (Insert/Emphasis): 主に強調印字(ボールド)として、少し位置をずらして同じ文字を重ねるために使われました。
R (Reverse): 印字ヘッドの挙動を反転させる、あるいは特殊な記号生成のために利用されることがありました。
これらは物理デバイスの挙動そのものを言語仕様に取り込んだものであり、現在のプリンタドライバやPDF変換エンジンとは根本的に仕組みが異なります。

実装/解決策

移行の際は、コード内のこれらの属性を「物理制御」として扱うのではなく、「表示目的(強調、特殊記号)」として抽象化する必要があります。
1. 調査: ソースコードを全検索し、これらの属性が定義されている項目を特定します。
2. 意図の抽出: その項目が「何のために」重ね打ちされているかを判断します(例:罫線の補強、強調表示、特殊記号の合成)。
3. 置換: PDFライブラリであれば「フォントの太字指定」や「SVG図形描画」へ、HTMLであれば「CSSのfont-weight」や「border」へ、表示の意図を変換します。

サンプルプログラム

以下のコードは、かつて行われていた「強調印字」のロジック例です。これを現代のシステムへ移植する際の考え方を示します。

  • — レガシーな強調印字のデータ定義例 —
  • T属性等により、同じ箇所に二度打ちすることで濃く印字していた

01 WS-PRINT-DATA.
05 WS-HEADER-TEXT PIC X(10) T.
05 WS-OVERPRINT PIC X(10).

  • — 移行後の考え方(擬似コード) —
  • 移行先では「オーバープリント」のロジックを廃止し、
  • スタイル情報として保持するように変更します。
  • 修正案:
  • データ項目を「強調フラグ」を持つ構造に変更する

01 WS-TRANS-DATA.
05 WS-TEXT PIC X(10).
05 WS-EMPHASIS-FLG PIC X(1). > ‘1’: 太字指定

応用・注意点

現代のシステム移行において最も陥りやすい罠は、「印字結果の見た目だけを合わせようとして、PDF上に透明な文字を重ねて配置する」ような強引な実装です。これはアクセシビリティを著しく低下させ、テキスト検索やコピペが正しく行えない原因となります。

また、古い帳票で使われていたこれらの属性は、単なる強調だけでなく、文字と線を重ねて「チェックボックス」や「特殊な単位記号」を生成しているケースも多々あります。移行時は「印字結果の画像」ではなく「帳票定義書の仕様」を再確認し、現代的な描画メソッド(CSSのBoxモデルやPDF描画API)で再構築することを強く推奨します。ハードウェアに依存した制御コードをコードベースから削除し、論理的なデータ構造へ整理することが、保守性向上の鍵となります。

コメント

タイトルとURLをコピーしました