FAQ

よくある質問と、よく質問してほしい質問をいくつかまとめました。

このページはOperaでは動作しません!

PrismはOperaで正常に動作します。 ただし、テーマスイッチャーがOperaのバグを引き起こすため、このページがOperaで動作しないように見える場合があります。これはすぐに修正される予定です。

正規表現で構文強調するのは良くないのでは?

世の中にあるあらゆる構文を正しく処理するには、本格的なパーサーを書く必要があるのは事実です。しかし、ほとんどのWebアプリケーションやWebサイトでは、わずかなエラーは通常許容され、まれに強調表示が失敗してもそれほど大きな問題にはなりません。正規表現に基づいた構文強調表示は、99%の精度(実際のパーセンテージは推測にすぎません)を実現するかもしれませんが、わずかなエラーマージンと引き換えに、非常に重要な利点があります。

このため、Web上やデスクトップ上のほとんどの構文強調表示は、正規表現を利用しています。これには、執筆時点でEspressoやSublime Textなどの人気のあるネイティブアプリケーションで使用されている内部構文強調表示も含まれます。もちろん、すべての正規表現を利用した構文強調表示が同じように作成されているわけではありません。使用されている正確なアルゴリズムに応じて、エラーの数と種類は大きく異なる可能性があります。 Prismの既知の失敗はこのページに記載されています。

非同期強調表示がデフォルトで無効になっているのはなぜですか?

Web Workersは、非常に大きなコードブロックの構文強調表示がメインUIスレッドをブロックするのを防ぐのに役立ちます。ほとんどの場合、適度なサイズのコードのチャンクを強調表示したいと思うでしょう。したがって、これは必要ありません。さらに、Web Workersを使用すると、Workerの作成と終了のオーバーヘッドのため、実際には同期的に強調表示するよりも遅くなります。メインスレッドをブロックしないため、これらのケースでは高速に見えるだけです。また、Web Workersはオブジェクトではなくファイルで動作するため、Prismのコア部分にフックするプラグイン(言語定義を修正するなど)は、同じファイルに含まれていない限り機能しません(ダウンロードページのビルダーを使用すると、この落とし穴から保護されます)。最後に、Web WorkersはDOMや他のほとんどのAPI(コンソールなど)と対話できないため、デバッグが非常に困難です。

既存のHTMLが削除されるのはなぜですか?

コードが非常に複雑になるためです。これはほとんどの人にとって重要な機能ではありません。どうしても必要な場合は、Keep Markupプラグインを使用できます。

既存のHTMLが削除される場合、コードの特定の部分を強調表示するにはどうすればよいですか?

回避策はいくつかあります。コードのブロックを複数の部分に分割し、その周囲にHTMLをラップすることができます(または、.highlightクラスを使用するだけです)。ホームページの「基本的な使い方」セクションで、この動作の例を確認できます。

この制限を回避するもう1つの方法は、Line Highlightプラグインを使用して、特定の行や行範囲を強調表示およびリンクすることです。

言語ごとにどのトークンをスタイル設定できるかを知るにはどうすればよいですか?

強調表示されるすべてのトークンには、少なくとも2つのクラスがあります。tokenと、トークンタイプ(commentなど)のクラス、および任意の数のエイリアスです。エイリアスは追加のトークンタイプと見なすことができ、より専門的なトークンに、より一般的なクラスを提供して、スタイリングを容易にするために使用されます。言語を定義するオブジェクトのキーを見るか、以下のインターフェースを使用することで、さまざまなトークンタイプを見つけることができます。

言語

さらに、標準トークンのリストはこのページで見つけることができます。

異なる言語で同じ名前のトークンに対して異なる強調表示を使用するにはどうすればよいですか?

言語クラスを含む子孫セレクターを使用するだけです。デフォルトのprism.cssは、JavaScript文字列(非常に一般的)とCSS文字列(比較的まれ)で異なる色にするためにこれを行います。以下にそのコードを簡略化して、この手法を示します。

.token.string {
	color: #690;
}

.language-css .token.string,
.style .token.string {
	color: #a67f59;
}

短縮された言語クラス(lang-cssなど)は、拡張された形式に変換されるため、考慮する必要はありません。

同じ手法を使用して、XMLタグの名前空間を属性の名前空間と区別できます

.tag > .token.namespace {
	color: #b37298;
}
.attr-name > .token.namespace {
	color: #ab6;
}