きれいな印刷

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

数学を美しく印刷する

数式をタイプセットしたもの

プリティプリントとは、通常、数式を専門的に組版された形式に似せて表示することを指します。例えば、MaximaMathematicaなどのコンピュータ代数システムでは、次のような出力が出力されますx ^ 2 + 3 * xグラフ電卓の中 には×2+3×{\displaystyle x^{2}+3x}プリティープリントが可能なものもあります。そのような電卓としては、カシオ9860シリーズHP-49/50シリーズHP PrimeTI-84 PlusTI-89TI-Nspire、PrettyPt [ 1 ]アドオンを搭載したTI-83 Plusなどがあります。同様に、PrettPtアドオンまたは「MathPrint」対応オペレーティングシステムを搭載したTI-84 Plusでも同様です。さらに、カシオFX-ESシリーズ(ナチュラルディスプレイ)、シャープEL-Wシリーズ(WriteView)、HP SmartCalc 300sTI-30XBNumworksなど、プリティープリントが可能なドットマトリックス画面を備えた新しい科学電卓も数多くあります。

多くのテキスト書式設定プログラムは数学の組版も行うことができます。TeX高品質の数学の組版用に特別に開発されました。

きれいなマークアップとタグベースのコード

HTML ソースコード。要素の階層関係をよりわかりやすく表示するために整形印刷されています (タグと呼ばれる)

マークアップ言語インスタンスにおける整形表示は、階層構造やネスト構造を視覚的に把握するために、タグや文字列の内容をインデントする処理に最もよく使用されます。タグベース言語の構文構造はそれほど大きく変わりませんが、マークアップ言語の解釈方法や記述するデータによって、インデントは大きく変化する可能性があります。

MathMLでは、空白文字は、 XML構文で要求される以上のデータ、意味、または構文を反映するものではありません。 HTMLでは、タグ間の空白文字はテキストとみなされ、解析結果にテキストノードとして解析されます。[ 2 ] MathML 文書にはインデントを多めに適用できますが、 HTML 文書を整形する際には、コンテンツまたはコンテンツが反映されるタグ要素の概ね近い場所に追加のテキストノードが作成または破壊されないように十分な注意を払う必要があります。 この複雑さの違いは、より単純な MathML の例のように、特別なルールやエッジケースが必要ない自動化された整形操作の観点からは些細なことではありません。 HTML の例では、統一されたスタイルに準拠し、さまざまなインスタンスにわたって一貫して適用されるさまざまなタグ要素とコンテンツを考慮するために、一連の漸進的な相互関連アルゴリズムが必要になる場合があります。これは、 Pretty Diffツールで HTML、XML、および関連技術を整形するために使用されるmarkup.ts [ 3 ]アプリケーションコンポーネントによって証明されています。

プログラムソースコードのフォーマット

プログラマーは、プログラムのソースコードを書く際に、コードを読みやすく理解しやすくするために、書式設定スタイルに従うように教えられます。スタイルは様々で、インデント、キーワードや句読点の周りの空白、中括弧の位置などが含まれます。

(再)フォーマットを自動化するツールが存在します。これらは、ビューティファイア、コードフォーマッタ、コードインデンタなどと呼ばれます。これらのツールは、ソースコードをあるフォーマットスタイルから別のフォーマットスタイルに変換します。プログラミング言語の構文は明確であるため、このようなツールの実装は比較的簡単です。ツールはソースコードを読み取り、コードの構成要素(代入文、条件文、ループなど。制御フローを参照)を認識し、設定ファイルで指定されたスタイルでフォーマットされたソースコードを表示します。

コード整形ツールの中には、スタンドアロンアプリケーションとして提供されるものもあります。また、テキストエディタ統合開発環境(IDE )に組み込まれているものもあります。例えば、Emacsエディタには、プログラミング言語(「Emacs言語モード」)を指定し、それに応じてコードブロックをインデントする設定があります。 [ 4 ]

HTML

Lisp プリティプリンタ

プリティープリントの初期の例として、ビル・ゴスパーの「GRINDEF」(「grind function」の意)プログラム(1967年頃)が挙げられます。このプログラムは、組み合わせ探索と枝刈りを用いてLISPプログラムをフォーマットします。初期のバージョンはLISPプログラムの実行形式(リスト構造)に基づいて動作し、様々な関数の特殊な意味は考慮されていませんでした。後のバージョンでは、実行不可能なコメントを組み込むための特別な読み込み規約と、展開されていない形式で読み込みマクロを保存するための特別な読み込み規約が追加されました。また、<code>[ 5 ]</code>のような特殊な関数に対しては、特別なインデント規約も使用できるようになりました。[6] grind ifという用語、一部の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インデント プログラムは、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 ; } } }

参照

関連概念

  • 弾性タブストップ、整列したインデントを検出して維持する多くのソースコードエディタの機能
  • 縮小化、つまりソースコードをコンパクトにするが、人間が理解しにくくなる
  • 難読化とは、ソースコードを意図的に人間にとって理解しにくくすることであり、特に複雑になるにつれて

ユーティリティ

  • enscript は、きれいな印刷機能を備えたテキストから PostScript へのコンバータです。

参考文献

  1. ^ "PrettyPrint - ticalc.org" . www.ticalc.org . 2022年4月13日閲覧。
  2. ^ Baron, L. David. 「DOM内の空白」 . Mozilla Developer Network . 2012年8月27日閲覧。
  3. ^マークアップ.ts
  4. ^ Stallman, Richard M. 「プログラムのインデント」 GNU Emacsマニュアル フリーソフトウェア財団2011年10月20日閲覧
  5. ^ Ira Goldstein、「Pretty Printing : Converting List to Linear Structure」、人工知能メモ279、マサチューセッツ工科大学、1973年2月。全文
  6. ^ Richard C. Waters、「新しいCommon Lispプリティープリンタの使用」、 ACM SIGPLAN Lisp Pointers 5 :2:27-34、1992年4月~6月。全文
  7. ^専門用語ファイル SVグラインド
  8. ^ GNUスタイル
  9. ^ BSDスタイル