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

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

""" 

    Pygments 

    ~~~~~~~~ 

 

    Pygments is a syntax highlighting package written in Python. 

 

    It is a generic syntax highlighter for general use in all kinds of software 

    such as forum systems, wikis or other applications that need to prettify 

    source code. Highlights are: 

 

    * a wide range of common languages and markup formats is supported 

    * special attention is paid to details, increasing quality by a fair amount 

    * support for new languages and formats are added easily 

    * a number of output formats, presently HTML, LaTeX, RTF, SVG, all image 

      formats that PIL supports, and ANSI sequences 

    * it is usable as a command-line tool and as a library 

    * ... and it highlights even Brainfuck! 

 

    The `Pygments tip`_ is installable with ``easy_install Pygments==dev``. 

 

    .. _Pygments tip: 

       http://bitbucket.org/birkenfeld/pygments-main/get/tip.zip#egg=Pygments-dev 

 

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

    :license: BSD, see LICENSE for details. 

""" 

 

__version__ = '2.1a0' 

__docformat__ = 'restructuredtext' 

 

__all__ = ['lex', 'format', 'highlight'] 

 

 

import sys 

 

from pygments.util import StringIO, BytesIO 

 

 

def lex(code, lexer): 

    """ 

    Lex ``code`` with ``lexer`` and return an iterable of tokens. 

    """ 

    try: 

        return lexer.get_tokens(code) 

    except TypeError as err: 

        if isinstance(err.args[0], str) and \ 

           ('unbound method get_tokens' in err.args[0] or 

                'missing 1 required positional argument' in err.args[0]): 

            raise TypeError('lex() argument must be a lexer instance, ' 

                            'not a class') 

        raise 

 

 

def format(tokens, formatter, outfile=None): 

    """ 

    Format a tokenlist ``tokens`` with the formatter ``formatter``. 

 

    If ``outfile`` is given and a valid file object (an object 

    with a ``write`` method), the result will be written to it, otherwise 

    it is returned as a string. 

    """ 

    try: 

        if not outfile: 

            realoutfile = getattr(formatter, 'encoding', None) and BytesIO() or StringIO() 

            formatter.format(tokens, realoutfile) 

            return realoutfile.getvalue() 

        else: 

            formatter.format(tokens, outfile) 

    except TypeError as err: 

        if isinstance(err.args[0], str) and \ 

           ('unbound method format' in err.args[0] or 

                'missing 1 required positional argument' in err.args[0]): 

            raise TypeError('format() argument must be a formatter instance, ' 

                            'not a class') 

        raise 

 

 

def highlight(code, lexer, formatter, outfile=None): 

    """ 

    Lex ``code`` with ``lexer`` and format it with the formatter ``formatter``. 

 

    If ``outfile`` is given and a valid file object (an object 

    with a ``write`` method), the result will be written to it, otherwise 

    it is returned as a string. 

    """ 

    return format(lex(code, lexer), formatter, outfile) 

 

 

if __name__ == '__main__':  # pragma: no cover 

    from pygments.cmdline import main 

    sys.exit(main(sys.argv))