"" "
pygments.lexers.asn1
~~~~~~~~~~~~~~~~~~~~
Pygments lexers
for ASN.1.
:copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE
for details.
"" "
import re
from pygments.token
import Comment, Operator, Keyword, Name, String, \
Number, Punctuation, Whitespace
from pygments.lexer
import RegexLexer, words, bygroups
__all__ = [
'Asn1Lexer' ]
SINGLE_WORD_KEYWORDS = [
"ENCODED" ,
"ABSTRACT-SYNTAX" ,
"END" ,
"APPLICATION" ,
"EXPLICIT" ,
"IMPLICIT" ,
"AUTOMATIC" ,
"TAGS" ,
"BEGIN" ,
"EXTENSIBILITY" ,
"BY" ,
"FROM" ,
"COMPONENT" ,
"UNIVERSAL" ,
"COMPONENTS" ,
"CONSTRAINED" ,
"IMPLIED" ,
"DEFINITIONS" ,
"INCLUDES" ,
"PRIVATE" ,
"WITH" ,
"OF" ,
]
OPERATOR_WORDS = [
"EXCEPT" ,
"UNION" ,
"INTERSECTION" ,
]
SINGLE_WORD_NAMESPACE_KEYWORDS = [
"EXPORTS" ,
"IMPORTS" ,
]
MULTI_WORDS_DECLARATIONS = [
"SEQUENCE OF" ,
"SET OF" ,
"INSTANCE OF" ,
"WITH SYNTAX" ,
]
SINGLE_WORDS_DECLARATIONS = [
"SIZE" ,
"SEQUENCE" ,
"SET" ,
"CLASS" ,
"UNIQUE" ,
"DEFAULT" ,
"CHOICE" ,
"PATTERN" ,
"OPTIONAL" ,
"PRESENT" ,
"ABSENT" ,
"CONTAINING" ,
"ENUMERATED" ,
"ALL" ,
]
TWO_WORDS_TYPES = [
"OBJECT IDENTIFIER" ,
"BIT STRING" ,
"OCTET STRING" ,
"CHARACTER STRING" ,
"EMBEDDED PDV" ,
]
SINGLE_WORD_TYPES = [
"RELATIVE-OID" ,
"TYPE-IDENTIFIER" ,
"ObjectDescriptor" ,
"IA5String" ,
"INTEGER" ,
"ISO646String" ,
"T61String" ,
"BMPString" ,
"NumericString" ,
"TeletexString" ,
"GeneralizedTime" ,
"REAL" ,
"BOOLEAN" ,
"GeneralString" ,
"GraphicString" ,
"UniversalString" ,
"UTCTime" ,
"VisibleString" ,
"UTF8String" ,
"PrintableString" ,
"VideotexString" ,
"EXTERNAL" ,
]
def word_sequences(tokens):
return "(" +
'|' .join(token.replace(
' ' , r
'\s+' )
for token
in tokens) + r
')\b'
class Asn1Lexer(RegexLexer):
"" "
Lexer
for ASN.1 module definition
"" "
flags = re.MULTILINE
name =
'ASN.1'
aliases = [
'asn1' ]
filenames = [
"*.asn1" ]
url =
"https://www.itu.int/ITU-T/studygroups/com17/languages/X.680-0207.pdf "
version_added =
'2.16'
tokens = {
'root' : [
# Whitespace:
(r
'\s+' , Whitespace),
# Comments:
(r
'--.*$' , Comment.Single),
(r
'/\*' , Comment.Multiline,
'comment' ),
# Numbers:
(r
'\d+\.\d*([eE][-+]?\d+)?' , Number.Float),
(r
'\d+' , Number.Integer),
# Identifier:
(r
"&?[a-z][-a-zA-Z0-9]*[a-zA-Z0-9]\b" , Name.Variable),
# Constants:
(words((
"TRUE" ,
"FALSE" ,
"NULL" ,
"MINUS-INFINITY" ,
"PLUS-INFINITY" ,
"MIN" ,
"MAX" ), suff
ix=r'\b' ), Keyword.Constant),
# Builtin types:
(word_sequences(TWO_WORDS_TYPES), Keyword.Type),
(words(SINGLE_WORD_TYPES, suffix=r'\b' ), Keyword.Type),
# Other keywords:
(r"EXPORTS\s+ALL\b" , Keyword.Namespace),
(words(SINGLE_WORD_NAMESPACE_KEYWORDS, suffix=r'\b' ), Operator.Namespace),
(word_sequences(MULTI_WORDS_DECLARATIONS), Keyword.Declaration),
(words(SINGLE_WORDS_DECLARATIONS, suffix=r'\b' ), Keyword.Declaration),
(words(OPERATOR_WORDS, suffix=r'\b' ), Operator.Word),
(words(SINGLE_WORD_KEYWORDS), Keyword),
# Type identifier:
(r"&?[A-Z][-a-zA-Z0-9]*[a-zA-Z0-9]\b" , Name.Type),
# Operators:
(r"(::=|\.\.\.|\.\.|\[\[|\]\]|\||\^)" , Operator),
# Punctuation:
(r"(\.|,|\{|\}|\(|\)|\[|\])" , Punctuation),
# String:
(r'"' , String, 'string' ),
# Binary string:
(r"('[01 ]*')(B)\b" , bygroups(String, String.Affix)),
(r"('[0-9A-F ]*')(H)\b" ,bygroups(String, String.Affix)),
],
'comment' : [
(r'[^*/]+' , Comment.Multiline),
(r'/\*' , Comment.Multiline, '#push'),
(r'\*/' , Comment.Multiline, '#pop'),
(r'[*/]' , Comment.Multiline)
],
'string' : [
(r'""' , String),
(r'"' , String, "#pop"),
(r'[^"]' , String),
]
}
Messung V0.5 C=90 H=87 G=88
¤ Dauer der Verarbeitung: 0.2 Sekunden
¤
*© Formatika GbR, Deutschland