Prismの既定のクラスは賢明だが固定されており、あまりに一般的です。このプラグインは、ニーズに合わせてそれらのクラスをカスタマイズするいくつかの方法を提供しています。使用例
.prism--comment
)。.editor__comment
などのクラスを記述したいと考えています。.comment_7sh3a
のように、ハッシュ化されたクラスを使用したいと思います。Prism.plugins.customClass.prefix('prism--')
Prism.plugins.customClass.map({
keyword: 'special-keyword',
string: 'string_ch29s',
comment: 'comment_93jsa'
});
オブジェクトのキーは、置換したいクラス(例: comment
)、値は使用するクラス(例: my-comment
)です。指定されていないクラスはそのままになります。
または、元のクラスを受け取ってマッピングされたクラスを返す関数を受け渡すこともできます。この関数を使用して、言語固有のマッピングされたクラスを実装することもできます。
例
Prism.plugins.customClass.map((className, language) => {
if (language === 'css') {
return cssSpecificMap[className] || className;
} else {
return className;
}
});
トークンごとに、言語ごとに新しいクラスを追加できます。
Prism.plugins.customClass.add(({content, type, language}) => {
if (content === 'content' && type === 'property' && language === 'css') {
return 'content-property';
}
});
注意: 指定されたcontent
は、現在のトークンの内部 HTML です。すべての<
と&
文字はエスケープされ、ネストされたトークンの HTML コードが含まれる場合があります。
機能関数は、Prismとこのプラグインの後に呼び出す必要があります。たとえば
<!-- 1. load prism -->
<script src="prism.js"></script>
<!-- 2. load the plugin if you don't include it inside prism when download -->
<script src="plugins/custom-class/custom-class.js"></script>
<!-- 3. call the feature you want to use -->
<script>
Prism.plugins.customClass.map(myClassMap);
Prism.plugins.customClass.prefix(myPrefixString);
</script>
.my-namespace--comment_93jsa
のようになります)。このプラグインの当初の目的は、CSS モジュールで使用することです。CSS モジュールによって返されるクラスマップオブジェクトと完全に連携します。たとえば
import Prism from 'prismjs';
import classMap from 'styles/editor-class-map.css';
Prism.plugins.customClass.map(classMap)
注意: このプラグインは、生成されたトークン要素(通常はspan.token
形式)にのみ影響します。他のプラグインによって生成されるものすべての要素(例: Toolbar 要素と 行番号 要素)を含むcode
とpre
要素のクラスは変更されません。
入力
<pre class="language-javascript"><code>
var foo = 'bar';
</code></pre>
オプション
Prism.plugins.customClass.map({
keyword: 'special-keyword',
string: 'my-string'
});
Prism.plugins.customClass.prefix('pr-');
出力
<pre class="language-javascript"><code class="language-markup">
<span class="pr-token pr-special-keyword">var</span>
foo
<span class="pr-token pr-operator">=</span>
<span class="pr-token pr-my-string">'bar'</span>
<span class="pr-token pr-punctuation">;</span>
</code></pre>
このプラグインはトークンにのみ影響することに注意してください。code
とpre
要素のクラスにはプレフィックスが付けられません。
入力
<pre class="language-css"><code>
a::after {
content: '\2b00 ';
opacity: .7;
}
</code></pre>
オプション
Prism.plugins.customClass.add(({language, type, content}) => {
if (content === 'content' && type === 'property' && language === 'css') {
return 'content-property';
}
});
出力
<pre class=" language-css"><code class=" language-css">
<span class="token selector">a::after</span>
<span class="token punctuation">{</span>
<span class="token property content-property">content</span>
<span class="token punctuation">:</span>
<span class="token string">'\2b00 '</span>
<span class="token punctuation">;</span>
<span class="token property">opacity</span>
<span class="token punctuation">:</span>
.7
<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>