Highlight:プログラミング言語のソースコードを構文で色分け (コマンド編)
Highlight のサイトマップ
- GUI編
- コマンド編 ※ココ
- Highlightのプラグインの詳細
- 日本語の翻訳ファイルの作成
当ページは公式サイト「André Simon(アンドレ・シモン)- Highlight」のWebマニュアル+gitlab公開マニュアルを簡易翻訳+手修正したものです。少しコメントも追加しています。結果の確認はしてないので動作を保証するものでは有りません。(2019/02/15)
目次
- 目次 ※ココ
- 1. 概要
- 2. 使用法とオプション
- 3. 設定
- 4. 埋め込みハイライト
- 5. ビルドとインストール
- 6. 開発者へのお問い合わせ
1. 概要
Highlightは色付きの構文強調の表示を使用してます。ソースコードをHTML、XHTML、RTF、LaTeX、TeX、SVG、BBCode、および端末エスケープシーケンスに変換します。言語別の定義と色のテーマはカスタマイズ可能です。
001 Option Explicit
002
003 Public Const PDSaveFull = &H1
004
005 Sub Jso_addwatermarkfromtext()
006 Dim objAcroApp As New Acrobat.AcroApp
007 Dim objAcroPDDoc As New Acrobat.AcroPDDoc
008 Dim jso As Object
009 Dim lRet As Long
010
011 '透かしが追加されるPDFファイル
012 Const CON_PDF_IN = "D:\work\test.pdf"
013
014 'JSObjectオブジェクト作成時のNothingの回避策
015 'Acrobatアプリを強制的にメモリにロードする
016 lRet = objAcroApp.CloseAllDocs
017
018 'PDFファイルを開く
019 lRet = objAcroPDDoc.Open(CON_PDF_IN)
020 If lRet = False Then
021 MsgBox "AcroExch PDDoc Open エラー"
022 Goto JSO_addWatermarkFromText_Skip:
023 End If
024 End Sub
ココではDOSからコマンドライン起動するHighlight(highlight.exe)の各パラメータと起動の仕方、使い方、動作に必要な各種設定ファイルについて説明をします。
1.1 目的
Highlightはいくつかの出力形式に対して柔軟で使いやすい構文強調の表示を提供するように設計されています。ハードコーディング構文や色付け情報の代わりに、すべての関連データは設定スクリプトに保存されます。これらのスクリプトはプラグインスクリプトを使って変更または拡張することができます。
1.2 機能
- キーワード、型、文字列、数字、エスケープシーケンス、コメント、演算子、プリプロセッサディレクティブ別の強調表示
- HTML、XHTML 1.1、RTF、TeX、LaTeX、SVG、BBCode、および端末エスケープシーケンスでの色出力
- 出力として HTML、LaTeX、TeX、またはSVG用の参照スタイルシートファイルをサポート
- 構文要素は正規表現またはプレーン文字列リストとして定義
- カスタマイズ可能なキーワードグループ
- ファイル内のネスト言語の認識
- すべての設定ファイルはLuaスクリプトで作成
- 言語定義とテーマを調整するためのプラグインスクリプトをサポート
- C、C ++、C#、および Java ソースコードの再フォーマットとインデント機能のサポート
- 長い行の折り返し
- 出力に行番号が設定可能
1.3 サポートされているプログラミング言語とマークアップ言語
現在サポートされている言語についてはREADME_LANGLISTをご覧ください。リストとそれに関連付けられたファイル拡張子を見るには、次のコマンドを実行します。
highlight --list-scripts=langs
2. 使用法とオプション
2.0 導入
2.0.1 ダウンロード
公式サイト「André Simon(アンドレ・シモン)- Highlight」のダウンロードのページの下の方です。
「Windows packages」から選びます。今回は64ビットのノンセットアップ版「highlight-3.49-x64.zip」をダウンロードしました。
2.0.2 インストール
ノンセットアップ版「highlight-3.49-x64.zip」はZIPファイルを解凍して、適切な(日本語文字が無い)フォルダ にコピーするだけです。
起動は highlight.exe です。
2.1 簡単な紹介
次の例は、main.cpp という入力ファイルを使用して、強調表示された C++ ファイルを作成する方法を示しています。
- HTMLファイルを出力します。
highlight -i main.cpp -o main.cpp.html
HTMLファイル main.cpp.html とhighlight.cssが作業フォルダに出力されます。
highlight < main.cpp > main.cpp.html --syntax cpp
IOリダイレクトを使用する場合は、–syntaxを使用してプログラミング言語を定義する必要があります。
- CSS定義と行番号が埋め込まれたHTMLを出力します。
highlight -i main.cpp -o main.cpp.html --include-style --line-numbers
- インラインCSS定義のHTMLを出力します。
highlight -i main.cpp -o main.cpp.html --inline-css
- “horstmann”ソースフォーマットスタイルと “neon”色テーマを使用してLaTeXを出力します。
以下の出力フォーマットは –out-format で指定します。
- html :HTML5 (標準)
- xhtml :XHTML 1.1
- tex :プレーン TeX
- latex :LaTeX
- rtf :RTF
- odt :OpenDocument テキスト (Flat XML)
- svg :SVG
- bbcode :BBコード
- pango :Pango マークアップ
- ansi :端末16色エスケープコード
- xterm256 :端末256色エスケープコード
- truecolor :端末16m色エスケープコード
- フォント設定を(カスタマイズ)します。
highlight --syntax ada --out-format=xhtml --font-size 12 --font Consolas,¥'Courier¥ New¥'
highlight --syntax ada --out-format=latex --font-size tiny --font sffamily
- 出力フォルダを設定します。※サンプルがイマイチ
highlight -d some/target/dir/ *.cpp *.h
2.2 CLIオプション
highlightのコマンドライン版は以下のオプションを提供します。
基本的な使い方:highlight [OPTIONS]… [FILES]…
2.2.1 一般的なオプション:
-B, –batch-recursive=<wc>
一致するすべてのファイルを変換します。サブフォルダも検索します。(例:-B ‘* .cpp’)
-D, –data-dir=<directory>
データフォルダへのパスを設定します。
–config-file=<file>
言語ファイルまたはテーマファイルへのパスを設定します。
-d, –outdir=<directory>
出力フォルダの名前
-h, –help[=topic]
ヘルプまたはトピックの説明を表示
<topic> = [syntax, theme, plugin, config, test]
syntax:構文
theme: テーマ
plugin: プラグイン
config:設定
test:テスト
(例:highlight –help=syntax )
-i, –input=<file>
1つの入力ファイル名
-o, –output=<file>
1つの出力ファイル名
-P, –progress
進捗バーをバッチモードで表示
-q, –quiet
バッチモードでの進行状況情報を抑制する。
-S, –syntax=<type>
ソースコードの種類を指定します。
<type> に言語名を指定
–syntax-by-name=<name>
名前<name>でソースコードの種類を指定すると、その名前のファイルを読まない。標準入力に最適です。※Features added v3.5
-v, –verbose
デバッグ情報を表示
–force
入力構文が不明な場合に出力を生成する。※意味不明
–list-scripts=<type>
インストール済みスクリプトの一覧表示
<type> = [langs, themes, plugins] ※出力された
langs:言語
themes:テーマ
plugins:プラグイン
(例:highlight –list-script=langs)言語一覧を出力
–list-cat=<categories>
指定したカテゴリでスクリプトをフィルタする。
(例:–list-cat = ‘source; script’)
–plug-in=<script>
Luaプラグインスクリプトを実行。複数のプラグインを実行するオプションを繰り返します。
–plug-in-param=<value>
プラグインの入力パラメータを設定
–print-config
出力パスの構成
–print-style
スタイルシートのみを出力(–style-outfileを参照)
–skip=<list>
リストされた未知のファイルタイプを無視する
(例:–skip = ‘bak; c〜; h〜’)
–start-nested=<lang>
区切り文字を開かずに入力を開始するネスト言語を定義する。
–stdout
標準出力に出力(バッチモード、 – print-style)
–validate-input
入力がテキストかどうかをテストし、Unicode BOMを削除する
–version
バージョンと著作権情報を表示
2.2.2 出力フォーマットのオプション
-O, –out-format=<format>
出力フォーマットを指定
<format>=[html, xhtml, latex, tex, odt, rtf,ansi, xterm256, truecolor, bbcode, pango, svg]
-c, –style-outfile=<file>
ファイル引数として ‘stdout’が指定されている場合は、スタイルファイルの名前または標準出力に出力する。
-e, –style-infile=<file>
(非推奨の)style-outfileに含めるには、代わりにプラグインファイルを使用してください。
-f, –fragment
出力でヘッダーとフッターを省略
-F, –reformat=<style>
出力を与えられたスタイルで再フォーマットし、インデントする。
<styler> = [allman, gnu, google, horstmann, java, kr, linux, lisp, mozilla, otbs, pico, vtk, ratliff, stroustrup, webkit, whitesmith, user]
ユーザースタイルは事前定義されたスキームを適用しない。
再フォーマットを定義するには–reformat-optionを使用する。
–reformat-option =<opt>
astyle コマンドラインオプションを適用する(-Fと仮定)
-I, –include-style
出力ファイルにスタイル定義を含める
-J, –line-length=<num>
折り返す行の長さ(桁数)(-V、-Wを参照)
-j, –line-number-length=<num>
左パディングを含む行番号の幅(桁数)(デフォルト:5)
–line-range=<start-end>
番号<start>から<end>までの行のみを出力します
-k, –font=<font>
フォントを設定(出力フォーマットに固有)
-K, –font-size=<num?>
フォントサイズを設定(出力フォーマットに固有)
-l, –line-numbers
行番号を表示
-m、–line-number-start = <cnt>
行番号の開始番号を cnt に設定(-lと仮定)
-s、–style = <style>
色スタイル(テーマ)を設定。–base16を参照ください。
-t、–replace-tabs =<num>
タブをnum個のスペースに置き換える。
-T、–doc-title = <title>
ドキュメントのタイトル
-u、–encoding = <enc>
入力ファイルのエンコードと一致する出力エンコードを設定します。NONEに設定されている場合、エンコード情報を省略します。(日本語文字が化ける時は –encoding=sjis を追加して見てください)
-V、–wrap-simple
関数のパラメータと文をインデントせずに、80文字(デフォルト)の後に行を折り返す
-W、–warap
80文字(デフォルト)の後に行を折り返す
–wrap-no-numbers
折り返し行の行番号を省略(-lと仮定)
–z、 –zeroes
行番号の前を0で埋める。パディング
–base16
Base16コレクションのテーマを使用
–delim-cr
CRを行末区切り文字として設定(MacOS 9)
–keep-injections
-f にもかかわらず プラグインインジェクションを出力
–kw-case = <case>
大文字と小文字を区別しないキーワードの大文字と小文字を変更
<case> = [upper, lower, capitalize]
upper:全て大文字
lower:全て小文字
capitalize:先頭の文字のみ大文字
–no-trailing-nl
末尾の改行を省略
–no-version-info
出力でHighlightのバージョン情報のコメントを省略
2.2.3 (X)HTMLの出力オプション:
-a、 –anchors
行番号にアンカーを付ける
-y、–anchor-prefix =<str>
アンカー名の接頭辞を設定
-N、–anchor-filename
入力ファイル名をアンカー接頭辞として使用
-C、–print-index
ハイパーリンクを含むインデックスを出力ファイルへ
-n、–ordered-list
順序付きリスト項目として行を出力
–class-name=<name>
CSSクラス名の接頭辞を設定
NONEに設定されている場合はクラス名を省略
–inline-css
各タグ内にCSSを出力(詳細出力)
–enclose-pre
断片化された出力をpreタグで囲む(-fと仮定)
2.2.4 LaTeXの出力オプション:
-b、–babel
Babelパッケージのショートハンドを無効
-r, –replace-quotes
二重引用符を \dq{} で置き換え
-beamer
Beamerパッケージ用に出力を調整
–pretty-symbols
角かっこや他の記号の外観を改善
2.2.5 RTFの出力オプション:
–page-color
ページカラー属性を含める
-x、–page-size = <ps>
ページサイズを設定
<ps>= [a3、a4、a5、b4、b5、b6、letter]
–char-styles
文字スタイルシートを含める
2.2.6 SVGの出力オプション:
–height
画像の高さを設定(許容単位)
–width
画像の幅を設定(–heightを参照)
2.2.7 端末エスケープの出力オプション(xterm256または天然色):
–canvas [=width]
背景色のパディングを設定(デフォルト:80)
2.2.8 GNUソースハイライトの互換性オプション
–doc
スタンドアロン文書を作成
–no-doc
–docオプションを取り消す
–css=filename
外部スタイルシートのファイル名
–src-lang=STRING
ソースの言語
-t、 -tab=INT
タブの長さをINTで指定
-n、–line-number[=0]
すべての出力行に番号を付けて、パディングの桁数を指定
–line-number-ref[=p]
すべての出力行に番号を付けて、指定された接頭辞pと行番号からなるアンカーを生成(デフォルト= ‘line’)。)
–output-dir =path
出力先のフォルダ (path)を指定
–failsafe
入力に対して言語定義が見つからない場合は単純に出力にコピーする。
入力ファイルも出力ファイルも指定されていない場合は、stdinとstdoutが使用されます。
バージョン3.44以降、標準入力からの読み込みも ‘ – ‘オプションで起動できます。
他の出力形式が指定されていない限り、HTMLが生成されます。
-cも-Iも指定されていない場合、
スタイル定義はhighlight.css(HTML、XHTML、SVG)またはhighlight.sty(LaTeX、TeX)に保管されます。
再フォーマットコード(-F)は、C、C ++、C#、およびJava入力ファイルでのみ機能します。
-Vまたは-Wで行を折り返すと、長い1行のコメントとディレクティブが正しく強調表示されません。line-rangeを使用すると、複数行の構文要素に干渉する可能性があります。 慎重に使用してください。
ハイライト–list-scripts = langsを実行して、サポートされているすべての構文タイプを確認します。
出力をカスタマイズするためのプラグインの適用方法については、READMEファイルを参照してください。
アップデートと情報:http://www.andre-simon.de/
2.3 GUIオプション
グラフィカルユーザインタフェースはCLI機能のサブセットを提供します。出力ファイルの外観の動的プレビューが含まれています。スクリーンショット とスクリーンキャストをご覧ください。
2.4 入出力
–inputおよび–outputオプションで入力ファイル名または出力ファイル名が定義されていない場合、highlightはファイル処理にstdinとstdoutを使用します。
入力ファイル名が–inputで定義されていない、またはプロンプトで指定されていない場合、highlightはファイル拡張子で言語タイプを判断できません(ただし、スクリプト言語によっては最初の入力行のshebangによって決定されます)。この場合、与えられた言語を–syntaxでハイライトする必要があります(ほとんどの場合、これはソースファイルのファイル拡張子です)。
highlight test.py
highlight < test.py --syntax py #--syntaxオプションが必要
cat test.py | highlight --syntax py
複数の接尾辞(C++ファイルのC、cc、cpp、hなど)がある場合、それらは $CONF_DIR/filetypes.conf 内の言語定義にマップされます。
※filetypes.conf は highlight.exe と同じフォルダ
複数の入力ファイルが定義されている場合、または–batch-recursive設定されている場合、強調表示はバッチ処理モードに入ります。バッチモードでは選択した出力タイプの拡張子を付加して、highlightはオリジナルのファイル名を使用して生成されたファイルを保存します。
入力フォルダ内のファイルが同じ名前を共有している場合、出力ファイルにはそのソースパス名が接頭辞として付けられます。
–out-dirオプションはバッチモードで推奨されています。パフォーマンスを向上させるには–quietを使用します(シェルスクリプトでの使用に推奨)。
2.4.1 HTML、TeX、LaTeX、SVGの出力
HTML、TeX、LaTeX、SVGの出力フォーマットではフォーマット情報(スタイルシート)を含むスタイル定義ファイルを参照できます。
HTMLおよびSVG出力では、このファイルはCSS定義を含み、「highlight.css」として保存されています。LaTeXとTeXでは、それはマクロ定義を含み、 ‘highlight.sty’として保存されます。
スタイルシートの名前とパスは–style-outfileで変更できます。この–outdirオプションが指定されている場合、スタイルシートを含むすべての生成された出力はこのフォルダに格納されます。
–include-styleスタイルシートを参照せずに出力文書にスタイル情報を埋め込むために使用します。
参照スタイル定義にはすべてのフォーマット設定情報を単一のファイルで共有するという利点があります。これはすべての参照元文書に影響します。
–style-infileを使用するとドキュメントの最終フォーマット情報に含めるファイルを定義します。 これにより生成コードを編集せずにデフォルトのハイライトスタイル定義を拡張または再定義できます。
注意:プラグインスクリプトを使用することは、スタイルを向上させるのに適した方法です。
2.4.2 ターミナル出力:
ANSI端末出力用に定義されている色は限られているので、 –out-format=ansi を持つハードコードされた色テーマは1つだけ存在します。したがって、256色の出力を有効にするには –out-format=xterm256 を使用する必要があります。256色モードは、最近リリースされたxterm、rxvt、Puttyでサポートされています。最新の端末エミュレータも16m色をサポートしています。このモードは –out-format=truecolors で有効になります。
highlight --out-format=ansi <inputfile> | less -R
highlight --out-format=xterm256 <inputfile> | less -R
2.4.3 テキスト処理:
言語定義がテキストとして指定されている場合、強調表示は行われません。
highlight -S txt --out-format=latex README > README.tex
2.5 GNUソースハイライトの互換性
コマンドラインインタフェースはsource-highlightと広範囲に調和しています。
以下の強調表示オプションは、source-highlightと同じ意味を持ちます。
–input, –output, –help, –version, –out-format, –title, –data-dir, –verbose, –quiet, –ctags-file
これらのオプションは互換性を高めるために追加されました。
–css, –doc, –failsafe, –line-number, –line-number-ref, –no-doc, –tab, –output-dir, –src-lang
これらのスイッチは、スクリプト、プラグインなどに共通の蛍光ペンインターフェースを提供します。
2.6 高度なオプション
2.6.1 バイナリ入力ファイルの解析を禁止
highlightが信頼できない入力を処理する可能性がある場合は、 –validate-inputを使用してバイナリファイルの解析を無効にできます。このフラグを選択すると、highlightは入力ファイルのヘッダをマジックナンバーのリストと一致させる。バイナリファイルの種類が検出された場合、highlight はエラーメッセージで終了します。 このスイッチは出力からUTF-8 BOMも削除します。
2.6.2 区切り文字を付けずにネストしたコードを強調表示
ファイルが開始デリミタのない埋め込みコードセクションで始まる場合、この–start-nestedオプションは入れ子言語モードに切り替わります。これはLuaTeXファイルで起こります:
highlight luatex.tex --latex --start-nested=inc_luatex
Inc_luatexは、TeX行コメント付きのLua定義です。ネストしたコードセクションはホスト言語定義で定義されている終了区切り文字で終わらなければならないことに注意してください。
2.6.3 新しい設定スクリプトをテスト
オプション–config-fileは新しい設定ファイルをテストするのに役立ちます。ファイルは言語またはテーマでなければなりません。
highlight --config-file xxx.lang --config-file yyy.theme -I
2.6.4 デバッグ言語の定義
Luaと構文データを表示するには–verboseを使用してください。
2.6.5 UTF-8 BOMを削除
UTF-8バイトオーダーマークを削除するには、–validate-inputを使用してください。
2.6.6 標準出力に出力
出力ファイルをバッチモードで標準出力に書き込むには、–stdoutを使用します。
2.6.7 ポータブルGUI(Windowsビルド版)
–portableスイッチを使用してhighlight-gui.exeを起動し、その設定をレジストリではなくテキストファイルに保存します。
highlight-gui.exe --portable
保存場所:\andre-simon.de\highlight-gui.ini
2.7. 環境変数
コマンドラインバージョンはこれらの変数を認識:
- HIGHLIGHT_DATADIR: highlight の設定スクリプトへのパスを設定
- HIGHLIGHT_OPTIONS:コマンドラインオプションを含めることができますが、入力ファイルパスは含みません。
2.8. 構文テスト
バージョン2.45以降、highlightはコメント内の特別な表記法をサポートして構文認識をテストします。
詳細は README_TESTCASESを参照してください。
3. 設定
3.1 ファイル形式
設定ファイルはLuaスクリプトです。 Luaの構文の詳細については、http://www.lua.org/manual/5.1/manual.htmlを参照してください。
Lua構文の詳細については、以下を参照してください。
これらの構文はスクリプトを編集するのに最適です。
変数への代入:
name = value
(変数は型を持たず、値のみが持つ)
Strings(文字列):
string1 = “エスケープ付きの文字列リテラル:\n”
string2 = [[エスケープシーケンスのない生の文字列]]
生の文字列の内容が[で始まる、または]で終わる場合は、構文エラーを回避するために、括弧にスペースを入れてください。Highlight すると文字列が取り除かれます。
文字列がこのような文字クラスを持つ集合を含む正規表現である場合は、”filler”を含む文字列区切り文字を使用してください。
[=[正規表現文字列 ]=]
Comments(コメント):
— 行のコメント
–[[ ブロックのコメント ]]
Arrays(配列):
配列= {最初= 1、2番目= “2”、3、{4,5}}
Lua構文の詳細については 、Luaのマニュアルを参照してください。
3.2 言語定義
言語定義は異なる色とフォントの種類で強調表示されるプログラミング言語のすべての要素を表します。次の命名規則を使用して、新しいファイルをlangDefs フォルダ下に保存します。
<通常のソースコードファイルの拡張子>.lang
- PHP - > php.lang
- Java - > java.lang
複数の接尾辞が存在する場合は、それらをfiletypes.confで一覧表示してください。
3.2.1 構文要素
Keywords = { Id, List|Regex, Group? }
- Id:整数、キーワードグループID(値1〜4、複数のキーワードグループに再利用可能)
- List:キーワードの一覧
※通常では「-」以外の記号は使用不可。
「-key-word」は先頭の「-」を外して「key-word」で一覧に追加。 - Regex:文字列、正規表現
- Group:整数、正規表現のグループIDを取得し、キーワードとして返されるべき正規表現の一部を定義する
(オプション: 設定されていない場合、最も大きいグループ番号との一致が返されます(左から右へカウント))。
Comments = { {Block, Nested?, Delimiter={Open, Close?} }
- Block:ブール値 、コメントがブロックコメントの場合はtrue
- Nested:ブール値、ブロックコメントを入れ子にできる場合はtrue(オプション)
- Delimiter:リスト。オープンデリミタ正規表現(行コメント)またはオープンデリミタ正規表現とクローズデリミタ正規表現(ブロックコメント)を含む
Strings = { Delimiter|DelimiterPairs={Open, Close, Raw?}, Escape?, Interpolation? , RawPrefix? , AssertEqualLength? }
- Delimiter:文字列、文字列の区切り文字を記述する正規表現
- DelimiterPairs:リスト、等しくない場合にはオープンとクローズの区切り文字を含み(regex)、オプションのRawフラグをブール値として含み、区切り文字のペアを生の文字列としてマークします。
- Escape:文字列、エスケープシーケンスの正規表現(オプション)
- RawPrefix:文字列、生の文字列インジケータを定義します(オプション)
- AssertEqualLength:ブール値 、区切り文字の長さが同じでなければならない場合はtrueに設定します
PreProcessor = { Prefix, Continuation? }
- Prefix:文字列、オープンデリミタを記述する正規表現
- Continuation:文字列、継続文字を含む(オプション)
NestedSections = {Lang, Delimiter= {} }
- Lang:文字列、入れ子になった言語の名前
- Delimiter :リスト、コードセクションの開閉区切り文字を含む
- Categories:テーブル、カテゴリのリスト(config、source、scriptなど)
- Delimiter:リスト、コードセクションの開閉区切り文字を含みます。※古い?
- Description:文字列、構文の説明を定義
- Digits:文字列、数字を定義する正規表現(オプション)
- Identifiers:文字列、識別子を定義する正規表現(オプション)
- Operators:文字列、演算子を定義する正規表現
- EnableIndentation:ブール値 、構文を再フォーマットしたりインデントしたりできる場合はtrueに設定します。
- IgnoreCase:ブール値 、キーワードの大文字と小文字を区別しない場合はtrueに設定します
3.2.2 グローバル変数
次の変数は言語定義内で利用可能です。
- HL_LANG_DIR:言語定義の現在のパス(dofileと共に使用)
- Identifiers:識別子のデフォルトの正規表現
- Digits:数字のデフォルトの正規表現
以下の変数は、内部の強調表示状態を表す整数です。
- HL_STANDARD
- HL_STRING
- HL_NUMBER
- HL_LINE_COMMENT
- HL_BLOCK_COMMENT
- HL_ESC_SEQ
- HL_PREPROC
- HL_PREPROC_STRING
- HL_OPERATOR
- HL_LINENUMBER
- HL_KEYWORD
- HL_STRING_END
- HL_LINE_COMMENT_END
- HL_BLOCK_COMMENT_END
- HL_ESC_SEQ_END
- HL_PREPROC_END
- HL_OPERATOR_END
- HL_KEYWORD_END
- HL_EMBEDDED_CODE_BEGIN
- HL_EMBEDDED_CODE_END
- HL_IDENTIFIER_BEGIN
- HL_IDENTIFIER_END
- HL_UNKNOWN
- HL_REJECT
OnStateChange 関数:
この関数は内部状態が変化した場合に呼び出されるフックです(例:キーワードが見つかった場合はHL_STANDARDからHL_KEYWORDまで)。新しい状態を変更したり、キーワードリストなどの構文要素を操作したりするために使用できます。
OnStateChange(oldState、newState、token、kwGroupID)
- Hook Event:パーサーの状態変化の強調表示
- Parameters:oldState:古い状態
- newState:意図した新しい状態
- token:新しい状態を引き起こした現在のトークン
- kwGroupID:newStateがHL_KEYWORDの場合、パラメータにはキーワードグループIDが含まれます。
- Returns:続行する正しい状態またはHL_REJECT
認識されたトークンと状態を破棄する必要がある場合はHL_REJECTを返します。 トークンの最初の文字が出力され、 “oldState”として強調表示されます。
利用可能な機能についてはREADME_PLUGINSを参照してください。
3.2.3 サンプル
Description="C and C++" Categories = {"source"} Keywords={ { Id=1, List={"goto", "break", "return", "continue", "asm", "case", "default", -- [..] } }, -- [..] } Strings = { Delimiter=[["|']], RawPrefix="R", } Comments = { { Block=true, Nested=false, Delimiter = { [[\/\*]], [[\*\/]] } }, { Block=false, Delimiter = { [[//]] } } } IgnoreCase=false PreProcessor = { Prefix=[[#]], Continuation="\\", } Operators=[[\(|\)|\[|\]|\{|\}|\,|\;|\.|\:|\&|\<|\>|\!|\=|\/|\*|\%|\+|\-|\~]] EnableIndentation=true -- resolve issue with C++14 number separator syntax function OnStateChange(oldState, newState, token) if token=="'" and oldState==HL_NUMBER and newState==HL_STRING then return HL_NUMBER end return newState end
3.3 正規表現
サポートされている正規表現の構成についてはREADME_REGEXを参照してください。
3.4 テーマの定義
色テーマには言語定義に記述されている言語要素のフォーマット情報が含まれています。
ファイルは themes/ に.theme として保存する必要があります。
テーマを–styleオプションで適用します。付属のBase16テーマの1つ(themes/base16/ にある)を使用するには、–base16を使用します。
3.4.1 フォーマット属性
Attributes = {Colour, Bold?, Italic?, Underline? }
- Colour:文字列、HTMLの16進表記で色を定義します( “#rrggbb”)
- Bold:ブール値、フォントを太字にする場合はtrue(オプション)
- Italic:ブール値、フォントを斜体にする場合はtrue(オプション)
- Underline:ブール値 、フォントに下線を引く必要がある場合はtrue(オプション)
3.4.2 テーマ要素
Description: = String, Defines theme description
- Categories =テーブル、カテゴリのリスト(暗い、明るいなど)
- Default =属性(未指定テキストの色)
- Canvas =属性(背景色)
- Number =属性(数値のフォーマット)
- Escape =属性(エスケープシーケンスのフォーマット)
- String =属性(文字列のフォーマット)
- PreProcessor = 属性 (プリプロセッサディレクティブのフォーマット)
- StringPreProc = 属性 (プリプロセッサディレクティブ内の文字列のフォーマット)
- BlockComment = 属性 (ブロックコメントのフォーマット)
- LineComment = 属性 (行コメントの書式設定)
- LineNum = 属性 (行番号のフォーマット)
- Operator =属性(演算子の書式設定)
Keywords= {
Attributes1,
Attributes2,
Attributes3,
Attributes4,
}
AttributesN:キーワードグループNのフォーマット。言語定義で定義されているキーワードグループの数と一致するように、少なくとも4つの項目が必要です。
3.4.3 サンプル
Description = "vim autumn" Categories = {"light"} Default = { Colour="#404040" } Canvas = { Colour="#fff4e8" } Number = { Colour="#00884c" } Escape = { Colour="#8040f0" } String = { Colour="#00884c" } BlockComment = { Colour="#ff5050" } StringPreProc = String LineComment = BlockComment Operator = { Colour="#513d2b" } LineNum = { Colour="#555555" } PreProcessor = { Colour="#660000" } Interpolation = { Colour="#CA6DE1" } Keywords = { { Colour="#80a030" }, { Colour="#b06c58" }, { Colour="#30a188" }, { Colour="#990000" }, }
3.5 キーワードグループ
カスタムキーワードグループとそれに対応する強調表示スタイルを定義できます。サードパーティのライブラリの機能、マクロ、定数などを強調表示したい場合に便利です。
2つのステップで新しいグループを定義します。
1.言語定義(langファイル)に新しいグループを定義します。
Keywords = {
--キーワードの説明を追加してください:
{Id=5, List = {"ERROR", "DEBUG", "WARN"} }
}
2.カラーテーマ(テーマファイル)に対応する強調表示スタイルを追加します。
Keywords= {-
-リストの5番目の項目としてキーワードスタイルを追加します:
{Color = "#ff0000"、Bold = true}、
}
元の highlight ファイルが編集されないようにユーザー定義のプラグインスクリプトにキーワードグループを定義することをお勧めします。
3.6 プラグイン
–plug-inオプションはLuaスクリプトの名前を受け取ります。これはテーマと言語定義ファイルの設定を上書きし、強化することができます。プラグインを使用するとインストール済みのハイライト設定ファイルを編集せずにコスト設定を適用できます。ファイル形式と例についてはプラグインを参照してください。
3.7 ファイルマッピング
スクリプトfiletypes.confは、ファイル拡張子とshebangの説明を言語定義に割り当てます。
フォーマット:
FileMapping = {
{ Lang, Filenames | Extensions | Shebang },
}
- Lang:文字列、言語定義の名前
- Filenames:文字列のリスト。 “Lang”を参照するファイル名が含まれています。
- Extensions:文字列のリスト、 “Lang”を参照するファイル拡張子が含まれています
- Shebang:文字列、入力ファイルの最初の行に一致する正規表現
あいまいなファイル拡張子に対する動作:
– CLI:ここにリストされている最初の関連付けが使用
– GUI:構文選択プロンプトが表示
ファイル gui_files/ext/fileopenfilter.conf を編集して、GUIのファイルオープンフィルタに新しい構文タイプを追加します。
3.8 設定ファイル検索
設定スクリプトは次のフォルダで検索されます。
- 〜/。ハイライト/
- 環境変数HIGHLIGHT_DATADIRの値
- –data-dirで設定されたユーザー定義フォルダ
- /usr/share/highlight/
- /etc/highlight/filetypes.confの場所)
- 現在の作業フォルダ(代替)
これらのサブフォルダには対応するスクリプトが含まれています。
- -langDefs: *.lang
- -themes: *.theme
- -plugins: *.lua
カスタムのfiletypes.confは、〜/.highlight/に直接置くことができます。この検索順序を使用するとプレインストールされているすべてのファイルを別の場所にコピーしなくてもインストールされているスクリプトを拡張できます。
以前のリリースの–plug-inオプションは絶対パスのみを受け入れたので与えられたプラグインスクリプトは絶対ファイルパスアクセスが失敗した場合にのみ上記のフォルダで検索されます。
4. 埋め込みハイライト
4.1. サンプルスクリプト
highlightを呼び出し、その出力を文字列として取得するPHP、Perl、およびPythonのスクリプトについては、highlightパッケージのextras/ サブフォルダを参照してください。これらのスクリプトは他のアプリ用のプラグインを開発するための参照として使用できます。
4.2. PANDOC
PPマクロファイルとチュートリアルはextras / pandoc /にあります。使用方法と参照ファイルの例については、README.htmlを参照してください。
4.3. SWIG
SWIGインターフェースファイルはextras / swig /にあります。 インストール手順についてはREADME_SWIGを、プログラミングリファレンスとしてはPerl、PHP、Pythonのスクリプト例を参照してください。
4.4. TCL
TCL拡張子はextras / tcl /にあります。 インストール手順についてはREADME_TCLを参照してください。
4.5. サードパーティのスクリプトとプラグイン
WikiおよびBloggingソフトウェアのhighlightを統合するプラグインについては、highlightパッケージの extras /web_plugins/サブフォルダを参照してください。
- DokuWiki
- MovableType
- Wordpress
- Serendipity
highlight の他の用途はwww.andre-simon.deで見つけることができます。このサイトはWebgit、Evolution、Inkscape、Rangerなどのプロジェクトにおけるhighlight のいくつかのユースケースを示しています。
5. ビルドとインストール
5.1. 推奨パッケージ
ファイルINSTALLはソースからのインストールを記述し、プリコンパイルされたパッケージへのリンクを含みます。
5.2. ビルドの依存
highlight はgccとclangでコンパイルすることが知られています。
これはBoostヘッダとLua 5.x / LuaJit開発者パッケージに依存します。
オプションのGUIはQt5開発者パッケージに依存します。
オプションについてはmakefileを見てください。
6. 開発者へのお問い合わせ
André Simon(アンドレ・シモン)
- 公式サイト:www.andre-simon.de
リポジトリ付きGitプロジェクト、バグトラッカー:
- https://gitlab.com/saalen/highlight/
- https://github.com/andre-simon/highlight (will be set to archive mode)
SVNリポジトリ、ダウンロードミラー、バグトラッカー、ヘルプフォーラム付きのsf.netプロジェクト:
アップデート情報
Highlight 3.50 2019/03/22
- fixed several typos in documentaion and manpages.
- CLI: added –syntax-by-name option (suggested by Chris Mayo).
- CLI: removed deprecated –list-langs and–list-themes options.