aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Pygments/py2/pygments/lexers/scdoc.py
blob: 40b3ac914784fd74ff23b54ee24d18e583e7da84 (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
# -*- coding: utf-8 -*- 
""" 
    pygments.lexers.scdoc 
    ~~~~~~~~~~~~~~~~~~~~~ 
 
    Lexer for scdoc, a simple man page generator. 
 
    :copyright: Copyright 2006-2019 by the Pygments team, see AUTHORS. 
    :license: BSD, see LICENSE for details. 
""" 
 
import re 
 
from pygments.lexer import RegexLexer, include, bygroups, \ 
    using, this 
from pygments.token import Text, Comment, Keyword, String, \ 
    Generic 
 
 
__all__ = ['ScdocLexer'] 
 
 
class ScdocLexer(RegexLexer): 
    """ 
    `scdoc` is a simple man page generator for POSIX systems written in C99. 
    https://git.sr.ht/~sircmpwn/scdoc 
 
    .. versionadded:: 2.5 
    """ 
    name = 'scdoc' 
    aliases = ['scdoc', 'scd'] 
    filenames = ['*.scd', '*.scdoc'] 
    flags = re.MULTILINE 
 
    tokens = { 
        'root': [ 
            # comment 
            (r'^(;.+\n)', bygroups(Comment)), 
 
            # heading with pound prefix 
            (r'^(#)([^#].+\n)', bygroups(Generic.Heading, Text)), 
            (r'^(#{2})(.+\n)', bygroups(Generic.Subheading, Text)), 
            # bulleted lists 
            (r'^(\s*)([*-])(\s)(.+\n)', 
            bygroups(Text, Keyword, Text, using(this, state='inline'))), 
            # numbered lists 
            (r'^(\s*)(\.+\.)( .+\n)', 
            bygroups(Text, Keyword, using(this, state='inline'))), 
            # quote 
            (r'^(\s*>\s)(.+\n)', bygroups(Keyword, Generic.Emph)), 
            # text block 
            (r'^(```\n)([\w\W]*?)(^```$)', bygroups(String, Text, String)), 
 
            include('inline'), 
        ], 
        'inline': [ 
            # escape 
            (r'\\.', Text), 
            # underlines 
            (r'(\s)(_[^_]+_)(\W|\n)', bygroups(Text, Generic.Emph, Text)), 
            # bold 
            (r'(\s)(\*[^\*]+\*)(\W|\n)', bygroups(Text, Generic.Strong, Text)), 
            # inline code 
            (r'`[^`]+`', String.Backtick), 
 
            # general text, must come last! 
            (r'[^\\\s]+', Text), 
            (r'.', Text), 
        ], 
    }