Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pygments/lexers/typoscript.py: 100%
20 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:16 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:16 +0000
1"""
2 pygments.lexers.typoscript
3 ~~~~~~~~~~~~~~~~~~~~~~~~~~
5 Lexers for TypoScript
7 `TypoScriptLexer`
8 A TypoScript lexer.
10 `TypoScriptCssDataLexer`
11 Lexer that highlights markers, constants and registers within css.
13 `TypoScriptHtmlDataLexer`
14 Lexer that highlights markers, constants and registers within html tags.
16 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
17 :license: BSD, see LICENSE for details.
18"""
20import re
22from pygments.lexer import RegexLexer, include, bygroups, using
23from pygments.token import Text, Comment, Name, String, Number, \
24 Operator, Punctuation
26__all__ = ['TypoScriptLexer', 'TypoScriptCssDataLexer', 'TypoScriptHtmlDataLexer']
29class TypoScriptCssDataLexer(RegexLexer):
30 """
31 Lexer that highlights markers, constants and registers within css blocks.
33 .. versionadded:: 2.2
34 """
36 name = 'TypoScriptCssData'
37 aliases = ['typoscriptcssdata']
39 tokens = {
40 'root': [
41 # marker: ###MARK###
42 (r'(.*)(###\w+###)(.*)', bygroups(String, Name.Constant, String)),
43 # constant: {$some.constant}
44 (r'(\{)(\$)((?:[\w\-]+\.)*)([\w\-]+)(\})',
45 bygroups(String.Symbol, Operator, Name.Constant,
46 Name.Constant, String.Symbol)), # constant
47 # constant: {register:somevalue}
48 (r'(.*)(\{)([\w\-]+)(\s*:\s*)([\w\-]+)(\})(.*)',
49 bygroups(String, String.Symbol, Name.Constant, Operator,
50 Name.Constant, String.Symbol, String)), # constant
51 # whitespace
52 (r'\s+', Text),
53 # comments
54 (r'/\*(?:(?!\*/).)*\*/', Comment),
55 (r'(?<!(#|\'|"))(?:#(?!(?:[a-fA-F0-9]{6}|[a-fA-F0-9]{3}))[^\n#]+|//[^\n]*)',
56 Comment),
57 # other
58 (r'[<>,:=.*%+|]', String),
59 (r'[\w"\-!/&;(){}]+', String),
60 ]
61 }
64class TypoScriptHtmlDataLexer(RegexLexer):
65 """
66 Lexer that highlights markers, constants and registers within html tags.
68 .. versionadded:: 2.2
69 """
71 name = 'TypoScriptHtmlData'
72 aliases = ['typoscripthtmldata']
74 tokens = {
75 'root': [
76 # INCLUDE_TYPOSCRIPT
77 (r'(INCLUDE_TYPOSCRIPT)', Name.Class),
78 # Language label or extension resource FILE:... or LLL:... or EXT:...
79 (r'(EXT|FILE|LLL):[^}\n"]*', String),
80 # marker: ###MARK###
81 (r'(.*)(###\w+###)(.*)', bygroups(String, Name.Constant, String)),
82 # constant: {$some.constant}
83 (r'(\{)(\$)((?:[\w\-]+\.)*)([\w\-]+)(\})',
84 bygroups(String.Symbol, Operator, Name.Constant,
85 Name.Constant, String.Symbol)), # constant
86 # constant: {register:somevalue}
87 (r'(.*)(\{)([\w\-]+)(\s*:\s*)([\w\-]+)(\})(.*)',
88 bygroups(String, String.Symbol, Name.Constant, Operator,
89 Name.Constant, String.Symbol, String)), # constant
90 # whitespace
91 (r'\s+', Text),
92 # other
93 (r'[<>,:=.*%+|]', String),
94 (r'[\w"\-!/&;(){}#]+', String),
95 ]
96 }
99class TypoScriptLexer(RegexLexer):
100 """
101 Lexer for TypoScript code.
103 .. versionadded:: 2.2
104 """
106 name = 'TypoScript'
107 url = 'http://docs.typo3.org/typo3cms/TyposcriptReference/'
108 aliases = ['typoscript']
109 filenames = ['*.typoscript']
110 mimetypes = ['text/x-typoscript']
112 flags = re.DOTALL | re.MULTILINE
114 tokens = {
115 'root': [
116 include('comment'),
117 include('constant'),
118 include('html'),
119 include('label'),
120 include('whitespace'),
121 include('keywords'),
122 include('punctuation'),
123 include('operator'),
124 include('structure'),
125 include('literal'),
126 include('other'),
127 ],
128 'keywords': [
129 # Conditions
130 (r'(?i)(\[)(browser|compatVersion|dayofmonth|dayofweek|dayofyear|'
131 r'device|ELSE|END|GLOBAL|globalString|globalVar|hostname|hour|IP|'
132 r'language|loginUser|loginuser|minute|month|page|PIDinRootline|'
133 r'PIDupinRootline|system|treeLevel|useragent|userFunc|usergroup|'
134 r'version)([^\]]*)(\])',
135 bygroups(String.Symbol, Name.Constant, Text, String.Symbol)),
136 # Functions
137 (r'(?=[\w\-])(HTMLparser|HTMLparser_tags|addParams|cache|encapsLines|'
138 r'filelink|if|imageLinkWrap|imgResource|makelinks|numRows|numberFormat|'
139 r'parseFunc|replacement|round|select|split|stdWrap|strPad|tableStyle|'
140 r'tags|textStyle|typolink)(?![\w\-])', Name.Function),
141 # Toplevel objects and _*
142 (r'(?:(=?\s*<?\s+|^\s*))(cObj|field|config|content|constants|FEData|'
143 r'file|frameset|includeLibs|lib|page|plugin|register|resources|sitemap|'
144 r'sitetitle|styles|temp|tt_[^:.\s]*|types|xmlnews|INCLUDE_TYPOSCRIPT|'
145 r'_CSS_DEFAULT_STYLE|_DEFAULT_PI_VARS|_LOCAL_LANG)(?![\w\-])',
146 bygroups(Operator, Name.Builtin)),
147 # Content objects
148 (r'(?=[\w\-])(CASE|CLEARGIF|COA|COA_INT|COBJ_ARRAY|COLUMNS|CONTENT|'
149 r'CTABLE|EDITPANEL|FILE|FILES|FLUIDTEMPLATE|FORM|HMENU|HRULER|HTML|'
150 r'IMAGE|IMGTEXT|IMG_RESOURCE|LOAD_REGISTER|MEDIA|MULTIMEDIA|OTABLE|'
151 r'PAGE|QTOBJECT|RECORDS|RESTORE_REGISTER|SEARCHRESULT|SVG|SWFOBJECT|'
152 r'TEMPLATE|TEXT|USER|USER_INT)(?![\w\-])', Name.Class),
153 # Menu states
154 (r'(?=[\w\-])(ACTIFSUBRO|ACTIFSUB|ACTRO|ACT|CURIFSUBRO|CURIFSUB|CURRO|'
155 r'CUR|IFSUBRO|IFSUB|NO|SPC|USERDEF1RO|USERDEF1|USERDEF2RO|USERDEF2|'
156 r'USRRO|USR)', Name.Class),
157 # Menu objects
158 (r'(?=[\w\-])(GMENU_FOLDOUT|GMENU_LAYERS|GMENU|IMGMENUITEM|IMGMENU|'
159 r'JSMENUITEM|JSMENU|TMENUITEM|TMENU_LAYERS|TMENU)', Name.Class),
160 # PHP objects
161 (r'(?=[\w\-])(PHP_SCRIPT(_EXT|_INT)?)', Name.Class),
162 (r'(?=[\w\-])(userFunc)(?![\w\-])', Name.Function),
163 ],
164 'whitespace': [
165 (r'\s+', Text),
166 ],
167 'html': [
168 (r'<\S[^\n>]*>', using(TypoScriptHtmlDataLexer)),
169 (r'&[^;\n]*;', String),
170 (r'(?s)(_CSS_DEFAULT_STYLE)(\s*)(\()(.*(?=\n\)))',
171 bygroups(Name.Class, Text, String.Symbol, using(TypoScriptCssDataLexer))),
172 ],
173 'literal': [
174 (r'0x[0-9A-Fa-f]+t?', Number.Hex),
175 # (r'[0-9]*\.[0-9]+([eE][0-9]+)?[fd]?\s*(?:[^=])', Number.Float),
176 (r'[0-9]+', Number.Integer),
177 (r'(###\w+###)', Name.Constant),
178 ],
179 'label': [
180 # Language label or extension resource FILE:... or LLL:... or EXT:...
181 (r'(EXT|FILE|LLL):[^}\n"]*', String),
182 # Path to a resource
183 (r'(?![^\w\-])([\w\-]+(?:/[\w\-]+)+/?)(\S*\n)',
184 bygroups(String, String)),
185 ],
186 'punctuation': [
187 (r'[,.]', Punctuation),
188 ],
189 'operator': [
190 (r'[<>,:=.*%+|]', Operator),
191 ],
192 'structure': [
193 # Brackets and braces
194 (r'[{}()\[\]\\]', String.Symbol),
195 ],
196 'constant': [
197 # Constant: {$some.constant}
198 (r'(\{)(\$)((?:[\w\-]+\.)*)([\w\-]+)(\})',
199 bygroups(String.Symbol, Operator, Name.Constant,
200 Name.Constant, String.Symbol)), # constant
201 # Constant: {register:somevalue}
202 (r'(\{)([\w\-]+)(\s*:\s*)([\w\-]+)(\})',
203 bygroups(String.Symbol, Name.Constant, Operator,
204 Name.Constant, String.Symbol)), # constant
205 # Hex color: #ff0077
206 (r'(#[a-fA-F0-9]{6}\b|#[a-fA-F0-9]{3}\b)', String.Char)
207 ],
208 'comment': [
209 (r'(?<!(#|\'|"))(?:#(?!(?:[a-fA-F0-9]{6}|[a-fA-F0-9]{3}))[^\n#]+|//[^\n]*)',
210 Comment),
211 (r'/\*(?:(?!\*/).)*\*/', Comment),
212 (r'(\s*#\s*\n)', Comment),
213 ],
214 'other': [
215 (r'[\w"\-!/&;]+', Text),
216 ],
217 }