Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

# -*- coding: utf-8 -*- 

""" 

    pygments.token 

    ~~~~~~~~~~~~~~ 

 

    Basic token types and the standard tokens. 

 

    :copyright: Copyright 2006-2014 by the Pygments team, see AUTHORS. 

    :license: BSD, see LICENSE for details. 

""" 

 

class _TokenType(tuple): 

    parent = None 

 

    def split(self): 

        buf = [] 

        node = self 

        while node is not None: 

            buf.append(node) 

            node = node.parent 

        buf.reverse() 

        return buf 

 

    def __init__(self, *args): 

        # no need to call super.__init__ 

        self.subtypes = set() 

 

    def __contains__(self, val): 

        return self is val or ( 

            type(val) is self.__class__ and 

            val[:len(self)] == self 

        ) 

 

    def __getattr__(self, val): 

        if not val or not val[0].isupper(): 

            return tuple.__getattribute__(self, val) 

        new = _TokenType(self + (val,)) 

        setattr(self, val, new) 

        self.subtypes.add(new) 

        new.parent = self 

        return new 

 

    def __repr__(self): 

        return 'Token' + (self and '.' or '') + '.'.join(self) 

 

 

Token       = _TokenType() 

 

# Special token types 

Text        = Token.Text 

Whitespace  = Text.Whitespace 

Escape      = Token.Escape 

Error       = Token.Error 

# Text that doesn't belong to this lexer (e.g. HTML in PHP) 

Other       = Token.Other 

 

# Common token types for source code 

Keyword     = Token.Keyword 

Name        = Token.Name 

Literal     = Token.Literal 

String      = Literal.String 

Number      = Literal.Number 

Punctuation = Token.Punctuation 

Operator    = Token.Operator 

Comment     = Token.Comment 

 

# Generic types for non-source code 

Generic     = Token.Generic 

 

# String and some others are not direct childs of Token. 

# alias them: 

Token.Token = Token 

Token.String = String 

Token.Number = Number 

 

 

def is_token_subtype(ttype, other): 

    """ 

    Return True if ``ttype`` is a subtype of ``other``. 

 

    exists for backwards compatibility. use ``ttype in other`` now. 

    """ 

    return ttype in other 

 

 

def string_to_tokentype(s): 

    """ 

    Convert a string into a token type:: 

 

        >>> string_to_token('String.Double') 

        Token.Literal.String.Double 

        >>> string_to_token('Token.Literal.Number') 

        Token.Literal.Number 

        >>> string_to_token('') 

        Token 

 

    Tokens that are already tokens are returned unchanged: 

 

        >>> string_to_token(String) 

        Token.Literal.String 

    """ 

    if isinstance(s, _TokenType): 

        return s 

    if not s: 

        return Token 

    node = Token 

    for item in s.split('.'): 

        node = getattr(node, item) 

    return node 

 

 

# Map standard token types to short names, used in CSS class naming. 

# If you add a new item, please be sure to run this file to perform 

# a consistency check for duplicate values. 

STANDARD_TYPES = { 

    Token:                         '', 

 

    Text:                          '', 

    Whitespace:                    'w', 

    Escape:                        'esc', 

    Error:                         'err', 

    Other:                         'x', 

 

    Keyword:                       'k', 

    Keyword.Constant:              'kc', 

    Keyword.Declaration:           'kd', 

    Keyword.Namespace:             'kn', 

    Keyword.Pseudo:                'kp', 

    Keyword.Reserved:              'kr', 

    Keyword.Type:                  'kt', 

 

    Name:                          'n', 

    Name.Attribute:                'na', 

    Name.Builtin:                  'nb', 

    Name.Builtin.Pseudo:           'bp', 

    Name.Class:                    'nc', 

    Name.Constant:                 'no', 

    Name.Decorator:                'nd', 

    Name.Entity:                   'ni', 

    Name.Exception:                'ne', 

    Name.Function:                 'nf', 

    Name.Property:                 'py', 

    Name.Label:                    'nl', 

    Name.Namespace:                'nn', 

    Name.Other:                    'nx', 

    Name.Tag:                      'nt', 

    Name.Variable:                 'nv', 

    Name.Variable.Class:           'vc', 

    Name.Variable.Global:          'vg', 

    Name.Variable.Instance:        'vi', 

 

    Literal:                       'l', 

    Literal.Date:                  'ld', 

 

    String:                        's', 

    String.Backtick:               'sb', 

    String.Char:                   'sc', 

    String.Doc:                    'sd', 

    String.Double:                 's2', 

    String.Escape:                 'se', 

    String.Heredoc:                'sh', 

    String.Interpol:               'si', 

    String.Other:                  'sx', 

    String.Regex:                  'sr', 

    String.Single:                 's1', 

    String.Symbol:                 'ss', 

 

    Number:                        'm', 

    Number.Bin:                    'mb', 

    Number.Float:                  'mf', 

    Number.Hex:                    'mh', 

    Number.Integer:                'mi', 

    Number.Integer.Long:           'il', 

    Number.Oct:                    'mo', 

 

    Operator:                      'o', 

    Operator.Word:                 'ow', 

 

    Punctuation:                   'p', 

 

    Comment:                       'c', 

    Comment.Multiline:             'cm', 

    Comment.Preproc:               'cp', 

    Comment.Single:                'c1', 

    Comment.Special:               'cs', 

 

    Generic:                       'g', 

    Generic.Deleted:               'gd', 

    Generic.Emph:                  'ge', 

    Generic.Error:                 'gr', 

    Generic.Heading:               'gh', 

    Generic.Inserted:              'gi', 

    Generic.Output:                'go', 

    Generic.Prompt:                'gp', 

    Generic.Strong:                'gs', 

    Generic.Subheading:            'gu', 

    Generic.Traceback:             'gt', 

}