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
Типы
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
Процедуры
© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/highlite.html