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