highlite

プログラミング言語、またはマークアップ言語用のソースハイライターです。 現在、数種類の言語をサポートしています。今後、サポート言語を増やしていく予定です。ある言語へ別の言語をネストすることもインターフェースでサポートしています。

備考: このモジュールを使うには packages/docutils/highlite をインポートしてください。

このモジュールで自作のシンタックスハイライトを構築できます。この用例をご確認ください。

let code = """for x in $int.high: echo x.ord mod 2 == 0"""
var toknizr: GeneralTokenizer
initGeneralTokenizer(toknizr, code)
while true:
  getNextToken(toknizr, langNim)
  case toknizr.kind
  of gtEof: break  # ファイル終端子 EOF (または文字列)
  of gtWhitespace:
    echo gtWhitespace # ホワイトスペースを「表示可能」にしますか?
    echo substr(code, toknizr.start, toknizr.length + toknizr.start - 1)
  of gtOperator:
    echo gtOperator # 演算子に色を指定しますか?
    echo substr(code, toknizr.start, toknizr.length + toknizr.start - 1)
  # of gtSomeSymbol: syntaxHighlight("Comic Sans", "bold", "99px", "pink")
  else:
    echo toknizr.kind # ここでトークン全種を処理します。
    echo substr(code, toknizr.start, toknizr.length + toknizr.start - 1)

getSourceLanguage プロシージャにより文字列から言語 enum を得られます。

for l in ["C", "c++", "jAvA", "Nim", "c#"]: echo getSourceLanguage(l)

TokenClass = enum
  gtEof, gtNone, gtWhitespace, gtDecNumber, gtBinNumber, gtHexNumber, gtOctNumber,
  gtFloatNumber, gtIdentifier, gtKeyword, gtStringLit, gtLongStringLit, gtCharLit,
  gtEscapeSequence, gtOperator, gtPunctuation, gtComment, gtLongComment,
  gtRegularExpression, gtTagStart, gtTagEnd, gtKey, gtValue, gtRawData, gtAssembler,
  gtPreprocessor, gtDirective, gtCommand, gtRule, gtHyperlink, gtLabel, gtReference,
  gtOther
  ソース 編集
GeneralTokenizer = object of RootObj
  kind*: TokenClass
  start*, length*: int
  buf: cstring
  pos: int
  state: TokenClass
  ソース 編集
SourceLanguage = enum
  langNone, langNim, langCpp, langCsharp, langC, langJava, langYaml
  ソース 編集

定数

sourceLanguageToStr: array[SourceLanguage, string] = ["none", "Nim", "C++", "C#", "C",
    "Java", "Yaml"]
  ソース 編集
tokenClassToStr: array[TokenClass, string] = ["Eof", "None", "Whitespace", "DecNumber",
    "BinNumber", "HexNumber", "OctNumber", "FloatNumber", "Identifier", "Keyword",
    "StringLit", "LongStringLit", "CharLit", "EscapeSequence", "Operator",
    "Punctuation", "Comment", "LongComment", "RegularExpression", "TagStart",
    "TagEnd", "Key", "Value", "RawData", "Assembler", "Preprocessor", "Directive",
    "Command", "Rule", "Hyperlink", "Label", "Reference", "Other"]
  ソース 編集

プロシージャ

proc getSourceLanguage(name: string): SourceLanguage {...}{.raises: [], tags: [].}
  ソース 編集
proc initGeneralTokenizer(g: var GeneralTokenizer; buf: cstring) {...}{.raises: [], tags: [].}
  ソース 編集
proc initGeneralTokenizer(g: var GeneralTokenizer; buf: string) {...}{.raises: [], tags: [].}
  ソース 編集
proc deinitGeneralTokenizer(g: var GeneralTokenizer) {...}{.raises: [], tags: [].}
  ソース 編集
proc getNextToken(g: var GeneralTokenizer; lang: SourceLanguage) {...}{.raises: [], tags: [].}
  ソース 編集