Spec-Zone.ru › Nim

packages/docutils/highlite

Source Edit

Подсвечиватель исходного кода для языков программирования или разметки. В настоящее время поддерживается лишь несколько языков, могут быть добавлены другие. Интерфейс поддерживает вложенность одного языка в другой.

Вы можете использовать это для создания собственной подсветки синтаксиса, посмотрите этот пример:

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)

Также поддерживается псевдоязык Cmd, который представляет собой простой обобщённый токенизатор командной строки (оболочки UNIX/Powershell/Windows): без экранирования, без конструкций языка программирования, кроме определения переменных в начале строки. Он поддерживает эти операторы:

&  &&  |  ||  (  )  ''  ""  ;  # for comments

Вместо экранирования всегда используйте кавычки, как показано здесь nimgrep --ext:'nim|nims' file.name как вводить |. Любой аргумент, содержащий . или / или \, будет обрабатываться как файл или каталог.

В дополнение к Cmd также есть язык Console для отображения интерактивных сессий. Строки с командой должны начинаться с $, остальные строки считаются результатом выполнения программы.

Импорты

strutils, algorithm

Типы

GeneralTokenizer = object of RootObj
  kind*: TokenClass
  start*, length*: int
Source Edit
SourceLanguage = enum
  langNone, langNim, langCpp, langCsharp, langC, langJava, langYaml, langPython,
  langCmd, langConsole
Source Edit
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, gtPrompt, gtProgramOutput,
  gtProgram, gtOption, gtOther
Source Edit

Константы

sourceLanguageToAlpha: array[SourceLanguage, string] = ["none", "Nim", "cpp",
    "csharp", "C", "Java", "Yaml", "Python", "Cmd", "Console"]
список языков, написанных буквами Source Edit
sourceLanguageToStr: array[SourceLanguage, string] = ["none", "Nim", "C++",
    "C#", "C", "Java", "Yaml", "Python", "Cmd", "Console"]
Source Edit
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", "Prompt", "ProgramOutput", "program", "option",
    "Other"]
Source Edit

Процедуры

proc deinitGeneralTokenizer(g: var GeneralTokenizer) {....raises: [], tags: [],
    forbids: [].}
Source Edit
proc getNextToken(g: var GeneralTokenizer; lang: SourceLanguage) {....raises: [],
    tags: [], forbids: [].}
Source Edit
proc getSourceLanguage(name: string): SourceLanguage {....raises: [], tags: [],
    forbids: [].}
Source Edit
proc initGeneralTokenizer(g: var GeneralTokenizer; buf: cstring) {....raises: [],
    tags: [], forbids: [].}
Source Edit
proc initGeneralTokenizer(g: var GeneralTokenizer; buf: string) {....raises: [],
    tags: [], forbids: [].}
Source Edit
proc tokenize(text: string; lang: SourceLanguage): seq[(string, TokenClass)] {.
    ...raises: [], tags: [], forbids: [].}
Source Edit

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

Spec-Zone.ru

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