Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pygments/lexers/resource.py: 86%
14 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-01 06:54 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-01 06:54 +0000
1"""
2 pygments.lexers.resource
3 ~~~~~~~~~~~~~~~~~~~~~~~~
5 Lexer for resource definition files.
7 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
8 :license: BSD, see LICENSE for details.
9"""
11import re
13from pygments.lexer import RegexLexer, bygroups, words
14from pygments.token import Comment, String, Number, Operator, Text, \
15 Keyword, Name
17__all__ = ['ResourceLexer']
20class ResourceLexer(RegexLexer):
21 """Lexer for `ICU Resource bundles
22 <http://userguide.icu-project.org/locale/resources>`_.
24 .. versionadded:: 2.0
25 """
26 name = 'ResourceBundle'
27 aliases = ['resourcebundle', 'resource']
28 filenames = []
30 _types = (':table', ':array', ':string', ':bin', ':import', ':intvector',
31 ':int', ':alias')
33 flags = re.MULTILINE | re.IGNORECASE
34 tokens = {
35 'root': [
36 (r'//.*?$', Comment),
37 (r'"', String, 'string'),
38 (r'-?\d+', Number.Integer),
39 (r'[,{}]', Operator),
40 (r'([^\s{:]+)(\s*)(%s?)' % '|'.join(_types),
41 bygroups(Name, Text, Keyword)),
42 (r'\s+', Text),
43 (words(_types), Keyword),
44 ],
45 'string': [
46 (r'(\\x[0-9a-f]{2}|\\u[0-9a-f]{4}|\\U00[0-9a-f]{6}|'
47 r'\\[0-7]{1,3}|\\c.|\\[abtnvfre\'"?\\]|\\\{|[^"{\\])+', String),
48 (r'\{', String.Escape, 'msgname'),
49 (r'"', String, '#pop')
50 ],
51 'msgname': [
52 (r'([^{},]+)(\s*)', bygroups(Name, String.Escape), ('#pop', 'message'))
53 ],
54 'message': [
55 (r'\{', String.Escape, 'msgname'),
56 (r'\}', String.Escape, '#pop'),
57 (r'(,)(\s*)([a-z]+)(\s*\})',
58 bygroups(Operator, String.Escape, Keyword, String.Escape), '#pop'),
59 (r'(,)(\s*)([a-z]+)(\s*)(,)(\s*)(offset)(\s*)(:)(\s*)(-?\d+)(\s*)',
60 bygroups(Operator, String.Escape, Keyword, String.Escape, Operator,
61 String.Escape, Operator.Word, String.Escape, Operator,
62 String.Escape, Number.Integer, String.Escape), 'choice'),
63 (r'(,)(\s*)([a-z]+)(\s*)(,)(\s*)',
64 bygroups(Operator, String.Escape, Keyword, String.Escape, Operator,
65 String.Escape), 'choice'),
66 (r'\s+', String.Escape)
67 ],
68 'choice': [
69 (r'(=|<|>|<=|>=|!=)(-?\d+)(\s*\{)',
70 bygroups(Operator, Number.Integer, String.Escape), 'message'),
71 (r'([a-z]+)(\s*\{)', bygroups(Keyword.Type, String.Escape), 'str'),
72 (r'\}', String.Escape, ('#pop', '#pop')),
73 (r'\s+', String.Escape)
74 ],
75 'str': [
76 (r'\}', String.Escape, '#pop'),
77 (r'\{', String.Escape, 'msgname'),
78 (r'[^{}]+', String)
79 ]
80 }
82 def analyse_text(text):
83 if text.startswith('root:table'):
84 return 1.0