プリティプリント(またはプリティプリンティング)とは、ソースコード、マークアップ、その他類似のコンテンツなどのテキストファイルに、さまざまな書式設定規則を適用することです。これらの書式設定規則には、インデントスタイルに従うこと、ソースコードの構文要素を強調するために異なる色やフォントを使用すること、コンテンツを読みやすく理解しやすくするためにサイズを調整することなどが含まれます。ソースコードのプリティプリンターは、コードフォーマッターまたはビューティファイアと呼ばれることもあります。

プリティプリントとは、通常、数式を専門的に組版されたように表示することを指します。たとえば、MaximaやMathematicaなどの数式処理システムでは、次のような出力が表示されることがあります。x^2 + 3 * x"として" 一部のグラフ電卓は、整形印刷を実行できます。そのような電卓には、Casio 9860 シリーズ、HP-49/50 シリーズおよびHP Prime、TI-84 Plus、TI-89、TI-Nspire、PrettyPt [ 1 ]アドオン付きのTI-83 Plusなどがあります。同様に、PrettPt アドオンまたは「MathPrint」対応のオペレーティングシステムを搭載したTI-84 Plus もあります。さらに、Casio FX-ES シリーズ (Natural Display)、 Sharp EL-W シリーズ(WriteView)、HP SmartCalc 300s、TI-30XB、Numworks など、整形印刷が可能なドットマトリクス画面を備えた新しい関数電卓も多数あります。

マークアップ言語における整形表示は、一般的にタグや文字列のインデントによって階層構造やネスト構造を視覚的に分かりやすく示すことを指します。タグベースの言語の構文構造自体は大きく変わりませんが、マークアップ言語の解釈方法や記述するデータによって、インデントは大きく異なる場合があります。
MathMLでは、空白文字はXML構文で要求される以上のデータ、意味、構文を反映しません。HTML では、タグ間の空白文字はテキストとみなされ、解析結果にテキスト ノードとして解析されます。[ 2 ] MathML ドキュメントにはインデントを自由に適用できますが、HTML ドキュメントを整形印刷する際には、コンテンツまたはコンテンツを反映するタグ要素の近傍で追加のテキスト ノードが作成または削除されないように、十分な注意を払う必要があります。この複雑さの違いは、より単純な MathML の例のように特別なルールやエッジ ケースが不要な自動整形印刷操作の観点からは、些細なことではありません。HTML の例では、Pretty Diff ツールで HTML、XML、および関連技術を整形するために使用される markup.ts [ 3 ]アプリケーション コンポーネントが示すように、統一されたスタイルに準拠し、さまざまなインスタンスで一貫して適用されるさまざまなタグ要素とコンテンツのパターンを考慮するために、一連の段階的な相互に関連するアルゴリズムが必要になる場合があります。
プログラマーは、プログラムのソースコードを書く際に、コードを読みやすく理解しやすくするために、一定の書式スタイルに従うように指導されます。スタイルは様々で、インデント、キーワードや句読点の周りの空白、中括弧の位置などに関する事項が含まれます。
コードの書式設定を自動化するツールが存在します。これらは、整形ツール、コードフォーマッタ、またはコードインデンタと呼ばれます。これらのツールは、ソースコードをある書式スタイルから別の書式スタイルに変換します。プログラミング言語の構文は明確であるため、このようなツールの実装は比較的簡単です。ツールはソースコードを読み込み、コードの構成要素構造(代入文、条件分岐、ループなど。制御フローを参照)を認識し、設定ファイルで指定されたスタイルでフォーマットされたソースコードを表示します。
コード整形ツールの中にはスタンドアロンアプリケーションとして動作するものもあれば、テキストエディタや統合開発環境に組み込まれているものもあります。例えば、Emacsエディタにはプログラミング言語(「Emacs言語モード」)を指定し、それに応じてコードブロックをインデントする設定があります。 [ 4 ]
初期の整形の例としては、ビル・ゴスパーの「GRINDEF」(つまり「grind function」)プログラム( 1967年頃)があり、これは組み合わせ探索と枝刈りを使用してLISPプログラムを整形しました。初期バージョンは Lisp プログラムの実行可能(リスト構造)形式で動作し、さまざまな関数の特別な意味には無関心でした。後のバージョンでは、実行不可能なコメントを組み込むための特別な読み取り規約と、展開されていない形式で読み取りマクロを保持するための規約がありました。また、などの特別な関数に対して特別なインデント規約も許可しましたif。[ 5 ] [ 6 ]「grind」という用語は、一部の Lisp サークルでは整形の同義語として使用されました。[ 7 ]
多くのフリーソフトウェアプロジェクトでは、コードレイアウトのルールが定められています。最もよく知られているのは、GNUフォーマット[ 8 ] とBSDスタイル[ 9 ]です。 両者の最大の違いは、中括弧の位置です。GNUスタイルでは、各中括弧は1行に1つずつ配置され、対応するペア(開き中括弧と閉じ中括弧)は同じレベルにインデントされます。BSDスタイルでは、開き中括弧はコード行の末尾に配置され、閉じ中括弧の後にelseキーワードが続くことができます。インデントのサイズと空白の位置も異なります。
以下の例は、典型的なC言語の構造と、さまざまなインデントスタイル規則によるそれらの書式設定方法を示しています。書式設定を一切行わない場合、次のようになります。
int foo ( int k ){ if ( k < 1 || k > 2 ){ printf ( "範囲外です\n " ); printf ( "この関数には 1 または 2 の値が必要です\n " );} else { printf ( "切り替え中\n " ); switch ( k ){ case 1 : printf ( "1 \n " ); break ; case 2 : printf ( "2 \n " ); break ;}}}GNU indent プログラムは、GNU ルールに従ってインデントするように指示された場合、以下の出力を生成します。
int foo ( int k ) { if ( k < 1 || k > 2 ) { printf ( "範囲外です\n " ); printf ( "この関数には 1 または 2 の値が必要です\n " ); } else { printf ( "切り替え中\n " ); switch ( k ) { case 1 : printf ( "1 \n " ); break ; case 2 : printf ( "2 \n " ); break ; } } }BSDルールに従ってフォーマットすると、以下の出力が得られます。
int foo ( int k ) { if ( k < 1 || k > 2 ) { printf ( "範囲外です\n " ); printf ( "この関数には 1 または 2 の値が必要です\n " ); } else { printf ( "切り替え中\n " ); switch ( k ) { case 1 : printf ( "1 \n " ); break ; case 2 : printf ( "2 \n " ); break ; } } }関連概念
公共事業