2017-01-06 2 views
0

基本的に、私は自分のnginx confにすべての.cppをプレーンテキストとして表示するWebサーバーを持っていますが、読みやすくするために構文の強調表示をしたいと思います。人間のやりとりのないすべてのcppのシンタックスハイライト

どうすればいいですか?

Googleのハイライトを使用したいので、すべての.cppの前後にhtmlファイルを挿入する方法については十分です。

nginx confのヘッダーとフッターのタグを使って、過去には何も考えていなかった。 ありがとうございます!

乾杯!

+0

おそらくWebサーバーによって実行される可能性がありますが、通常はそうではありません。代わりに、これを実行するのはコンテンツ配信フレームワークまたはシステムまでです。 –

+0

サーバーにコンテンツ配信フレームワークはありません。ファイルの表示にはfancyindexのみがオンです。 – Hoszy

+0

Nginx自体は構文のハイライトを行うことができません。PHPのようなサーバー側言語を使用して、hilightという構文でhtmlファイルを提供するか、jsプラグインを使用してクライアント側でハイライトする必要があります –

答えて

0

すでに指摘したように、NginxはHTMLドキュメントを単独で生成するのにはあまり適していません。通常、これはPHPやPerlのようなサーバー側の処理言語の仕事です。しかし、問題をNginxだけで解決するにはいくつかの方法があります。

まず、Nginxからサーバー側の処理言語を使用することです。 3つの異なる言語(Perl,Lua、およびJavascriptの方言)には、少なくとも3つのオプションモジュールが使用できます。

この方法の問題点は、これらのモジュールがほとんどデフォルトでは利用できないことです。多くの場合、Nginxを手動で構築して有効にする必要があります。 Nginxの独自のカスタムビルドを手に入れるとすぐに、サポートしてアップグレードする必要があるため、時には苦しいこともあります。

しかし、SSIを含む別のオプションがあります。それは最善の解決策ではないかもしれませんが、うまくいくでしょう。上記のモジュールとは異なり、SSIサポートにはNginxのほぼすべてのディストリビューションが付属しています。私の賭けは、あなたのNginxは何もコンパイルせずに、SSIを箱から出すことができるということです。

ので、設定はこのように書き:今ここに

# Define a special virtual location for your cpp files 
location ~* \.(cpp|h)$ { 
    # Unless a GET parameter 'raw' is set with 'yes' 
    if ($arg_raw = 'yes') { 
     break; 
    } 

    # Redirect all the requests for *.cpp and *.h files to another location @js 
    try_files @js @js; 
} 

location @js { 
    ssi on;     # Enable SSI in this location 
    default_type text/html; # Tell the browser that what is returned is HTML 

    # Generate a suitable HTML document with an SSI insertion 
    return 200 '<!DOCTYPE html> 
       <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/default.min.css"> 
       <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js"></script> 
       <script>hljs.initHighlightingOnLoad();</script> 
       <pre><code class="cpp"><!--# include virtual="$uri?raw=yes" --></code></pre>'; 
} 

ブラウザでいくつかの* .cppファイル要求した場合に何が起こるかです:

  1. を要求が最初の場所に行き、 URIがcppで終わるためです。
  2. その後、要求にGETパラメータrawがないため、第2の場所@jsにリダイレクトされます。
  3. SSIテンプレートはreturnで生成され、ssi onのためにすぐにSSIエンジンによって処理されます。
  4. include virtual="$uri?raw=yes"は、SSIエンジンに、Nginx内から元の要求されたファイル(内部変数$uriがcppファイルへのWebパス)を別の要求(副要求)するよう指示します。ブラウザからのリクエストとNginxのサブリクエストの違いは?raw=yesです。
  5. サブリクエストは再び最初の場所で処理されますが、raw GETパラメータのため、2番目の場所には移動しません。この場合、cppファイルの生の内容が副問い合わせへの応答として返されます。
  6. SSIエンジンはこのレスポンスを残りのテンプレートと組み合わせて、結果をブラウザに返します。さらに、default_typeは、結果をHTMLドキュメントとしてレンダリングするようにブラウザに指示します。

出力hereの例を見ることができます。私はthisこの例のハイライトライブラリを使用しました。あなたはSSIテンプレートを変更するだけで好きなものを変更することができます。

+0

それは完璧です。私の必要にちょうど合う!タンクイワン! :) – Hoszy

関連する問題