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