Spec-Zone.ru › Nim 1

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  # End Of File (or string)
  of gtWhitespace:
    echo gtWhitespace # Maybe you want "visible" whitespaces?.
    echo substr(code, toknizr.start, toknizr.length + toknizr.start - 1)
  of gtOperator:
    echo gtOperator # Maybe you want Operators to use a specific color?.
    echo substr(code, toknizr.start, toknizr.length + toknizr.start - 1)
  # of gtSomeSymbol: syntaxHighlight("Comic Sans", "bold", "99px", "pink")
  else:
    echo toknizr.kind # All the kinds of tokens can be processed here.
    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: [].}
Исходный код Изменить

© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/highlite.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API