Julia Syntax Highlighting
JuliaSyntaxHighlightingライブラリは、JuliaSyntaxとStyledStringsを使用してJuliaコードの構文をハイライトするための小さな便利パッケージです。
標準ライブラリおよびより広いエコシステムでの使用を意図しています。
Functions
JuliaSyntaxHighlighting.highlight — Functionhighlight(content::Union{AbstractString, IO},
ast::JuliaSyntax.GreenNode = <parsed content>;
syntax_errors::Bool = false) -> AnnotatedString{String}content に対して JuliaSyntax を使用して構文ハイライトを適用します。
デフォルトでは、JuliaSyntax.parseall が使用され、ignore_errors キーワード引数が true に設定されて ast が生成されます。あるいは、事前に生成された ast を提供することもできます。
syntax_errors が設定されている場合、検出された構文エラーには julia_error フェイスが適用されます。
例
julia> JuliaSyntaxHighlighting.highlight("sum(1:8)")
"sum(1:8)"
julia> JuliaSyntaxHighlighting.highlight("sum(1:8)") |> Base.annotations
5-element Vector{@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}}:
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((1:3, :face, :julia_funcall))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((4:4, :face, :julia_rainbow_paren_1))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((5:5, :face, :julia_number))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((7:7, :face, :julia_number))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((8:8, :face, :julia_rainbow_paren_1))JuliaSyntaxHighlighting.highlight! — Functionhighlight!(content::Union{AnnotatedString, SubString{AnnotatedString}},
ast::JuliaSyntax.GreenNode = <parsed content>;
syntax_errors::Bool = false) -> contentcontentをJuliaSyntaxを使用して構文ハイライトを適用することで修正します。
デフォルトでは、JuliaSyntax.parseallが使用され、ignore_errorsキーワード引数がtrueに設定されてastが生成されます。あるいは、事前に生成されたastを提供することもできます。
syntax_errorsが設定されている場合、検出された構文エラーにはjulia_errorフェイスが適用されます。
例
julia> str = Base.AnnotatedString("sum(1:8)")
"sum(1:8)"
julia> JuliaSyntaxHighlighting.highlight!(str)
"sum(1:8)"
julia> Base.annotations(str)
5-element Vector{@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}}:
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((1:3, :face, :julia_funcall))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((4:4, :face, :julia_rainbow_paren_1))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((5:5, :face, :julia_number))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((7:7, :face, :julia_number))
@NamedTuple{region::UnitRange{Int64}, label::Symbol, value}((8:8, :face, :julia_rainbow_paren_1))Faces
highlight/highlight! メソッドは、Julia コードにカスタムフェイスを適用することによって機能します。標準ライブラリの一部として、これらのフェイスは julia_* という形式の特権フェイス名を使用します。これらは他のパッケージで再利用でき、faces.toml 設定でカスタマイズできます。
JuliaSyntaxHighlightingで使用される特定の顔は、ポイントリリースで予告なしに変更される可能性があります。構文ハイライトのルールが時間とともに洗練されるにつれて、変更は次第に少なくなるはずです。
現在の顔のセットとそのデフォルト値は次のとおりです:
julia_macro: マゼンタjulia_symbol: マゼンタjulia_singleton_identifier:julia_symbolから継承します。julia_type: 黄色julia_typedec: 明るい青julia_comment: グレーjulia_string: 緑julia_regex:julia_stringから継承します。julia_backslash_literal: マゼンタ、julia_stringから継承されますjulia_string_delim: 明るい緑julia_cmdstring:julia_stringから継承します。julia_char:julia_stringから継承します。julia_char_delim:julia_string_delimから継承します。julia_number: 明るいマゼンタjulia_bool:julia_numberから継承されます。julia_funcall: シアンjulia_broadcast: 明るい青、太字julia_builtin: 明るい青julia_operator: 青julia_comparator:julia_operatorから継承します。julia_assignment: 明るい赤julia_keyword: 赤julia_parentheses: スタイルなしjulia_unpaired_parentheses:julia_errorとjulia_parenthesesから継承します。julia_error: 赤い背景julia_rainbow_paren_1: 明るい緑、julia_parenthesesから継承julia_rainbow_paren_2: 明るい青、julia_parenthesesから継承julia_rainbow_paren_3: 明るい赤、julia_parenthesesから継承されますjulia_rainbow_paren_4:julia_rainbow_paren_1から継承しています。julia_rainbow_paren_5:julia_rainbow_paren_2から継承しています。julia_rainbow_paren_6:julia_rainbow_paren_3から継承しています。julia_rainbow_bracket_1: 青,julia_parenthesesから継承されますjulia_rainbow_bracket_2: 明るいマゼンタ、`juliaparentheses`から継承julia_rainbow_bracket_3:julia_rainbow_bracket_1から継承しています。julia_rainbow_bracket_4:julia_rainbow_bracket_2から継承しています。julia_rainbow_bracket_5:julia_rainbow_bracket_1から継承しています。julia_rainbow_bracket_6:julia_rainbow_bracket_2から継承しています。julia_rainbow_curly_1: 明るい黄色、julia_parenthesesから継承されますjulia_rainbow_curly_2: 黄色、julia_parenthesesから継承しています。julia_rainbow_curly_3:julia_rainbow_curly_1から継承しています。julia_rainbow_curly_4:julia_rainbow_curly_2から継承しています。julia_rainbow_curly_5:julia_rainbow_curly_1から継承しています。julia_rainbow_curly_6:julia_rainbow_curly_2から継承しています。